From 10a3fdc5184b6ccbd3d0ed05a5e672d6fc500d1c Mon Sep 17 00:00:00 2001 From: Samuel Ainsworth Date: Thu, 14 Oct 2021 01:08:00 -0700 Subject: [PATCH 001/103] issue template: remove redundant console.log --- .github/issue_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/issue_template.md b/.github/issue_template.md index b396dbc73..60318f794 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -9,5 +9,5 @@ node -v npm -v # (or yarn -v) node -e "console.log(process.platform)" node -e "console.log(require('os').release())" -node -e "console.log(console.log(process.arch))" +node -e "console.log(process.arch)" ``` From 80669d6a696e52058cebff3c9b8288141b5f8008 Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Mon, 29 Jan 2024 10:08:48 -0700 Subject: [PATCH 002/103] Bump node-gyp to 10.0.1 node-gyp < 10 doesn't support Python 3.12+ --- package-lock.json | 1411 ++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 957 insertions(+), 456 deletions(-) diff --git a/package-lock.json b/package-lock.json index 381b66297..5ed5d49ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "got": "^11.8.6", "json5": "^2.1.0", "lodash": "^4.17.14", - "node-gyp": "^9.3.0", + "node-gyp": "^10.0.1", "ramda": "^0.25.0", "tar-fs": "^2.1.1" }, @@ -42,10 +42,94 @@ "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.18.0-gk.1.tgz", "integrity": "sha512-rBLCaXNfzbM/XakZhvuambkKatlFBHVtAgiMKV/YmNZvcBKWocNGJSyXiDPUDHJ7fCTVgEe1h66vfzdE4vBJTQ==" }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.8", @@ -66,40 +150,70 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "node_modules/@npmcli/agent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", + "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "node_modules/@npmcli/agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "debug": "^4.3.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 14" } }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 14" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" } }, "node_modules/@sindresorhus/is": { @@ -124,14 +238,6 @@ "node": ">=10" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "engines": { - "node": ">= 10" - } - }, "node_modules/@types/cacheable-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", @@ -185,19 +291,6 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -248,7 +341,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -470,31 +562,25 @@ } }, "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/cacache/node_modules/brace-expansion": { @@ -505,52 +591,66 @@ "balanced-match": "^1.0.0" } }, + "node_modules/cacache/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/cacache/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "engines": { - "node": ">=12" + "node": "14 || >=16.14" } }, "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" } }, "node_modules/cacheable-lookup": { @@ -912,7 +1012,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -923,8 +1022,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-support": { "version": "1.1.3", @@ -1027,6 +1125,33 @@ "node": ">=6" } }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", @@ -1152,14 +1277,6 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -1277,6 +1394,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1420,6 +1542,11 @@ "node": ">= 0.8.0" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1499,6 +1626,32 @@ "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=", "dev": true }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -1900,16 +2053,26 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/http-signature": { @@ -1951,14 +2114,6 @@ "node": ">= 6" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -1992,11 +2147,6 @@ "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2202,6 +2352,23 @@ "nopt": "bin/nopt.js" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jmespath": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", @@ -2697,37 +2864,32 @@ } }, "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "ssri": "^10.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" } }, "node_modules/mime-db": { @@ -2794,32 +2956,48 @@ } }, "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "dependencies": { - "minipass": "^3.1.6", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -3031,117 +3209,121 @@ } }, "node_modules/node-gyp": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", - "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", "dependencies": { "env-paths": "^2.2.0", - "glob": "^7.1.4", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "tar": "^6.1.2", - "which": "^2.0.2" + "which": "^4.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^12.22 || ^14.13 || >=16" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, + "node_modules/node-gyp/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.3.tgz", - "integrity": "sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw==", + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "balanced-match": "^1.0.0" } }, "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dependencies": { - "abbrev": "^1.0.0" + "brace-expansion": "^2.0.1" }, - "bin": { - "nopt": "bin/nopt.js" + "engines": { + "node": ">=16 || 14 >=14.17" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", - "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "node_modules/node-gyp/node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", - "set-blocking": "^2.0.0" + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { - "node-which": "bin/node-which" + "node-which": "bin/which.js" }, "engines": { - "node": ">= 8" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/nopt": { @@ -3396,6 +3578,45 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -3411,17 +3632,20 @@ "node": ">= 0.8.0" } }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -3738,6 +3962,25 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -3766,16 +4009,27 @@ } }, "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" }, "engines": { - "node": ">= 10" + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/source-map": { @@ -3823,14 +4077,22 @@ } }, "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "dependencies": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/stream-shift": { @@ -3847,7 +4109,21 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-width": { + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", @@ -3871,6 +4147,18 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", @@ -4105,25 +4393,25 @@ } }, "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dependencies": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-stream": { @@ -4383,6 +4671,23 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -4504,10 +4809,63 @@ "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.18.0-gk.1.tgz", "integrity": "sha512-rBLCaXNfzbM/XakZhvuambkKatlFBHVtAgiMKV/YmNZvcBKWocNGJSyXiDPUDHJ7fCTVgEe1h66vfzdE4vBJTQ==" }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } }, "@mapbox/node-pre-gyp": { "version": "1.0.8", @@ -4525,31 +4883,56 @@ "tar": "^6.1.11" } }, - "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "@npmcli/agent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", + "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.1" }, "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" } } }, + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "requires": { + "semver": "^7.3.5" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -4563,11 +4946,6 @@ "defer-to-connect": "^2.0.0" } }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" - }, "@types/cacheable-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", @@ -4618,16 +4996,6 @@ "debug": "4" } }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -4665,7 +5033,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -4837,28 +5204,22 @@ "dev": true }, "cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", + "ssri": "^10.0.0", "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "unique-filename": "^3.0.0" }, "dependencies": { "brace-expansion": { @@ -4869,35 +5230,43 @@ "balanced-match": "^1.0.0" } }, + "fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "requires": { + "minipass": "^7.0.3" + } + }, "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" } }, "lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "requires": { "brace-expansion": "^2.0.1" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" } } }, @@ -5200,7 +5569,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -5208,8 +5576,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-support": { "version": "1.1.3", @@ -5302,6 +5669,26 @@ "request": "^2.88.2" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", @@ -5389,11 +5776,6 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -5486,6 +5868,11 @@ } } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -5589,6 +5976,11 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -5667,6 +6059,22 @@ "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=", "dev": true }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -5981,13 +6389,22 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + } } }, "http-signature": { @@ -6019,14 +6436,6 @@ "debug": "4" } }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "requires": { - "ms": "^2.0.0" - } - }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -6051,11 +6460,6 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6226,6 +6630,15 @@ } } }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jmespath": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", @@ -6639,32 +7052,27 @@ } }, "make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "requires": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "ssri": "^10.0.0" }, "dependencies": { - "lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" } } }, @@ -6711,22 +7119,36 @@ } }, "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "requires": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + } } }, "minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", "requires": { "encoding": "^0.1.13", - "minipass": "^3.1.6", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + } } }, "minipass-flush": { @@ -6890,84 +7312,79 @@ } }, "node-gyp": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", - "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", "requires": { "env-paths": "^2.2.0", - "glob": "^7.1.4", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", "semver": "^7.3.5", "tar": "^6.1.2", - "which": "^2.0.2" + "which": "^4.0.0" }, "dependencies": { - "are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } + "abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==" }, - "gauge": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.3.tgz", - "integrity": "sha512-ICw1DhAwMtb22rYFwEHgJcx1JCwJGv3x6G0OQUq56Nge+H4Q8JEwr8iveS0XFlsUNSI67F5ffMGK25bK4Pmskw==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "balanced-match": "^1.0.0" } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" } }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "requires": { - "abbrev": "^1.0.0" + "brace-expansion": "^2.0.1" } }, - "npmlog": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.1.tgz", - "integrity": "sha512-BTHDvY6nrRHuRfyjt1MAufLxYdVXZfd099H4+i1f0lPywNQyI4foeNXJRObB/uy+TYqUW0vAD9gbdSOXPst7Eg==", + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, + "nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.0", - "set-blocking": "^2.0.0" + "abbrev": "^2.0.0" } }, "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "requires": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" } } } @@ -7169,6 +7586,32 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + } + } + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -7181,17 +7624,17 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, "promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -7436,6 +7879,19 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -7456,13 +7912,23 @@ } }, "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + } } }, "source-map": { @@ -7499,11 +7965,18 @@ } }, "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", "requires": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + } } }, "stream-shift": { @@ -7530,6 +8003,16 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7538,6 +8021,14 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", @@ -7733,17 +8224,17 @@ "dev": true }, "unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "requires": { - "unique-slug": "^3.0.0" + "unique-slug": "^4.0.0" } }, "unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "requires": { "imurmurhash": "^0.1.4" } @@ -8009,6 +8500,16 @@ } } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index d5ebfe0f0..4dc380551 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "got": "^11.8.6", "json5": "^2.1.0", "lodash": "^4.17.14", - "node-gyp": "^9.3.0", + "node-gyp": "^10.0.1", "ramda": "^0.25.0", "tar-fs": "^2.1.1" }, From bf8e5181f72eed512c69d4347fe7f93c04779521 Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Mon, 29 Jan 2024 10:19:00 -0700 Subject: [PATCH 003/103] Deprecate Node < 16 EOL, no longer supported by node-gyp --- .github/workflows/tests.yml | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c8838843d..68143985c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,7 +14,7 @@ jobs: name: "Linux Tests" strategy: matrix: - node: [12, 14, 16] + node: [16] # 18+ requires GLIBC 2.28+ runs-on: ubuntu-latest container: ubuntu:16.04 steps: @@ -96,7 +96,7 @@ jobs: name: "macOS Tests" strategy: matrix: - node: [12, 14, 16] + node: [16, 18, 20] runs-on: macOS-12 # This is mostly the same as the Linux steps, waiting for anchor support # https://github.com/actions/runner/issues/1182 @@ -154,7 +154,7 @@ jobs: name: Windows Tests strategy: matrix: - node: [12, 14, 16] + node: [16, 18, 20] arch: [x86, x64] runs-on: windows-2019 steps: diff --git a/package.json b/package.json index 4dc380551..473b5d4b0 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "lib": "./lib" }, "engines": { - "node": ">= 12.19.0 < 13 || >= 14.10.0" + "node": ">= 16" }, "dependencies": { "@axosoft/nan": "^2.18.0-gk.1", From 0f02eab2a49e64986571f97b8133f428158b285f Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Mon, 29 Jan 2024 10:30:06 -0700 Subject: [PATCH 004/103] Use latest actions/setup-* versions Move off of setup-node fork --- .github/workflows/tests.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 68143985c..6d5114d6a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -49,10 +49,12 @@ jobs: git config --global user.name "John Doe" git config --global user.email johndoe@example.com - - uses: actions/checkout@v2 + # v4 requires node 20, which won't run due to GLIBC 2.28+ requirement + - uses: actions/checkout@v3 - name: Use Node.js - uses: actions/setup-node@v2 + # v4 requires node 20, which won't run due to GLIBC 2.28+ requirement + uses: actions/setup-node@v3 env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: @@ -112,10 +114,10 @@ jobs: git config --global user.name "John Doe" git config --global user.email johndoe@example.com - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: @@ -166,16 +168,16 @@ jobs: git config --global user.name "John Doe" git config --global user.email johndoe@example.com - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Use Node.js - uses: implausible/setup-node@feature/expose-architecture-override + uses: actions/setup-node@v4 env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: node-version: ${{ matrix.node }} check-latest: true - node-arch: ${{ matrix.arch }} + architecture: ${{ matrix.arch }} - name: Install run: npm install From ec794c68226cafc60b6605274e7e95ea70681de1 Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 29 Jan 2024 09:42:26 -0700 Subject: [PATCH 005/103] bump nan --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ed5d49ee..c9c0fd427 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@axosoft/nan": "^2.18.0-gk.1", + "@axosoft/nan": "^2.18.0-gk.2", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", "got": "^11.8.6", @@ -38,9 +38,9 @@ } }, "node_modules/@axosoft/nan": { - "version": "2.18.0-gk.1", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.18.0-gk.1.tgz", - "integrity": "sha512-rBLCaXNfzbM/XakZhvuambkKatlFBHVtAgiMKV/YmNZvcBKWocNGJSyXiDPUDHJ7fCTVgEe1h66vfzdE4vBJTQ==" + "version": "2.18.0-gk.2", + "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.18.0-gk.2.tgz", + "integrity": "sha512-R85blIk4tODD/tIQ1nezCs4O6RhWzPqB1Ls79fBEfUtZ9Zgq5s2c5mPGmWiS2+wAXaw2YgRhsBfqLFURH9mcPw==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -4805,9 +4805,9 @@ }, "dependencies": { "@axosoft/nan": { - "version": "2.18.0-gk.1", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.18.0-gk.1.tgz", - "integrity": "sha512-rBLCaXNfzbM/XakZhvuambkKatlFBHVtAgiMKV/YmNZvcBKWocNGJSyXiDPUDHJ7fCTVgEe1h66vfzdE4vBJTQ==" + "version": "2.18.0-gk.2", + "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.18.0-gk.2.tgz", + "integrity": "sha512-R85blIk4tODD/tIQ1nezCs4O6RhWzPqB1Ls79fBEfUtZ9Zgq5s2c5mPGmWiS2+wAXaw2YgRhsBfqLFURH9mcPw==" }, "@isaacs/cliui": { "version": "8.0.2", diff --git a/package.json b/package.json index 473b5d4b0..ecaa80582 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "node": ">= 16" }, "dependencies": { - "@axosoft/nan": "^2.18.0-gk.1", + "@axosoft/nan": "^2.18.0-gk.2", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", "got": "^11.8.6", From c829448334186af31157dcac81c4355942739dd2 Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 29 Jan 2024 19:17:03 -0700 Subject: [PATCH 006/103] disable flaky test --- test/tests/worker.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/tests/worker.js b/test/tests/worker.js index 5fbfeacee..f39e19e6d 100644 --- a/test/tests/worker.js +++ b/test/tests/worker.js @@ -64,9 +64,10 @@ if (Worker) { }); for (let i = 0; i < 5; ++i) { - it(`can kill worker thread while in use #${i}`, function(done) { // jshint ignore:line + // disabled until we can address flakiness + it.skip(`can kill worker thread while in use #${i}`, function(done) { // jshint ignore:line const workerPath = local("../utils/worker.js"); - const worker = new Worker(workerPath, { + const worker = new Worker(workerPath, { workerData: { clonePath, url: "https://github.com/nodegit/test.git" From 38f05802c0de7c9ae9c1d33ebf21cc507c1f70ec Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Mon, 5 Feb 2024 11:00:48 -0700 Subject: [PATCH 007/103] Bump to v0.28.0-alpha.22 --- CHANGELOG.md | 11 +++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b8afd361..58721e15e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change Log +## v0.28.0-alpha.22 [(2024-02-05)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.22) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.21...v0.28.0-alpha.22) + +#### Summary of changes +- Compatibility with Electron 28 + +#### Merged PRs into NodeGit +- [Fix electron 28 build failure](https://github.com/nodegit/nodegit/pull/1988) +- [Bump node-gyp to 10.0.1](https://github.com/nodegit/nodegit/pull/1989) + ## v0.28.0-alpha.21 [(2023-02-10)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.21) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.20...v0.28.0-alpha.21) diff --git a/package-lock.json b/package-lock.json index c9c0fd427..87c97a163 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.21", + "version": "0.28.0-alpha.22", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.21", + "version": "0.28.0-alpha.22", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index ecaa80582..2c5be0627 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.21", + "version": "0.28.0-alpha.22", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From ca65ba373438734a1b0fc75f2d2a340e6deffb3c Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Mon, 5 Feb 2024 16:20:53 -0700 Subject: [PATCH 008/103] Clarify supported Node version (Node 16+) --- CHANGELOG.md | 1 + package-lock.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58721e15e..07caa1e75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ #### Summary of changes - Compatibility with Electron 28 +- NodeGit now requires Node 16+ #### Merged PRs into NodeGit - [Fix electron 28 build failure](https://github.com/nodegit/nodegit/pull/1988) diff --git a/package-lock.json b/package-lock.json index 87c97a163..8517e7dc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,7 @@ "walk": "^2.3.9" }, "engines": { - "node": ">= 12.19.0 < 13 || >= 14.10.0" + "node": ">= 16" } }, "node_modules/@axosoft/nan": { From 9691cf02b0999055112ae23974a0ea642e1a8a9d Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 7 Feb 2024 10:09:03 -0700 Subject: [PATCH 009/103] update libgit2 submodule to 1.7.2 --- generate/input/README.md | 2 +- generate/input/libgit2-docs.json | 81145 +++++++++++++++-------------- vendor/libgit2 | 2 +- vendor/libgit2.gyp | 553 +- 4 files changed, 40956 insertions(+), 40746 deletions(-) diff --git a/generate/input/README.md b/generate/input/README.md index 9ab9b51d6..f0d7573ee 100644 --- a/generate/input/README.md +++ b/generate/input/README.md @@ -8,7 +8,7 @@ Customize the generated code using this configuration file. Enter the function's signature, arguments and their metadata and which functions can be skipped in this file. If you are using a manual template, remove all of its references from this file. #### libgit2-docs.json - These are provided by the libgit2 team. It includes all the metadata about the API provided by the libgit2 library. To grab the latest version of this file, download https://libgit2.github.com/libgit2/HEAD.json. + These are provided by the libgit2 team. It includes all the metadata about the API provided by the libgit2 library. To grab the latest version of this file, download https://libgit2.org/libgit2/HEAD.json. #### libgit2-supplement.json Use this confiuration file to group and override parts of the generated code. NodeGit tries its best to generate the right classes and structs, if it is not quite right, then use this config file to group/remove the functions. diff --git a/generate/input/libgit2-docs.json b/generate/input/libgit2-docs.json index aa0f54e35..32160fef8 100644 --- a/generate/input/libgit2-docs.json +++ b/generate/input/libgit2-docs.json @@ -1,40410 +1,40797 @@ { - "files": [ - { - "file": "git2/annotated_commit.h", - "functions": [ - "git_annotated_commit_from_ref", - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_lookup", - "git_annotated_commit_from_revspec", - "git_annotated_commit_id", - "git_annotated_commit_ref", - "git_annotated_commit_free" - ], - "meta": {}, - "lines": 121 - }, - { - "file": "git2/apply.h", - "functions": [ - "git_apply_delta_cb", - "git_apply_hunk_cb", - "git_apply_to_tree", - "git_apply" - ], - "meta": {}, - "lines": 147 - }, - { - "file": "git2/attr.h", - "functions": [ - "git_attr_value", - "git_attr_get", - "git_attr_get_ext", - "git_attr_get_many", - "git_attr_get_many_ext", - "git_attr_foreach_cb", - "git_attr_foreach", - "git_attr_foreach_ext", - "git_attr_cache_flush", - "git_attr_add_macro" - ], - "meta": {}, - "lines": 356 - }, - { - "file": "git2/blame.h", - "functions": [ - "git_blame_options_init", - "git_blame_get_hunk_count", - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline", - "git_blame_file", - "git_blame_buffer", - "git_blame_free" - ], - "meta": {}, - "lines": 277 - }, - { - "file": "git2/blob.h", - "functions": [ - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_blob_free", - "git_blob_id", - "git_blob_owner", - "git_blob_rawcontent", - "git_blob_rawsize", - "git_blob_filter_options_init", - "git_blob_filter", - "git_blob_create_from_workdir", - "git_blob_create_from_disk", - "git_blob_create_from_stream", - "git_blob_create_from_stream_commit", - "git_blob_create_from_buffer", - "git_blob_is_binary", - "git_blob_dup" - ], - "meta": {}, - "lines": 294 - }, - { - "file": "git2/branch.h", - "functions": [ - "git_branch_create", - "git_branch_create_from_annotated", - "git_branch_delete", - "git_branch_iterator_new", - "git_branch_next", - "git_branch_iterator_free", - "git_branch_move", - "git_branch_lookup", - "git_branch_name", - "git_branch_upstream", - "git_branch_set_upstream", - "git_branch_upstream_name", - "git_branch_is_head", - "git_branch_is_checked_out", - "git_branch_remote_name", - "git_branch_upstream_remote", - "git_branch_upstream_merge", - "git_branch_name_is_valid" - ], - "meta": {}, - "lines": 330 - }, - { - "file": "git2/buffer.h", - "functions": [ - "git_buf_dispose", - "git_buf_grow", - "git_buf_set", - "git_buf_is_binary", - "git_buf_contains_nul" - ], - "meta": {}, - "lines": 128 - }, - { - "file": "git2/cert.h", - "functions": [ - "git_transport_certificate_check_cb" - ], - "meta": {}, - "lines": 168 - }, - { - "file": "git2/checkout.h", - "functions": [ - "git_checkout_notify_cb", - "git_checkout_progress_cb", - "git_checkout_perfdata_cb", - "git_checkout_options_init", - "git_checkout_head", - "git_checkout_index", - "git_checkout_tree" - ], - "meta": {}, - "lines": 410 - }, - { - "file": "git2/cherrypick.h", - "functions": [ - "git_cherrypick_options_init", - "git_cherrypick_commit", - "git_cherrypick" - ], - "meta": {}, - "lines": 86 - }, - { - "file": "git2/clone.h", - "functions": [ - "git_remote_create_cb", - "git_repository_create_cb", - "git_clone_options_init", - "git_clone" - ], - "meta": {}, - "lines": 205 - }, - { - "file": "git2/commit.h", - "functions": [ - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_commit_free", - "git_commit_id", - "git_commit_owner", - "git_commit_message_encoding", - "git_commit_message", - "git_commit_message_raw", - "git_commit_summary", - "git_commit_body", - "git_commit_time", - "git_commit_time_offset", - "git_commit_committer", - "git_commit_author", - "git_commit_committer_with_mailmap", - "git_commit_author_with_mailmap", - "git_commit_raw_header", - "git_commit_tree", - "git_commit_tree_id", - "git_commit_parentcount", - "git_commit_parent", - "git_commit_parent_id", - "git_commit_nth_gen_ancestor", - "git_commit_header_field", - "git_commit_extract_signature", - "git_commit_create", - "git_commit_create_v", - "git_commit_amend", - "git_commit_create_buffer", - "git_commit_create_with_signature", - "git_commit_dup", - "git_commit_create_cb" - ], - "meta": {}, - "lines": 540 - }, - { - "file": "git2/common.h", - "functions": [ - "git_libgit2_version", - "git_libgit2_features", - "git_libgit2_opts" - ], - "meta": {}, - "lines": 466 - }, - { - "file": "git2/config.h", - "functions": [ - "git_config_entry_free", - "git_config_foreach_cb", - "git_config_find_global", - "git_config_find_xdg", - "git_config_find_system", - "git_config_find_programdata", - "git_config_open_default", - "git_config_new", - "git_config_add_file_ondisk", - "git_config_open_ondisk", - "git_config_open_level", - "git_config_open_global", - "git_config_snapshot", - "git_config_free", - "git_config_get_entry", - "git_config_get_int32", - "git_config_get_int64", - "git_config_get_bool", - "git_config_get_path", - "git_config_get_string", - "git_config_get_string_buf", - "git_config_get_multivar_foreach", - "git_config_multivar_iterator_new", - "git_config_next", - "git_config_iterator_free", - "git_config_set_int32", - "git_config_set_int64", - "git_config_set_bool", - "git_config_set_string", - "git_config_set_multivar", - "git_config_delete_entry", - "git_config_delete_multivar", - "git_config_foreach", - "git_config_iterator_new", - "git_config_iterator_glob_new", - "git_config_foreach_match", - "git_config_get_mapped", - "git_config_lookup_map_value", - "git_config_parse_bool", - "git_config_parse_int32", - "git_config_parse_int64", - "git_config_parse_path", - "git_config_backend_foreach_match", - "git_config_lock" - ], - "meta": {}, - "lines": 762 - }, - { - "file": "git2/credential.h", - "functions": [ - "git_credential_acquire_cb", - "git_credential_free", - "git_credential_has_username", - "git_credential_get_username", - "git_credential_userpass_plaintext_new", - "git_credential_default_new", - "git_credential_username_new", - "git_credential_ssh_key_new", - "git_credential_ssh_key_memory_new", - "git_credential_ssh_interactive_new", - "git_credential_ssh_key_from_agent", - "git_credential_ssh_custom_new" - ], - "meta": {}, - "lines": 310 - }, - { - "file": "git2/credential_helpers.h", - "functions": [ - "git_credential_userpass" - ], - "meta": {}, - "lines": 48 - }, - { - "file": "git2/deprecated.h", - "functions": [ - "git_blob_filtered_content", - "git_filter_list_stream_data", - "git_filter_list_apply_to_data", - "git_treebuilder_write_with_buffer", - "git_buf_grow", - "git_buf_set", - "git_buf_is_binary", - "git_buf_contains_nul", - "git_buf_free", - "git_commit_signing_cb", - "git_diff_format_email", - "git_diff_commit_as_email", - "git_diff_format_email_options_init", - "giterr_last", - "giterr_clear", - "giterr_set_str", - "giterr_set_oom", - "git_object__size", - "git_remote_is_valid_name", - "git_reference_is_valid_name", - "git_oid_iszero", - "git_oidarray_free", - "git_headlist_cb", - "git_strarray_copy", - "git_strarray_free", - "git_blame_init_options" - ], - "meta": {}, - "lines": 897 - }, - { - "file": "git2/describe.h", - "functions": [ - "git_describe_options_init", - "git_describe_format_options_init", - "git_describe_commit", - "git_describe_workdir", - "git_describe_format", - "git_describe_result_free" - ], - "meta": {}, - "lines": 184 - }, - { - "file": "git2/diff.h", - "functions": [ - "git_diff_notify_cb", - "git_diff_progress_cb", - "git_diff_options_init", - "git_diff_file_cb", - "git_diff_binary_cb", - "git_diff_hunk_cb", - "git_diff_line_cb", - "git_diff_find_options_init", - "git_diff_free", - "git_diff_tree_to_tree", - "git_diff_tree_to_index", - "git_diff_index_to_workdir", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_diff_index_to_index", - "git_diff_merge", - "git_diff_find_similar", - "git_diff_num_deltas", - "git_diff_num_deltas_of_type", - "git_diff_get_delta", - "git_diff_is_sorted_icase", - "git_diff_foreach", - "git_diff_status_char", - "git_diff_print", - "git_diff_to_buf", - "git_diff_blobs", - "git_diff_blob_to_buffer", - "git_diff_buffers", - "git_diff_from_buffer", - "git_diff_get_stats", - "git_diff_stats_files_changed", - "git_diff_stats_insertions", - "git_diff_stats_deletions", - "git_diff_stats_to_buf", - "git_diff_stats_free", - "git_diff_patchid_options_init", - "git_diff_patchid" - ], - "meta": {}, - "lines": 1425 - }, - { - "file": "git2/email.h", - "functions": [], - "meta": {}, - "lines": 38 - }, - { - "file": "git2/errors.h", - "functions": [ - "git_error_last", - "git_error_clear", - "git_error_set_str", - "git_error_set_oom" - ], - "meta": {}, - "lines": 161 - }, - { - "file": "git2/filter.h", - "functions": [ - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_contains", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_file", - "git_filter_list_apply_to_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_file", - "git_filter_list_stream_blob", - "git_filter_list_free" - ], - "meta": {}, - "lines": 264 - }, - { - "file": "git2/global.h", - "functions": [ - "git_libgit2_init", - "git_libgit2_shutdown" - ], - "meta": {}, - "lines": 39 - }, - { - "file": "git2/graph.h", - "functions": [ - "git_graph_ahead_behind", - "git_graph_descendant_of", - "git_graph_reachable_from_any" - ], - "meta": {}, - "lines": 72 - }, - { - "file": "git2/ignore.h", - "functions": [ - "git_ignore_add_rule", - "git_ignore_clear_internal_rules", - "git_ignore_path_is_ignored" - ], - "meta": {}, - "lines": 74 - }, - { - "file": "git2/index.h", - "functions": [ - "git_index_matched_path_cb", - "git_index_open", - "git_index_new", - "git_index_free", - "git_index_owner", - "git_index_caps", - "git_index_set_caps", - "git_index_version", - "git_index_set_version", - "git_index_read", - "git_index_write", - "git_index_path", - "git_index_checksum", - "git_index_read_tree", - "git_index_write_tree", - "git_index_write_tree_to", - "git_index_entrycount", - "git_index_clear", - "git_index_get_byindex", - "git_index_get_bypath", - "git_index_remove", - "git_index_remove_directory", - "git_index_add", - "git_index_entry_stage", - "git_index_entry_is_conflict", - "git_index_iterator_new", - "git_index_iterator_next", - "git_index_iterator_free", - "git_index_add_bypath", - "git_index_add_from_buffer", - "git_index_remove_bypath", - "git_index_add_all", - "git_index_remove_all", - "git_index_update_all", - "git_index_find", - "git_index_find_prefix", - "git_index_conflict_add", - "git_index_conflict_get", - "git_index_conflict_remove", - "git_index_conflict_cleanup", - "git_index_has_conflicts", - "git_index_conflict_iterator_new", - "git_index_conflict_next", - "git_index_conflict_iterator_free" - ], - "meta": {}, - "lines": 829 - }, - { - "file": "git2/indexer.h", - "functions": [ - "git_indexer_progress_cb", - "git_indexer_options_init", - "git_indexer_new", - "git_indexer_append", - "git_indexer_commit", - "git_indexer_hash", - "git_indexer_free" - ], - "meta": {}, - "lines": 143 - }, - { - "file": "git2/mailmap.h", - "functions": [ - "git_mailmap_new", - "git_mailmap_free", - "git_mailmap_add_entry", - "git_mailmap_from_buffer", - "git_mailmap_from_repository", - "git_mailmap_resolve", - "git_mailmap_resolve_signature" - ], - "meta": {}, - "lines": 111 - }, - { - "file": "git2/merge.h", - "functions": [ - "git_merge_file_input_init", - "git_merge_file_options_init", - "git_merge_options_init", - "git_merge_analysis", - "git_merge_analysis_for_ref", - "git_merge_base", - "git_merge_bases", - "git_merge_base_many", - "git_merge_bases_many", - "git_merge_base_octopus", - "git_merge_file", - "git_merge_file_from_index", - "git_merge_file_result_free", - "git_merge_trees", - "git_merge_commits", - "git_merge" - ], - "meta": {}, - "lines": 602 - }, - { - "file": "git2/message.h", - "functions": [ - "git_message_prettify", - "git_message_trailers", - "git_message_trailer_array_free" - ], - "meta": {}, - "lines": 79 - }, - { - "file": "git2/net.h", - "functions": [], - "meta": {}, - "lines": 50 - }, - { - "file": "git2/notes.h", - "functions": [ - "git_note_foreach_cb", - "git_note_iterator_new", - "git_note_commit_iterator_new", - "git_note_iterator_free", - "git_note_next", - "git_note_read", - "git_note_commit_read", - "git_note_author", - "git_note_committer", - "git_note_message", - "git_note_id", - "git_note_create", - "git_note_commit_create", - "git_note_remove", - "git_note_commit_remove", - "git_note_free", - "git_note_default_ref", - "git_note_foreach" - ], - "meta": {}, - "lines": 302 - }, - { - "file": "git2/object.h", - "functions": [ - "git_object_lookup", - "git_object_lookup_prefix", - "git_object_lookup_bypath", - "git_object_id", - "git_object_short_id", - "git_object_type", - "git_object_owner", - "git_object_free", - "git_object_type2string", - "git_object_string2type", - "git_object_typeisloose", - "git_object_peel", - "git_object_dup" - ], - "meta": {}, - "lines": 225 - }, - { - "file": "git2/odb.h", - "functions": [ - "git_odb_foreach_cb", - "git_odb_new", - "git_odb_open", - "git_odb_add_disk_alternate", - "git_odb_free", - "git_odb_read", - "git_odb_read_prefix", - "git_odb_read_header", - "git_odb_exists", - "git_odb_exists_prefix", - "git_odb_expand_ids", - "git_odb_refresh", - "git_odb_foreach", - "git_odb_write", - "git_odb_open_wstream", - "git_odb_stream_write", - "git_odb_stream_finalize_write", - "git_odb_stream_read", - "git_odb_stream_free", - "git_odb_open_rstream", - "git_odb_write_pack", - "git_odb_write_multi_pack_index", - "git_odb_hash", - "git_odb_hashfile", - "git_odb_object_dup", - "git_odb_object_free", - "git_odb_object_id", - "git_odb_object_data", - "git_odb_object_size", - "git_odb_object_type", - "git_odb_add_backend", - "git_odb_add_alternate", - "git_odb_num_backends", - "git_odb_get_backend", - "git_odb_set_commit_graph" - ], - "meta": {}, - "lines": 569 - }, - { - "file": "git2/odb_backend.h", - "functions": [ - "git_odb_backend_pack", - "git_odb_backend_loose", - "git_odb_backend_one_pack" - ], - "meta": {}, - "lines": 131 - }, - { - "file": "git2/oid.h", - "functions": [ - "git_oid_fromstr", - "git_oid_fromstrp", - "git_oid_fromstrn", - "git_oid_fromraw", - "git_oid_fmt", - "git_oid_nfmt", - "git_oid_pathfmt", - "git_oid_tostr_s", - "git_oid_tostr", - "git_oid_cpy", - "git_oid_cmp", - "git_oid_equal", - "git_oid_ncmp", - "git_oid_streq", - "git_oid_strcmp", - "git_oid_is_zero", - "git_oid_shorten_new", - "git_oid_shorten_add", - "git_oid_shorten_free" - ], - "meta": {}, - "lines": 269 - }, - { - "file": "git2/oidarray.h", - "functions": [ - "git_oidarray_dispose" - ], - "meta": {}, - "lines": 31 - }, - { - "file": "git2/pack.h", - "functions": [ - "git_packbuilder_new", - "git_packbuilder_set_threads", - "git_packbuilder_insert", - "git_packbuilder_insert_tree", - "git_packbuilder_insert_commit", - "git_packbuilder_insert_walk", - "git_packbuilder_insert_recur", - "git_packbuilder_write_buf", - "git_packbuilder_write", - "git_packbuilder_hash", - "git_packbuilder_foreach_cb", - "git_packbuilder_foreach", - "git_packbuilder_object_count", - "git_packbuilder_written", - "git_packbuilder_progress", - "git_packbuilder_set_callbacks", - "git_packbuilder_free" - ], - "meta": {}, - "lines": 247 - }, - { - "file": "git2/patch.h", - "functions": [ - "git_patch_owner", - "git_patch_from_diff", - "git_patch_from_blobs", - "git_patch_from_blob_and_buffer", - "git_patch_from_buffers", - "git_patch_free", - "git_patch_get_delta", - "git_patch_num_hunks", - "git_patch_line_stats", - "git_patch_get_hunk", - "git_patch_num_lines_in_hunk", - "git_patch_get_line_in_hunk", - "git_patch_size", - "git_patch_print", - "git_patch_to_buf" - ], - "meta": {}, - "lines": 276 - }, - { - "file": "git2/pathspec.h", - "functions": [ - "git_pathspec_new", - "git_pathspec_free", - "git_pathspec_matches_path", - "git_pathspec_match_workdir", - "git_pathspec_match_index", - "git_pathspec_match_tree", - "git_pathspec_match_diff", - "git_pathspec_match_list_free", - "git_pathspec_match_list_entrycount", - "git_pathspec_match_list_entry", - "git_pathspec_match_list_diff_entry", - "git_pathspec_match_list_failed_entrycount", - "git_pathspec_match_list_failed_entry" - ], - "meta": {}, - "lines": 277 - }, - { - "file": "git2/proxy.h", - "functions": [ - "git_proxy_options_init" - ], - "meta": {}, - "lines": 94 - }, - { - "file": "git2/rebase.h", - "functions": [ - "git_rebase_options_init", - "git_rebase_init", - "git_rebase_open", - "git_rebase_orig_head_name", - "git_rebase_orig_head_id", - "git_rebase_onto_name", - "git_rebase_onto_id", - "git_rebase_operation_entrycount", - "git_rebase_operation_current", - "git_rebase_operation_byindex", - "git_rebase_next", - "git_rebase_inmemory_index", - "git_rebase_commit", - "git_rebase_abort", - "git_rebase_finish", - "git_rebase_free" - ], - "meta": {}, - "lines": 387 - }, - { - "file": "git2/refdb.h", - "functions": [ - "git_refdb_new", - "git_refdb_open", - "git_refdb_compress", - "git_refdb_free" - ], - "meta": {}, - "lines": 63 - }, - { - "file": "git2/reflog.h", - "functions": [ - "git_reflog_read", - "git_reflog_write", - "git_reflog_append", - "git_reflog_rename", - "git_reflog_delete", - "git_reflog_entrycount", - "git_reflog_entry_byindex", - "git_reflog_drop", - "git_reflog_entry_id_old", - "git_reflog_entry_id_new", - "git_reflog_entry_committer", - "git_reflog_entry_message", - "git_reflog_free" - ], - "meta": {}, - "lines": 166 - }, - { - "file": "git2/refs.h", - "functions": [ - "git_reference_lookup", - "git_reference_name_to_id", - "git_reference_dwim", - "git_reference_symbolic_create_matching", - "git_reference_symbolic_create", - "git_reference_create", - "git_reference_create_matching", - "git_reference_target", - "git_reference_target_peel", - "git_reference_symbolic_target", - "git_reference_type", - "git_reference_name", - "git_reference_resolve", - "git_reference_owner", - "git_reference_symbolic_set_target", - "git_reference_set_target", - "git_reference_rename", - "git_reference_delete", - "git_reference_remove", - "git_reference_list", - "git_reference_foreach_cb", - "git_reference_foreach_name_cb", - "git_reference_foreach", - "git_reference_foreach_name", - "git_reference_dup", - "git_reference_free", - "git_reference_cmp", - "git_reference_iterator_new", - "git_reference_iterator_glob_new", - "git_reference_next", - "git_reference_next_name", - "git_reference_iterator_free", - "git_reference_foreach_glob", - "git_reference_has_log", - "git_reference_ensure_log", - "git_reference_is_branch", - "git_reference_is_remote", - "git_reference_is_tag", - "git_reference_is_note", - "git_reference_normalize_name", - "git_reference_peel", - "git_reference_name_is_valid", - "git_reference_shorthand" - ], - "meta": {}, - "lines": 767 - }, - { - "file": "git2/refspec.h", - "functions": [ - "git_refspec_parse", - "git_refspec_free", - "git_refspec_src", - "git_refspec_dst", - "git_refspec_string", - "git_refspec_force", - "git_refspec_direction", - "git_refspec_src_matches", - "git_refspec_dst_matches", - "git_refspec_transform", - "git_refspec_rtransform" - ], - "meta": {}, - "lines": 117 - }, - { - "file": "git2/remote.h", - "functions": [ - "git_remote_create", - "git_remote_create_options_init", - "git_remote_create_with_opts", - "git_remote_create_with_fetchspec", - "git_remote_create_anonymous", - "git_remote_create_detached", - "git_remote_lookup", - "git_remote_dup", - "git_remote_owner", - "git_remote_name", - "git_remote_url", - "git_remote_pushurl", - "git_remote_set_url", - "git_remote_set_pushurl", - "git_remote_set_instance_url", - "git_remote_set_instance_pushurl", - "git_remote_add_fetch", - "git_remote_get_fetch_refspecs", - "git_remote_add_push", - "git_remote_get_push_refspecs", - "git_remote_refspec_count", - "git_remote_get_refspec", - "git_remote_connect", - "git_remote_ls", - "git_remote_connected", - "git_remote_stop", - "git_remote_disconnect", - "git_remote_free", - "git_remote_list", - "git_push_transfer_progress_cb", - "git_push_negotiation", - "git_push_update_reference_cb", - "git_url_resolve_cb", - "git_remote_ready_cb", - "git_remote_init_callbacks", - "git_fetch_options_init", - "git_push_options_init", - "git_remote_download", - "git_remote_upload", - "git_remote_update_tips", - "git_remote_fetch", - "git_remote_prune", - "git_remote_push", - "git_remote_stats", - "git_remote_autotag", - "git_remote_set_autotag", - "git_remote_prune_refs", - "git_remote_rename", - "git_remote_name_is_valid", - "git_remote_delete", - "git_remote_default_branch" - ], - "meta": {}, - "lines": 1004 - }, - { - "file": "git2/repository.h", - "functions": [ - "git_repository_open", - "git_repository_open_from_worktree", - "git_repository_wrap_odb", - "git_repository_discover", - "git_repository_open_ext", - "git_repository_open_bare", - "git_repository_free", - "git_repository_init", - "git_repository_init_options_init", - "git_repository_init_ext", - "git_repository_head", - "git_repository_head_for_worktree", - "git_repository_head_detached", - "git_repository_head_detached_for_worktree", - "git_repository_head_unborn", - "git_repository_is_empty", - "git_repository_item_path", - "git_repository_path", - "git_repository_workdir", - "git_repository_commondir", - "git_repository_set_workdir", - "git_repository_is_bare", - "git_repository_is_worktree", - "git_repository_config", - "git_repository_config_snapshot", - "git_repository_odb", - "git_repository_refdb", - "git_repository_index", - "git_repository_message", - "git_repository_message_remove", - "git_repository_state_cleanup", - "git_repository_fetchhead_foreach_cb", - "git_repository_fetchhead_foreach", - "git_repository_mergehead_foreach_cb", - "git_repository_mergehead_foreach", - "git_repository_hashfile", - "git_repository_set_head", - "git_repository_set_head_detached", - "git_repository_set_head_detached_from_annotated", - "git_repository_detach_head", - "git_repository_state", - "git_repository_set_namespace", - "git_repository_get_namespace", - "git_repository_is_shallow", - "git_repository_ident", - "git_repository_set_ident" - ], - "meta": {}, - "lines": 945 - }, - { - "file": "git2/reset.h", - "functions": [ - "git_reset", - "git_reset_from_annotated", - "git_reset_default" - ], - "meta": {}, - "lines": 107 - }, - { - "file": "git2/revert.h", - "functions": [ - "git_revert_options_init", - "git_revert_commit", - "git_revert" - ], - "meta": {}, - "lines": 86 - }, - { - "file": "git2/revparse.h", - "functions": [ - "git_revparse_single", - "git_revparse_ext", - "git_revparse" - ], - "meta": {}, - "lines": 108 - }, - { - "file": "git2/revwalk.h", - "functions": [ - "git_revwalk_new", - "git_revwalk_reset", - "git_revwalk_push", - "git_revwalk_push_glob", - "git_revwalk_push_head", - "git_revwalk_hide", - "git_revwalk_hide_glob", - "git_revwalk_hide_head", - "git_revwalk_push_ref", - "git_revwalk_hide_ref", - "git_revwalk_next", - "git_revwalk_sorting", - "git_revwalk_push_range", - "git_revwalk_simplify_first_parent", - "git_revwalk_free", - "git_revwalk_repository", - "git_revwalk_hide_cb", - "git_revwalk_add_hide_cb" - ], - "meta": {}, - "lines": 295 - }, - { - "file": "git2/signature.h", - "functions": [ - "git_signature_new", - "git_signature_now", - "git_signature_default", - "git_signature_from_buffer", - "git_signature_dup", - "git_signature_free" - ], - "meta": {}, - "lines": 99 - }, - { - "file": "git2/stash.h", - "functions": [ - "git_stash_save", - "git_stash_apply_progress_cb", - "git_stash_apply_options_init", - "git_stash_apply", - "git_stash_cb", - "git_stash_foreach", - "git_stash_drop", - "git_stash_pop" - ], - "meta": {}, - "lines": 256 - }, - { - "file": "git2/status.h", - "functions": [ - "git_status_cb", - "git_status_options_init", - "git_status_foreach", - "git_status_foreach_ext", - "git_status_file", - "git_status_list_new", - "git_status_list_entrycount", - "git_status_byindex", - "git_status_list_free", - "git_status_should_ignore" - ], - "meta": {}, - "lines": 439 - }, - { - "file": "git2/strarray.h", - "functions": [ - "git_strarray_dispose", - "git_strarray_copy" - ], - "meta": {}, - "lines": 49 - }, - { - "file": "git2/submodule.h", - "functions": [ - "git_submodule_cb", - "git_submodule_update_options_init", - "git_submodule_update", - "git_submodule_lookup", - "git_submodule_dup", - "git_submodule_free", - "git_submodule_foreach", - "git_submodule_add_setup", - "git_submodule_clone", - "git_submodule_add_finalize", - "git_submodule_add_to_index", - "git_submodule_owner", - "git_submodule_name", - "git_submodule_path", - "git_submodule_url", - "git_submodule_resolve_url", - "git_submodule_branch", - "git_submodule_set_branch", - "git_submodule_set_url", - "git_submodule_index_id", - "git_submodule_head_id", - "git_submodule_wd_id", - "git_submodule_ignore", - "git_submodule_set_ignore", - "git_submodule_update_strategy", - "git_submodule_set_update", - "git_submodule_fetch_recurse_submodules", - "git_submodule_set_fetch_recurse_submodules", - "git_submodule_init", - "git_submodule_repo_init", - "git_submodule_sync", - "git_submodule_open", - "git_submodule_reload", - "git_submodule_status", - "git_submodule_location" - ], - "meta": {}, - "lines": 659 - }, - { - "file": "git2/sys/commit_graph.h", - "functions": [], - "meta": {}, - "lines": 98 - }, - { - "file": "git2/sys/filter.h", - "functions": [], - "meta": {}, - "lines": 95 - }, - { - "file": "git2/sys/hashsig.h", - "functions": [], - "meta": {}, - "lines": 45 - }, - { - "file": "git2/sys/merge.h", - "functions": [], - "meta": {}, - "lines": 41 - }, - { - "file": "git2/sys/path.h", - "functions": [], - "meta": {}, - "lines": 41 - }, - { - "file": "git2/sys/stream.h", - "functions": [], - "meta": {}, - "lines": 83 - }, - { - "file": "git2/sys/transport.h", - "functions": [], - "meta": {}, - "lines": 293 - }, - { - "file": "git2/tag.h", - "functions": [ - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_tag_free", - "git_tag_id", - "git_tag_owner", - "git_tag_target", - "git_tag_target_id", - "git_tag_target_type", - "git_tag_name", - "git_tag_tagger", - "git_tag_message", - "git_tag_create", - "git_tag_annotation_create", - "git_tag_create_from_buffer", - "git_tag_create_lightweight", - "git_tag_delete", - "git_tag_list", - "git_tag_list_match", - "git_tag_foreach_cb", - "git_tag_foreach", - "git_tag_peel", - "git_tag_dup", - "git_tag_name_is_valid" - ], - "meta": {}, - "lines": 378 - }, - { - "file": "git2/trace.h", - "functions": [ - "git_trace_cb", - "git_trace_set" - ], - "meta": {}, - "lines": 63 - }, - { - "file": "git2/transaction.h", - "functions": [ - "git_transaction_new", - "git_transaction_lock_ref", - "git_transaction_set_target", - "git_transaction_set_symbolic_target", - "git_transaction_set_reflog", - "git_transaction_remove", - "git_transaction_commit", - "git_transaction_free" - ], - "meta": {}, - "lines": 117 - }, - { - "file": "git2/transport.h", - "functions": [ - "git_transport_message_cb", - "git_transport_cb" - ], - "meta": {}, - "lines": 37 - }, - { - "file": "git2/tree.h", - "functions": [ - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_tree_free", - "git_tree_id", - "git_tree_owner", - "git_tree_entrycount", - "git_tree_entry_byname", - "git_tree_entry_byindex", - "git_tree_entry_byid", - "git_tree_entry_bypath", - "git_tree_entry_dup", - "git_tree_entry_free", - "git_tree_entry_name", - "git_tree_entry_id", - "git_tree_entry_type", - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw", - "git_tree_entry_cmp", - "git_tree_entry_to_object", - "git_treebuilder_new", - "git_treebuilder_clear", - "git_treebuilder_entrycount", - "git_treebuilder_free", - "git_treebuilder_get", - "git_treebuilder_insert", - "git_treebuilder_remove", - "git_treebuilder_filter_cb", - "git_treebuilder_filter", - "git_treebuilder_write", - "git_treewalk_cb", - "git_tree_walk", - "git_tree_dup", - "git_tree_create_updated" - ], - "meta": {}, - "lines": 469 - }, - { - "file": "git2/types.h", - "functions": [], - "meta": {}, - "lines": 366 - }, - { - "file": "git2/worktree.h", - "functions": [ - "git_worktree_list", - "git_worktree_lookup", - "git_worktree_open_from_repository", - "git_worktree_free", - "git_worktree_validate", - "git_worktree_add_options_init", - "git_worktree_add", - "git_worktree_lock", - "git_worktree_unlock", - "git_worktree_is_locked", - "git_worktree_name", - "git_worktree_path", - "git_worktree_prune_options_init", - "git_worktree_is_prunable", - "git_worktree_prune" - ], - "meta": {}, - "lines": 252 - } - ], - "functions": { - "git_annotated_commit_from_ref": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 33, - "lineto": 36, - "args": [ - { - "name": "out", - "type": "git_annotated_commit **", - "comment": "pointer to store the git_annotated_commit result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given reference" - }, - { - "name": "ref", - "type": "const git_reference *", - "comment": "reference to use to lookup the git_annotated_commit" - } - ], - "argline": "git_annotated_commit **out, git_repository *repo, const git_reference *ref", - "sig": "git_annotated_commit **::git_repository *::const git_reference *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Creates a git_annotated_commit from the given reference.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", - "comments": "", - "group": "annotated", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_annotated_commit_from_ref-1" - ] - } - }, - "git_annotated_commit_from_fetchhead": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 50, - "lineto": 55, - "args": [ - { - "name": "out", - "type": "git_annotated_commit **", - "comment": "pointer to store the git_annotated_commit result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given commit" - }, - { - "name": "branch_name", - "type": "const char *", - "comment": "name of the (remote) branch" - }, - { - "name": "remote_url", - "type": "const char *", - "comment": "url of the remote" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the commit object id of the remote branch" - } - ], - "argline": "git_annotated_commit **out, git_repository *repo, const char *branch_name, const char *remote_url, const git_oid *id", - "sig": "git_annotated_commit **::git_repository *::const char *::const char *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Creates a git_annotated_commit from the given fetch head data.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", - "comments": "", - "group": "annotated" - }, - "git_annotated_commit_lookup": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 75, - "lineto": 78, - "args": [ - { - "name": "out", - "type": "git_annotated_commit **", - "comment": "pointer to store the git_annotated_commit result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given commit" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the commit object id to lookup" - } - ], - "argline": "git_annotated_commit **out, git_repository *repo, const git_oid *id", - "sig": "git_annotated_commit **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Creates a git_annotated_commit from the given commit id.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", - "comments": "

An annotated commit contains information about how it was looked up, which may be useful for functions like merge or rebase to provide context to the operation. For example, conflict files will include the name of the source or target branches being merged. It is therefore preferable to use the most specific function (eg git_annotated_commit_from_ref) instead of this one when that data is known.

\n", - "group": "annotated" - }, - "git_annotated_commit_from_revspec": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 92, - "lineto": 95, - "args": [ - { - "name": "out", - "type": "git_annotated_commit **", - "comment": "pointer to store the git_annotated_commit result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given commit" - }, - { - "name": "revspec", - "type": "const char *", - "comment": "the extended sha syntax string to use to lookup the commit" - } - ], - "argline": "git_annotated_commit **out, git_repository *repo, const char *revspec", - "sig": "git_annotated_commit **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Creates a git_annotated_commit from a revision string.

\n", - "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", - "group": "annotated" - }, - "git_annotated_commit_id": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 103, - "lineto": 104, - "args": [ - { - "name": "commit", - "type": "const git_annotated_commit *", - "comment": "the given annotated commit" - } - ], - "argline": "const git_annotated_commit *commit", - "sig": "const git_annotated_commit *", - "return": { - "type": "const git_oid *", - "comment": " commit id" - }, - "description": "

Gets the commit ID that the given git_annotated_commit refers to.

\n", - "comments": "", - "group": "annotated", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_annotated_commit_id-2" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_annotated_commit_id-1", - "ex/v1.3.1/merge.html#git_annotated_commit_id-2", - "ex/v1.3.1/merge.html#git_annotated_commit_id-3" - ] - } - }, - "git_annotated_commit_ref": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 112, - "lineto": 113, - "args": [ - { - "name": "commit", - "type": "const git_annotated_commit *", - "comment": "the given annotated commit" - } - ], - "argline": "const git_annotated_commit *commit", - "sig": "const git_annotated_commit *", - "return": { - "type": "const char *", - "comment": " ref name." - }, - "description": "

Get the refname that the given git_annotated_commit refers to.

\n", - "comments": "", - "group": "annotated", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_annotated_commit_ref-3", - "ex/v1.3.1/checkout.html#git_annotated_commit_ref-4", - "ex/v1.3.1/checkout.html#git_annotated_commit_ref-5" - ] - } - }, - "git_annotated_commit_free": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 120, - "lineto": 121, - "args": [ - { - "name": "commit", - "type": "git_annotated_commit *", - "comment": "annotated commit to free" - } - ], - "argline": "git_annotated_commit *commit", - "sig": "git_annotated_commit *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees a git_annotated_commit.

\n", - "comments": "", - "group": "annotated", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_annotated_commit_free-6" - ] - } - }, - "git_apply_to_tree": { - "type": "function", - "file": "git2/apply.h", - "line": 105, - "lineto": 110, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "the postimage of the application" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to apply" - }, - { - "name": "preimage", - "type": "git_tree *", - "comment": "the tree to apply the diff to" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "the diff to apply" - }, - { - "name": "options", - "type": "const git_apply_options *", - "comment": "the options for the apply (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, git_tree *preimage, git_diff *diff, const git_apply_options *options", - "sig": "git_index **::git_repository *::git_tree *::git_diff *::const git_apply_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Apply a git_diff to a git_tree, and return the resulting image\n as an index.

\n", - "comments": "", - "group": "apply" - }, - "git_apply": { - "type": "function", - "file": "git2/apply.h", - "line": 143, - "lineto": 147, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to apply to" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "the diff to apply" - }, - { - "name": "location", - "type": "git_apply_location_t", - "comment": "the location to apply (workdir, index or both)" - }, - { - "name": "options", - "type": "const git_apply_options *", - "comment": "the options for the apply (or null for defaults)" - } - ], - "argline": "git_repository *repo, git_diff *diff, git_apply_location_t location, const git_apply_options *options", - "sig": "git_repository *::git_diff *::git_apply_location_t::const git_apply_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Apply a git_diff to the given repository, making changes directly\n in the working directory, the index, or both.

\n", - "comments": "", - "group": "apply" - }, - "git_attr_value": { - "type": "function", - "file": "git2/attr.h", - "line": 102, - "lineto": 102, - "args": [ - { - "name": "attr", - "type": "const char *", - "comment": "The attribute" - } - ], - "argline": "const char *attr", - "sig": "const char *", - "return": { - "type": "git_attr_value_t", - "comment": " the value type for the attribute" - }, - "description": "

Return the value type for a given attribute.

\n", - "comments": "

This can be either TRUE, FALSE, UNSPECIFIED (if the attribute was not set at all), or VALUE, if the attribute was set to an actual string.

\n\n

If the attribute has a VALUE string, it can be accessed normally as a NULL-terminated C string.

\n", - "group": "attr" - }, - "git_attr_get": { - "type": "function", - "file": "git2/attr.h", - "line": 181, - "lineto": 186, - "args": [ - { - "name": "value_out", - "type": "const char **", - "comment": "Output of the value of the attribute. Use the GIT_ATTR_...\n macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just\n use the string value for attributes set to a value. You\n should NOT modify or free this value." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "A combination of GIT_ATTR_CHECK... flags." - }, - { - "name": "path", - "type": "const char *", - "comment": "The path to check for attributes. Relative paths are\n interpreted relative to the repo root. The file does\n not have to exist, but if it does not, then it will be\n treated as a plain file (not a directory)." - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the attribute to look up." - } - ], - "argline": "const char **value_out, git_repository *repo, uint32_t flags, const char *path, const char *name", - "sig": "const char **::git_repository *::uint32_t::const char *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Look up the value of one git attribute for path.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_get_ext": { - "type": "function", - "file": "git2/attr.h", - "line": 203, - "lineto": 208, - "args": [ - { - "name": "value_out", - "type": "const char **", - "comment": "Output of the value of the attribute. Use the GIT_ATTR_...\n macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just\n use the string value for attributes set to a value. You\n should NOT modify or free this value." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "opts", - "type": "git_attr_options *", - "comment": "The `git_attr_options` to use when querying these attributes." - }, - { - "name": "path", - "type": "const char *", - "comment": "The path to check for attributes. Relative paths are\n interpreted relative to the repo root. The file does\n not have to exist, but if it does not, then it will be\n treated as a plain file (not a directory)." - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the attribute to look up." - } - ], - "argline": "const char **value_out, git_repository *repo, git_attr_options *opts, const char *path, const char *name", - "sig": "const char **::git_repository *::git_attr_options *::const char *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Look up the value of one git attribute for path with extended options.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_get_many": { - "type": "function", - "file": "git2/attr.h", - "line": 239, - "lineto": 245, - "args": [ - { - "name": "values_out", - "type": "const char **", - "comment": "An array of num_attr entries that will have string\n pointers written into it for the values of the attributes.\n You should not modify or free the values that are written\n into this array (although of course, you should free the\n array itself if you allocated it)." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "A combination of GIT_ATTR_CHECK... flags." - }, - { - "name": "path", - "type": "const char *", - "comment": "The path inside the repo to check attributes. This\n does not have to exist, but if it does not, then\n it will be treated as a plain file (i.e. not a directory)." - }, - { - "name": "num_attr", - "type": "size_t", - "comment": "The number of attributes being looked up" - }, - { - "name": "names", - "type": "const char **", - "comment": "An array of num_attr strings containing attribute names." - } - ], - "argline": "const char **values_out, git_repository *repo, uint32_t flags, const char *path, size_t num_attr, const char **names", - "sig": "const char **::git_repository *::uint32_t::const char *::size_t::const char **", - "return": { - "type": "int", - "comment": null - }, - "description": "

Look up a list of git attributes for path.

\n", - "comments": "

Use this if you have a known list of attributes that you want to look up in a single call. This is somewhat more efficient than calling git_attr_get() multiple times.

\n\n

For example, you might write:

\n\n
 const char *attrs[] = { "crlf", "diff", "foo" };     const char **values[3];     git_attr_get_many(values, repo, 0, "my/fun/file.c", 3, attrs);\n
\n\n

Then you could loop through the 3 values to get the settings for the three attributes you asked about.

\n", - "group": "attr" - }, - "git_attr_get_many_ext": { - "type": "function", - "file": "git2/attr.h", - "line": 263, - "lineto": 269, - "args": [ - { - "name": "values_out", - "type": "const char **", - "comment": "An array of num_attr entries that will have string\n pointers written into it for the values of the attributes.\n You should not modify or free the values that are written\n into this array (although of course, you should free the\n array itself if you allocated it)." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "opts", - "type": "git_attr_options *", - "comment": "The `git_attr_options` to use when querying these attributes." - }, - { - "name": "path", - "type": "const char *", - "comment": "The path inside the repo to check attributes. This\n does not have to exist, but if it does not, then\n it will be treated as a plain file (i.e. not a directory)." - }, - { - "name": "num_attr", - "type": "size_t", - "comment": "The number of attributes being looked up" - }, - { - "name": "names", - "type": "const char **", - "comment": "An array of num_attr strings containing attribute names." - } - ], - "argline": "const char **values_out, git_repository *repo, git_attr_options *opts, const char *path, size_t num_attr, const char **names", - "sig": "const char **::git_repository *::git_attr_options *::const char *::size_t::const char **", - "return": { - "type": "int", - "comment": null - }, - "description": "

Look up a list of git attributes for path with extended options.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_foreach": { - "type": "function", - "file": "git2/attr.h", - "line": 302, - "lineto": 307, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "A combination of GIT_ATTR_CHECK... flags." - }, - { - "name": "path", - "type": "const char *", - "comment": "Path inside the repo to check attributes. This does not have\n to exist, but if it does not, then it will be treated as a\n plain file (i.e. not a directory)." - }, - { - "name": "callback", - "type": "git_attr_foreach_cb", - "comment": "Function to invoke on each attribute name and value.\n See git_attr_foreach_cb." - }, - { - "name": "payload", - "type": "void *", - "comment": "Passed on as extra parameter to callback function." - } - ], - "argline": "git_repository *repo, uint32_t flags, const char *path, git_attr_foreach_cb callback, void *payload", - "sig": "git_repository *::uint32_t::const char *::git_attr_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all the git attributes for a path.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_foreach_ext": { - "type": "function", - "file": "git2/attr.h", - "line": 322, - "lineto": 327, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "opts", - "type": "git_attr_options *", - "comment": "The `git_attr_options` to use when querying these attributes." - }, - { - "name": "path", - "type": "const char *", - "comment": "Path inside the repo to check attributes. This does not have\n to exist, but if it does not, then it will be treated as a\n plain file (i.e. not a directory)." - }, - { - "name": "callback", - "type": "git_attr_foreach_cb", - "comment": "Function to invoke on each attribute name and value.\n See git_attr_foreach_cb." - }, - { - "name": "payload", - "type": "void *", - "comment": "Passed on as extra parameter to callback function." - } - ], - "argline": "git_repository *repo, git_attr_options *opts, const char *path, git_attr_foreach_cb callback, void *payload", - "sig": "git_repository *::git_attr_options *::const char *::git_attr_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all the git attributes for a path with extended options.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_cache_flush": { - "type": "function", - "file": "git2/attr.h", - "line": 340, - "lineto": 341, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the gitattributes cache" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Flush the gitattributes cache.

\n", - "comments": "

Call this if you have reason to believe that the attributes files on disk no longer match the cached contents of memory. This will cause the attributes files to be reloaded the next time that an attribute access function is called.

\n", - "group": "attr" - }, - "git_attr_add_macro": { - "type": "function", - "file": "git2/attr.h", - "line": 353, - "lineto": 356, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "name", - "type": "const char *", - "comment": null - }, - { - "name": "values", - "type": "const char *", - "comment": null - } - ], - "argline": "git_repository *repo, const char *name, const char *values", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Add a macro definition.

\n", - "comments": "

Macros will automatically be loaded from the top level .gitattributes file of the repository (plus the build-in "binary" macro). This function allows you to add others. For example, to add the default macro, you would call:

\n\n
 git_attr_add_macro(repo, "binary", "-diff -crlf");\n
\n", - "group": "attr" - }, - "git_blame_options_init": { - "type": "function", - "file": "git2/blame.h", - "line": 138, - "lineto": 140, - "args": [ - { - "name": "opts", - "type": "git_blame_options *", - "comment": "The `git_blame_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_BLAME_OPTIONS_VERSION`." - } - ], - "argline": "git_blame_options *opts, unsigned int version", - "sig": "git_blame_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_blame_options structure

\n", - "comments": "

Initializes a git_blame_options with default values. Equivalent to creating an instance with GIT_BLAME_OPTIONS_INIT.

\n", - "group": "blame" - }, - "git_blame_get_hunk_count": { - "type": "function", - "file": "git2/blame.h", - "line": 207, - "lineto": 207, - "args": [ - { - "name": "blame", - "type": "git_blame *", - "comment": null - } - ], - "argline": "git_blame *blame", - "sig": "git_blame *", - "return": { - "type": "uint32_t", - "comment": null - }, - "description": "

Gets the number of hunks that exist in the blame structure.

\n", - "comments": "", - "group": "blame" - }, - "git_blame_get_hunk_byindex": { - "type": "function", - "file": "git2/blame.h", - "line": 216, - "lineto": 218, - "args": [ - { - "name": "blame", - "type": "git_blame *", - "comment": "the blame structure to query" - }, - { - "name": "index", - "type": "uint32_t", - "comment": "index of the hunk to retrieve" - } - ], - "argline": "git_blame *blame, uint32_t index", - "sig": "git_blame *::uint32_t", - "return": { - "type": "const git_blame_hunk *", - "comment": " the hunk at the given index, or NULL on error" - }, - "description": "

Gets the blame hunk at the given index.

\n", - "comments": "", - "group": "blame" - }, - "git_blame_get_hunk_byline": { - "type": "function", - "file": "git2/blame.h", - "line": 227, - "lineto": 229, - "args": [ - { - "name": "blame", - "type": "git_blame *", - "comment": "the blame structure to query" - }, - { - "name": "lineno", - "type": "size_t", - "comment": "the (1-based) line number to find a hunk for" - } - ], - "argline": "git_blame *blame, size_t lineno", - "sig": "git_blame *::size_t", - "return": { - "type": "const git_blame_hunk *", - "comment": " the hunk that contains the given line, or NULL on error" - }, - "description": "

Gets the hunk that relates to the given line number in the newest commit.

\n", - "comments": "", - "group": "blame", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_blame_get_hunk_byline-1" - ] - } - }, - "git_blame_file": { - "type": "function", - "file": "git2/blame.h", - "line": 242, - "lineto": 246, - "args": [ - { - "name": "out", - "type": "git_blame **", - "comment": "pointer that will receive the blame object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository whose history is to be walked" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to file to consider" - }, - { - "name": "options", - "type": "git_blame_options *", - "comment": "options for the blame operation. If NULL, this is treated as\n though GIT_BLAME_OPTIONS_INIT were passed." - } - ], - "argline": "git_blame **out, git_repository *repo, const char *path, git_blame_options *options", - "sig": "git_blame **::git_repository *::const char *::git_blame_options *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error.)" - }, - "description": "

Get the blame for a single file.

\n", - "comments": "", - "group": "blame", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_blame_file-2" - ] - } - }, - "git_blame_buffer": { - "type": "function", - "file": "git2/blame.h", - "line": 266, - "lineto": 270, - "args": [ - { - "name": "out", - "type": "git_blame **", - "comment": "pointer that will receive the resulting blame data" - }, - { - "name": "reference", - "type": "git_blame *", - "comment": "cached blame from the history of the file (usually the output\n from git_blame_file)" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "the (possibly) modified contents of the file" - }, - { - "name": "buffer_len", - "type": "size_t", - "comment": "number of valid bytes in the buffer" - } - ], - "argline": "git_blame **out, git_blame *reference, const char *buffer, size_t buffer_len", - "sig": "git_blame **::git_blame *::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error)" - }, - "description": "

Get blame data for a file that has been modified in memory. The reference\n parameter is a pre-calculated blame for the in-odb history of the file. This\n means that once a file blame is completed (which can be expensive), updating\n the buffer blame is very fast.

\n", - "comments": "

Lines that differ between the buffer and the committed version are marked as having a zero OID for their final_commit_id.

\n", - "group": "blame" - }, - "git_blame_free": { - "type": "function", - "file": "git2/blame.h", - "line": 277, - "lineto": 277, - "args": [ - { - "name": "blame", - "type": "git_blame *", - "comment": "the blame structure to free" - } - ], - "argline": "git_blame *blame", - "sig": "git_blame *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free memory allocated by git_blame_file or git_blame_buffer.

\n", - "comments": "", - "group": "blame", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_blame_free-3" - ] - } - }, - "git_blob_lookup": { - "type": "function", - "file": "git2/blob.h", - "line": 33, - "lineto": 33, - "args": [ - { - "name": "blob", - "type": "git_blob **", - "comment": "pointer to the looked up blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the blob." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the blob to locate." - } - ], - "argline": "git_blob **blob, git_repository *repo, const git_oid *id", - "sig": "git_blob **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a blob object from a repository.

\n", - "comments": "", - "group": "blob", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_blob_lookup-4" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_blob_lookup-1" - ] - } - }, - "git_blob_lookup_prefix": { - "type": "function", - "file": "git2/blob.h", - "line": 47, - "lineto": 47, - "args": [ - { - "name": "blob", - "type": "git_blob **", - "comment": "pointer to the looked up blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the blob." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the blob to locate." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - } - ], - "argline": "git_blob **blob, git_repository *repo, const git_oid *id, size_t len", - "sig": "git_blob **::git_repository *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a blob object from a repository,\n given a prefix of its identifier (short id).

\n", - "comments": "", - "group": "blob" - }, - "git_blob_free": { - "type": "function", - "file": "git2/blob.h", - "line": 60, - "lineto": 60, - "args": [ - { - "name": "blob", - "type": "git_blob *", - "comment": "the blob to close" - } - ], - "argline": "git_blob *blob", - "sig": "git_blob *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open blob

\n", - "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a blob. Failure to do so will cause a memory leak.

\n", - "group": "blob", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_blob_free-5" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_blob_free-2" - ] - } - }, - "git_blob_id": { - "type": "function", - "file": "git2/blob.h", - "line": 68, - "lineto": 68, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "a previously loaded blob." - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "const git_oid *", - "comment": " SHA1 hash for this blob." - }, - "description": "

Get the id of a blob.

\n", - "comments": "", - "group": "blob" - }, - "git_blob_owner": { - "type": "function", - "file": "git2/blob.h", - "line": 76, - "lineto": 76, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "A previously loaded blob." - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "git_repository *", - "comment": " Repository that contains this blob." - }, - "description": "

Get the repository that contains the blob.

\n", - "comments": "", - "group": "blob" - }, - "git_blob_rawcontent": { - "type": "function", - "file": "git2/blob.h", - "line": 89, - "lineto": 89, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "pointer to the blob" - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "const void *", - "comment": " the pointer, or NULL on error" - }, - "description": "

Get a read-only buffer with the raw content of a blob.

\n", - "comments": "

A pointer to the raw content of a blob is returned; this pointer is owned internally by the object and shall not be free'd. The pointer may be invalidated at a later time.

\n", - "group": "blob", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_blob_rawcontent-6" - ], - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_blob_rawcontent-1" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_blob_rawcontent-3" - ] - } - }, - "git_blob_rawsize": { - "type": "function", - "file": "git2/blob.h", - "line": 97, - "lineto": 97, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "pointer to the blob" - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "git_object_size_t", - "comment": " size on bytes" - }, - "description": "

Get the size in bytes of the contents of a blob

\n", - "comments": "", - "group": "blob", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_blob_rawsize-7" - ], - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_blob_rawsize-2" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_blob_rawsize-4", - "ex/v1.3.1/general.html#git_blob_rawsize-5" - ] - } - }, - "git_blob_filter_options_init": { - "type": "function", - "file": "git2/blob.h", - "line": 164, - "lineto": 164, - "args": [ - { - "name": "opts", - "type": "git_blob_filter_options *", - "comment": "The `git_blob_filter_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_BLOB_FILTER_OPTIONS_VERSION`." - } - ], - "argline": "git_blob_filter_options *opts, unsigned int version", - "sig": "git_blob_filter_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_blob_filter_options structure

\n", - "comments": "

Initializes a git_blob_filter_options with default values. Equivalent to creating an instance with GIT_BLOB_FILTER_OPTIONS_INIT.

\n", - "group": "blob" - }, - "git_blob_filter": { - "type": "function", - "file": "git2/blob.h", - "line": 188, - "lineto": 192, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The git_buf to be filled in" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "Pointer to the blob" - }, - { - "name": "as_path", - "type": "const char *", - "comment": "Path used for file attribute lookups, etc." - }, - { - "name": "opts", - "type": "git_blob_filter_options *", - "comment": "Options to use for filtering the blob" - } - ], - "argline": "git_buf *out, git_blob *blob, const char *as_path, git_blob_filter_options *opts", - "sig": "git_buf *::git_blob *::const char *::git_blob_filter_options *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Get a buffer with the filtered content of a blob.

\n", - "comments": "

This applies filters as if the blob was being checked out to the working directory under the specified filename. This may apply CRLF filtering or other types of changes depending on the file attributes set for the blob and the content detected in it.

\n\n

The output is written into a git_buf which the caller must free when done (via git_buf_dispose).

\n\n

If no filters need to be applied, then the out buffer will just be populated with a pointer to the raw content of the blob. In that case, be careful to not free the blob until done with the buffer or copy it into memory you own.

\n", - "group": "blob" - }, - "git_blob_create_from_workdir": { - "type": "function", - "file": "git2/blob.h", - "line": 205, - "lineto": 205, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "return the id of the written blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the blob will be written.\n\tthis repository cannot be bare" - }, - { - "name": "relative_path", - "type": "const char *", - "comment": "file from which the blob will be created,\n\trelative to the repository's working dir" - } - ], - "argline": "git_oid *id, git_repository *repo, const char *relative_path", - "sig": "git_oid *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read a file from the working folder of a repository\n and write it to the Object Database as a loose blob

\n", - "comments": "", - "group": "blob" - }, - "git_blob_create_from_disk": { - "type": "function", - "file": "git2/blob.h", - "line": 217, - "lineto": 217, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "return the id of the written blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the blob will be written.\n\tthis repository can be bare or not" - }, - { - "name": "path", - "type": "const char *", - "comment": "file from which the blob will be created" - } - ], - "argline": "git_oid *id, git_repository *repo, const char *path", - "sig": "git_oid *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read a file from the filesystem and write its content\n to the Object Database as a loose blob

\n", - "comments": "", - "group": "blob" - }, - "git_blob_create_from_stream": { - "type": "function", - "file": "git2/blob.h", - "line": 244, - "lineto": 247, - "args": [ - { - "name": "out", - "type": "git_writestream **", - "comment": "the stream into which to write" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where the blob will be written.\n This repository can be bare or not." - }, - { - "name": "hintpath", - "type": "const char *", - "comment": "If not NULL, will be used to select data filters\n to apply onto the content of the blob to be created." - } - ], - "argline": "git_writestream **out, git_repository *repo, const char *hintpath", - "sig": "git_writestream **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or error code" - }, - "description": "

Create a stream to write a new blob into the object db

\n", - "comments": "

This function may need to buffer the data on disk and will in general not be the right choice if you know the size of the data to write. If you have data in memory, use git_blob_create_from_buffer(). If you do not, but know the size of the contents (and don't want/need to perform filtering), use git_odb_open_wstream().

\n\n

Don't close this stream yourself but pass it to git_blob_create_from_stream_commit() to commit the write to the object db and get the object id.

\n\n

If the hintpath parameter is filled, it will be used to determine what git filters should be applied to the object before it is written to the object database.

\n", - "group": "blob" - }, - "git_blob_create_from_stream_commit": { - "type": "function", - "file": "git2/blob.h", - "line": 258, - "lineto": 260, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the id of the new blob" - }, - { - "name": "stream", - "type": "git_writestream *", - "comment": "the stream to close" - } - ], - "argline": "git_oid *out, git_writestream *stream", - "sig": "git_oid *::git_writestream *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Close the stream and write the blob to the object db

\n", - "comments": "

The stream will be closed and freed.

\n", - "group": "blob" - }, - "git_blob_create_from_buffer": { - "type": "function", - "file": "git2/blob.h", - "line": 271, - "lineto": 272, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "return the id of the written blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the blob will be written" - }, - { - "name": "buffer", - "type": "const void *", - "comment": "data to be written into the blob" - }, - { - "name": "len", - "type": "size_t", - "comment": "length of the data" - } - ], - "argline": "git_oid *id, git_repository *repo, const void *buffer, size_t len", - "sig": "git_oid *::git_repository *::const void *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write an in-memory buffer to the ODB as a blob

\n", - "comments": "", - "group": "blob" - }, - "git_blob_is_binary": { - "type": "function", - "file": "git2/blob.h", - "line": 285, - "lineto": 285, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "The blob which content should be analyzed" - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "int", - "comment": " 1 if the content of the blob is detected\n as binary; 0 otherwise." - }, - "description": "

Determine if the blob content is most certainly binary or not.

\n", - "comments": "

The heuristic used to guess if a file is binary is taken from core git: Searching for NUL bytes and looking for a reasonable ratio of printable to non-printable characters among the first 8000 bytes.

\n", - "group": "blob" - }, - "git_blob_dup": { - "type": "function", - "file": "git2/blob.h", - "line": 294, - "lineto": 294, - "args": [ - { - "name": "out", - "type": "git_blob **", - "comment": "Pointer to store the copy of the object" - }, - { - "name": "source", - "type": "git_blob *", - "comment": "Original object to copy" - } - ], - "argline": "git_blob **out, git_blob *source", - "sig": "git_blob **::git_blob *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an in-memory copy of a blob. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "blob" - }, - "git_branch_create": { - "type": "function", - "file": "git2/branch.h", - "line": 50, - "lineto": 55, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer where to store the underlying reference." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "branch_name", - "type": "const char *", - "comment": "Name for the branch; this name is\n validated for consistency. It should also not conflict with\n an already existing branch name." - }, - { - "name": "target", - "type": "const git_commit *", - "comment": "Commit to which this branch should point. This object\n must belong to the given `repo`." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing branch." - } - ], - "argline": "git_reference **out, git_repository *repo, const char *branch_name, const git_commit *target, int force", - "sig": "git_reference **::git_repository *::const char *::const git_commit *::int", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC or an error code.\n A proper reference is written in the refs/heads namespace\n pointing to the provided target commit." - }, - "description": "

Create a new branch pointing at a target commit

\n", - "comments": "

A new direct reference will be created pointing to this target commit. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The returned reference must be freed by the user.

\n\n

The branch name will be checked for validity. See git_tag_create() for rules about valid names.

\n", - "group": "branch" - }, - "git_branch_create_from_annotated": { - "type": "function", - "file": "git2/branch.h", - "line": 68, - "lineto": 73, - "args": [ - { - "name": "ref_out", - "type": "git_reference **", - "comment": null - }, - { - "name": "repository", - "type": "git_repository *", - "comment": null - }, - { - "name": "branch_name", - "type": "const char *", - "comment": null - }, - { - "name": "commit", - "type": "const git_annotated_commit *", - "comment": null - }, - { - "name": "force", - "type": "int", - "comment": null - } - ], - "argline": "git_reference **ref_out, git_repository *repository, const char *branch_name, const git_annotated_commit *commit, int force", - "sig": "git_reference **::git_repository *::const char *::const git_annotated_commit *::int", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a new branch pointing at a target commit

\n", - "comments": "

This behaves like git_branch_create() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_branch_create().

\n", - "group": "branch", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_branch_create_from_annotated-7" - ] - } - }, - "git_branch_delete": { - "type": "function", - "file": "git2/branch.h", - "line": 85, - "lineto": 85, - "args": [ - { - "name": "branch", - "type": "git_reference *", - "comment": "A valid reference representing a branch" - } - ], - "argline": "git_reference *branch", - "sig": "git_reference *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code." - }, - "description": "

Delete an existing branch reference.

\n", - "comments": "

Note that if the deletion succeeds, the reference object will not be valid anymore, and should be freed immediately by the user using git_reference_free().

\n", - "group": "branch" - }, - "git_branch_iterator_new": { - "type": "function", - "file": "git2/branch.h", - "line": 101, - "lineto": 104, - "args": [ - { - "name": "out", - "type": "git_branch_iterator **", - "comment": "the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the branches." - }, - { - "name": "list_flags", - "type": "git_branch_t", - "comment": "Filtering flags for the branch\n listing. Valid values are GIT_BRANCH_LOCAL, GIT_BRANCH_REMOTE\n or GIT_BRANCH_ALL." - } - ], - "argline": "git_branch_iterator **out, git_repository *repo, git_branch_t list_flags", - "sig": "git_branch_iterator **::git_repository *::git_branch_t", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Create an iterator which loops over the requested branches.

\n", - "comments": "", - "group": "branch" - }, - "git_branch_next": { - "type": "function", - "file": "git2/branch.h", - "line": 114, - "lineto": 114, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "the reference" - }, - { - "name": "out_type", - "type": "git_branch_t *", - "comment": "the type of branch (local or remote-tracking)" - }, - { - "name": "iter", - "type": "git_branch_iterator *", - "comment": "the branch iterator" - } - ], - "argline": "git_reference **out, git_branch_t *out_type, git_branch_iterator *iter", - "sig": "git_reference **::git_branch_t *::git_branch_iterator *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ITEROVER if there are no more branches or an error code." - }, - "description": "

Retrieve the next branch from the iterator

\n", - "comments": "", - "group": "branch" - }, - "git_branch_iterator_free": { - "type": "function", - "file": "git2/branch.h", - "line": 121, - "lineto": 121, - "args": [ - { - "name": "iter", - "type": "git_branch_iterator *", - "comment": "the iterator to free" - } - ], - "argline": "git_branch_iterator *iter", - "sig": "git_branch_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a branch iterator

\n", - "comments": "", - "group": "branch" - }, - "git_branch_move": { - "type": "function", - "file": "git2/branch.h", - "line": 144, - "lineto": 148, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "New reference object for the updated name." - }, - { - "name": "branch", - "type": "git_reference *", - "comment": "Current underlying reference of the branch." - }, - { - "name": "new_branch_name", - "type": "const char *", - "comment": "Target name of the branch once the move\n is performed; this name is validated for consistency." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing branch." - } - ], - "argline": "git_reference **out, git_reference *branch, const char *new_branch_name, int force", - "sig": "git_reference **::git_reference *::const char *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code." - }, - "description": "

Move/rename an existing local branch reference.

\n", - "comments": "

The new branch name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

Note that if the move succeeds, the old reference object will not + be valid anymore, and should be freed immediately by the user using + git_reference_free().

\n", - "group": "branch" - }, - "git_branch_lookup": { - "type": "function", - "file": "git2/branch.h", - "line": 168, - "lineto": 172, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer to the looked-up branch reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to look up the branch" - }, - { - "name": "branch_name", - "type": "const char *", - "comment": "Name of the branch to be looked-up;\n this name is validated for consistency." - }, - { - "name": "branch_type", - "type": "git_branch_t", - "comment": "Type of the considered branch. This should\n be valued with either GIT_BRANCH_LOCAL or GIT_BRANCH_REMOTE." - } - ], - "argline": "git_reference **out, git_repository *repo, const char *branch_name, git_branch_t branch_type", - "sig": "git_reference **::git_repository *::const char *::git_branch_t", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND when no matching branch\n exists, GIT_EINVALIDSPEC, otherwise an error code." - }, - "description": "

Lookup a branch by its name in a repository.

\n", - "comments": "

The generated reference must be freed by the user. The branch name will be checked for validity.

\n", - "group": "branch" - }, - "git_branch_name": { - "type": "function", - "file": "git2/branch.h", - "line": 189, - "lineto": 191, - "args": [ - { - "name": "out", - "type": "const char **", - "comment": "Pointer to the abbreviated reference name.\n Owned by ref, do not free." - }, - { - "name": "ref", - "type": "const git_reference *", - "comment": "A reference object, ideally pointing to a branch" - } - ], - "argline": "const char **out, const git_reference *ref", - "sig": "const char **::const git_reference *", - "return": { - "type": "int", - "comment": " 0 on success; GIT_EINVALID if the reference isn't either a local or\n remote branch, otherwise an error code." - }, - "description": "

Get the branch name

\n", - "comments": "

Given a reference object, this will check that it really is a branch (ie. it lives under "refs/heads/" or "refs/remotes/"), and return the branch part of it.

\n", - "group": "branch", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_branch_name-4" - ] - } - }, - "git_branch_upstream": { - "type": "function", - "file": "git2/branch.h", - "line": 207, - "lineto": 209, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer where to store the retrieved reference." - }, - { - "name": "branch", - "type": "const git_reference *", - "comment": "Current underlying reference of the branch." - } - ], - "argline": "git_reference **out, const git_reference *branch", - "sig": "git_reference **::const git_reference *", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND when no remote tracking\n reference exists, otherwise an error code." - }, - "description": "

Get the upstream of a branch

\n", - "comments": "

Given a reference, this will return a new reference object corresponding to its remote tracking branch. The reference must be a local branch.

\n", - "group": "branch" - }, - "git_branch_set_upstream": { - "type": "function", - "file": "git2/branch.h", - "line": 226, - "lineto": 228, - "args": [ - { - "name": "branch", - "type": "git_reference *", - "comment": "the branch to configure" - }, - { - "name": "branch_name", - "type": "const char *", - "comment": "remote-tracking or local branch to set as upstream." - } - ], - "argline": "git_reference *branch, const char *branch_name", - "sig": "git_reference *::const char *", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name`\n or an error code" - }, - "description": "

Set a branch's upstream branch

\n", - "comments": "

This will update the configuration to set the branch named branch_name as the upstream of branch. Pass a NULL name to unset the upstream information.

\n", - "group": "branch" - }, - "git_branch_upstream_name": { - "type": "function", - "file": "git2/branch.h", - "line": 244, - "lineto": 247, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer into which the name will be written." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the branches live." - }, - { - "name": "refname", - "type": "const char *", - "comment": "reference name of the local branch." - } - ], - "argline": "git_buf *out, git_repository *repo, const char *refname", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND when no remote tracking reference exists,\n or an error code." - }, - "description": "

Get the upstream name of a branch

\n", - "comments": "

Given a local branch, this will return its remote-tracking branch information, as a full reference name, ie. "feature/nice" would become "refs/remote/origin/feature/nice", depending on that branch's configuration.

\n", - "group": "branch" - }, - "git_branch_is_head": { - "type": "function", - "file": "git2/branch.h", - "line": 257, - "lineto": 258, - "args": [ - { - "name": "branch", - "type": "const git_reference *", - "comment": "A reference to a local branch." - } - ], - "argline": "const git_reference *branch", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 if HEAD points at the branch, 0 if it isn't, or a negative value\n \t\t as an error code." - }, - "description": "

Determine if HEAD points to the given branch

\n", - "comments": "", - "group": "branch" - }, - "git_branch_is_checked_out": { - "type": "function", - "file": "git2/branch.h", - "line": 270, - "lineto": 271, - "args": [ - { - "name": "branch", - "type": "const git_reference *", - "comment": "A reference to a local branch." - } - ], - "argline": "const git_reference *branch", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 if branch is checked out, 0 if it isn't, an error code otherwise." - }, - "description": "

Determine if any HEAD points to the current branch

\n", - "comments": "

This will iterate over all known linked repositories (usually in the form of worktrees) and report whether any HEAD is pointing at the current branch.

\n", - "group": "branch" - }, - "git_branch_remote_name": { - "type": "function", - "file": "git2/branch.h", - "line": 289, - "lineto": 292, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The buffer into which the name will be written." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository where the branch lives." - }, - { - "name": "refname", - "type": "const char *", - "comment": "complete name of the remote tracking branch." - } - ], - "argline": "git_buf *out, git_repository *repo, const char *refname", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND when no matching remote was found,\n GIT_EAMBIGUOUS when the branch maps to several remotes,\n otherwise an error code." - }, - "description": "

Find the remote name of a remote-tracking branch

\n", - "comments": "

This will return the name of the remote whose fetch refspec is matching the given branch. E.g. given a branch "refs/remotes/test/master", it will extract the "test" part. If refspecs from multiple remotes match, the function will return GIT_EAMBIGUOUS.

\n", - "group": "branch" - }, - "git_branch_upstream_remote": { - "type": "function", - "file": "git2/branch.h", - "line": 305, - "lineto": 305, - "args": [ - { - "name": "buf", - "type": "git_buf *", - "comment": "the buffer into which to write the name" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to look" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the full name of the branch" - } - ], - "argline": "git_buf *buf, git_repository *repo, const char *refname", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Retrieve the upstream remote of a local branch

\n", - "comments": "

This will return the currently configured "branch.*.remote" for a given branch. This branch must be local.

\n", - "group": "branch" - }, - "git_branch_upstream_merge": { - "type": "function", - "file": "git2/branch.h", - "line": 318, - "lineto": 318, - "args": [ - { - "name": "buf", - "type": "git_buf *", - "comment": "the buffer into which to write the name" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to look" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the full name of the branch" - } - ], - "argline": "git_buf *buf, git_repository *repo, const char *refname", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Retrieve the upstream merge of a local branch

\n", - "comments": "

This will return the currently configured "branch.*.merge" for a given branch. This branch must be local.

\n", - "group": "branch" - }, - "git_branch_name_is_valid": { - "type": "function", - "file": "git2/branch.h", - "line": 330, - "lineto": 330, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "output pointer to set with validity of given branch name" - }, - { - "name": "name", - "type": "const char *", - "comment": "a branch name to test" - } - ], - "argline": "int *valid, const char *name", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Determine whether a branch name is valid, meaning that (when prefixed\n with refs/heads/) that it is a valid reference name, and that any\n additional branch name restrictions are imposed (eg, it cannot start\n with a -).

\n", - "comments": "", - "group": "branch" - }, - "git_buf_dispose": { - "type": "function", - "file": "git2/buffer.h", - "line": 78, - "lineto": 78, - "args": [ - { - "name": "buffer", - "type": "git_buf *", - "comment": "The buffer to deallocate" - } - ], - "argline": "git_buf *buffer", - "sig": "git_buf *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory referred to by the git_buf.

\n", - "comments": "

Note that this does not free the git_buf itself, just the memory pointed to by buffer->ptr. This will not free the memory if it looks like it was not allocated internally, but it will clear the buffer back to the empty state.

\n", - "group": "buf", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_buf_dispose-1", - "ex/v1.3.1/diff.html#git_buf_dispose-2" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_buf_dispose-1" - ] - } - }, - "git_buf_grow": { - "type": "function", - "file": "git2/deprecated.h", - "line": 220, - "lineto": 220, - "args": [ - { - "name": "buffer", - "type": "git_buf *", - "comment": "The buffer to be resized; may or may not be allocated yet" - }, - { - "name": "target_size", - "type": "size_t", - "comment": "The desired available size" - } - ], - "argline": "git_buf *buffer, size_t target_size", - "sig": "git_buf *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, -1 on allocation failure" - }, - "description": "

Resize the buffer allocation to make more space.

\n", - "comments": "

This will attempt to grow the buffer to accommodate the target size.

\n\n

If the buffer refers to memory that was not allocated by libgit2 (i.e. the asize field is zero), then ptr will be replaced with a newly allocated block of data. Be careful so that memory allocated by the caller is not lost. As a special variant, if you pass target_size as 0 and the memory is not allocated by libgit2, this will allocate a new buffer of size size and copy the external data into it.

\n\n

Currently, this will never shrink a buffer, only expand it.

\n\n

If the allocation fails, this will return an error and the buffer will be marked as invalid for future operations, invaliding the contents.

\n", - "group": "buf" - }, - "git_buf_set": { - "type": "function", - "file": "git2/deprecated.h", - "line": 230, - "lineto": 231, - "args": [ - { - "name": "buffer", - "type": "git_buf *", - "comment": "The buffer to set" - }, - { - "name": "data", - "type": "const void *", - "comment": "The data to copy into the buffer" - }, - { - "name": "datalen", - "type": "size_t", - "comment": "The length of the data to copy into the buffer" - } - ], - "argline": "git_buf *buffer, const void *data, size_t datalen", - "sig": "git_buf *::const void *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, -1 on allocation failure" - }, - "description": "

Set buffer to a copy of some raw data.

\n", - "comments": "", - "group": "buf" - }, - "git_buf_is_binary": { - "type": "function", - "file": "git2/deprecated.h", - "line": 239, - "lineto": 239, - "args": [ - { - "name": "buf", - "type": "const git_buf *", - "comment": "Buffer to check" - } - ], - "argline": "const git_buf *buf", - "sig": "const git_buf *", - "return": { - "type": "int", - "comment": " 1 if buffer looks like non-text data" - }, - "description": "

Check quickly if buffer looks like it contains binary data

\n", - "comments": "", - "group": "buf" - }, - "git_buf_contains_nul": { - "type": "function", - "file": "git2/deprecated.h", - "line": 247, - "lineto": 247, - "args": [ - { - "name": "buf", - "type": "const git_buf *", - "comment": "Buffer to check" - } - ], - "argline": "const git_buf *buf", - "sig": "const git_buf *", - "return": { - "type": "int", - "comment": " 1 if buffer contains a NUL byte" - }, - "description": "

Check quickly if buffer contains a NUL byte

\n", - "comments": "", - "group": "buf" - }, - "git_checkout_options_init": { - "type": "function", - "file": "git2/checkout.h", - "line": 357, - "lineto": 359, - "args": [ - { - "name": "opts", - "type": "git_checkout_options *", - "comment": "The `git_checkout_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_CHECKOUT_OPTIONS_VERSION`." - } - ], - "argline": "git_checkout_options *opts, unsigned int version", - "sig": "git_checkout_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_checkout_options structure

\n", - "comments": "

Initializes a git_checkout_options with default values. Equivalent to creating an instance with GIT_CHECKOUT_OPTIONS_INIT.

\n", - "group": "checkout" - }, - "git_checkout_head": { - "type": "function", - "file": "git2/checkout.h", - "line": 378, - "lineto": 380, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository to check out (must be non-bare)" - }, - { - "name": "opts", - "type": "const git_checkout_options *", - "comment": "specifies checkout options (may be NULL)" - } - ], - "argline": "git_repository *repo, const git_checkout_options *opts", - "sig": "git_repository *::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNBORNBRANCH if HEAD points to a non\n existing branch, non-zero value returned by `notify_cb`, or\n other error code \n<\n 0 (use git_error_last for error details)" - }, - "description": "

Updates files in the index and the working tree to match the content of\n the commit pointed at by HEAD.

\n", - "comments": "

Note that this is not the correct mechanism used to switch branches; do not change your HEAD and then call this method, that would leave you with checkout conflicts since your working directory would then appear to be dirty. Instead, checkout the target of the branch and then update HEAD using git_repository_set_head to point to the branch you checked out.

\n", - "group": "checkout" - }, - "git_checkout_index": { - "type": "function", - "file": "git2/checkout.h", - "line": 391, - "lineto": 394, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository into which to check out (must be non-bare)" - }, - { - "name": "index", - "type": "git_index *", - "comment": "index to be checked out (or NULL to use repository index)" - }, - { - "name": "opts", - "type": "const git_checkout_options *", - "comment": "specifies checkout options (may be NULL)" - } - ], - "argline": "git_repository *repo, git_index *index, const git_checkout_options *opts", - "sig": "git_repository *::git_index *::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero return value from `notify_cb`, or error\n code \n<\n 0 (use git_error_last for error details)" - }, - "description": "

Updates files in the working tree to match the content of the index.

\n", - "comments": "", - "group": "checkout" - }, - "git_checkout_tree": { - "type": "function", - "file": "git2/checkout.h", - "line": 407, - "lineto": 410, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository to check out (must be non-bare)" - }, - { - "name": "treeish", - "type": "const git_object *", - "comment": "a commit, tag or tree which content will be used to update\n the working directory (or NULL to use HEAD)" - }, - { - "name": "opts", - "type": "const git_checkout_options *", - "comment": "specifies checkout options (may be NULL)" - } - ], - "argline": "git_repository *repo, const git_object *treeish, const git_checkout_options *opts", - "sig": "git_repository *::const git_object *::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero return value from `notify_cb`, or error\n code \n<\n 0 (use git_error_last for error details)" - }, - "description": "

Updates files in the index and working tree to match the content of the\n tree pointed at by the treeish.

\n", - "comments": "", - "group": "checkout", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_checkout_tree-8" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_checkout_tree-5" - ] - } - }, - "git_cherrypick_options_init": { - "type": "function", - "file": "git2/cherrypick.h", - "line": 49, - "lineto": 51, - "args": [ - { - "name": "opts", - "type": "git_cherrypick_options *", - "comment": "The `git_cherrypick_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_CHERRYPICK_OPTIONS_VERSION`." - } - ], - "argline": "git_cherrypick_options *opts, unsigned int version", - "sig": "git_cherrypick_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_cherrypick_options structure

\n", - "comments": "

Initializes a git_cherrypick_options with default values. Equivalent to creating an instance with GIT_CHERRYPICK_OPTIONS_INIT.

\n", - "group": "cherrypick" - }, - "git_cherrypick_commit": { - "type": "function", - "file": "git2/cherrypick.h", - "line": 67, - "lineto": 73, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "pointer to store the index result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository that contains the given commits" - }, - { - "name": "cherrypick_commit", - "type": "git_commit *", - "comment": "the commit to cherry-pick" - }, - { - "name": "our_commit", - "type": "git_commit *", - "comment": "the commit to cherry-pick against (eg, HEAD)" - }, - { - "name": "mainline", - "type": "unsigned int", - "comment": "the parent of the `cherrypick_commit`, if it is a merge" - }, - { - "name": "merge_options", - "type": "const git_merge_options *", - "comment": "the merge options (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, git_commit *cherrypick_commit, git_commit *our_commit, unsigned int mainline, const git_merge_options *merge_options", - "sig": "git_index **::git_repository *::git_commit *::git_commit *::unsigned int::const git_merge_options *", - "return": { - "type": "int", - "comment": " zero on success, -1 on failure." - }, - "description": "

Cherry-picks the given commit against the given "our" commit, producing an\n index that reflects the result of the cherry-pick.

\n", - "comments": "

The returned index must be freed explicitly with git_index_free.

\n", - "group": "cherrypick" - }, - "git_cherrypick": { - "type": "function", - "file": "git2/cherrypick.h", - "line": 83, - "lineto": 86, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to cherry-pick" - }, - { - "name": "commit", - "type": "git_commit *", - "comment": "the commit to cherry-pick" - }, - { - "name": "cherrypick_options", - "type": "const git_cherrypick_options *", - "comment": "the cherry-pick options (or null for defaults)" - } - ], - "argline": "git_repository *repo, git_commit *commit, const git_cherrypick_options *cherrypick_options", - "sig": "git_repository *::git_commit *::const git_cherrypick_options *", - "return": { - "type": "int", - "comment": " zero on success, -1 on failure." - }, - "description": "

Cherry-pick the given commit, producing changes in the index and working directory.

\n", - "comments": "", - "group": "cherrypick" - }, - "git_clone_options_init": { - "type": "function", - "file": "git2/clone.h", - "line": 181, - "lineto": 183, - "args": [ - { - "name": "opts", - "type": "git_clone_options *", - "comment": "The `git_clone_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_CLONE_OPTIONS_VERSION`." - } - ], - "argline": "git_clone_options *opts, unsigned int version", - "sig": "git_clone_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_clone_options structure

\n", - "comments": "

Initializes a git_clone_options with default values. Equivalent to creating an instance with GIT_CLONE_OPTIONS_INIT.

\n", - "group": "clone" - }, - "git_clone": { - "type": "function", - "file": "git2/clone.h", - "line": 201, - "lineto": 205, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "pointer that will receive the resulting repository object" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote repository to clone" - }, - { - "name": "local_path", - "type": "const char *", - "comment": "local directory to clone to" - }, - { - "name": "options", - "type": "const git_clone_options *", - "comment": "configuration options for the clone. If NULL, the\n function works as though GIT_OPTIONS_INIT were passed." - } - ], - "argline": "git_repository **out, const char *url, const char *local_path, const git_clone_options *options", - "sig": "git_repository **::const char *::const char *::const git_clone_options *", - "return": { - "type": "int", - "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)" - }, - "description": "

Clone a remote repository.

\n", - "comments": "

By default this creates its repository and initial remote to match git's defaults. You can use the options in the callback to customize how these are created.

\n", - "group": "clone" - }, - "git_commit_lookup": { - "type": "function", - "file": "git2/commit.h", - "line": 36, - "lineto": 37, - "args": [ - { - "name": "commit", - "type": "git_commit **", - "comment": "pointer to the looked up commit" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the commit." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the commit to locate. If the object is\n\t\tan annotated tag it will be peeled back to the commit." - } - ], - "argline": "git_commit **commit, git_repository *repo, const git_oid *id", - "sig": "git_commit **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a commit object from a repository.

\n", - "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", - "group": "commit", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_commit_lookup-9" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_commit_lookup-6", - "ex/v1.3.1/general.html#git_commit_lookup-7", - "ex/v1.3.1/general.html#git_commit_lookup-8" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_lookup-1" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_commit_lookup-6" - ] - } - }, - "git_commit_lookup_prefix": { - "type": "function", - "file": "git2/commit.h", - "line": 55, - "lineto": 56, - "args": [ - { - "name": "commit", - "type": "git_commit **", - "comment": "pointer to the looked up commit" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the commit." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the commit to locate. If the object is\n\t\tan annotated tag it will be peeled back to the commit." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - } - ], - "argline": "git_commit **commit, git_repository *repo, const git_oid *id, size_t len", - "sig": "git_commit **::git_repository *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a commit object from a repository, given a prefix of its\n identifier (short id).

\n", - "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", - "group": "commit" - }, - "git_commit_free": { - "type": "function", - "file": "git2/commit.h", - "line": 70, - "lineto": 70, - "args": [ - { - "name": "commit", - "type": "git_commit *", - "comment": "the commit to close" - } - ], - "argline": "git_commit *commit", - "sig": "git_commit *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open commit

\n", - "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a commit. Failure to do so will cause a memory leak.

\n", - "group": "commit", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_commit_free-10" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_commit_free-9", - "ex/v1.3.1/general.html#git_commit_free-10", - "ex/v1.3.1/general.html#git_commit_free-11", - "ex/v1.3.1/general.html#git_commit_free-12", - "ex/v1.3.1/general.html#git_commit_free-13" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_free-2", - "ex/v1.3.1/log.html#git_commit_free-3", - "ex/v1.3.1/log.html#git_commit_free-4", - "ex/v1.3.1/log.html#git_commit_free-5" - ] - } - }, - "git_commit_id": { - "type": "function", - "file": "git2/commit.h", - "line": 78, - "lineto": 78, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const git_oid *", - "comment": " object identity for the commit." - }, - "description": "

Get the id of a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_commit_id-14" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_id-6" - ] - } - }, - "git_commit_owner": { - "type": "function", - "file": "git2/commit.h", - "line": 86, - "lineto": 86, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "A previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "git_repository *", - "comment": " Repository that contains this commit." - }, - "description": "

Get the repository that contains the commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_commit_owner-7", - "ex/v1.3.1/log.html#git_commit_owner-8" - ] - } - }, - "git_commit_message_encoding": { - "type": "function", - "file": "git2/commit.h", - "line": 98, - "lineto": 98, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const char *", - "comment": " NULL, or the encoding" - }, - "description": "

Get the encoding for the message of a commit,\n as a string representing a standard encoding name.

\n", - "comments": "

The encoding may be NULL if the encoding header in the commit is missing; in that case UTF-8 is assumed.

\n", - "group": "commit" - }, - "git_commit_message": { - "type": "function", - "file": "git2/commit.h", - "line": 109, - "lineto": 109, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const char *", - "comment": " the message of a commit" - }, - "description": "

Get the full message of a commit.

\n", - "comments": "

The returned message will be slightly prettified by removing any potential leading newlines.

\n", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_commit_message-3", - "ex/v1.3.1/cat-file.html#git_commit_message-4" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_commit_message-15", - "ex/v1.3.1/general.html#git_commit_message-16", - "ex/v1.3.1/general.html#git_commit_message-17" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_message-9", - "ex/v1.3.1/log.html#git_commit_message-10", - "ex/v1.3.1/log.html#git_commit_message-11" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_commit_message-2" - ] - } - }, - "git_commit_message_raw": { - "type": "function", - "file": "git2/commit.h", - "line": 117, - "lineto": 117, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const char *", - "comment": " the raw message of a commit" - }, - "description": "

Get the full raw message of a commit.

\n", - "comments": "", - "group": "commit" - }, - "git_commit_summary": { - "type": "function", - "file": "git2/commit.h", - "line": 128, - "lineto": 128, - "args": [ - { - "name": "commit", - "type": "git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "git_commit *commit", - "sig": "git_commit *", - "return": { - "type": "const char *", - "comment": " the summary of a commit or NULL on error" - }, - "description": "

Get the short "summary" of the git commit message.

\n", - "comments": "

The returned message is the summary of the commit, comprising the first paragraph of the message with whitespace trimmed and squashed.

\n", - "group": "commit" - }, - "git_commit_body": { - "type": "function", - "file": "git2/commit.h", - "line": 141, - "lineto": 141, - "args": [ - { - "name": "commit", - "type": "git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "git_commit *commit", - "sig": "git_commit *", - "return": { - "type": "const char *", - "comment": " the body of a commit or NULL when no the message only\n consists of a summary" - }, - "description": "

Get the long "body" of the git commit message.

\n", - "comments": "

The returned message is the body of the commit, comprising everything but the first paragraph of the message. Leading and trailing whitespaces are trimmed.

\n", - "group": "commit" - }, - "git_commit_time": { - "type": "function", - "file": "git2/commit.h", - "line": 149, - "lineto": 149, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "git_time_t", - "comment": " the time of a commit" - }, - "description": "

Get the commit time (i.e. committer time) of a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_commit_time-18", - "ex/v1.3.1/general.html#git_commit_time-19" - ] - } - }, - "git_commit_time_offset": { - "type": "function", - "file": "git2/commit.h", - "line": 157, - "lineto": 157, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "int", - "comment": " positive or negative timezone offset, in minutes from UTC" - }, - "description": "

Get the commit timezone offset (i.e. committer's preferred timezone) of a commit.

\n", - "comments": "", - "group": "commit" - }, - "git_commit_committer": { - "type": "function", - "file": "git2/commit.h", - "line": 165, - "lineto": 165, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const git_signature *", - "comment": " the committer of a commit" - }, - "description": "

Get the committer of a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_commit_committer-5" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_commit_committer-20" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_committer-12" - ] - } - }, - "git_commit_author": { - "type": "function", - "file": "git2/commit.h", - "line": 173, - "lineto": 173, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const git_signature *", - "comment": " the author of a commit" - }, - "description": "

Get the author of a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_commit_author-6" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_commit_author-21", - "ex/v1.3.1/general.html#git_commit_author-22" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_author-13", - "ex/v1.3.1/log.html#git_commit_author-14" - ] - } - }, - "git_commit_committer_with_mailmap": { - "type": "function", - "file": "git2/commit.h", - "line": 186, - "lineto": 187, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "a pointer to store the resolved signature." - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "mailmap", - "type": "const git_mailmap *", - "comment": "the mailmap to resolve with. (may be NULL)" - } - ], - "argline": "git_signature **out, const git_commit *commit, const git_mailmap *mailmap", - "sig": "git_signature **::const git_commit *::const git_mailmap *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the committer of a commit, using the mailmap to map names and email\n addresses to canonical real names and email addresses.

\n", - "comments": "

Call git_signature_free to free the signature.

\n", - "group": "commit" - }, - "git_commit_author_with_mailmap": { - "type": "function", - "file": "git2/commit.h", - "line": 200, - "lineto": 201, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "a pointer to store the resolved signature." - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "mailmap", - "type": "const git_mailmap *", - "comment": "the mailmap to resolve with. (may be NULL)" - } - ], - "argline": "git_signature **out, const git_commit *commit, const git_mailmap *mailmap", - "sig": "git_signature **::const git_commit *::const git_mailmap *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the author of a commit, using the mailmap to map names and email\n addresses to canonical real names and email addresses.

\n", - "comments": "

Call git_signature_free to free the signature.

\n", - "group": "commit" - }, - "git_commit_raw_header": { - "type": "function", - "file": "git2/commit.h", - "line": 209, - "lineto": 209, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit" - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const char *", - "comment": " the header text of the commit" - }, - "description": "

Get the full raw text of the commit header.

\n", - "comments": "", - "group": "commit" - }, - "git_commit_tree": { - "type": "function", - "file": "git2/commit.h", - "line": 218, - "lineto": 218, - "args": [ - { - "name": "tree_out", - "type": "git_tree **", - "comment": "pointer where to store the tree object" - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "git_tree **tree_out, const git_commit *commit", - "sig": "git_tree **::const git_commit *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the tree pointed to by a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_commit_tree-15", - "ex/v1.3.1/log.html#git_commit_tree-16", - "ex/v1.3.1/log.html#git_commit_tree-17", - "ex/v1.3.1/log.html#git_commit_tree-18", - "ex/v1.3.1/log.html#git_commit_tree-19" - ] - } - }, - "git_commit_tree_id": { - "type": "function", - "file": "git2/commit.h", - "line": 228, - "lineto": 228, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const git_oid *", - "comment": " the id of tree pointed to by commit." - }, - "description": "

Get the id of the tree pointed to by a commit. This differs from\n git_commit_tree in that no attempts are made to fetch an object\n from the ODB.

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_commit_tree_id-7" - ] - } - }, - "git_commit_parentcount": { - "type": "function", - "file": "git2/commit.h", - "line": 236, - "lineto": 236, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "unsigned int", - "comment": " integer of count of parents" - }, - "description": "

Get the number of parents of this commit

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_commit_parentcount-8" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_commit_parentcount-23" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_parentcount-20", - "ex/v1.3.1/log.html#git_commit_parentcount-21" - ] - } - }, - "git_commit_parent": { - "type": "function", - "file": "git2/commit.h", - "line": 246, - "lineto": 249, - "args": [ - { - "name": "out", - "type": "git_commit **", - "comment": "Pointer where to store the parent commit" - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "n", - "type": "unsigned int", - "comment": "the position of the parent (from 0 to `parentcount`)" - } - ], - "argline": "git_commit **out, const git_commit *commit, unsigned int n", - "sig": "git_commit **::const git_commit *::unsigned int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the specified parent of the commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_commit_parent-24" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_parent-22", - "ex/v1.3.1/log.html#git_commit_parent-23" - ] - } - }, - "git_commit_parent_id": { - "type": "function", - "file": "git2/commit.h", - "line": 260, - "lineto": 262, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "n", - "type": "unsigned int", - "comment": "the position of the parent (from 0 to `parentcount`)" - } - ], - "argline": "const git_commit *commit, unsigned int n", - "sig": "const git_commit *::unsigned int", - "return": { - "type": "const git_oid *", - "comment": " the id of the parent, NULL on error." - }, - "description": "

Get the oid of a specified parent for a commit. This is different from\n git_commit_parent, which will attempt to load the parent commit from\n the ODB.

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_commit_parent_id-9" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_commit_parent_id-24" - ] - } - }, - "git_commit_nth_gen_ancestor": { - "type": "function", - "file": "git2/commit.h", - "line": 278, - "lineto": 281, - "args": [ - { - "name": "ancestor", - "type": "git_commit **", - "comment": "Pointer where to store the ancestor commit" - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "n", - "type": "unsigned int", - "comment": "the requested generation" - } - ], - "argline": "git_commit **ancestor, const git_commit *commit, unsigned int n", - "sig": "git_commit **::const git_commit *::unsigned int", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND if no matching ancestor exists\n or an error code" - }, - "description": "

Get the commit object that is the \n<n

\n\n
\n

th generation ancestor\n of the named commit object, following only the first parents.\n The returned commit has to be freed by the caller.

\n
\n", - "comments": "

Passing 0 as the generation number returns another instance of the base commit itself.

\n", - "group": "commit" - }, - "git_commit_header_field": { - "type": "function", - "file": "git2/commit.h", - "line": 293, - "lineto": 293, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer to fill; existing content will be\n overwritten" - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "the commit to look in" - }, - { - "name": "field", - "type": "const char *", - "comment": "the header field to return" - } - ], - "argline": "git_buf *out, const git_commit *commit, const char *field", - "sig": "git_buf *::const git_commit *::const char *", - "return": { - "type": "int", - "comment": " 0 on succeess, GIT_ENOTFOUND if the field does not exist,\n or an error code" - }, - "description": "

Get an arbitrary header field

\n", - "comments": "", - "group": "commit" - }, - "git_commit_extract_signature": { - "type": "function", - "file": "git2/commit.h", - "line": 313, - "lineto": 313, - "args": [ - { - "name": "signature", - "type": "git_buf *", - "comment": "the signature block; existing content will be\n overwritten" - }, - { - "name": "signed_data", - "type": "git_buf *", - "comment": "signed data; this is the commit contents minus the signature block;\n existing content will be overwritten" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which the commit exists" - }, - { - "name": "commit_id", - "type": "git_oid *", - "comment": "the commit from which to extract the data" - }, - { - "name": "field", - "type": "const char *", - "comment": "the name of the header field containing the signature\n block; pass `NULL` to extract the default 'gpgsig'" - } - ], - "argline": "git_buf *signature, git_buf *signed_data, git_repository *repo, git_oid *commit_id, const char *field", - "sig": "git_buf *::git_buf *::git_repository *::git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if the id is not for a commit\n or the commit does not have a signature." - }, - "description": "

Extract the signature from a commit

\n", - "comments": "

If the id is not for a commit, the error class will be GIT_ERROR_INVALID. If the commit does not have a signature, the error class will be GIT_ERROR_OBJECT.

\n", - "group": "commit" - }, - "git_commit_create": { - "type": "function", - "file": "git2/commit.h", - "line": 359, - "lineto": 369, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "Pointer in which to store the OID of the newly created commit" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the commit" - }, - { - "name": "update_ref", - "type": "const char *", - "comment": "If not NULL, name of the reference that\n\twill be updated to point to this commit. If the reference\n\tis not direct, it will be resolved to a direct reference.\n\tUse \"HEAD\" to update the HEAD of the current branch and\n\tmake it point to this commit. If the reference doesn't\n\texist yet, it will be created. If it does exist, the first\n\tparent must be the tip of this branch." - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "Signature with author and author time of commit" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "Signature with committer and * commit time of commit" - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." - }, - { - "name": "message", - "type": "const char *", - "comment": "Full message for this commit" - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." - }, - { - "name": "parent_count", - "type": "size_t", - "comment": "Number of parents for this commit" - }, - { - "name": "parents", - "type": "const git_commit *[]", - "comment": "Array of `parent_count` pointers to `git_commit`\n objects that will be used as the parents for this commit. This\n array may be NULL if `parent_count` is 0 (root commit). All the\n given commits must be owned by the `repo`." - } - ], - "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents", - "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]", - "return": { - "type": "int", - "comment": " 0 or an error code\n\tThe created commit will be written to the Object Database and\n\tthe given reference will be updated to point to it" - }, - "description": "

Create new commit in the repository from a list of git_object pointers

\n", - "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n", - "group": "commit", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_commit_create-7" - ] - } - }, - "git_commit_create_v": { - "type": "function", - "file": "git2/commit.h", - "line": 385, - "lineto": 395, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": null - }, - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "update_ref", - "type": "const char *", - "comment": null - }, - { - "name": "author", - "type": "const git_signature *", - "comment": null - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": null - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": null - }, - { - "name": "message", - "type": "const char *", - "comment": null - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": null - }, - { - "name": "parent_count", - "type": "size_t", - "comment": null - } - ], - "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count", - "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create new commit in the repository using a variable argument list.

\n", - "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n\n

The parents for the commit are specified as a variable list of pointers to const git_commit *. Note that this is a convenience method which may not be safe to export for certain languages or compilers

\n\n

All other parameters remain the same as git_commit_create().

\n", - "group": "commit", - "examples": { - "commit.c": [ - "ex/v1.3.1/commit.html#git_commit_create_v-1" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_commit_create_v-25" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_commit_create_v-1" - ] - } - }, - "git_commit_amend": { - "type": "function", - "file": "git2/commit.h", - "line": 418, - "lineto": 426, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": null - }, - { - "name": "commit_to_amend", - "type": "const git_commit *", - "comment": null - }, - { - "name": "update_ref", - "type": "const char *", - "comment": null - }, - { - "name": "author", - "type": "const git_signature *", - "comment": null - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": null - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": null - }, - { - "name": "message", - "type": "const char *", - "comment": null - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": null - } - ], - "argline": "git_oid *id, const git_commit *commit_to_amend, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree", - "sig": "git_oid *::const git_commit *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Amend an existing commit by replacing only non-NULL values.

\n", - "comments": "

This creates a new commit that is exactly the same as the old commit, except that any non-NULL values will be updated. The new commit has the same parents as the old commit.

\n\n

The update_ref value works as in the regular git_commit_create(), updating the ref to point to the newly rewritten commit. If you want to amend a commit that is not currently the tip of the branch and then rewrite the following commits to reach a ref, pass this as NULL and update the rest of the commit chain and ref separately.

\n\n

Unlike git_commit_create(), the author, committer, message, message_encoding, and tree parameters can be NULL in which case this will use the values from the original commit_to_amend.

\n\n

All parameters have the same meanings as in git_commit_create().

\n", - "group": "commit" - }, - "git_commit_create_buffer": { - "type": "function", - "file": "git2/commit.h", - "line": 463, - "lineto": 472, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer into which to write the commit object content" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where the referenced tree and parents live" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "Signature with author and author time of commit" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "Signature with committer and * commit time of commit" - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." - }, - { - "name": "message", - "type": "const char *", - "comment": "Full message for this commit" - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." - }, - { - "name": "parent_count", - "type": "size_t", - "comment": "Number of parents for this commit" - }, - { - "name": "parents", - "type": "const git_commit *[]", - "comment": "Array of `parent_count` pointers to `git_commit`\n objects that will be used as the parents for this commit. This\n array may be NULL if `parent_count` is 0 (root commit). All the\n given commits must be owned by the `repo`." - } - ], - "argline": "git_buf *out, git_repository *repo, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents", - "sig": "git_buf *::git_repository *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a commit and write it into a buffer

\n", - "comments": "

Create a commit as with git_commit_create() but instead of writing it to the objectdb, write the contents of the object into a buffer.

\n", - "group": "commit" - }, - "git_commit_create_with_signature": { - "type": "function", - "file": "git2/commit.h", - "line": 489, - "lineto": 494, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the resulting commit id" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "commit_content", - "type": "const char *", - "comment": "the content of the unsigned commit object" - }, - { - "name": "signature", - "type": "const char *", - "comment": "the signature to add to the commit. Leave `NULL`\n to create a commit without adding a signature field." - }, - { - "name": "signature_field", - "type": "const char *", - "comment": "which header field should contain this\n signature. Leave `NULL` for the default of \"gpgsig\"" - } - ], - "argline": "git_oid *out, git_repository *repo, const char *commit_content, const char *signature, const char *signature_field", - "sig": "git_oid *::git_repository *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a commit object from the given buffer and signature

\n", - "comments": "

Given the unsigned commit object's contents, its signature and the header field in which to store the signature, attach the signature to the commit and write it into the given repository.

\n", - "group": "commit" - }, - "git_commit_dup": { - "type": "function", - "file": "git2/commit.h", - "line": 503, - "lineto": 503, - "args": [ - { - "name": "out", - "type": "git_commit **", - "comment": "Pointer to store the copy of the commit" - }, - { - "name": "source", - "type": "git_commit *", - "comment": "Original commit to copy" - } - ], - "argline": "git_commit **out, git_commit *source", - "sig": "git_commit **::git_commit *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an in-memory copy of a commit. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "commit" - }, - "git_libgit2_version": { - "type": "function", - "file": "git2/common.h", - "line": 122, - "lineto": 122, - "args": [ - { - "name": "major", - "type": "int *", - "comment": "Store the major version number" - }, - { - "name": "minor", - "type": "int *", - "comment": "Store the minor version number" - }, - { - "name": "rev", - "type": "int *", - "comment": "Store the revision (patch) number" - } - ], - "argline": "int *major, int *minor, int *rev", - "sig": "int *::int *::int *", - "return": { - "type": "int", - "comment": " 0 on success or an error code on failure" - }, - "description": "

Return the version of the libgit2 library\n being currently used.

\n", - "comments": "", - "group": "libgit2" - }, - "git_libgit2_features": { - "type": "function", - "file": "git2/common.h", - "line": 171, - "lineto": 171, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "int", - "comment": " A combination of GIT_FEATURE_* values." - }, - "description": "

Query compile time options for libgit2.

\n", - "comments": "
    \n
  • GIT_FEATURE_THREADS Libgit2 was compiled with thread support. Note that thread support is still to be seen as a 'work in progress' - basic object lookups are believed to be threadsafe, but other operations may not be.

  • \n
  • GIT_FEATURE_HTTPS Libgit2 supports the https:// protocol. This requires the openssl library to be found when compiling libgit2.

  • \n
  • GIT_FEATURE_SSH Libgit2 supports the SSH protocol for network operations. This requires the libssh2 library to be found when compiling libgit2

  • \n
\n", - "group": "libgit2" - }, - "git_libgit2_opts": { - "type": "function", - "file": "git2/common.h", - "line": 466, - "lineto": 466, - "args": [ - { - "name": "option", - "type": "int", - "comment": "Option key" - } - ], - "argline": "int option", - "sig": "int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Set or query a library global option

\n", - "comments": "

Available options:

\n\n
* opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *):\n\n    > Get the maximum mmap window size\n\n* opts(GIT_OPT_SET_MWINDOW_SIZE, size_t):\n\n    > Set the maximum mmap window size\n\n* opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *):\n\n    > Get the maximum memory that will be mapped in total by the library\n\n* opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t):\n\n    > Set the maximum amount of memory that can be mapped at any time       > by the library\n\n* opts(GIT_OPT_GET_MWINDOW_FILE_LIMIT, size_t *):\n\n    > Get the maximum number of files that will be mapped at any time by the        > library\n\n* opts(GIT_OPT_SET_MWINDOW_FILE_LIMIT, size_t):\n\n    > Set the maximum number of files that can be mapped at any time        > by the library. The default (0) is unlimited.\n\n* opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf)\n\n    > Get the search path for a given level of config data.  "level" must       > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`,       > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`.        > The search path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path)\n\n    > Set the search path for a level of config data.  The search path      > applied to shared attributes and ignore files, too.       >       > - `path` lists directories delimited by GIT_PATH_LIST_SEPARATOR.      >   Pass NULL to reset to the default (generally based on environment       >   variables).  Use magic path `$PATH` to include the old value        >   of the path (if you want to prepend or append, for instance).       >       > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`,      >   `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or       >   `GIT_CONFIG_LEVEL_PROGRAMDATA`.\n\n* opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_object_t type, size_t size)\n\n    > Set the maximum data size for the given type of object to be      > considered eligible for caching in memory.  Setting to value to       > zero means that that type of object will not be cached.       > Defaults to 0 for GIT_OBJECT_BLOB (i.e. won't cache blobs) and 4k     > for GIT_OBJECT_COMMIT, GIT_OBJECT_TREE, and GIT_OBJECT_TAG.\n\n* opts(GIT_OPT_SET_CACHE_MAX_SIZE, ssize_t max_storage_bytes)\n\n    > Set the maximum total data size that will be cached in memory     > across all repositories before libgit2 starts evicting objects        > from the cache.  This is a soft limit, in that the library might      > briefly exceed it, but will start aggressively evicting objects       > from cache when that happens.  The default cache size is 256MB.\n\n* opts(GIT_OPT_ENABLE_CACHING, int enabled)\n\n    > Enable or disable caching completely.     >       > Because caches are repository-specific, disabling the cache       > cannot immediately clear all cached objects, but each cache will      > be cleared on the next attempt to update anything in it.\n\n* opts(GIT_OPT_GET_CACHED_MEMORY, ssize_t *current, ssize_t *allowed)\n\n    > Get the current bytes in cache and the maximum that would be      > allowed in the cache.\n\n* opts(GIT_OPT_GET_TEMPLATE_PATH, git_buf *out)\n\n    > Get the default template path.        > The path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_TEMPLATE_PATH, const char *path)\n\n    > Set the default template path.        >       > - `path` directory of template.\n\n* opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, const char *file, const char *path)\n\n    > Set the SSL certificate-authority locations.      >       > - `file` is the location of a file containing several     >   certificates concatenated together.     > - `path` is the location of a directory holding several       >   certificates, one per file.     >       > Either parameter may be `NULL`, but not both.\n\n* opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)\n\n    > Set the value of the User-Agent header.  This value will be       > appended to "git/1.0", for compatibility with other git clients.      >       > - `user_agent` is the value that will be delivered as the     >   User-Agent header on HTTP requests.\n\n* opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value)\n\n    > Set the share mode used when opening files on Windows.        > For more information, see the documentation for CreateFile.       > The default is: FILE_SHARE_READ | FILE_SHARE_WRITE.  This is      > ignored and unused on non-Windows platforms.\n\n* opts(GIT_OPT_GET_WINDOWS_SHAREMODE, unsigned long *value)\n\n    > Get the share mode used when opening files on Windows.\n\n* opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled)\n\n    > Enable strict input validation when creating new objects      > to ensure that all inputs to the new objects are valid.  For      > example, when this is enabled, the parent(s) and tree inputs      > will be validated when creating a new commit.  This defaults      > to enabled.\n\n* opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, int enabled)\n\n    > Validate the target of a symbolic ref when creating it.  For      > example, `foobar` is not a valid ref, therefore `foobar` is       > not a valid target for a symbolic ref by default, whereas     > `refs/heads/foobar` is.  Disabling this bypasses validation       > so that an arbitrary strings such as `foobar` can be used     > for a symbolic ref target.  This defaults to enabled.\n\n* opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers)\n\n    > Set the SSL ciphers use for HTTPS connections.        >       > - `ciphers` is the list of ciphers that are eanbled.\n\n* opts(GIT_OPT_GET_USER_AGENT, git_buf *out)\n\n    > Get the value of the User-Agent header.       > The User-Agent is written to the `out` buffer.\n\n* opts(GIT_OPT_ENABLE_OFS_DELTA, int enabled)\n\n    > Enable or disable the use of "offset deltas" when creating packfiles,     > and the negotiation of them when talking to a remote server.      > Offset deltas store a delta base location as an offset into the       > packfile from the current location, which provides a shorter encoding     > and thus smaller resultant packfiles.     > Packfiles containing offset deltas can still be read.     > This defaults to enabled.\n\n* opts(GIT_OPT_ENABLE_FSYNC_GITDIR, int enabled)\n\n    > Enable synchronized writes of files in the gitdir using `fsync`       > (or the platform equivalent) to ensure that new object data       > is written to permanent storage, not simply cached.  This     > defaults to disabled.\n\n opts(GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION, int enabled)\n\n    > Enable strict verification of object hashsums when reading        > objects from disk. This may impact performance due to an      > additional checksum calculation on each object. This defaults     > to enabled.\n\n opts(GIT_OPT_SET_ALLOCATOR, git_allocator *allocator)\n\n    > Set the memory allocator to a different memory allocator. This        > allocator will then be used to make all memory allocations for        > libgit2 operations.  If the given `allocator` is NULL, then the       > system default will be restored.\n\n opts(GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, int enabled)\n\n    > Ensure that there are no unsaved changes in the index before      > beginning any operation that reloads the index from disk (eg,     > checkout).  If there are unsaved changes, the instruction will        > fail.  (Using the FORCE flag to checkout will still overwrite     > these changes.)\n\n opts(GIT_OPT_GET_PACK_MAX_OBJECTS, size_t *out)\n\n    > Get the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote. This can be      > used to limit maximum memory usage when fetching from an untrusted        > remote.\n\n opts(GIT_OPT_SET_PACK_MAX_OBJECTS, size_t objects)\n\n    > Set the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote.\n\n opts(GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS, int enabled)       > This will cause .keep file existence checks to be skipped when        > accessing packfiles, which can help performance with remote filesystems.\n\n opts(GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE, int enabled)     > When connecting to a server using NTLM or Negotiate       > authentication, use expect/continue when POSTing data.        > This option is not available on Windows.\n
\n\n

opts(GIT_OPT_SET_ODB_PACKED_PRIORITY, int priority) > Override the default priority of the packed ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_SET_ODB_LOOSE_PRIORITY, int priority) > Override the default priority of the loose ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out) > Returns the list of git extensions that are supported. This > is the list of built-in extensions supported by libgit2 and > custom extensions that have been added with > GIT_OPT_SET_EXTENSIONS. Extensions that have been negated > will not be returned. The returned list should be released > with git_strarray_dispose.

\n\n

opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len) > Set that the given git extensions are supported by the caller. > Extensions supported by libgit2 may be negated by prefixing > them with a !. For example: setting extensions to > { "!noop", "newext" } indicates that the caller does not want > to support repositories with the noop extension but does want > to support repositories with the newext extension.

\n\n

opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) > Gets the owner validation setting for repository > directories.

\n\n

opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) > Set that repository directories should be owned by the current > user. The default is to validate ownership.

\n", - "group": "libgit2" - }, - "git_config_entry_free": { - "type": "function", - "file": "git2/config.h", - "line": 76, - "lineto": 76, - "args": [ - { - "name": "", - "type": "git_config_entry *", - "comment": null - } - ], - "argline": "git_config_entry *", - "sig": "git_config_entry *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a config entry

\n", - "comments": "", - "group": "config", - "examples": { - "config.c": [ - "ex/v1.3.1/config.html#git_config_entry_free-1", - "ex/v1.3.1/config.html#git_config_entry_free-2" - ] - } - }, - "git_config_find_global": { - "type": "function", - "file": "git2/config.h", - "line": 127, - "lineto": 127, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Pointer to a user-allocated git_buf in which to store the path" - } - ], - "argline": "git_buf *out", - "sig": "git_buf *", - "return": { - "type": "int", - "comment": " 0 if a global configuration file has been found. Its path will be stored in `out`." - }, - "description": "

Locate the path to the global configuration file

\n", - "comments": "

The user or global configuration file is usually located in $HOME/.gitconfig.

\n\n

This method will try to guess the full path to that file, if the file exists. The returned path may be used on any git_config call to load the global configuration file.

\n\n

This method will not guess the path to the xdg compatible config file (.config/git/config).

\n", - "group": "config" - }, - "git_config_find_xdg": { - "type": "function", - "file": "git2/config.h", - "line": 144, - "lineto": 144, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Pointer to a user-allocated git_buf in which to store the path" - } - ], - "argline": "git_buf *out", - "sig": "git_buf *", - "return": { - "type": "int", - "comment": " 0 if a xdg compatible configuration file has been\n\tfound. Its path will be stored in `out`." - }, - "description": "

Locate the path to the global xdg compatible configuration file

\n", - "comments": "

The xdg compatible configuration file is usually located in $HOME/.config/git/config.

\n\n

This method will try to guess the full path to that file, if the file exists. The returned path may be used on any git_config call to load the xdg compatible configuration file.

\n", - "group": "config" - }, - "git_config_find_system": { - "type": "function", - "file": "git2/config.h", - "line": 156, - "lineto": 156, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Pointer to a user-allocated git_buf in which to store the path" - } - ], - "argline": "git_buf *out", - "sig": "git_buf *", - "return": { - "type": "int", - "comment": " 0 if a system configuration file has been\n\tfound. Its path will be stored in `out`." - }, - "description": "

Locate the path to the system configuration file

\n", - "comments": "

If /etc/gitconfig doesn't exist, it will look for %PROGRAMFILES%.

\n", - "group": "config" - }, - "git_config_find_programdata": { - "type": "function", - "file": "git2/config.h", - "line": 167, - "lineto": 167, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Pointer to a user-allocated git_buf in which to store the path" - } - ], - "argline": "git_buf *out", - "sig": "git_buf *", - "return": { - "type": "int", - "comment": " 0 if a ProgramData configuration file has been\n\tfound. Its path will be stored in `out`." - }, - "description": "

Locate the path to the configuration file in ProgramData

\n", - "comments": "

Look for the file in %PROGRAMDATA% used by portable git.

\n", - "group": "config" - }, - "git_config_open_default": { - "type": "function", - "file": "git2/config.h", - "line": 179, - "lineto": 179, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "Pointer to store the config instance" - } - ], - "argline": "git_config **out", - "sig": "git_config **", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open the global, XDG and system configuration files

\n", - "comments": "

Utility wrapper that finds the global, XDG and system configuration files and opens them into a single prioritized config object that can be used when accessing default config data outside a repository.

\n", - "group": "config" - }, - "git_config_new": { - "type": "function", - "file": "git2/config.h", - "line": 190, - "lineto": 190, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "pointer to the new configuration" - } - ], - "argline": "git_config **out", - "sig": "git_config **", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Allocate a new configuration object

\n", - "comments": "

This object is empty, so you have to add a file to it before you can do anything with it.

\n", - "group": "config" - }, - "git_config_add_file_ondisk": { - "type": "function", - "file": "git2/config.h", - "line": 219, - "lineto": 224, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "the configuration to add the file to" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to the configuration file to add" - }, - { - "name": "level", - "type": "git_config_level_t", - "comment": "the priority level of the backend" - }, - { - "name": "repo", - "type": "const git_repository *", - "comment": "optional repository to allow parsing of\n conditional includes" - }, - { - "name": "force", - "type": "int", - "comment": "replace config file at the given priority level" - } - ], - "argline": "git_config *cfg, const char *path, git_config_level_t level, const git_repository *repo, int force", - "sig": "git_config *::const char *::git_config_level_t::const git_repository *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS when adding more than one file\n for a given priority level (and force_replace set to 0),\n GIT_ENOTFOUND when the file doesn't exist or error code" - }, - "description": "

Add an on-disk config file instance to an existing config

\n", - "comments": "

The on-disk file pointed at by path will be opened and parsed; it's expected to be a native Git config file following the default Git config syntax (see man git-config).

\n\n

If the file does not exist, the file will still be added and it will be created the first time we write to it.

\n\n

Note that the configuration object will free the file automatically.

\n\n

Further queries on this config object will access each of the config file instances in order (instances with a higher priority level will be accessed first).

\n", - "group": "config" - }, - "git_config_open_ondisk": { - "type": "function", - "file": "git2/config.h", - "line": 238, - "lineto": 238, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "The configuration instance to create" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to the on-disk file to open" - } - ], - "argline": "git_config **out, const char *path", - "sig": "git_config **::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Create a new config instance containing a single on-disk file

\n", - "comments": "

This method is a simple utility wrapper for the following sequence of calls: - git_config_new - git_config_add_file_ondisk

\n", - "group": "config", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_config_open_ondisk-26" - ] - } - }, - "git_config_open_level": { - "type": "function", - "file": "git2/config.h", - "line": 256, - "lineto": 259, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "The configuration instance to create" - }, - { - "name": "parent", - "type": "const git_config *", - "comment": "Multi-level config to search for the given level" - }, - { - "name": "level", - "type": "git_config_level_t", - "comment": "Configuration level to search for" - } - ], - "argline": "git_config **out, const git_config *parent, git_config_level_t level", - "sig": "git_config **::const git_config *::git_config_level_t", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the passed level cannot be found in the\n multi-level parent config, or an error code" - }, - "description": "

Build a single-level focused config object from a multi-level one.

\n", - "comments": "

The returned config object can be used to perform get/set/delete operations on a single specific level.

\n\n

Getting several times the same level from the same parent multi-level config will return different config instances, but containing the same config_file instance.

\n", - "group": "config" - }, - "git_config_open_global": { - "type": "function", - "file": "git2/config.h", - "line": 273, - "lineto": 273, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "pointer in which to store the config object" - }, - { - "name": "config", - "type": "git_config *", - "comment": "the config object in which to look" - } - ], - "argline": "git_config **out, git_config *config", - "sig": "git_config **::git_config *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Open the global/XDG configuration file according to git's rules

\n", - "comments": "

Git allows you to store your global configuration at $HOME/.gitconfig or $XDG_CONFIG_HOME/git/config. For backwards compatibility, the XDG file shouldn't be used unless the use has created it explicitly. With this function you'll open the correct one to write to.

\n", - "group": "config" - }, - "git_config_snapshot": { - "type": "function", - "file": "git2/config.h", - "line": 289, - "lineto": 289, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "pointer in which to store the snapshot config object" - }, - { - "name": "config", - "type": "git_config *", - "comment": "configuration to snapshot" - } - ], - "argline": "git_config **out, git_config *config", - "sig": "git_config **::git_config *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a snapshot of the configuration

\n", - "comments": "

Create a snapshot of the current state of a configuration, which allows you to look into a consistent view of the configuration for looking up complex values (e.g. a remote, submodule).

\n\n

The string returned when querying such a config object is valid until it is freed.

\n", - "group": "config" - }, - "git_config_free": { - "type": "function", - "file": "git2/config.h", - "line": 296, - "lineto": 296, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "the configuration to free" - } - ], - "argline": "git_config *cfg", - "sig": "git_config *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the configuration and its associated memory and files

\n", - "comments": "", - "group": "config", - "examples": { - "config.c": [ - "ex/v1.3.1/config.html#git_config_free-3" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_config_free-27", - "ex/v1.3.1/general.html#git_config_free-28" - ] - } - }, - "git_config_get_entry": { - "type": "function", - "file": "git2/config.h", - "line": 308, - "lineto": 311, - "args": [ - { - "name": "out", - "type": "git_config_entry **", - "comment": "pointer to the variable git_config_entry" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "git_config_entry **out, const git_config *cfg, const char *name", - "sig": "git_config_entry **::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the git_config_entry of a config variable.

\n", - "comments": "

Free the git_config_entry after use with git_config_entry_free().

\n", - "group": "config", - "examples": { - "config.c": [ - "ex/v1.3.1/config.html#git_config_get_entry-4" - ] - } - }, - "git_config_get_int32": { - "type": "function", - "file": "git2/config.h", - "line": 325, - "lineto": 325, - "args": [ - { - "name": "out", - "type": "int32_t *", - "comment": "pointer to the variable where the value should be stored" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "int32_t *out, const git_config *cfg, const char *name", - "sig": "int32_t *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of an integer config variable.

\n", - "comments": "

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_config_get_int32-29", - "ex/v1.3.1/general.html#git_config_get_int32-30" - ] - } - }, - "git_config_get_int64": { - "type": "function", - "file": "git2/config.h", - "line": 339, - "lineto": 339, - "args": [ - { - "name": "out", - "type": "int64_t *", - "comment": "pointer to the variable where the value should be stored" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "int64_t *out, const git_config *cfg, const char *name", - "sig": "int64_t *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a long integer config variable.

\n", - "comments": "

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config" - }, - "git_config_get_bool": { - "type": "function", - "file": "git2/config.h", - "line": 356, - "lineto": 356, - "args": [ - { - "name": "out", - "type": "int *", - "comment": "pointer to the variable where the value should be stored" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "int *out, const git_config *cfg, const char *name", - "sig": "int *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a boolean config variable.

\n", - "comments": "

This function uses the usual C convention of 0 being false and anything else true.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config" - }, - "git_config_get_path": { - "type": "function", - "file": "git2/config.h", - "line": 374, - "lineto": 374, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer in which to store the result" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "git_buf *out, const git_config *cfg, const char *name", - "sig": "git_buf *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a path config variable.

\n", - "comments": "

A leading '~' will be expanded to the global search path (which defaults to the user's home directory but can be overridden via git_libgit2_opts().

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config" - }, - "git_config_get_string": { - "type": "function", - "file": "git2/config.h", - "line": 392, - "lineto": 392, - "args": [ - { - "name": "out", - "type": "const char **", - "comment": "pointer to the string" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "const char **out, const git_config *cfg, const char *name", - "sig": "const char **::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a string config variable.

\n", - "comments": "

This function can only be used on snapshot config objects. The string is owned by the config and should not be freed by the user. The pointer will be valid until the config is freed.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_config_get_string-31", - "ex/v1.3.1/general.html#git_config_get_string-32" - ] - } - }, - "git_config_get_string_buf": { - "type": "function", - "file": "git2/config.h", - "line": 408, - "lineto": 408, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer in which to store the string" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "git_buf *out, const git_config *cfg, const char *name", - "sig": "git_buf *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a string config variable.

\n", - "comments": "

The value of the config will be copied into the buffer.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config" - }, - "git_config_get_multivar_foreach": { - "type": "function", - "file": "git2/config.h", - "line": 426, - "lineto": 426, - "args": [ - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to filter which variables we're\n interested in. Use NULL to indicate all" - }, - { - "name": "callback", - "type": "git_config_foreach_cb", - "comment": "the function to be called on each value of the variable" - }, - { - "name": "payload", - "type": "void *", - "comment": "opaque pointer to pass to the callback" - } - ], - "argline": "const git_config *cfg, const char *name, const char *regexp, git_config_foreach_cb callback, void *payload", - "sig": "const git_config *::const char *::const char *::git_config_foreach_cb::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Get each value of a multivar in a foreach callback

\n", - "comments": "

The callback will be called on each variable found

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", - "group": "config" - }, - "git_config_multivar_iterator_new": { - "type": "function", - "file": "git2/config.h", - "line": 441, - "lineto": 441, - "args": [ - { - "name": "out", - "type": "git_config_iterator **", - "comment": "pointer to store the iterator" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to filter which variables we're\n interested in. Use NULL to indicate all" - } - ], - "argline": "git_config_iterator **out, const git_config *cfg, const char *name, const char *regexp", - "sig": "git_config_iterator **::const git_config *::const char *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Get each value of a multivar

\n", - "comments": "

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", - "group": "config" - }, - "git_config_next": { - "type": "function", - "file": "git2/config.h", - "line": 453, - "lineto": 453, - "args": [ - { - "name": "entry", - "type": "git_config_entry **", - "comment": "pointer to store the entry" - }, - { - "name": "iter", - "type": "git_config_iterator *", - "comment": "the iterator" - } - ], - "argline": "git_config_entry **entry, git_config_iterator *iter", - "sig": "git_config_entry **::git_config_iterator *", - "return": { - "type": "int", - "comment": " 0 or an error code. GIT_ITEROVER if the iteration has completed" - }, - "description": "

Return the current entry and advance the iterator

\n", - "comments": "

The pointers returned by this function are valid until the iterator is freed.

\n", - "group": "config" - }, - "git_config_iterator_free": { - "type": "function", - "file": "git2/config.h", - "line": 460, - "lineto": 460, - "args": [ - { - "name": "iter", - "type": "git_config_iterator *", - "comment": "the iterator to free" - } - ], - "argline": "git_config_iterator *iter", - "sig": "git_config_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a config iterator

\n", - "comments": "", - "group": "config" - }, - "git_config_set_int32": { - "type": "function", - "file": "git2/config.h", - "line": 471, - "lineto": 471, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "value", - "type": "int32_t", - "comment": "Integer value for the variable" - } - ], - "argline": "git_config *cfg, const char *name, int32_t value", - "sig": "git_config *::const char *::int32_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the value of an integer config variable in the config file\n with the highest level (usually the local one).

\n", - "comments": "", - "group": "config" - }, - "git_config_set_int64": { - "type": "function", - "file": "git2/config.h", - "line": 482, - "lineto": 482, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "value", - "type": "int64_t", - "comment": "Long integer value for the variable" - } - ], - "argline": "git_config *cfg, const char *name, int64_t value", - "sig": "git_config *::const char *::int64_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the value of a long integer config variable in the config file\n with the highest level (usually the local one).

\n", - "comments": "", - "group": "config" - }, - "git_config_set_bool": { - "type": "function", - "file": "git2/config.h", - "line": 493, - "lineto": 493, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "value", - "type": "int", - "comment": "the value to store" - } - ], - "argline": "git_config *cfg, const char *name, int value", - "sig": "git_config *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the value of a boolean config variable in the config file\n with the highest level (usually the local one).

\n", - "comments": "", - "group": "config" - }, - "git_config_set_string": { - "type": "function", - "file": "git2/config.h", - "line": 507, - "lineto": 507, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "value", - "type": "const char *", - "comment": "the string to store." - } - ], - "argline": "git_config *cfg, const char *name, const char *value", - "sig": "git_config *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the value of a string config variable in the config file\n with the highest level (usually the local one).

\n", - "comments": "

A copy of the string is made and the user is free to use it afterwards.

\n", - "group": "config", - "examples": { - "config.c": [ - "ex/v1.3.1/config.html#git_config_set_string-5" - ] - } - }, - "git_config_set_multivar": { - "type": "function", - "file": "git2/config.h", - "line": 519, - "lineto": 519, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "a regular expression to indicate which values to replace" - }, - { - "name": "value", - "type": "const char *", - "comment": "the new value." - } - ], - "argline": "git_config *cfg, const char *name, const char *regexp, const char *value", - "sig": "git_config *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Set a multivar in the local config file.

\n", - "comments": "

The regular expression is applied case-sensitively on the value.

\n", - "group": "config" - }, - "git_config_delete_entry": { - "type": "function", - "file": "git2/config.h", - "line": 528, - "lineto": 528, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "the configuration" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable to delete" - } - ], - "argline": "git_config *cfg, const char *name", - "sig": "git_config *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Delete a config variable from the config file\n with the highest level (usually the local one).

\n", - "comments": "", - "group": "config" - }, - "git_config_delete_multivar": { - "type": "function", - "file": "git2/config.h", - "line": 541, - "lineto": 541, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variables" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "a regular expression to indicate which values to delete" - } - ], - "argline": "git_config *cfg, const char *name, const char *regexp", - "sig": "git_config *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Deletes one or several entries from a multivar in the local config file.

\n", - "comments": "

The regular expression is applied case-sensitively on the value.

\n", - "group": "config" - }, - "git_config_foreach": { - "type": "function", - "file": "git2/config.h", - "line": 559, - "lineto": 562, - "args": [ - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to get the variables from" - }, - { - "name": "callback", - "type": "git_config_foreach_cb", - "comment": "the function to call on each variable" - }, - { - "name": "payload", - "type": "void *", - "comment": "the data to pass to the callback" - } - ], - "argline": "const git_config *cfg, git_config_foreach_cb callback, void *payload", - "sig": "const git_config *::git_config_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Perform an operation on each config variable.

\n", - "comments": "

The callback receives the normalized name and value of each variable in the config backend, and the data pointer passed to this function. If the callback returns a non-zero value, the function stops iterating and returns that value to the caller.

\n\n

The pointers passed to the callback are only valid as long as the iteration is ongoing.

\n", - "group": "config" - }, - "git_config_iterator_new": { - "type": "function", - "file": "git2/config.h", - "line": 573, - "lineto": 573, - "args": [ - { - "name": "out", - "type": "git_config_iterator **", - "comment": "pointer to store the iterator" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to ge the variables from" - } - ], - "argline": "git_config_iterator **out, const git_config *cfg", - "sig": "git_config_iterator **::const git_config *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Iterate over all the config variables

\n", - "comments": "

Use git_config_next to advance the iteration and git_config_iterator_free when done.

\n", - "group": "config" - }, - "git_config_iterator_glob_new": { - "type": "function", - "file": "git2/config.h", - "line": 589, - "lineto": 589, - "args": [ - { - "name": "out", - "type": "git_config_iterator **", - "comment": "pointer to store the iterator" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to ge the variables from" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to match the names" - } - ], - "argline": "git_config_iterator **out, const git_config *cfg, const char *regexp", - "sig": "git_config_iterator **::const git_config *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Iterate over all the config variables whose name matches a pattern

\n", - "comments": "

Use git_config_next to advance the iteration and git_config_iterator_free when done.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", - "group": "config" - }, - "git_config_foreach_match": { - "type": "function", - "file": "git2/config.h", - "line": 611, - "lineto": 615, - "args": [ - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to get the variables from" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to match against config names" - }, - { - "name": "callback", - "type": "git_config_foreach_cb", - "comment": "the function to call on each variable" - }, - { - "name": "payload", - "type": "void *", - "comment": "the data to pass to the callback" - } - ], - "argline": "const git_config *cfg, const char *regexp, git_config_foreach_cb callback, void *payload", - "sig": "const git_config *::const char *::git_config_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 or the return value of the callback which didn't return 0" - }, - "description": "

Perform an operation on each config variable matching a regular expression.

\n", - "comments": "

This behaves like git_config_foreach with an additional filter of a regular expression that filters which config keys are passed to the callback.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the case-insensitive parts are lower-case.

\n", - "group": "config" - }, - "git_config_get_mapped": { - "type": "function", - "file": "git2/config.h", - "line": 651, - "lineto": 656, - "args": [ - { - "name": "out", - "type": "int *", - "comment": "place to store the result of the mapping" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "config file to get the variables from" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the config variable to lookup" - }, - { - "name": "maps", - "type": "const git_configmap *", - "comment": "array of `git_configmap` objects specifying the possible mappings" - }, - { - "name": "map_n", - "type": "size_t", - "comment": "number of mapping objects in `maps`" - } - ], - "argline": "int *out, const git_config *cfg, const char *name, const git_configmap *maps, size_t map_n", - "sig": "int *::const git_config *::const char *::const git_configmap *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Query the value of a config variable and return it mapped to\n an integer constant.

\n", - "comments": "

This is a helper method to easily map different possible values to a variable to integer constants that easily identify them.

\n\n

A mapping array looks as follows:

\n\n
git_configmap autocrlf_mapping[] = {        {GIT_CVAR_FALSE, NULL, GIT_AUTO_CRLF_FALSE},        {GIT_CVAR_TRUE, NULL, GIT_AUTO_CRLF_TRUE},      {GIT_CVAR_STRING, "input", GIT_AUTO_CRLF_INPUT},        {GIT_CVAR_STRING, "default", GIT_AUTO_CRLF_DEFAULT}};\n
\n\n

On any "false" value for the variable (e.g. "false", "FALSE", "no"), the mapping will store GIT_AUTO_CRLF_FALSE in the out parameter.

\n\n

The same thing applies for any "true" value such as "true", "yes" or "1", storing the GIT_AUTO_CRLF_TRUE variable.

\n\n

Otherwise, if the value matches the string "input" (with case insensitive comparison), the given constant will be stored in out, and likewise for "default".

\n\n

If not a single match can be made to store in out, an error code will be returned.

\n", - "group": "config" - }, - "git_config_lookup_map_value": { - "type": "function", - "file": "git2/config.h", - "line": 666, - "lineto": 670, - "args": [ - { - "name": "out", - "type": "int *", - "comment": "place to store the result of the parsing" - }, - { - "name": "maps", - "type": "const git_configmap *", - "comment": "array of `git_configmap` objects specifying the possible mappings" - }, - { - "name": "map_n", - "type": "size_t", - "comment": "number of mapping objects in `maps`" - }, - { - "name": "value", - "type": "const char *", - "comment": "value to parse" - } - ], - "argline": "int *out, const git_configmap *maps, size_t map_n, const char *value", - "sig": "int *::const git_configmap *::size_t::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Maps a string value to an integer constant

\n", - "comments": "", - "group": "config" - }, - "git_config_parse_bool": { - "type": "function", - "file": "git2/config.h", - "line": 682, - "lineto": 682, - "args": [ - { - "name": "out", - "type": "int *", - "comment": "place to store the result of the parsing" - }, - { - "name": "value", - "type": "const char *", - "comment": "value to parse" - } - ], - "argline": "int *out, const char *value", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Parse a string value as a bool.

\n", - "comments": "

Valid values for true are: 'true', 'yes', 'on', 1 or any number different from 0 Valid values for false are: 'false', 'no', 'off', 0

\n", - "group": "config" - }, - "git_config_parse_int32": { - "type": "function", - "file": "git2/config.h", - "line": 694, - "lineto": 694, - "args": [ - { - "name": "out", - "type": "int32_t *", - "comment": "place to store the result of the parsing" - }, - { - "name": "value", - "type": "const char *", - "comment": "value to parse" - } - ], - "argline": "int32_t *out, const char *value", - "sig": "int32_t *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Parse a string value as an int32.

\n", - "comments": "

An optional value suffix of 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output.

\n", - "group": "config" - }, - "git_config_parse_int64": { - "type": "function", - "file": "git2/config.h", - "line": 706, - "lineto": 706, - "args": [ - { - "name": "out", - "type": "int64_t *", - "comment": "place to store the result of the parsing" - }, - { - "name": "value", - "type": "const char *", - "comment": "value to parse" - } - ], - "argline": "int64_t *out, const char *value", - "sig": "int64_t *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Parse a string value as an int64.

\n", - "comments": "

An optional value suffix of 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output.

\n", - "group": "config" - }, - "git_config_parse_path": { - "type": "function", - "file": "git2/config.h", - "line": 721, - "lineto": 721, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "placae to store the result of parsing" - }, - { - "name": "value", - "type": "const char *", - "comment": "the path to evaluate" - } - ], - "argline": "git_buf *out, const char *value", - "sig": "git_buf *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Parse a string value as a path.

\n", - "comments": "

A leading '~' will be expanded to the global search path (which defaults to the user's home directory but can be overridden via git_libgit2_opts().

\n\n

If the value does not begin with a tilde, the input will be returned.

\n", - "group": "config" - }, - "git_config_backend_foreach_match": { - "type": "function", - "file": "git2/config.h", - "line": 739, - "lineto": 743, - "args": [ - { - "name": "backend", - "type": "git_config_backend *", - "comment": "where to get the variables from" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to match against config names (can be NULL)" - }, - { - "name": "callback", - "type": "git_config_foreach_cb", - "comment": "the function to call on each variable" - }, - { - "name": "payload", - "type": "void *", - "comment": "the data to pass to the callback" - } - ], - "argline": "git_config_backend *backend, const char *regexp, git_config_foreach_cb callback, void *payload", - "sig": "git_config_backend *::const char *::git_config_foreach_cb::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Perform an operation on each config variable in a given config backend,\n matching a regular expression.

\n", - "comments": "

This behaves like git_config_foreach_match except that only config entries from the given backend entry are enumerated.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", - "group": "config" - }, - "git_config_lock": { - "type": "function", - "file": "git2/config.h", - "line": 762, - "lineto": 762, - "args": [ - { - "name": "tx", - "type": "git_transaction **", - "comment": "the resulting transaction, use this to commit or undo the\n changes" - }, - { - "name": "cfg", - "type": "git_config *", - "comment": "the configuration in which to lock" - } - ], - "argline": "git_transaction **tx, git_config *cfg", - "sig": "git_transaction **::git_config *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lock the backend with the highest priority

\n", - "comments": "

Locking disallows anybody else from writing to that backend. Any updates made after locking will not be visible to a reader until the file is unlocked.

\n\n

You can apply the changes by calling git_transaction_commit() before freeing the transaction. Either of these actions will unlock the config.

\n", - "group": "config" - }, - "git_credential_free": { - "type": "function", - "file": "git2/credential.h", - "line": 146, - "lineto": 146, - "args": [ - { - "name": "cred", - "type": "git_credential *", - "comment": "the object to free" - } - ], - "argline": "git_credential *cred", - "sig": "git_credential *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a credential.

\n", - "comments": "

This is only necessary if you own the object; that is, if you are a transport.

\n", - "group": "credential" - }, - "git_credential_has_username": { - "type": "function", - "file": "git2/credential.h", - "line": 154, - "lineto": 154, - "args": [ - { - "name": "cred", - "type": "git_credential *", - "comment": "object to check" - } - ], - "argline": "git_credential *cred", - "sig": "git_credential *", - "return": { - "type": "int", - "comment": " 1 if the credential object has non-NULL username, 0 otherwise" - }, - "description": "

Check whether a credential object contains username information.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_get_username": { - "type": "function", - "file": "git2/credential.h", - "line": 162, - "lineto": 162, - "args": [ - { - "name": "cred", - "type": "git_credential *", - "comment": "object to check" - } - ], - "argline": "git_credential *cred", - "sig": "git_credential *", - "return": { - "type": "const char *", - "comment": " the credential username, or NULL if not applicable" - }, - "description": "

Return the username associated with a credential object.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_userpass_plaintext_new": { - "type": "function", - "file": "git2/credential.h", - "line": 173, - "lineto": 176, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "The username of the credential." - }, - { - "name": "password", - "type": "const char *", - "comment": "The password of the credential." - } - ], - "argline": "git_credential **out, const char *username, const char *password", - "sig": "git_credential **::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a new plain-text username and password credential object.\n The supplied credential parameter will be internally duplicated.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_default_new": { - "type": "function", - "file": "git2/credential.h", - "line": 185, - "lineto": 185, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - } - ], - "argline": "git_credential **out", - "sig": "git_credential **", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a "default" credential usable for Negotiate mechanisms like NTLM\n or Kerberos authentication.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_username_new": { - "type": "function", - "file": "git2/credential.h", - "line": 197, - "lineto": 197, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "The username to authenticate with" - } - ], - "argline": "git_credential **out, const char *username", - "sig": "git_credential **::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a credential to specify a username.

\n", - "comments": "

This is used with ssh authentication to query for the username if none is specified in the url.

\n", - "group": "credential" - }, - "git_credential_ssh_key_new": { - "type": "function", - "file": "git2/credential.h", - "line": 210, - "lineto": 215, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "username to use to authenticate" - }, - { - "name": "publickey", - "type": "const char *", - "comment": "The path to the public key of the credential." - }, - { - "name": "privatekey", - "type": "const char *", - "comment": "The path to the private key of the credential." - }, - { - "name": "passphrase", - "type": "const char *", - "comment": "The passphrase of the credential." - } - ], - "argline": "git_credential **out, const char *username, const char *publickey, const char *privatekey, const char *passphrase", - "sig": "git_credential **::const char *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a new passphrase-protected ssh key credential object.\n The supplied credential parameter will be internally duplicated.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_ssh_key_memory_new": { - "type": "function", - "file": "git2/credential.h", - "line": 227, - "lineto": 232, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "username to use to authenticate." - }, - { - "name": "publickey", - "type": "const char *", - "comment": "The public key of the credential." - }, - { - "name": "privatekey", - "type": "const char *", - "comment": "The private key of the credential." - }, - { - "name": "passphrase", - "type": "const char *", - "comment": "The passphrase of the credential." - } - ], - "argline": "git_credential **out, const char *username, const char *publickey, const char *privatekey, const char *passphrase", - "sig": "git_credential **::const char *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a new ssh key credential object reading the keys from memory.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_ssh_interactive_new": { - "type": "function", - "file": "git2/credential.h", - "line": 262, - "lineto": 266, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": null - }, - { - "name": "username", - "type": "const char *", - "comment": "Username to use to authenticate." - }, - { - "name": "prompt_callback", - "type": "git_credential_ssh_interactive_cb", - "comment": "The callback method used for prompts." - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback." - } - ], - "argline": "git_credential **out, const char *username, git_credential_ssh_interactive_cb prompt_callback, void *payload", - "sig": "git_credential **::const char *::git_credential_ssh_interactive_cb::void *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure." - }, - "description": "

Create a new ssh keyboard-interactive based credential object.\n The supplied credential parameter will be internally duplicated.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_ssh_key_from_agent": { - "type": "function", - "file": "git2/credential.h", - "line": 276, - "lineto": 278, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "username to use to authenticate" - } - ], - "argline": "git_credential **out, const char *username", - "sig": "git_credential **::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a new ssh key credential object used for querying an ssh-agent.\n The supplied credential parameter will be internally duplicated.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_ssh_custom_new": { - "type": "function", - "file": "git2/credential.h", - "line": 304, - "lineto": 310, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "username to use to authenticate" - }, - { - "name": "publickey", - "type": "const char *", - "comment": "The bytes of the public key." - }, - { - "name": "publickey_len", - "type": "size_t", - "comment": "The length of the public key in bytes." - }, - { - "name": "sign_callback", - "type": "git_credential_sign_cb", - "comment": "The callback method to sign the data during the challenge." - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback." - } - ], - "argline": "git_credential **out, const char *username, const char *publickey, size_t publickey_len, git_credential_sign_cb sign_callback, void *payload", - "sig": "git_credential **::const char *::const char *::size_t::git_credential_sign_cb::void *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create an ssh key credential with a custom signing function.

\n", - "comments": "

This lets you use your own function to sign the challenge.

\n\n

This function and its credential type is provided for completeness and wraps libssh2_userauth_publickey(), which is undocumented.

\n\n

The supplied credential parameter will be internally duplicated.

\n", - "group": "credential" - }, - "git_credential_userpass": { - "type": "function", - "file": "git2/credential_helpers.h", - "line": 43, - "lineto": 48, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "url", - "type": "const char *", - "comment": "The resource for which we are demanding a credential." - }, - { - "name": "user_from_url", - "type": "const char *", - "comment": "The username that was embedded in a \"user\n@\nhost\"\n remote url, or NULL if not included." - }, - { - "name": "allowed_types", - "type": "unsigned int", - "comment": "A bitmask stating which credential types are OK to return." - }, - { - "name": "payload", - "type": "void *", - "comment": "The payload provided when specifying this callback. (This is\n interpreted as a `git_credential_userpass_payload*`.)" - } - ], - "argline": "git_credential **out, const char *url, const char *user_from_url, unsigned int allowed_types, void *payload", - "sig": "git_credential **::const char *::const char *::unsigned int::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Stock callback usable as a git_credential_acquire_cb. This calls\n git_cred_userpass_plaintext_new unless the protocol has not specified\n GIT_CREDENTIAL_USERPASS_PLAINTEXT as an allowed type.

\n", - "comments": "", - "group": "credential" - }, - "git_blob_filtered_content": { - "type": "function", - "file": "git2/deprecated.h", - "line": 115, - "lineto": 119, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": null - }, - { - "name": "blob", - "type": "git_blob *", - "comment": null - }, - { - "name": "as_path", - "type": "const char *", - "comment": null - }, - { - "name": "check_for_binary_data", - "type": "int", - "comment": null - } - ], - "argline": "git_buf *out, git_blob *blob, const char *as_path, int check_for_binary_data", - "sig": "git_buf *::git_blob *::const char *::int", - "return": { - "type": "int", - "comment": null - }, - "description": "

Deprecated in favor of git_blob_filter.

\n", - "comments": "", - "group": "blob" - }, - "git_filter_list_stream_data": { - "type": "function", - "file": "git2/deprecated.h", - "line": 139, - "lineto": 142, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": null - }, - { - "name": "data", - "type": "git_buf *", - "comment": null - }, - { - "name": "target", - "type": "git_writestream *", - "comment": null - } - ], - "argline": "git_filter_list *filters, git_buf *data, git_writestream *target", - "sig": "git_filter_list *::git_buf *::git_writestream *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Deprecated in favor of git_filter_list_stream_buffer.

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_apply_to_data": { - "type": "function", - "file": "git2/deprecated.h", - "line": 149, - "lineto": 152, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": null - }, - { - "name": "filters", - "type": "git_filter_list *", - "comment": null - }, - { - "name": "in", - "type": "git_buf *", - "comment": null - } - ], - "argline": "git_buf *out, git_filter_list *filters, git_buf *in", - "sig": "git_buf *::git_filter_list *::git_buf *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Deprecated in favor of git_filter_list_apply_to_buffer.

\n", - "comments": "", - "group": "filter" - }, - "git_treebuilder_write_with_buffer": { - "type": "function", - "file": "git2/deprecated.h", - "line": 178, - "lineto": 179, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": null - }, - { - "name": "bld", - "type": "git_treebuilder *", - "comment": null - }, - { - "name": "tree", - "type": "git_buf *", - "comment": null - } - ], - "argline": "git_oid *oid, git_treebuilder *bld, git_buf *tree", - "sig": "git_oid *::git_treebuilder *::git_buf *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Write the contents of the tree builder as a tree object.\n This is an alias of git_treebuilder_write and is preserved\n for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "treebuilder" - }, - "git_buf_free": { - "type": "function", - "file": "git2/deprecated.h", - "line": 259, - "lineto": 259, - "args": [ - { - "name": "buffer", - "type": "git_buf *", - "comment": null - } - ], - "argline": "git_buf *buffer", - "sig": "git_buf *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory referred to by the git_buf. This is an alias of\n git_buf_dispose and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "buf" - }, - "git_diff_format_email": { - "type": "function", - "file": "git2/deprecated.h", - "line": 357, - "lineto": 360, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": null - }, - { - "name": "diff", - "type": "git_diff *", - "comment": null - }, - { - "name": "opts", - "type": "const git_diff_format_email_options *", - "comment": null - } - ], - "argline": "git_buf *out, git_diff *diff, const git_diff_format_email_options *opts", - "sig": "git_buf *::git_diff *::const git_diff_format_email_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an e-mail ready patch from a diff.

\n", - "comments": "", - "group": "diff" - }, - "git_diff_commit_as_email": { - "type": "function", - "file": "git2/deprecated.h", - "line": 368, - "lineto": 375, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": null - }, - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "commit", - "type": "git_commit *", - "comment": null - }, - { - "name": "patch_no", - "type": "size_t", - "comment": null - }, - { - "name": "total_patches", - "type": "size_t", - "comment": null - }, - { - "name": "flags", - "type": "uint32_t", - "comment": null - }, - { - "name": "diff_opts", - "type": "const git_diff_options *", - "comment": null - } - ], - "argline": "git_buf *out, git_repository *repo, git_commit *commit, size_t patch_no, size_t total_patches, uint32_t flags, const git_diff_options *diff_opts", - "sig": "git_buf *::git_repository *::git_commit *::size_t::size_t::uint32_t::const git_diff_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an e-mail ready patch for a commit.

\n", - "comments": "", - "group": "diff" - }, - "git_diff_format_email_options_init": { - "type": "function", - "file": "git2/deprecated.h", - "line": 387, - "lineto": 389, - "args": [ - { - "name": "opts", - "type": "git_diff_format_email_options *", - "comment": "The `git_blame_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION`." - } - ], - "argline": "git_diff_format_email_options *opts, unsigned int version", - "sig": "git_diff_format_email_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_diff_format_email_options structure

\n", - "comments": "

Initializes a git_diff_format_email_options with default values. Equivalent to creating an instance with GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT.

\n", - "group": "diff" - }, - "giterr_last": { - "type": "function", - "file": "git2/deprecated.h", - "line": 450, - "lineto": 450, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "const git_error *", - "comment": null - }, - "description": "

Return the last git_error object that was generated for the\n current thread. This is an alias of git_error_last and is\n preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "giterr" - }, - "giterr_clear": { - "type": "function", - "file": "git2/deprecated.h", - "line": 462, - "lineto": 462, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "void", - "comment": null - }, - "description": "

Clear the last error. This is an alias of git_error_last and is\n preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "giterr" - }, - "giterr_set_str": { - "type": "function", - "file": "git2/deprecated.h", - "line": 474, - "lineto": 474, - "args": [ - { - "name": "error_class", - "type": "int", - "comment": null - }, - { - "name": "string", - "type": "const char *", - "comment": null - } - ], - "argline": "int error_class, const char *string", - "sig": "int::const char *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Sets the error message to the given string. This is an alias of\n git_error_set_str and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "giterr" - }, - "giterr_set_oom": { - "type": "function", - "file": "git2/deprecated.h", - "line": 486, - "lineto": 486, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "void", - "comment": null - }, - "description": "

Indicates that an out-of-memory situation occurred. This is an alias\n of git_error_set_oom and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "giterr" - }, - "git_object__size": { - "type": "function", - "file": "git2/deprecated.h", - "line": 576, - "lineto": 576, - "args": [ - { - "name": "type", - "type": "git_object_t", - "comment": "object type to get its size" - } - ], - "argline": "git_object_t type", - "sig": "git_object_t", - "return": { - "type": "size_t", - "comment": " size in bytes of the object" - }, - "description": "

Get the size in bytes for the structure which\n acts as an in-memory representation of any given\n object type.

\n", - "comments": "

For all the core types, this would the equivalent of calling sizeof(git_commit) if the core types were not opaque on the external API.

\n", - "group": "object" - }, - "git_remote_is_valid_name": { - "type": "function", - "file": "git2/deprecated.h", - "line": 597, - "lineto": 597, - "args": [ - { - "name": "remote_name", - "type": "const char *", - "comment": "name to be checked." - } - ], - "argline": "const char *remote_name", - "sig": "const char *", - "return": { - "type": "int", - "comment": " 1 if the reference name is acceptable; 0 if it isn't" - }, - "description": "

Ensure the remote name is well-formed.

\n", - "comments": "", - "group": "remote" - }, - "git_reference_is_valid_name": { - "type": "function", - "file": "git2/deprecated.h", - "line": 641, - "lineto": 641, - "args": [ - { - "name": "refname", - "type": "const char *", - "comment": "name to be checked." - } - ], - "argline": "const char *refname", - "sig": "const char *", - "return": { - "type": "int", - "comment": " 1 if the reference name is acceptable; 0 if it isn't" - }, - "description": "

Ensure the reference name is well-formed.

\n", - "comments": "

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n", - "group": "reference" - }, - "git_oid_iszero": { - "type": "function", - "file": "git2/deprecated.h", - "line": 778, - "lineto": 778, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": null - } - ], - "argline": "const git_oid *id", - "sig": "const git_oid *", - "return": { - "type": "int", - "comment": null - }, - "description": "", - "comments": "

These types are retained for backward compatibility. The newer versions of these values should be preferred in all new code.

\n\n

There is no plan to remove these backward compatibility values at this time.

\n\n

@{

\n", - "group": "oid" - }, - "git_oidarray_free": { - "type": "function", - "file": "git2/deprecated.h", - "line": 802, - "lineto": 802, - "args": [ - { - "name": "array", - "type": "git_oidarray *", - "comment": null - } - ], - "argline": "git_oidarray *array", - "sig": "git_oidarray *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory referred to by the git_oidarray. This is an alias of\n git_oidarray_dispose and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "oidarray" - }, - "git_strarray_copy": { - "type": "function", - "file": "git2/strarray.h", - "line": 49, - "lineto": 49, - "args": [ - { - "name": "tgt", - "type": "git_strarray *", - "comment": "target" - }, - { - "name": "src", - "type": "const git_strarray *", - "comment": "source" - } - ], - "argline": "git_strarray *tgt, const git_strarray *src", - "sig": "git_strarray *::const git_strarray *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n 0 on allocation failure" - }, - "description": "

Copy a string array object from source to target.

\n", - "comments": "

Note: target is overwritten and hence should be empty, otherwise its contents are leaked. Call git_strarray_free() if necessary.

\n", - "group": "strarray" - }, - "git_strarray_free": { - "type": "function", - "file": "git2/deprecated.h", - "line": 883, - "lineto": 883, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": null - } - ], - "argline": "git_strarray *array", - "sig": "git_strarray *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory referred to by the git_strarray. This is an alias of\n git_strarray_dispose and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "strarray" - }, - "git_blame_init_options": { - "type": "function", - "file": "git2/deprecated.h", - "line": 897, - "lineto": 897, - "args": [ - { - "name": "opts", - "type": "git_blame_options *", - "comment": null - }, - { - "name": "version", - "type": "unsigned int", - "comment": null - } - ], - "argline": "git_blame_options *opts, unsigned int version", - "sig": "git_blame_options *::unsigned int", - "return": { - "type": "int", - "comment": null - }, - "description": "", - "comments": "

These functions are retained for backward compatibility. The newer versions of these functions should be preferred in all new code.

\n\n

There is no plan to remove these backward compatibility functions at this time.

\n\n

@{

\n", - "group": "blame" - }, - "git_describe_options_init": { - "type": "function", - "file": "git2/describe.h", - "line": 82, - "lineto": 82, - "args": [ - { - "name": "opts", - "type": "git_describe_options *", - "comment": "The `git_describe_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DESCRIBE_OPTIONS_VERSION`." - } - ], - "argline": "git_describe_options *opts, unsigned int version", - "sig": "git_describe_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_describe_options structure

\n", - "comments": "

Initializes a git_describe_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_OPTIONS_INIT.

\n", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.3.1/describe.html#git_describe_options_init-1" - ] - } - }, - "git_describe_format_options_init": { - "type": "function", - "file": "git2/describe.h", - "line": 129, - "lineto": 129, - "args": [ - { - "name": "opts", - "type": "git_describe_format_options *", - "comment": "The `git_describe_format_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DESCRIBE_FORMAT_OPTIONS_VERSION`." - } - ], - "argline": "git_describe_format_options *opts, unsigned int version", - "sig": "git_describe_format_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_describe_format_options structure

\n", - "comments": "

Initializes a git_describe_format_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_FORMAT_OPTIONS_INIT.

\n", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.3.1/describe.html#git_describe_format_options_init-2" - ] - } - }, - "git_describe_commit": { - "type": "function", - "file": "git2/describe.h", - "line": 146, - "lineto": 149, - "args": [ - { - "name": "result", - "type": "git_describe_result **", - "comment": "pointer to store the result. You must free this once\n you're done with it." - }, - { - "name": "committish", - "type": "git_object *", - "comment": "a committish to describe" - }, - { - "name": "opts", - "type": "git_describe_options *", - "comment": "the lookup options (or NULL for defaults)" - } - ], - "argline": "git_describe_result **result, git_object *committish, git_describe_options *opts", - "sig": "git_describe_result **::git_object *::git_describe_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Describe a commit

\n", - "comments": "

Perform the describe operation on the given committish object.

\n", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.3.1/describe.html#git_describe_commit-3" - ] - } - }, - "git_describe_workdir": { - "type": "function", - "file": "git2/describe.h", - "line": 163, - "lineto": 166, - "args": [ - { - "name": "out", - "type": "git_describe_result **", - "comment": "pointer to store the result. You must free this once\n you're done with it." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the describe" - }, - { - "name": "opts", - "type": "git_describe_options *", - "comment": "the lookup options (or NULL for defaults)" - } - ], - "argline": "git_describe_result **out, git_repository *repo, git_describe_options *opts", - "sig": "git_describe_result **::git_repository *::git_describe_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Describe a commit

\n", - "comments": "

Perform the describe operation on the current commit and the worktree. After peforming describe on HEAD, a status is run and the description is considered to be dirty if there are.

\n", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.3.1/describe.html#git_describe_workdir-4" - ] - } - }, - "git_describe_format": { - "type": "function", - "file": "git2/describe.h", - "line": 176, - "lineto": 179, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The buffer to store the result" - }, - { - "name": "result", - "type": "const git_describe_result *", - "comment": "the result from `git_describe_commit()` or\n `git_describe_workdir()`." - }, - { - "name": "opts", - "type": "const git_describe_format_options *", - "comment": "the formatting options (or NULL for defaults)" - } - ], - "argline": "git_buf *out, const git_describe_result *result, const git_describe_format_options *opts", - "sig": "git_buf *::const git_describe_result *::const git_describe_format_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Print the describe result to a buffer

\n", - "comments": "", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.3.1/describe.html#git_describe_format-5" - ] - } - }, - "git_describe_result_free": { - "type": "function", - "file": "git2/describe.h", - "line": 184, - "lineto": 184, - "args": [ - { - "name": "result", - "type": "git_describe_result *", - "comment": null - } - ], - "argline": "git_describe_result *result", - "sig": "git_describe_result *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the describe result.

\n", - "comments": "", - "group": "describe" - }, - "git_diff_options_init": { - "type": "function", - "file": "git2/diff.h", - "line": 468, - "lineto": 470, - "args": [ - { - "name": "opts", - "type": "git_diff_options *", - "comment": "The `git_diff_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DIFF_OPTIONS_VERSION`." - } - ], - "argline": "git_diff_options *opts, unsigned int version", - "sig": "git_diff_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_diff_options structure

\n", - "comments": "

Initializes a git_diff_options with default values. Equivalent to creating an instance with GIT_DIFF_OPTIONS_INIT.

\n", - "group": "diff" - }, - "git_diff_find_options_init": { - "type": "function", - "file": "git2/diff.h", - "line": 801, - "lineto": 803, - "args": [ - { - "name": "opts", - "type": "git_diff_find_options *", - "comment": "The `git_diff_find_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DIFF_FIND_OPTIONS_VERSION`." - } - ], - "argline": "git_diff_find_options *opts, unsigned int version", - "sig": "git_diff_find_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_diff_find_options structure

\n", - "comments": "

Initializes a git_diff_find_options with default values. Equivalent to creating an instance with GIT_DIFF_FIND_OPTIONS_INIT.

\n", - "group": "diff" - }, - "git_diff_free": { - "type": "function", - "file": "git2/diff.h", - "line": 817, - "lineto": 817, - "args": [ - { - "name": "diff", - "type": "git_diff *", - "comment": "The previously created diff; cannot be used after free." - } - ], - "argline": "git_diff *diff", - "sig": "git_diff *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Deallocate a diff.

\n", - "comments": "", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_free-3" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_diff_free-25", - "ex/v1.3.1/log.html#git_diff_free-26" - ] - } - }, - "git_diff_tree_to_tree": { - "type": "function", - "file": "git2/diff.h", - "line": 835, - "lineto": 840, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "Output pointer to a git_diff pointer to be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the trees." - }, - { - "name": "old_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff from, or NULL for empty tree." - }, - { - "name": "new_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff to, or NULL for empty tree." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, git_tree *new_tree, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_tree *::git_tree *::const git_diff_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a diff with the difference between two tree objects.

\n", - "comments": "

This is equivalent to git diff <old-tree> <new-tree>

\n\n

The first tree will be used for the "old_file" side of the delta and the second tree will be used for the "new_file" side of the delta. You can pass NULL to indicate an empty tree, although it is an error to pass NULL for both the old_tree and new_tree.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_tree_to_tree-4" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_diff_tree_to_tree-27", - "ex/v1.3.1/log.html#git_diff_tree_to_tree-28" - ] - } - }, - "git_diff_tree_to_index": { - "type": "function", - "file": "git2/diff.h", - "line": 861, - "lineto": 866, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "Output pointer to a git_diff pointer to be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the tree and index." - }, - { - "name": "old_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff from, or NULL for empty tree." - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to diff with; repo index used if NULL." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, git_index *index, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_tree *::git_index *::const git_diff_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a diff between a tree and repository index.

\n", - "comments": "

This is equivalent to git diff --cached <treeish> or if you pass the HEAD tree, then like git diff --cached.

\n\n

The tree you pass will be used for the "old_file" side of the delta, and the index will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_tree_to_index-5" - ] - } - }, - "git_diff_index_to_workdir": { - "type": "function", - "file": "git2/diff.h", - "line": 888, - "lineto": 892, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "Output pointer to a git_diff pointer to be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository." - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to diff from; repo index used if NULL." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_index *index, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_index *::const git_diff_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a diff between the repository index and the workdir directory.

\n", - "comments": "

This matches the git diff command. See the note below on git_diff_tree_to_workdir for a discussion of the difference between git diff and git diff HEAD and how to emulate a git diff <treeish> using libgit2.

\n\n

The index will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_index_to_workdir-6" - ] - } - }, - "git_diff_tree_to_workdir": { - "type": "function", - "file": "git2/diff.h", - "line": 917, - "lineto": 921, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "A pointer to a git_diff pointer that will be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the tree." - }, - { - "name": "old_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff from, or NULL for empty tree." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_tree *::const git_diff_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a diff between a tree and the working directory.

\n", - "comments": "

The tree you provide will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side.

\n\n

This is not the same as git diff <treeish> or git diff-index <treeish>. Those commands use information from the index, whereas this function strictly returns the differences between the tree and the files in the working directory, regardless of the state of the index. Use git_diff_tree_to_workdir_with_index to emulate those commands.

\n\n

To see difference between this and git_diff_tree_to_workdir_with_index, consider the example of a staged file deletion where the file has then been put back into the working dir and further modified. The tree-to-workdir diff for that file is 'modified', but git diff would show status 'deleted' since there is a staged delete.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_tree_to_workdir-7" - ] - } - }, - "git_diff_tree_to_workdir_with_index": { - "type": "function", - "file": "git2/diff.h", - "line": 936, - "lineto": 940, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "A pointer to a git_diff pointer that will be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the tree." - }, - { - "name": "old_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff from, or NULL for empty tree." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_tree *::const git_diff_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a diff between a tree and the working directory using index data\n to account for staged deletes, tracked files, etc.

\n", - "comments": "

This emulates git diff <tree> by diffing the tree to the index and the index to the working directory and blending the results into a single diff that includes staged deleted, etc.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_tree_to_workdir_with_index-8" - ] - } - }, - "git_diff_index_to_index": { - "type": "function", - "file": "git2/diff.h", - "line": 954, - "lineto": 959, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "Output pointer to a git_diff pointer to be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the indexes." - }, - { - "name": "old_index", - "type": "git_index *", - "comment": "A git_index object to diff from." - }, - { - "name": "new_index", - "type": "git_index *", - "comment": "A git_index object to diff to." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_index *old_index, git_index *new_index, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_index *::git_index *::const git_diff_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a diff with the difference between two index objects.

\n", - "comments": "

The first index will be used for the "old_file" side of the delta and the second index will be used for the "new_file" side of the delta.

\n", - "group": "diff" - }, - "git_diff_merge": { - "type": "function", - "file": "git2/diff.h", - "line": 974, - "lineto": 976, - "args": [ - { - "name": "onto", - "type": "git_diff *", - "comment": "Diff to merge into." - }, - { - "name": "from", - "type": "const git_diff *", - "comment": "Diff to merge." - } - ], - "argline": "git_diff *onto, const git_diff *from", - "sig": "git_diff *::const git_diff *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Merge one diff into another.

\n", - "comments": "

This merges items from the "from" list into the "onto" list. The resulting diff will have all items that appear in either list. If an item appears in both lists, then it will be "merged" to appear as if the old version was from the "onto" list and the new version is from the "from" list (with the exception that if the item has a pending DELETE in the middle, then it will show as deleted).

\n", - "group": "diff" - }, - "git_diff_find_similar": { - "type": "function", - "file": "git2/diff.h", - "line": 990, - "lineto": 992, - "args": [ - { - "name": "diff", - "type": "git_diff *", - "comment": "diff to run detection algorithms on" - }, - { - "name": "options", - "type": "const git_diff_find_options *", - "comment": "Control how detection should be run, NULL for defaults" - } - ], - "argline": "git_diff *diff, const git_diff_find_options *options", - "sig": "git_diff *::const git_diff_find_options *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on failure" - }, - "description": "

Transform a diff marking file renames, copies, etc.

\n", - "comments": "

This modifies a diff in place, replacing old entries that look like renames or copies with new entries reflecting those changes. This also will, if requested, break modified files into add/remove pairs if the amount of change is above a threshold.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_find_similar-9" - ] - } - }, - "git_diff_num_deltas": { - "type": "function", - "file": "git2/diff.h", - "line": 1010, - "lineto": 1010, - "args": [ - { - "name": "diff", - "type": "const git_diff *", - "comment": "A git_diff generated by one of the above functions" - } - ], - "argline": "const git_diff *diff", - "sig": "const git_diff *", - "return": { - "type": "size_t", - "comment": " Count of number of deltas in the list" - }, - "description": "

Query how many diff records are there in a diff.

\n", - "comments": "", - "group": "diff", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_diff_num_deltas-29" - ] - } - }, - "git_diff_num_deltas_of_type": { - "type": "function", - "file": "git2/diff.h", - "line": 1023, - "lineto": 1024, - "args": [ - { - "name": "diff", - "type": "const git_diff *", - "comment": "A git_diff generated by one of the above functions" - }, - { - "name": "type", - "type": "git_delta_t", - "comment": "A git_delta_t value to filter the count" - } - ], - "argline": "const git_diff *diff, git_delta_t type", - "sig": "const git_diff *::git_delta_t", - "return": { - "type": "size_t", - "comment": " Count of number of deltas matching delta_t type" - }, - "description": "

Query how many diff deltas are there in a diff filtered by type.

\n", - "comments": "

This works just like git_diff_num_deltas() with an extra parameter that is a git_delta_t and returns just the count of how many deltas match that particular type.

\n", - "group": "diff" - }, - "git_diff_get_delta": { - "type": "function", - "file": "git2/diff.h", - "line": 1043, - "lineto": 1044, - "args": [ - { - "name": "diff", - "type": "const git_diff *", - "comment": "Diff list object" - }, - { - "name": "idx", - "type": "size_t", - "comment": "Index into diff list" - } - ], - "argline": "const git_diff *diff, size_t idx", - "sig": "const git_diff *::size_t", - "return": { - "type": "const git_diff_delta *", - "comment": " Pointer to git_diff_delta (or NULL if `idx` out of range)" - }, - "description": "

Return the diff delta for an entry in the diff list.

\n", - "comments": "

The git_diff_delta pointer points to internal data and you do not have to release it when you are done with it. It will go away when the * git_diff (or any associated git_patch) goes away.

\n\n

Note that the flags on the delta related to whether it has binary content or not may not be set if there are no attributes set for the file and there has been no reason to load the file data at this point. For now, if you need those flags to be up to date, your only option is to either use git_diff_foreach or create a git_patch.

\n", - "group": "diff" - }, - "git_diff_is_sorted_icase": { - "type": "function", - "file": "git2/diff.h", - "line": 1052, - "lineto": 1052, - "args": [ - { - "name": "diff", - "type": "const git_diff *", - "comment": "diff to check" - } - ], - "argline": "const git_diff *diff", - "sig": "const git_diff *", - "return": { - "type": "int", - "comment": " 0 if case sensitive, 1 if case is ignored" - }, - "description": "

Check if deltas are sorted case sensitively or insensitively.

\n", - "comments": "", - "group": "diff" - }, - "git_diff_foreach": { - "type": "function", - "file": "git2/diff.h", - "line": 1080, - "lineto": 1086, - "args": [ - { - "name": "diff", - "type": "git_diff *", - "comment": "A git_diff generated by one of the above functions." - }, - { - "name": "file_cb", - "type": "git_diff_file_cb", - "comment": "Callback function to make per file in the diff." - }, - { - "name": "binary_cb", - "type": "git_diff_binary_cb", - "comment": "Optional callback to make for binary files." - }, - { - "name": "hunk_cb", - "type": "git_diff_hunk_cb", - "comment": "Optional callback to make per hunk of text diff. This\n callback is called to describe a range of lines in the\n diff. It will not be issued for binary files." - }, - { - "name": "line_cb", - "type": "git_diff_line_cb", - "comment": "Optional callback to make per line of diff text. This\n same callback will be made for context lines, added, and\n removed lines, and even for a deleted trailing newline." - }, - { - "name": "payload", - "type": "void *", - "comment": "Reference pointer that will be passed to your callbacks." - } - ], - "argline": "git_diff *diff, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", - "sig": "git_diff *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all deltas in a diff issuing callbacks.

\n", - "comments": "

This will iterate through all of the files described in a diff. You should provide a file callback to learn about each file.

\n\n

The "hunk" and "line" callbacks are optional, and the text diff of the files will only be calculated if they are not NULL. Of course, these callbacks will not be invoked for binary files on the diff or for files whose only changed is a file mode change.

\n\n

Returning a non-zero value from any of the callbacks will terminate the iteration and return the value to the user.

\n", - "group": "diff" - }, - "git_diff_status_char": { - "type": "function", - "file": "git2/diff.h", - "line": 1099, - "lineto": 1099, - "args": [ - { - "name": "status", - "type": "git_delta_t", - "comment": "The git_delta_t value to look up" - } - ], - "argline": "git_delta_t status", - "sig": "git_delta_t", - "return": { - "type": "char", - "comment": " The single character label for that code" - }, - "description": "

Look up the single character abbreviation for a delta status code.

\n", - "comments": "

When you run git diff --name-status it uses single letter codes in the output such as 'A' for added, 'D' for deleted, 'M' for modified, etc. This function converts a git_delta_t value into these letters for your own purposes. GIT_DELTA_UNTRACKED will return a space (i.e. ' ').

\n", - "group": "diff" - }, - "git_diff_print": { - "type": "function", - "file": "git2/diff.h", - "line": 1125, - "lineto": 1129, - "args": [ - { - "name": "diff", - "type": "git_diff *", - "comment": "A git_diff generated by one of the above functions." - }, - { - "name": "format", - "type": "git_diff_format_t", - "comment": "A git_diff_format_t value to pick the text format." - }, - { - "name": "print_cb", - "type": "git_diff_line_cb", - "comment": "Callback to make per line of diff text." - }, - { - "name": "payload", - "type": "void *", - "comment": "Reference pointer that will be passed to your callback." - } - ], - "argline": "git_diff *diff, git_diff_format_t format, git_diff_line_cb print_cb, void *payload", - "sig": "git_diff *::git_diff_format_t::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Iterate over a diff generating formatted text output.

\n", - "comments": "

Returning a non-zero value from the callbacks will terminate the iteration and return the non-zero value to the caller.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_print-10" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_diff_print-30" - ] - } - }, - "git_diff_to_buf": { - "type": "function", - "file": "git2/diff.h", - "line": 1141, - "lineto": 1144, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "A pointer to a user-allocated git_buf that will\n contain the diff text" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "A git_diff generated by one of the above functions." - }, - { - "name": "format", - "type": "git_diff_format_t", - "comment": "A git_diff_format_t value to pick the text format." - } - ], - "argline": "git_buf *out, git_diff *diff, git_diff_format_t format", - "sig": "git_buf *::git_diff *::git_diff_format_t", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Produce the complete formatted text output from a diff into a\n buffer.

\n", - "comments": "", - "group": "diff" - }, - "git_diff_blobs": { - "type": "function", - "file": "git2/diff.h", - "line": 1181, - "lineto": 1191, - "args": [ - { - "name": "old_blob", - "type": "const git_blob *", - "comment": "Blob for old side of diff, or NULL for empty blob" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old blob as if it had this filename; can be NULL" - }, - { - "name": "new_blob", - "type": "const git_blob *", - "comment": "Blob for new side of diff, or NULL for empty blob" - }, - { - "name": "new_as_path", - "type": "const char *", - "comment": "Treat new blob as if it had this filename; can be NULL" - }, - { - "name": "options", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - }, - { - "name": "file_cb", - "type": "git_diff_file_cb", - "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" - }, - { - "name": "binary_cb", - "type": "git_diff_binary_cb", - "comment": "Callback for binary files; can be NULL" - }, - { - "name": "hunk_cb", - "type": "git_diff_hunk_cb", - "comment": "Callback for each hunk in diff; can be NULL" - }, - { - "name": "line_cb", - "type": "git_diff_line_cb", - "comment": "Callback for each line in diff; can be NULL" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to each callback function" - } - ], - "argline": "const git_blob *old_blob, const char *old_as_path, const git_blob *new_blob, const char *new_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", - "sig": "const git_blob *::const char *::const git_blob *::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Directly run a diff on two blobs.

\n", - "comments": "

Compared to a file, a blob lacks some contextual information. As such, the git_diff_file given to the callback will have some fake data; i.e. mode will be 0 and path will be NULL.

\n\n

NULL is allowed for either old_blob or new_blob and will be treated as an empty blob, with the oid set to NULL in the git_diff_file data. Passing NULL for both blobs is a noop; no callbacks will be made at all.

\n\n

We do run a binary content check on the blob content and if either blob looks like binary data, the git_diff_delta binary attribute will be set to 1 and no call to the hunk_cb nor line_cb will be made (unless you pass GIT_DIFF_FORCE_TEXT of course).

\n", - "group": "diff" - }, - "git_diff_blob_to_buffer": { - "type": "function", - "file": "git2/diff.h", - "line": 1218, - "lineto": 1229, - "args": [ - { - "name": "old_blob", - "type": "const git_blob *", - "comment": "Blob for old side of diff, or NULL for empty blob" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old blob as if it had this filename; can be NULL" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "Raw data for new side of diff, or NULL for empty" - }, - { - "name": "buffer_len", - "type": "size_t", - "comment": "Length of raw data for new side of diff" - }, - { - "name": "buffer_as_path", - "type": "const char *", - "comment": "Treat buffer as if it had this filename; can be NULL" - }, - { - "name": "options", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - }, - { - "name": "file_cb", - "type": "git_diff_file_cb", - "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" - }, - { - "name": "binary_cb", - "type": "git_diff_binary_cb", - "comment": "Callback for binary files; can be NULL" - }, - { - "name": "hunk_cb", - "type": "git_diff_hunk_cb", - "comment": "Callback for each hunk in diff; can be NULL" - }, - { - "name": "line_cb", - "type": "git_diff_line_cb", - "comment": "Callback for each line in diff; can be NULL" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to each callback function" - } - ], - "argline": "const git_blob *old_blob, const char *old_as_path, const char *buffer, size_t buffer_len, const char *buffer_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", - "sig": "const git_blob *::const char *::const char *::size_t::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Directly run a diff between a blob and a buffer.

\n", - "comments": "

As with git_diff_blobs, comparing a blob and buffer lacks some context, so the git_diff_file parameters to the callbacks will be faked a la the rules for git_diff_blobs().

\n\n

Passing NULL for old_blob will be treated as an empty blob (i.e. the file_cb will be invoked with GIT_DELTA_ADDED and the diff will be the entire content of the buffer added). Passing NULL to the buffer will do the reverse, with GIT_DELTA_REMOVED and blob content removed.

\n", - "group": "diff" - }, - "git_diff_buffers": { - "type": "function", - "file": "git2/diff.h", - "line": 1252, - "lineto": 1264, - "args": [ - { - "name": "old_buffer", - "type": "const void *", - "comment": "Raw data for old side of diff, or NULL for empty" - }, - { - "name": "old_len", - "type": "size_t", - "comment": "Length of the raw data for old side of the diff" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old buffer as if it had this filename; can be NULL" - }, - { - "name": "new_buffer", - "type": "const void *", - "comment": "Raw data for new side of diff, or NULL for empty" - }, - { - "name": "new_len", - "type": "size_t", - "comment": "Length of raw data for new side of diff" - }, - { - "name": "new_as_path", - "type": "const char *", - "comment": "Treat buffer as if it had this filename; can be NULL" - }, - { - "name": "options", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - }, - { - "name": "file_cb", - "type": "git_diff_file_cb", - "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" - }, - { - "name": "binary_cb", - "type": "git_diff_binary_cb", - "comment": "Callback for binary files; can be NULL" - }, - { - "name": "hunk_cb", - "type": "git_diff_hunk_cb", - "comment": "Callback for each hunk in diff; can be NULL" - }, - { - "name": "line_cb", - "type": "git_diff_line_cb", - "comment": "Callback for each line in diff; can be NULL" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to each callback function" - } - ], - "argline": "const void *old_buffer, size_t old_len, const char *old_as_path, const void *new_buffer, size_t new_len, const char *new_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", - "sig": "const void *::size_t::const char *::const void *::size_t::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Directly run a diff between two buffers.

\n", - "comments": "

Even more than with git_diff_blobs, comparing two buffer lacks context, so the git_diff_file parameters to the callbacks will be faked a la the rules for git_diff_blobs().

\n", - "group": "diff" - }, - "git_diff_from_buffer": { - "type": "function", - "file": "git2/diff.h", - "line": 1285, - "lineto": 1288, - "args": [ - { - "name": "out", - "type": "git_diff **", - "comment": "A pointer to a git_diff pointer that will be allocated." - }, - { - "name": "content", - "type": "const char *", - "comment": "The contents of a patch file" - }, - { - "name": "content_len", - "type": "size_t", - "comment": "The length of the patch file contents" - } - ], - "argline": "git_diff **out, const char *content, size_t content_len", - "sig": "git_diff **::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read the contents of a git patch file into a git_diff object.

\n", - "comments": "

The diff object produced is similar to the one that would be produced if you actually produced it computationally by comparing two trees, however there may be subtle differences. For example, a patch file likely contains abbreviated object IDs, so the object IDs in a git_diff_delta produced by this function will also be abbreviated.

\n\n

This function will only read patch files created by a git implementation, it will not read unified diffs produced by the diff program, nor any other types of patch files.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_from_buffer-11" - ] - } - }, - "git_diff_get_stats": { - "type": "function", - "file": "git2/diff.h", - "line": 1324, - "lineto": 1326, - "args": [ - { - "name": "out", - "type": "git_diff_stats **", - "comment": "Structure containg the diff statistics." - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "A git_diff generated by one of the above functions." - } - ], - "argline": "git_diff_stats **out, git_diff *diff", - "sig": "git_diff_stats **::git_diff *", - "return": { - "type": "int", - "comment": " 0 on success; non-zero on error" - }, - "description": "

Accumulate diff statistics for all patches.

\n", - "comments": "", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_get_stats-12" - ] - } - }, - "git_diff_stats_files_changed": { - "type": "function", - "file": "git2/diff.h", - "line": 1334, - "lineto": 1335, - "args": [ - { - "name": "stats", - "type": "const git_diff_stats *", - "comment": "A `git_diff_stats` generated by one of the above functions." - } - ], - "argline": "const git_diff_stats *stats", - "sig": "const git_diff_stats *", - "return": { - "type": "size_t", - "comment": " total number of files changed in the diff" - }, - "description": "

Get the total number of files changed in a diff

\n", - "comments": "", - "group": "diff" - }, - "git_diff_stats_insertions": { - "type": "function", - "file": "git2/diff.h", - "line": 1343, - "lineto": 1344, - "args": [ - { - "name": "stats", - "type": "const git_diff_stats *", - "comment": "A `git_diff_stats` generated by one of the above functions." - } - ], - "argline": "const git_diff_stats *stats", - "sig": "const git_diff_stats *", - "return": { - "type": "size_t", - "comment": " total number of insertions in the diff" - }, - "description": "

Get the total number of insertions in a diff

\n", - "comments": "", - "group": "diff" - }, - "git_diff_stats_deletions": { - "type": "function", - "file": "git2/diff.h", - "line": 1352, - "lineto": 1353, - "args": [ - { - "name": "stats", - "type": "const git_diff_stats *", - "comment": "A `git_diff_stats` generated by one of the above functions." - } - ], - "argline": "const git_diff_stats *stats", - "sig": "const git_diff_stats *", - "return": { - "type": "size_t", - "comment": " total number of deletions in the diff" - }, - "description": "

Get the total number of deletions in a diff

\n", - "comments": "", - "group": "diff" - }, - "git_diff_stats_to_buf": { - "type": "function", - "file": "git2/diff.h", - "line": 1364, - "lineto": 1368, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer to store the formatted diff statistics in." - }, - { - "name": "stats", - "type": "const git_diff_stats *", - "comment": "A `git_diff_stats` generated by one of the above functions." - }, - { - "name": "format", - "type": "git_diff_stats_format_t", - "comment": "Formatting option." - }, - { - "name": "width", - "type": "size_t", - "comment": "Target width for output (only affects GIT_DIFF_STATS_FULL)" - } - ], - "argline": "git_buf *out, const git_diff_stats *stats, git_diff_stats_format_t format, size_t width", - "sig": "git_buf *::const git_diff_stats *::git_diff_stats_format_t::size_t", - "return": { - "type": "int", - "comment": " 0 on success; non-zero on error" - }, - "description": "

Print diff statistics to a git_buf.

\n", - "comments": "", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_stats_to_buf-13" - ] - } - }, - "git_diff_stats_free": { - "type": "function", - "file": "git2/diff.h", - "line": 1376, - "lineto": 1376, - "args": [ - { - "name": "stats", - "type": "git_diff_stats *", - "comment": "The previously created statistics object;\n cannot be used after free." - } - ], - "argline": "git_diff_stats *stats", - "sig": "git_diff_stats *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Deallocate a git_diff_stats.

\n", - "comments": "", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_diff_stats_free-14" - ] - } - }, - "git_diff_patchid_options_init": { - "type": "function", - "file": "git2/diff.h", - "line": 1402, - "lineto": 1404, - "args": [ - { - "name": "opts", - "type": "git_diff_patchid_options *", - "comment": "The `git_diff_patchid_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DIFF_PATCHID_OPTIONS_VERSION`." - } - ], - "argline": "git_diff_patchid_options *opts, unsigned int version", - "sig": "git_diff_patchid_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_diff_patchid_options structure

\n", - "comments": "

Initializes a git_diff_patchid_options with default values. Equivalent to creating an instance with GIT_DIFF_PATCHID_OPTIONS_INIT.

\n", - "group": "diff" - }, - "git_diff_patchid": { - "type": "function", - "file": "git2/diff.h", - "line": 1425, - "lineto": 1425, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer where the calculated patch ID should be stored" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "The diff to calculate the ID for" - }, - { - "name": "opts", - "type": "git_diff_patchid_options *", - "comment": "Options for how to calculate the patch ID. This is\n intended for future changes, as currently no options are\n available." - } - ], - "argline": "git_oid *out, git_diff *diff, git_diff_patchid_options *opts", - "sig": "git_oid *::git_diff *::git_diff_patchid_options *", - "return": { - "type": "int", - "comment": " 0 on success, an error code otherwise." - }, - "description": "

Calculate the patch ID for the given patch.

\n", - "comments": "

Calculate a stable patch ID for the given patch by summing the hash of the file diffs, ignoring whitespace and line numbers. This can be used to derive whether two diffs are the same with a high probability.

\n\n

Currently, this function only calculates stable patch IDs, as defined in git-patch-id(1), and should in fact generate the same IDs as the upstream git project does.

\n", - "group": "diff" - }, - "git_error_last": { - "type": "function", - "file": "git2/errors.h", - "line": 126, - "lineto": 126, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "const git_error *", - "comment": " A git_error object." - }, - "description": "

Return the last git_error object that was generated for the\n current thread.

\n", - "comments": "

The default behaviour of this function is to return NULL if no previous error has occurred. However, libgit2's error strings are not cleared aggressively, so a prior (unrelated) error may be returned. This can be avoided by only calling this function if the prior call to a libgit2 API returned an error.

\n", - "group": "error", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_error_last-11", - "ex/v1.3.1/checkout.html#git_error_last-12", - "ex/v1.3.1/checkout.html#git_error_last-13", - "ex/v1.3.1/checkout.html#git_error_last-14" - ], - "commit.c": [ - "ex/v1.3.1/commit.html#git_error_last-2" - ], - "config.c": [ - "ex/v1.3.1/config.html#git_error_last-6", - "ex/v1.3.1/config.html#git_error_last-7", - "ex/v1.3.1/config.html#git_error_last-8" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_error_last-33" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_error_last-8", - "ex/v1.3.1/merge.html#git_error_last-9" - ] - } - }, - "git_error_clear": { - "type": "function", - "file": "git2/errors.h", - "line": 131, - "lineto": 131, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "void", - "comment": null - }, - "description": "

Clear the last library error that occurred for this thread.

\n", - "comments": "", - "group": "error" - }, - "git_error_set_str": { - "type": "function", - "file": "git2/errors.h", - "line": 150, - "lineto": 150, - "args": [ - { - "name": "error_class", - "type": "int", - "comment": "One of the `git_error_t` enum above describing the\n general subsystem that is responsible for the error." - }, - { - "name": "string", - "type": "const char *", - "comment": "The formatted error message to keep" - } - ], - "argline": "int error_class, const char *string", - "sig": "int::const char *", - "return": { - "type": "int", - "comment": " 0 on success or -1 on failure" - }, - "description": "

Set the error message string for this thread.

\n", - "comments": "

This function is public so that custom ODB backends and the like can relay an error message through libgit2. Most regular users of libgit2 will never need to call this function -- actually, calling it in most circumstances (for example, calling from within a callback function) will just end up having the value overwritten by libgit2 internals.

\n\n

This error message is stored in thread-local storage and only applies to the particular thread that this libgit2 call is made from.

\n", - "group": "error" - }, - "git_error_set_oom": { - "type": "function", - "file": "git2/errors.h", - "line": 161, - "lineto": 161, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "void", - "comment": null - }, - "description": "

Set the error message to a special value for memory allocation failure.

\n", - "comments": "

The normal git_error_set_str() function attempts to strdup() the string that is passed in. This is not a good idea when the error in question is a memory allocation failure. That circumstance has a special setter function that sets the error string to a known and statically allocated internal value.

\n", - "group": "error" - }, - "git_filter_list_load": { - "type": "function", - "file": "git2/filter.h", - "line": 129, - "lineto": 135, - "args": [ - { - "name": "filters", - "type": "git_filter_list **", - "comment": "Output newly created git_filter_list (or NULL)" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository object that contains `path`" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "The blob to which the filter will be applied (if known)" - }, - { - "name": "path", - "type": "const char *", - "comment": "Relative path of the file to be filtered" - }, - { - "name": "mode", - "type": "git_filter_mode_t", - "comment": "Filtering direction (WT->ODB or ODB->WT)" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of `git_filter_flag_t` flags" - } - ], - "argline": "git_filter_list **filters, git_repository *repo, git_blob *blob, const char *path, git_filter_mode_t mode, uint32_t flags", - "sig": "git_filter_list **::git_repository *::git_blob *::const char *::git_filter_mode_t::uint32_t", - "return": { - "type": "int", - "comment": " 0 on success (which could still return NULL if no filters are\n needed for the requested file), \n<\n0 on error" - }, - "description": "

Load the filter list for a given path.

\n", - "comments": "

This will return 0 (success) but set the output git_filter_list to NULL if no filters are requested for the given file.

\n", - "group": "filter" - }, - "git_filter_list_load_ext": { - "type": "function", - "file": "git2/filter.h", - "line": 152, - "lineto": 158, - "args": [ - { - "name": "filters", - "type": "git_filter_list **", - "comment": "Output newly created git_filter_list (or NULL)" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository object that contains `path`" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "The blob to which the filter will be applied (if known)" - }, - { - "name": "path", - "type": "const char *", - "comment": "Relative path of the file to be filtered" - }, - { - "name": "mode", - "type": "git_filter_mode_t", - "comment": "Filtering direction (WT->ODB or ODB->WT)" - }, - { - "name": "opts", - "type": "git_filter_options *", - "comment": "The `git_filter_options` to use when loading filters" - } - ], - "argline": "git_filter_list **filters, git_repository *repo, git_blob *blob, const char *path, git_filter_mode_t mode, git_filter_options *opts", - "sig": "git_filter_list **::git_repository *::git_blob *::const char *::git_filter_mode_t::git_filter_options *", - "return": { - "type": "int", - "comment": " 0 on success (which could still return NULL if no filters are\n needed for the requested file), \n<\n0 on error" - }, - "description": "

Load the filter list for a given path.

\n", - "comments": "

This will return 0 (success) but set the output git_filter_list to NULL if no filters are requested for the given file.

\n", - "group": "filter" - }, - "git_filter_list_contains": { - "type": "function", - "file": "git2/filter.h", - "line": 172, - "lineto": 174, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "A loaded git_filter_list (or NULL)" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the filter to query" - } - ], - "argline": "git_filter_list *filters, const char *name", - "sig": "git_filter_list *::const char *", - "return": { - "type": "int", - "comment": " 1 if the filter is in the list, 0 otherwise" - }, - "description": "

Query the filter list to see if a given filter (by name) will run.\n The built-in filters "crlf" and "ident" can be queried, otherwise this\n is the name of the filter specified by the filter attribute.

\n", - "comments": "

This will return 0 if the given filter is not in the list, or 1 if the filter will be applied.

\n", - "group": "filter" - }, - "git_filter_list_apply_to_buffer": { - "type": "function", - "file": "git2/filter.h", - "line": 185, - "lineto": 189, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Buffer to store the result of the filtering" - }, - { - "name": "filters", - "type": "git_filter_list *", - "comment": "A loaded git_filter_list (or NULL)" - }, - { - "name": "in", - "type": "const char *", - "comment": "Buffer containing the data to filter" - }, - { - "name": "in_len", - "type": "size_t", - "comment": "The length of the input buffer" - } - ], - "argline": "git_buf *out, git_filter_list *filters, const char *in, size_t in_len", - "sig": "git_buf *::git_filter_list *::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, an error code otherwise" - }, - "description": "

Apply filter list to a data buffer.

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_apply_to_file": { - "type": "function", - "file": "git2/filter.h", - "line": 200, - "lineto": 204, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer into which to store the filtered file" - }, - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the filtering" - }, - { - "name": "path", - "type": "const char *", - "comment": "the path of the file to filter, a relative path will be\n taken as relative to the workdir" - } - ], - "argline": "git_buf *out, git_filter_list *filters, git_repository *repo, const char *path", - "sig": "git_buf *::git_filter_list *::git_repository *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Apply a filter list to the contents of a file on disk

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_apply_to_blob": { - "type": "function", - "file": "git2/filter.h", - "line": 213, - "lineto": 216, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer into which to store the filtered file" - }, - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "the blob to filter" - } - ], - "argline": "git_buf *out, git_filter_list *filters, git_blob *blob", - "sig": "git_buf *::git_filter_list *::git_blob *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Apply a filter list to the contents of a blob

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_stream_buffer": { - "type": "function", - "file": "git2/filter.h", - "line": 226, - "lineto": 230, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "the buffer to filter" - }, - { - "name": "len", - "type": "size_t", - "comment": "the size of the buffer" - }, - { - "name": "target", - "type": "git_writestream *", - "comment": "the stream into which the data will be written" - } - ], - "argline": "git_filter_list *filters, const char *buffer, size_t len, git_writestream *target", - "sig": "git_filter_list *::const char *::size_t::git_writestream *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Apply a filter list to an arbitrary buffer as a stream

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_stream_file": { - "type": "function", - "file": "git2/filter.h", - "line": 241, - "lineto": 245, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the filtering" - }, - { - "name": "path", - "type": "const char *", - "comment": "the path of the file to filter, a relative path will be\n taken as relative to the workdir" - }, - { - "name": "target", - "type": "git_writestream *", - "comment": "the stream into which the data will be written" - } - ], - "argline": "git_filter_list *filters, git_repository *repo, const char *path, git_writestream *target", - "sig": "git_filter_list *::git_repository *::const char *::git_writestream *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Apply a filter list to a file as a stream

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_stream_blob": { - "type": "function", - "file": "git2/filter.h", - "line": 254, - "lineto": 257, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "the blob to filter" - }, - { - "name": "target", - "type": "git_writestream *", - "comment": "the stream into which the data will be written" - } - ], - "argline": "git_filter_list *filters, git_blob *blob, git_writestream *target", - "sig": "git_filter_list *::git_blob *::git_writestream *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Apply a filter list to a blob as a stream

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_free": { - "type": "function", - "file": "git2/filter.h", - "line": 264, - "lineto": 264, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "A git_filter_list created by `git_filter_list_load`" - } - ], - "argline": "git_filter_list *filters", - "sig": "git_filter_list *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a git_filter_list

\n", - "comments": "", - "group": "filter" - }, - "git_libgit2_init": { - "type": "function", - "file": "git2/global.h", - "line": 26, - "lineto": 26, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "int", - "comment": " the number of initializations of the library, or an error code." - }, - "description": "

Init the global state

\n", - "comments": "

This function must be called before any other libgit2 function in order to set up global state and threading.

\n\n

This function may be called multiple times - it will return the number of times the initialization has been called (including this one) that have not subsequently been shutdown.

\n", - "group": "libgit2", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_libgit2_init-34" - ] - } - }, - "git_libgit2_shutdown": { - "type": "function", - "file": "git2/global.h", - "line": 39, - "lineto": 39, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "int", - "comment": " the number of remaining initializations of the library, or an\n error code." - }, - "description": "

Shutdown the global state

\n", - "comments": "

Clean up the global state and threading context after calling it as many times as git_libgit2_init() was called - it will return the number of remainining initializations that have not been shutdown (after this one).

\n", - "group": "libgit2" - }, - "git_graph_ahead_behind": { - "type": "function", - "file": "git2/graph.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "ahead", - "type": "size_t *", - "comment": "number of unique from commits in `upstream`" - }, - { - "name": "behind", - "type": "size_t *", - "comment": "number of unique from commits in `local`" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "local", - "type": "const git_oid *", - "comment": "the commit for local" - }, - { - "name": "upstream", - "type": "const git_oid *", - "comment": "the commit for upstream" - } - ], - "argline": "size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream", - "sig": "size_t *::size_t *::git_repository *::const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Count the number of unique commits between two commit objects

\n", - "comments": "

There is no need for branches containing the commits to have any upstream relationship, but it helps to think of one as a branch and the other as its upstream, the ahead and behind values will be what git would report for the branches.

\n", - "group": "graph" - }, - "git_graph_descendant_of": { - "type": "function", - "file": "git2/graph.h", - "line": 52, - "lineto": 55, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "commit", - "type": "const git_oid *", - "comment": "a previously loaded commit" - }, - { - "name": "ancestor", - "type": "const git_oid *", - "comment": "a potential ancestor commit" - } - ], - "argline": "git_repository *repo, const git_oid *commit, const git_oid *ancestor", - "sig": "git_repository *::const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 1 if the given commit is a descendant of the potential ancestor,\n 0 if not, error code otherwise." - }, - "description": "

Determine if a commit is the descendant of another commit.

\n", - "comments": "

Note that a commit is not considered a descendant of itself, in contrast to git merge-base --is-ancestor.

\n", - "group": "graph" - }, - "git_graph_reachable_from_any": { - "type": "function", - "file": "git2/graph.h", - "line": 68, - "lineto": 72, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "commit", - "type": "const git_oid *", - "comment": "a previously loaded commit" - }, - { - "name": "descendant_array", - "type": "const git_oid []", - "comment": "oids of the commits" - }, - { - "name": "length", - "type": "size_t", - "comment": "the number of commits in the provided `descendant_array`" - } - ], - "argline": "git_repository *repo, const git_oid *commit, const git_oid [] descendant_array, size_t length", - "sig": "git_repository *::const git_oid *::const git_oid []::size_t", - "return": { - "type": "int", - "comment": " 1 if the given commit is an ancestor of any of the given potential\n descendants, 0 if not, error code otherwise." - }, - "description": "

Determine if a commit is reachable from any of a list of commits by\n following parent edges.

\n", - "comments": "", - "group": "graph" - }, - "git_ignore_add_rule": { - "type": "function", - "file": "git2/ignore.h", - "line": 37, - "lineto": 39, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository to add ignore rules to." - }, - { - "name": "rules", - "type": "const char *", - "comment": "Text of rules, a la the contents of a .gitignore file.\n It is okay to have multiple rules in the text; if so,\n each rule should be terminated with a newline." - } - ], - "argline": "git_repository *repo, const char *rules", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success" - }, - "description": "

Add ignore rules for a repository.

\n", - "comments": "

Excludesfile rules (i.e. .gitignore rules) are generally read from .gitignore files in the repository tree or from a shared system file only if a "core.excludesfile" config value is set. The library also keeps a set of per-repository internal ignores that can be configured in-memory and will not persist. This function allows you to add to that internal rules list.

\n\n

Example usage:

\n\n
 error = git_ignore_add_rule(myrepo, "*.c/ with space");\n
\n\n

This would add three rules to the ignores.

\n", - "group": "ignore" - }, - "git_ignore_clear_internal_rules": { - "type": "function", - "file": "git2/ignore.h", - "line": 52, - "lineto": 53, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository to remove ignore rules from." - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 on success" - }, - "description": "

Clear ignore rules that were explicitly added.

\n", - "comments": "

Resets to the default internal ignore rules. This will not turn off rules in .gitignore files that actually exist in the filesystem.

\n\n

The default internal ignores ignore ".", ".." and ".git" entries.

\n", - "group": "ignore" - }, - "git_ignore_path_is_ignored": { - "type": "function", - "file": "git2/ignore.h", - "line": 71, - "lineto": 74, - "args": [ - { - "name": "ignored", - "type": "int *", - "comment": "boolean returning 0 if the file is not ignored, 1 if it is" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "a repository object" - }, - { - "name": "path", - "type": "const char *", - "comment": "the file to check ignores for, relative to the repo's workdir." - } - ], - "argline": "int *ignored, git_repository *repo, const char *path", - "sig": "int *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 if ignore rules could be processed for the file (regardless\n of whether it exists or not), or an error \n<\n 0 if they could not." - }, - "description": "

Test if the ignore rules apply to a given path.

\n", - "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git check-ignore --no-index" on the given file, would it be shown or not?

\n", - "group": "ignore" - }, - "git_index_open": { - "type": "function", - "file": "git2/index.h", - "line": 187, - "lineto": 187, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "the pointer for the new index" - }, - { - "name": "index_path", - "type": "const char *", - "comment": "the path to the index file in disk" - } - ], - "argline": "git_index **out, const char *index_path", - "sig": "git_index **::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new bare Git index object as a memory representation\n of the Git index file in 'index_path', without a repository\n to back it.

\n", - "comments": "

Since there is no ODB or working directory behind this index, any Index methods which rely on these (e.g. index_add_bypath) will fail with the GIT_ERROR error code.

\n\n

If you need to access the index of an actual repository, use the git_repository_index wrapper.

\n\n

The index must be freed once it's no longer in use.

\n", - "group": "index" - }, - "git_index_new": { - "type": "function", - "file": "git2/index.h", - "line": 200, - "lineto": 200, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "the pointer for the new index" - } - ], - "argline": "git_index **out", - "sig": "git_index **", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an in-memory index object.

\n", - "comments": "

This index object cannot be read/written to the filesystem, but may be used to perform in-memory index operations.

\n\n

The index must be freed once it's no longer in use.

\n", - "group": "index" - }, - "git_index_free": { - "type": "function", - "file": "git2/index.h", - "line": 207, - "lineto": 207, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an existing index object.

\n", - "comments": "", - "group": "index", - "examples": { - "add.c": [ - "ex/v1.3.1/add.html#git_index_free-1" - ], - "commit.c": [ - "ex/v1.3.1/commit.html#git_index_free-3" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_index_free-35" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_index_free-2" - ], - "ls-files.c": [ - "ex/v1.3.1/ls-files.html#git_index_free-1" - ] - } - }, - "git_index_owner": { - "type": "function", - "file": "git2/index.h", - "line": 215, - "lineto": 215, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "The index" - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "git_repository *", - "comment": " A pointer to the repository" - }, - "description": "

Get the repository this index relates to

\n", - "comments": "", - "group": "index" - }, - "git_index_caps": { - "type": "function", - "file": "git2/index.h", - "line": 223, - "lineto": 223, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "An existing index object" - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "int", - "comment": " A combination of GIT_INDEX_CAPABILITY values" - }, - "description": "

Read index capabilities flags.

\n", - "comments": "", - "group": "index" - }, - "git_index_set_caps": { - "type": "function", - "file": "git2/index.h", - "line": 236, - "lineto": 236, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - }, - { - "name": "caps", - "type": "int", - "comment": "A combination of GIT_INDEX_CAPABILITY values" - } - ], - "argline": "git_index *index, int caps", - "sig": "git_index *::int", - "return": { - "type": "int", - "comment": " 0 on success, -1 on failure" - }, - "description": "

Set index capabilities flags.

\n", - "comments": "

If you pass GIT_INDEX_CAPABILITY_FROM_OWNER for the caps, then capabilities will be read from the config of the owner object, looking at core.ignorecase, core.filemode, core.symlinks.

\n", - "group": "index" - }, - "git_index_version": { - "type": "function", - "file": "git2/index.h", - "line": 248, - "lineto": 248, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "unsigned int", - "comment": " the index version" - }, - "description": "

Get index on-disk version.

\n", - "comments": "

Valid return values are 2, 3, or 4. If 3 is returned, an index with version 2 may be written instead, if the extension data in version 3 is not necessary.

\n", - "group": "index" - }, - "git_index_set_version": { - "type": "function", - "file": "git2/index.h", - "line": 261, - "lineto": 261, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The new version number" - } - ], - "argline": "git_index *index, unsigned int version", - "sig": "git_index *::unsigned int", - "return": { - "type": "int", - "comment": " 0 on success, -1 on failure" - }, - "description": "

Set index on-disk version.

\n", - "comments": "

Valid values are 2, 3, or 4. If 2 is given, git_index_write may write an index with version 3 instead, if necessary to accurately represent the index.

\n", - "group": "index" - }, - "git_index_read": { - "type": "function", - "file": "git2/index.h", - "line": 280, - "lineto": 280, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "force", - "type": "int", - "comment": "if true, always reload, vs. only read if file has changed" - } - ], - "argline": "git_index *index, int force", - "sig": "git_index *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Update the contents of an existing index object in memory by reading\n from the hard disk.

\n", - "comments": "

If force is true, this performs a "hard" read that discards in-memory changes and always reloads the on-disk index data. If there is no on-disk version, the index will be cleared.

\n\n

If force is false, this does a "soft" read that reloads the index data from disk only if it has changed since the last time it was loaded. Purely in-memory index data will be untouched. Be aware: if there are changes on disk, unwritten in-memory changes are discarded.

\n", - "group": "index" - }, - "git_index_write": { - "type": "function", - "file": "git2/index.h", - "line": 289, - "lineto": 289, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write an existing index object from memory back to disk\n using an atomic file lock.

\n", - "comments": "", - "group": "index", - "examples": { - "add.c": [ - "ex/v1.3.1/add.html#git_index_write-2" - ], - "commit.c": [ - "ex/v1.3.1/commit.html#git_index_write-4" - ] - } - }, - "git_index_path": { - "type": "function", - "file": "git2/index.h", - "line": 297, - "lineto": 297, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "an existing index object" - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "const char *", - "comment": " path to index file or NULL for in-memory index" - }, - "description": "

Get the full path to the index file on disk.

\n", - "comments": "", - "group": "index" - }, - "git_index_checksum": { - "type": "function", - "file": "git2/index.h", - "line": 309, - "lineto": 309, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "const git_oid *", - "comment": " a pointer to the checksum of the index" - }, - "description": "

Get the checksum of the index

\n", - "comments": "

This checksum is the SHA-1 hash over the index file (except the last 20 bytes which are the checksum itself). In cases where the index does not exist on-disk, it will be zeroed out.

\n", - "group": "index" - }, - "git_index_read_tree": { - "type": "function", - "file": "git2/index.h", - "line": 320, - "lineto": 320, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": "tree to read" - } - ], - "argline": "git_index *index, const git_tree *tree", - "sig": "git_index *::const git_tree *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read a tree into the index file with stats

\n", - "comments": "

The current index contents will be replaced by the specified tree.

\n", - "group": "index" - }, - "git_index_write_tree": { - "type": "function", - "file": "git2/index.h", - "line": 341, - "lineto": 341, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the written tree" - }, - { - "name": "index", - "type": "git_index *", - "comment": "Index to write" - } - ], - "argline": "git_oid *out, git_index *index", - "sig": "git_oid *::git_index *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNMERGED when the index is not clean\n or an error code" - }, - "description": "

Write the index as a tree

\n", - "comments": "

This method will scan the index and write a representation of its current state back to disk; it recursively creates tree objects for each of the subtrees stored in the index, but only returns the OID of the root tree. This is the OID that can be used e.g. to create a commit.

\n\n

The index instance cannot be bare, and needs to be associated to an existing repository.

\n\n

The index must not contain any file in conflict.

\n", - "group": "index", - "examples": { - "commit.c": [ - "ex/v1.3.1/commit.html#git_index_write_tree-5" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_index_write_tree-3" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_index_write_tree-10" - ] - } - }, - "git_index_write_tree_to": { - "type": "function", - "file": "git2/index.h", - "line": 358, - "lineto": 358, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer where to store OID of the written tree" - }, - { - "name": "index", - "type": "git_index *", - "comment": "Index to write" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to write the tree" - } - ], - "argline": "git_oid *out, git_index *index, git_repository *repo", - "sig": "git_oid *::git_index *::git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNMERGED when the index is not clean\n or an error code" - }, - "description": "

Write the index as a tree to the given repository

\n", - "comments": "

This method will do the same as git_index_write_tree, but letting the user choose the repository where the tree will be written.

\n\n

The index must not contain any file in conflict.

\n", - "group": "index" - }, - "git_index_entrycount": { - "type": "function", - "file": "git2/index.h", - "line": 377, - "lineto": 377, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "an existing index object" - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "size_t", - "comment": " integer of count of current entries" - }, - "description": "

Get the count of entries currently in the index

\n", - "comments": "", - "group": "index", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_index_entrycount-36" - ], - "ls-files.c": [ - "ex/v1.3.1/ls-files.html#git_index_entrycount-2" - ] - } - }, - "git_index_clear": { - "type": "function", - "file": "git2/index.h", - "line": 388, - "lineto": 388, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "int", - "comment": " 0 on success, error code \n<\n 0 on failure" - }, - "description": "

Clear the contents (all the entries) of an index object.

\n", - "comments": "

This clears the index object in memory; changes must be explicitly written to disk for them to take effect persistently.

\n", - "group": "index" - }, - "git_index_get_byindex": { - "type": "function", - "file": "git2/index.h", - "line": 401, - "lineto": 402, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "n", - "type": "size_t", - "comment": "the position of the entry" - } - ], - "argline": "git_index *index, size_t n", - "sig": "git_index *::size_t", - "return": { - "type": "const git_index_entry *", - "comment": " a pointer to the entry; NULL if out of bounds" - }, - "description": "

Get a pointer to one of the entries in the index

\n", - "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", - "group": "index", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_index_get_byindex-37" - ], - "ls-files.c": [ - "ex/v1.3.1/ls-files.html#git_index_get_byindex-3" - ] - } - }, - "git_index_get_bypath": { - "type": "function", - "file": "git2/index.h", - "line": 416, - "lineto": 417, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to search" - }, - { - "name": "stage", - "type": "int", - "comment": "stage to search" - } - ], - "argline": "git_index *index, const char *path, int stage", - "sig": "git_index *::const char *::int", - "return": { - "type": "const git_index_entry *", - "comment": " a pointer to the entry; NULL if it was not found" - }, - "description": "

Get a pointer to one of the entries in the index

\n", - "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", - "group": "index", - "examples": { - "ls-files.c": [ - "ex/v1.3.1/ls-files.html#git_index_get_bypath-4" - ] - } - }, - "git_index_remove": { - "type": "function", - "file": "git2/index.h", - "line": 427, - "lineto": 427, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to search" - }, - { - "name": "stage", - "type": "int", - "comment": "stage to search" - } - ], - "argline": "git_index *index, const char *path, int stage", - "sig": "git_index *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove an entry from the index

\n", - "comments": "", - "group": "index" - }, - "git_index_remove_directory": { - "type": "function", - "file": "git2/index.h", - "line": 437, - "lineto": 438, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "dir", - "type": "const char *", - "comment": "container directory path" - }, - { - "name": "stage", - "type": "int", - "comment": "stage to search" - } - ], - "argline": "git_index *index, const char *dir, int stage", - "sig": "git_index *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove all entries from the index under a given directory

\n", - "comments": "", - "group": "index" - }, - "git_index_add": { - "type": "function", - "file": "git2/index.h", - "line": 454, - "lineto": 454, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "source_entry", - "type": "const git_index_entry *", - "comment": "new entry object" - } - ], - "argline": "git_index *index, const git_index_entry *source_entry", - "sig": "git_index *::const git_index_entry *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update an index entry from an in-memory struct

\n", - "comments": "

If a previous index entry exists that has the same path and stage as the given 'source_entry', it will be replaced. Otherwise, the 'source_entry' will be added.

\n\n

A full copy (including the 'path' string) of the given 'source_entry' will be inserted on the index.

\n", - "group": "index" - }, - "git_index_entry_stage": { - "type": "function", - "file": "git2/index.h", - "line": 466, - "lineto": 466, - "args": [ - { - "name": "entry", - "type": "const git_index_entry *", - "comment": "The entry" - } - ], - "argline": "const git_index_entry *entry", - "sig": "const git_index_entry *", - "return": { - "type": "int", - "comment": " the stage number" - }, - "description": "

Return the stage number from a git index entry

\n", - "comments": "

This entry is calculated from the entry's flag attribute like this:

\n\n
(entry->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT\n
\n", - "group": "index" - }, - "git_index_entry_is_conflict": { - "type": "function", - "file": "git2/index.h", - "line": 475, - "lineto": 475, - "args": [ - { - "name": "entry", - "type": "const git_index_entry *", - "comment": "The entry" - } - ], - "argline": "const git_index_entry *entry", - "sig": "const git_index_entry *", - "return": { - "type": "int", - "comment": " 1 if the entry is a conflict entry, 0 otherwise" - }, - "description": "

Return whether the given index entry is a conflict (has a high stage\n entry). This is simply shorthand for git_index_entry_stage > 0.

\n", - "comments": "", - "group": "index" - }, - "git_index_iterator_new": { - "type": "function", - "file": "git2/index.h", - "line": 495, - "lineto": 497, - "args": [ - { - "name": "iterator_out", - "type": "git_index_iterator **", - "comment": "The newly created iterator" - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to iterate" - } - ], - "argline": "git_index_iterator **iterator_out, git_index *index", - "sig": "git_index_iterator **::git_index *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an iterator that will return every entry contained in the\n index at the time of creation. Entries are returned in order,\n sorted by path. This iterator is backed by a snapshot that allows\n callers to modify the index while iterating without affecting the\n iterator.

\n", - "comments": "", - "group": "index" - }, - "git_index_iterator_next": { - "type": "function", - "file": "git2/index.h", - "line": 506, - "lineto": 508, - "args": [ - { - "name": "out", - "type": "const git_index_entry **", - "comment": "Pointer to store the index entry in" - }, - { - "name": "iterator", - "type": "git_index_iterator *", - "comment": "The iterator" - } - ], - "argline": "const git_index_entry **out, git_index_iterator *iterator", - "sig": "const git_index_entry **::git_index_iterator *", - "return": { - "type": "int", - "comment": " 0, GIT_ITEROVER on iteration completion or an error code" - }, - "description": "

Return the next index entry in-order from the iterator.

\n", - "comments": "", - "group": "index" - }, - "git_index_iterator_free": { - "type": "function", - "file": "git2/index.h", - "line": 515, - "lineto": 515, - "args": [ - { - "name": "iterator", - "type": "git_index_iterator *", - "comment": "The iterator to free" - } - ], - "argline": "git_index_iterator *iterator", - "sig": "git_index_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the index iterator

\n", - "comments": "", - "group": "index" - }, - "git_index_add_bypath": { - "type": "function", - "file": "git2/index.h", - "line": 546, - "lineto": 546, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "filename to add" - } - ], - "argline": "git_index *index, const char *path", - "sig": "git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update an index entry from a file on disk

\n", - "comments": "

The file path must be relative to the repository's working folder and must be readable.

\n\n

This method will fail in bare index instances.

\n\n

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", - "group": "index" - }, - "git_index_add_from_buffer": { - "type": "function", - "file": "git2/index.h", - "line": 574, - "lineto": 577, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "entry", - "type": "const git_index_entry *", - "comment": "filename to add" - }, - { - "name": "buffer", - "type": "const void *", - "comment": "data to be written into the blob" - }, - { - "name": "len", - "type": "size_t", - "comment": "length of the data" - } - ], - "argline": "git_index *index, const git_index_entry *entry, const void *buffer, size_t len", - "sig": "git_index *::const git_index_entry *::const void *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update an index entry from a buffer in memory

\n", - "comments": "

This method will create a blob in the repository that owns the index and then add the index entry to the index. The path of the entry represents the position of the blob relative to the repository's root folder.

\n\n

If a previous index entry exists that has the same path as the given 'entry', it will be replaced. Otherwise, the 'entry' will be added.

\n\n

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", - "group": "index" - }, - "git_index_remove_bypath": { - "type": "function", - "file": "git2/index.h", - "line": 593, - "lineto": 593, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "filename to remove" - } - ], - "argline": "git_index *index, const char *path", - "sig": "git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove an index entry corresponding to a file on disk

\n", - "comments": "

The file path must be relative to the repository's working folder. It may exist.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", - "group": "index" - }, - "git_index_add_all": { - "type": "function", - "file": "git2/index.h", - "line": 641, - "lineto": 646, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "pathspec", - "type": "const git_strarray *", - "comment": "array of path patterns" - }, - { - "name": "flags", - "type": "unsigned int", - "comment": "combination of git_index_add_option_t flags" - }, - { - "name": "callback", - "type": "git_index_matched_path_cb", - "comment": "notification callback for each added/updated path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." - }, - { - "name": "payload", - "type": "void *", - "comment": "payload passed through to callback function" - } - ], - "argline": "git_index *index, const git_strarray *pathspec, unsigned int flags, git_index_matched_path_cb callback, void *payload", - "sig": "git_index *::const git_strarray *::unsigned int::git_index_matched_path_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, negative callback return value, or error code" - }, - "description": "

Add or update index entries matching files in the working directory.

\n", - "comments": "

This method will fail in bare index instances.

\n\n

The pathspec is a list of file names or shell glob patterns that will be matched against files in the repository's working directory. Each file that matches will be added to the index (either updating an existing entry or adding a new entry). You can disable glob expansion and force exact matching with the GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH flag.

\n\n

Files that are ignored will be skipped (unlike git_index_add_bypath). If a file is already tracked in the index, then it will be updated even if it is ignored. Pass the GIT_INDEX_ADD_FORCE flag to skip the checking of ignore rules.

\n\n

To emulate git add -A and generate an error if the pathspec contains the exact path of an ignored file (when not using FORCE), add the GIT_INDEX_ADD_CHECK_PATHSPEC flag. This checks that each entry in the pathspec that is an exact match to a filename on disk is either not ignored or already in the index. If this check fails, the function will return GIT_EINVALIDSPEC.

\n\n

To emulate git add -A with the "dry-run" option, just use a callback function that always returns a positive value. See below for details.

\n\n

If any files are currently the result of a merge conflict, those files will no longer be marked as conflicting. The data about the conflicts will be moved to the "resolve undo" (REUC) section.

\n\n

If you provide a callback function, it will be invoked on each matching item in the working directory immediately before it is added to / updated in the index. Returning zero will add the item to the index, greater than zero will skip the item, and less than zero will abort the scan and return that value to the caller.

\n", - "group": "index", - "examples": { - "add.c": [ - "ex/v1.3.1/add.html#git_index_add_all-3" - ] - } - }, - "git_index_remove_all": { - "type": "function", - "file": "git2/index.h", - "line": 663, - "lineto": 667, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - }, - { - "name": "pathspec", - "type": "const git_strarray *", - "comment": "array of path patterns" - }, - { - "name": "callback", - "type": "git_index_matched_path_cb", - "comment": "notification callback for each removed path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." - }, - { - "name": "payload", - "type": "void *", - "comment": "payload passed through to callback function" - } - ], - "argline": "git_index *index, const git_strarray *pathspec, git_index_matched_path_cb callback, void *payload", - "sig": "git_index *::const git_strarray *::git_index_matched_path_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, negative callback return value, or error code" - }, - "description": "

Remove all matching index entries.

\n", - "comments": "

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is removed. Return 0 to remove the item, > 0 to skip the item, and < 0 to abort the scan.

\n", - "group": "index" - }, - "git_index_update_all": { - "type": "function", - "file": "git2/index.h", - "line": 692, - "lineto": 696, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - }, - { - "name": "pathspec", - "type": "const git_strarray *", - "comment": "array of path patterns" - }, - { - "name": "callback", - "type": "git_index_matched_path_cb", - "comment": "notification callback for each updated path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." - }, - { - "name": "payload", - "type": "void *", - "comment": "payload passed through to callback function" - } - ], - "argline": "git_index *index, const git_strarray *pathspec, git_index_matched_path_cb callback, void *payload", - "sig": "git_index *::const git_strarray *::git_index_matched_path_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, negative callback return value, or error code" - }, - "description": "

Update all index entries to match the working directory

\n", - "comments": "

This method will fail in bare index instances.

\n\n

This scans the existing index entries and synchronizes them with the working directory, deleting them if the corresponding working directory file no longer exists otherwise updating the information (including adding the latest version of file to the ODB if needed).

\n\n

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is updated (either refreshed or removed depending on working directory state). Return 0 to proceed with updating the item, > 0 to skip the item, and < 0 to abort the scan.

\n", - "group": "index", - "examples": { - "add.c": [ - "ex/v1.3.1/add.html#git_index_update_all-4" - ] - } - }, - "git_index_find": { - "type": "function", - "file": "git2/index.h", - "line": 707, - "lineto": 707, - "args": [ - { - "name": "at_pos", - "type": "size_t *", - "comment": "the address to which the position of the index entry is written (optional)" - }, - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to search" - } - ], - "argline": "size_t *at_pos, git_index *index, const char *path", - "sig": "size_t *::git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Find the first position of any entries which point to given\n path in the Git index.

\n", - "comments": "", - "group": "index" - }, - "git_index_find_prefix": { - "type": "function", - "file": "git2/index.h", - "line": 718, - "lineto": 718, - "args": [ - { - "name": "at_pos", - "type": "size_t *", - "comment": "the address to which the position of the index entry is written (optional)" - }, - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "prefix", - "type": "const char *", - "comment": "the prefix to search for" - } - ], - "argline": "size_t *at_pos, git_index *index, const char *prefix", - "sig": "size_t *::git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Find the first position of any entries matching a prefix. To find the first position\n of a path inside a given folder, suffix the prefix with a '/'.

\n", - "comments": "", - "group": "index" - }, - "git_index_conflict_add": { - "type": "function", - "file": "git2/index.h", - "line": 743, - "lineto": 747, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "ancestor_entry", - "type": "const git_index_entry *", - "comment": "the entry data for the ancestor of the conflict" - }, - { - "name": "our_entry", - "type": "const git_index_entry *", - "comment": "the entry data for our side of the merge conflict" - }, - { - "name": "their_entry", - "type": "const git_index_entry *", - "comment": "the entry data for their side of the merge conflict" - } - ], - "argline": "git_index *index, const git_index_entry *ancestor_entry, const git_index_entry *our_entry, const git_index_entry *their_entry", - "sig": "git_index *::const git_index_entry *::const git_index_entry *::const git_index_entry *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update index entries to represent a conflict. Any staged\n entries that exist at the given paths will be removed.

\n", - "comments": "

The entries are the entries from the tree included in the merge. Any entry may be null to indicate that that file was not present in the trees during the merge. For example, ancestor_entry may be NULL to indicate that a file was added in both branches and must be resolved.

\n", - "group": "index" - }, - "git_index_conflict_get": { - "type": "function", - "file": "git2/index.h", - "line": 763, - "lineto": 768, - "args": [ - { - "name": "ancestor_out", - "type": "const git_index_entry **", - "comment": "Pointer to store the ancestor entry" - }, - { - "name": "our_out", - "type": "const git_index_entry **", - "comment": "Pointer to store the our entry" - }, - { - "name": "their_out", - "type": "const git_index_entry **", - "comment": "Pointer to store the their entry" - }, - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to search" - } - ], - "argline": "const git_index_entry **ancestor_out, const git_index_entry **our_out, const git_index_entry **their_out, git_index *index, const char *path", - "sig": "const git_index_entry **::const git_index_entry **::const git_index_entry **::git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the index entries that represent a conflict of a single file.

\n", - "comments": "

The entries are not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", - "group": "index" - }, - "git_index_conflict_remove": { - "type": "function", - "file": "git2/index.h", - "line": 777, - "lineto": 777, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to remove conflicts for" - } - ], - "argline": "git_index *index, const char *path", - "sig": "git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Removes the index entries that represent a conflict of a single file.

\n", - "comments": "", - "group": "index" - }, - "git_index_conflict_cleanup": { - "type": "function", - "file": "git2/index.h", - "line": 785, - "lineto": 785, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove all conflicts in the index (entries with a stage greater than 0).

\n", - "comments": "", - "group": "index" - }, - "git_index_has_conflicts": { - "type": "function", - "file": "git2/index.h", - "line": 792, - "lineto": 792, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": null - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "int", - "comment": " 1 if at least one conflict is found, 0 otherwise." - }, - "description": "

Determine if the index contains entries representing file conflicts.

\n", - "comments": "", - "group": "index", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_index_has_conflicts-11" - ] - } - }, - "git_index_conflict_iterator_new": { - "type": "function", - "file": "git2/index.h", - "line": 803, - "lineto": 805, - "args": [ - { - "name": "iterator_out", - "type": "git_index_conflict_iterator **", - "comment": "The newly created conflict iterator" - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to scan" - } - ], - "argline": "git_index_conflict_iterator **iterator_out, git_index *index", - "sig": "git_index_conflict_iterator **::git_index *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an iterator for the conflicts in the index.

\n", - "comments": "

The index must not be modified while iterating; the results are undefined.

\n", - "group": "index", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_index_conflict_iterator_new-12" - ] - } - }, - "git_index_conflict_next": { - "type": "function", - "file": "git2/index.h", - "line": 817, - "lineto": 821, - "args": [ - { - "name": "ancestor_out", - "type": "const git_index_entry **", - "comment": "Pointer to store the ancestor side of the conflict" - }, - { - "name": "our_out", - "type": "const git_index_entry **", - "comment": "Pointer to store our side of the conflict" - }, - { - "name": "their_out", - "type": "const git_index_entry **", - "comment": "Pointer to store their side of the conflict" - }, - { - "name": "iterator", - "type": "git_index_conflict_iterator *", - "comment": null - } - ], - "argline": "const git_index_entry **ancestor_out, const git_index_entry **our_out, const git_index_entry **their_out, git_index_conflict_iterator *iterator", - "sig": "const git_index_entry **::const git_index_entry **::const git_index_entry **::git_index_conflict_iterator *", - "return": { - "type": "int", - "comment": " 0 (no error), GIT_ITEROVER (iteration is done) or an error code\n (negative value)" - }, - "description": "

Returns the current conflict (ancestor, ours and theirs entry) and\n advance the iterator internally to the next value.

\n", - "comments": "", - "group": "index", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_index_conflict_next-13" - ] - } - }, - "git_index_conflict_iterator_free": { - "type": "function", - "file": "git2/index.h", - "line": 828, - "lineto": 829, - "args": [ - { - "name": "iterator", - "type": "git_index_conflict_iterator *", - "comment": "pointer to the iterator" - } - ], - "argline": "git_index_conflict_iterator *iterator", - "sig": "git_index_conflict_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees a git_index_conflict_iterator.

\n", - "comments": "", - "group": "index", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_index_conflict_iterator_free-14" - ] - } - }, - "git_indexer_options_init": { - "type": "function", - "file": "git2/indexer.h", - "line": 86, - "lineto": 88, - "args": [ - { - "name": "opts", - "type": "git_indexer_options *", - "comment": "the `git_indexer_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "Version of struct; pass `GIT_INDEXER_OPTIONS_VERSION`" - } - ], - "argline": "git_indexer_options *opts, unsigned int version", - "sig": "git_indexer_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initializes a git_indexer_options with default values. Equivalent to\n creating an instance with GIT_INDEXER_OPTIONS_INIT.

\n", - "comments": "", - "group": "indexer" - }, - "git_indexer_new": { - "type": "function", - "file": "git2/indexer.h", - "line": 102, - "lineto": 107, - "args": [ - { - "name": "out", - "type": "git_indexer **", - "comment": "where to store the indexer instance" - }, - { - "name": "path", - "type": "const char *", - "comment": "to the directory where the packfile should be stored" - }, - { - "name": "mode", - "type": "unsigned int", - "comment": "permissions to use creating packfile or 0 for defaults" - }, - { - "name": "odb", - "type": "git_odb *", - "comment": "object database from which to read base objects when\n fixing thin packs. Pass NULL if no thin pack is expected (an error\n will be returned if there are bases missing)" - }, - { - "name": "opts", - "type": "git_indexer_options *", - "comment": "Optional structure containing additional options. See\n `git_indexer_options` above." - } - ], - "argline": "git_indexer **out, const char *path, unsigned int mode, git_odb *odb, git_indexer_options *opts", - "sig": "git_indexer **::const char *::unsigned int::git_odb *::git_indexer_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a new indexer instance

\n", - "comments": "", - "group": "indexer" - }, - "git_indexer_append": { - "type": "function", - "file": "git2/indexer.h", - "line": 117, - "lineto": 117, - "args": [ - { - "name": "idx", - "type": "git_indexer *", - "comment": "the indexer" - }, - { - "name": "data", - "type": "const void *", - "comment": "the data to add" - }, - { - "name": "size", - "type": "size_t", - "comment": "the size of the data in bytes" - }, - { - "name": "stats", - "type": "git_indexer_progress *", - "comment": "stat storage" - } - ], - "argline": "git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats", - "sig": "git_indexer *::const void *::size_t::git_indexer_progress *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Add data to the indexer

\n", - "comments": "", - "group": "indexer" - }, - "git_indexer_commit": { - "type": "function", - "file": "git2/indexer.h", - "line": 126, - "lineto": 126, - "args": [ - { - "name": "idx", - "type": "git_indexer *", - "comment": "the indexer" - }, - { - "name": "stats", - "type": "git_indexer_progress *", - "comment": null - } - ], - "argline": "git_indexer *idx, git_indexer_progress *stats", - "sig": "git_indexer *::git_indexer_progress *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Finalize the pack and index

\n", - "comments": "

Resolve any pending deltas and write out the index file

\n", - "group": "indexer" - }, - "git_indexer_hash": { - "type": "function", - "file": "git2/indexer.h", - "line": 136, - "lineto": 136, - "args": [ - { - "name": "idx", - "type": "const git_indexer *", - "comment": "the indexer instance" - } - ], - "argline": "const git_indexer *idx", - "sig": "const git_indexer *", - "return": { - "type": "const git_oid *", - "comment": null - }, - "description": "

Get the packfile's hash

\n", - "comments": "

A packfile's name is derived from the sorted hashing of all object names. This is only correct after the index has been finalized.

\n", - "group": "indexer" - }, - "git_indexer_free": { - "type": "function", - "file": "git2/indexer.h", - "line": 143, - "lineto": 143, - "args": [ - { - "name": "idx", - "type": "git_indexer *", - "comment": "the indexer to free" - } - ], - "argline": "git_indexer *idx", - "sig": "git_indexer *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the indexer and its resources

\n", - "comments": "", - "group": "indexer" - }, - "git_mailmap_new": { - "type": "function", - "file": "git2/mailmap.h", - "line": 32, - "lineto": 32, - "args": [ - { - "name": "out", - "type": "git_mailmap **", - "comment": "pointer to store the new mailmap" - } - ], - "argline": "git_mailmap **out", - "sig": "git_mailmap **", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Allocate a new mailmap object.

\n", - "comments": "

This object is empty, so you'll have to add a mailmap file before you can do anything with it. The mailmap must be freed with 'git_mailmap_free'.

\n", - "group": "mailmap" - }, - "git_mailmap_free": { - "type": "function", - "file": "git2/mailmap.h", - "line": 39, - "lineto": 39, - "args": [ - { - "name": "mm", - "type": "git_mailmap *", - "comment": "the mailmap to free" - } - ], - "argline": "git_mailmap *mm", - "sig": "git_mailmap *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the mailmap and its associated memory.

\n", - "comments": "", - "group": "mailmap" - }, - "git_mailmap_add_entry": { - "type": "function", - "file": "git2/mailmap.h", - "line": 52, - "lineto": 54, - "args": [ - { - "name": "mm", - "type": "git_mailmap *", - "comment": "mailmap to add the entry to" - }, - { - "name": "real_name", - "type": "const char *", - "comment": "the real name to use, or NULL" - }, - { - "name": "real_email", - "type": "const char *", - "comment": "the real email to use, or NULL" - }, - { - "name": "replace_name", - "type": "const char *", - "comment": "the name to replace, or NULL" - }, - { - "name": "replace_email", - "type": "const char *", - "comment": "the email to replace" - } - ], - "argline": "git_mailmap *mm, const char *real_name, const char *real_email, const char *replace_name, const char *replace_email", - "sig": "git_mailmap *::const char *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Add a single entry to the given mailmap object. If the entry already exists,\n it will be replaced with the new entry.

\n", - "comments": "", - "group": "mailmap" - }, - "git_mailmap_from_buffer": { - "type": "function", - "file": "git2/mailmap.h", - "line": 64, - "lineto": 65, - "args": [ - { - "name": "out", - "type": "git_mailmap **", - "comment": "pointer to store the new mailmap" - }, - { - "name": "buf", - "type": "const char *", - "comment": "buffer to parse the mailmap from" - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the input buffer" - } - ], - "argline": "git_mailmap **out, const char *buf, size_t len", - "sig": "git_mailmap **::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Create a new mailmap instance containing a single mailmap file

\n", - "comments": "", - "group": "mailmap" - }, - "git_mailmap_from_repository": { - "type": "function", - "file": "git2/mailmap.h", - "line": 81, - "lineto": 82, - "args": [ - { - "name": "out", - "type": "git_mailmap **", - "comment": "pointer to store the new mailmap" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository to load mailmap information from" - } - ], - "argline": "git_mailmap **out, git_repository *repo", - "sig": "git_mailmap **::git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Create a new mailmap instance from a repository, loading mailmap files based\n on the repository's configuration.

\n", - "comments": "

Mailmaps are loaded in the following order: 1. '.mailmap' in the root of the repository's working directory, if present. 2. The blob object identified by the 'mailmap.blob' config entry, if set. [NOTE: 'mailmap.blob' defaults to 'HEAD:.mailmap' in bare repositories] 3. The path in the 'mailmap.file' config entry, if set.

\n", - "group": "mailmap" - }, - "git_mailmap_resolve": { - "type": "function", - "file": "git2/mailmap.h", - "line": 96, - "lineto": 98, - "args": [ - { - "name": "real_name", - "type": "const char **", - "comment": "pointer to store the real name" - }, - { - "name": "real_email", - "type": "const char **", - "comment": "pointer to store the real email" - }, - { - "name": "mm", - "type": "const git_mailmap *", - "comment": "the mailmap to perform a lookup with (may be NULL)" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name to look up" - }, - { - "name": "email", - "type": "const char *", - "comment": "the email to look up" - } - ], - "argline": "const char **real_name, const char **real_email, const git_mailmap *mm, const char *name, const char *email", - "sig": "const char **::const char **::const git_mailmap *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Resolve a name and email to the corresponding real name and email.

\n", - "comments": "

The lifetime of the strings are tied to mm, name, and email parameters.

\n", - "group": "mailmap" - }, - "git_mailmap_resolve_signature": { - "type": "function", - "file": "git2/mailmap.h", - "line": 110, - "lineto": 111, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature" - }, - { - "name": "mm", - "type": "const git_mailmap *", - "comment": "mailmap to resolve with" - }, - { - "name": "sig", - "type": "const git_signature *", - "comment": "signature to resolve" - } - ], - "argline": "git_signature **out, const git_mailmap *mm, const git_signature *sig", - "sig": "git_signature **::const git_mailmap *::const git_signature *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Resolve a signature to use real names and emails with a mailmap.

\n", - "comments": "

Call git_signature_free() to free the data.

\n", - "group": "mailmap" - }, - "git_merge_file_input_init": { - "type": "function", - "file": "git2/merge.h", - "line": 60, - "lineto": 62, - "args": [ - { - "name": "opts", - "type": "git_merge_file_input *", - "comment": "the `git_merge_file_input` instance to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "the version of the struct; you should pass\n `GIT_MERGE_FILE_INPUT_VERSION` here." - } - ], - "argline": "git_merge_file_input *opts, unsigned int version", - "sig": "git_merge_file_input *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initializes a git_merge_file_input with default values. Equivalent to\n creating an instance with GIT_MERGE_FILE_INPUT_INIT.

\n", - "comments": "", - "group": "merge" - }, - "git_merge_file_options_init": { - "type": "function", - "file": "git2/merge.h", - "line": 215, - "lineto": 215, - "args": [ - { - "name": "opts", - "type": "git_merge_file_options *", - "comment": "The `git_merge_file_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_MERGE_FILE_OPTIONS_VERSION`." - } - ], - "argline": "git_merge_file_options *opts, unsigned int version", - "sig": "git_merge_file_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_merge_file_options structure

\n", - "comments": "

Initializes a git_merge_file_options with default values. Equivalent to creating an instance with GIT_MERGE_FILE_OPTIONS_INIT.

\n", - "group": "merge" - }, - "git_merge_options_init": { - "type": "function", - "file": "git2/merge.h", - "line": 311, - "lineto": 311, - "args": [ - { - "name": "opts", - "type": "git_merge_options *", - "comment": "The `git_merge_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_MERGE_OPTIONS_VERSION`." - } - ], - "argline": "git_merge_options *opts, unsigned int version", - "sig": "git_merge_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_merge_options structure

\n", - "comments": "

Initializes a git_merge_options with default values. Equivalent to creating an instance with GIT_MERGE_OPTIONS_INIT.

\n", - "group": "merge" - }, - "git_merge_analysis": { - "type": "function", - "file": "git2/merge.h", - "line": 380, - "lineto": 385, - "args": [ - { - "name": "analysis_out", - "type": "git_merge_analysis_t *", - "comment": "analysis enumeration that the result is written into" - }, - { - "name": "preference_out", - "type": "git_merge_preference_t *", - "comment": null - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to merge" - }, - { - "name": "their_heads", - "type": "const git_annotated_commit **", - "comment": "the heads to merge into" - }, - { - "name": "their_heads_len", - "type": "size_t", - "comment": "the number of heads to merge" - } - ], - "argline": "git_merge_analysis_t *analysis_out, git_merge_preference_t *preference_out, git_repository *repo, const git_annotated_commit **their_heads, size_t their_heads_len", - "sig": "git_merge_analysis_t *::git_merge_preference_t *::git_repository *::const git_annotated_commit **::size_t", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into the HEAD of the repository.

\n", - "comments": "", - "group": "merge", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_merge_analysis-15" - ] - } - }, - "git_merge_analysis_for_ref": { - "type": "function", - "file": "git2/merge.h", - "line": 398, - "lineto": 404, - "args": [ - { - "name": "analysis_out", - "type": "git_merge_analysis_t *", - "comment": "analysis enumeration that the result is written into" - }, - { - "name": "preference_out", - "type": "git_merge_preference_t *", - "comment": null - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to merge" - }, - { - "name": "our_ref", - "type": "git_reference *", - "comment": "the reference to perform the analysis from" - }, - { - "name": "their_heads", - "type": "const git_annotated_commit **", - "comment": "the heads to merge into" - }, - { - "name": "their_heads_len", - "type": "size_t", - "comment": "the number of heads to merge" - } - ], - "argline": "git_merge_analysis_t *analysis_out, git_merge_preference_t *preference_out, git_repository *repo, git_reference *our_ref, const git_annotated_commit **their_heads, size_t their_heads_len", - "sig": "git_merge_analysis_t *::git_merge_preference_t *::git_repository *::git_reference *::const git_annotated_commit **::size_t", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into a reference.

\n", - "comments": "", - "group": "merge" - }, - "git_merge_base": { - "type": "function", - "file": "git2/merge.h", - "line": 415, - "lineto": 419, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the OID of a merge base between 'one' and 'two'" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "one", - "type": "const git_oid *", - "comment": "one of the commits" - }, - { - "name": "two", - "type": "const git_oid *", - "comment": "the other commit" - } - ], - "argline": "git_oid *out, git_repository *repo, const git_oid *one, const git_oid *two", - "sig": "git_oid *::git_repository *::const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if not found or error code" - }, - "description": "

Find a merge base between two commits

\n", - "comments": "", - "group": "merge", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_merge_base-31" - ], - "rev-parse.c": [ - "ex/v1.3.1/rev-parse.html#git_merge_base-1" - ] - } - }, - "git_merge_bases": { - "type": "function", - "file": "git2/merge.h", - "line": 430, - "lineto": 434, - "args": [ - { - "name": "out", - "type": "git_oidarray *", - "comment": "array in which to store the resulting ids" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "one", - "type": "const git_oid *", - "comment": "one of the commits" - }, - { - "name": "two", - "type": "const git_oid *", - "comment": "the other commit" - } - ], - "argline": "git_oidarray *out, git_repository *repo, const git_oid *one, const git_oid *two", - "sig": "git_oidarray *::git_repository *::const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if not found or error code" - }, - "description": "

Find merge bases between two commits

\n", - "comments": "", - "group": "merge" - }, - "git_merge_base_many": { - "type": "function", - "file": "git2/merge.h", - "line": 445, - "lineto": 449, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the OID of a merge base considering all the commits" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "length", - "type": "size_t", - "comment": "The number of commits in the provided `input_array`" - }, - { - "name": "input_array", - "type": "const git_oid []", - "comment": "oids of the commits" - } - ], - "argline": "git_oid *out, git_repository *repo, size_t length, const git_oid [] input_array", - "sig": "git_oid *::git_repository *::size_t::const git_oid []", - "return": { - "type": "int", - "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." - }, - "description": "

Find a merge base given a list of commits

\n", - "comments": "", - "group": "merge" - }, - "git_merge_bases_many": { - "type": "function", - "file": "git2/merge.h", - "line": 460, - "lineto": 464, - "args": [ - { - "name": "out", - "type": "git_oidarray *", - "comment": "array in which to store the resulting ids" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "length", - "type": "size_t", - "comment": "The number of commits in the provided `input_array`" - }, - { - "name": "input_array", - "type": "const git_oid []", - "comment": "oids of the commits" - } - ], - "argline": "git_oidarray *out, git_repository *repo, size_t length, const git_oid [] input_array", - "sig": "git_oidarray *::git_repository *::size_t::const git_oid []", - "return": { - "type": "int", - "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." - }, - "description": "

Find all merge bases given a list of commits

\n", - "comments": "", - "group": "merge" - }, - "git_merge_base_octopus": { - "type": "function", - "file": "git2/merge.h", - "line": 475, - "lineto": 479, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the OID of a merge base considering all the commits" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "length", - "type": "size_t", - "comment": "The number of commits in the provided `input_array`" - }, - { - "name": "input_array", - "type": "const git_oid []", - "comment": "oids of the commits" - } - ], - "argline": "git_oid *out, git_repository *repo, size_t length, const git_oid [] input_array", - "sig": "git_oid *::git_repository *::size_t::const git_oid []", - "return": { - "type": "int", - "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." - }, - "description": "

Find a merge base in preparation for an octopus merge

\n", - "comments": "", - "group": "merge" - }, - "git_merge_file": { - "type": "function", - "file": "git2/merge.h", - "line": 497, - "lineto": 502, - "args": [ - { - "name": "out", - "type": "git_merge_file_result *", - "comment": "The git_merge_file_result to be filled in" - }, - { - "name": "ancestor", - "type": "const git_merge_file_input *", - "comment": "The contents of the ancestor file" - }, - { - "name": "ours", - "type": "const git_merge_file_input *", - "comment": "The contents of the file in \"our\" side" - }, - { - "name": "theirs", - "type": "const git_merge_file_input *", - "comment": "The contents of the file in \"their\" side" - }, - { - "name": "opts", - "type": "const git_merge_file_options *", - "comment": "The merge file options or `NULL` for defaults" - } - ], - "argline": "git_merge_file_result *out, const git_merge_file_input *ancestor, const git_merge_file_input *ours, const git_merge_file_input *theirs, const git_merge_file_options *opts", - "sig": "git_merge_file_result *::const git_merge_file_input *::const git_merge_file_input *::const git_merge_file_input *::const git_merge_file_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merge two files as they exist in the in-memory data structures, using\n the given common ancestor as the baseline, producing a\n git_merge_file_result that reflects the merge result. The\n git_merge_file_result must be freed with git_merge_file_result_free.

\n", - "comments": "

Note that this function does not reference a repository and any configuration must be passed as git_merge_file_options.

\n", - "group": "merge" - }, - "git_merge_file_from_index": { - "type": "function", - "file": "git2/merge.h", - "line": 518, - "lineto": 524, - "args": [ - { - "name": "out", - "type": "git_merge_file_result *", - "comment": "The git_merge_file_result to be filled in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository" - }, - { - "name": "ancestor", - "type": "const git_index_entry *", - "comment": "The index entry for the ancestor file (stage level 1)" - }, - { - "name": "ours", - "type": "const git_index_entry *", - "comment": "The index entry for our file (stage level 2)" - }, - { - "name": "theirs", - "type": "const git_index_entry *", - "comment": "The index entry for their file (stage level 3)" - }, - { - "name": "opts", - "type": "const git_merge_file_options *", - "comment": "The merge file options or NULL" - } - ], - "argline": "git_merge_file_result *out, git_repository *repo, const git_index_entry *ancestor, const git_index_entry *ours, const git_index_entry *theirs, const git_merge_file_options *opts", - "sig": "git_merge_file_result *::git_repository *::const git_index_entry *::const git_index_entry *::const git_index_entry *::const git_merge_file_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merge two files as they exist in the index, using the given common\n ancestor as the baseline, producing a git_merge_file_result that\n reflects the merge result. The git_merge_file_result must be freed with\n git_merge_file_result_free.

\n", - "comments": "", - "group": "merge" - }, - "git_merge_file_result_free": { - "type": "function", - "file": "git2/merge.h", - "line": 531, - "lineto": 531, - "args": [ - { - "name": "result", - "type": "git_merge_file_result *", - "comment": "The result to free or `NULL`" - } - ], - "argline": "git_merge_file_result *result", - "sig": "git_merge_file_result *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees a git_merge_file_result.

\n", - "comments": "", - "group": "merge" - }, - "git_merge_trees": { - "type": "function", - "file": "git2/merge.h", - "line": 549, - "lineto": 555, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "pointer to store the index result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given trees" - }, - { - "name": "ancestor_tree", - "type": "const git_tree *", - "comment": "the common ancestor between the trees (or null if none)" - }, - { - "name": "our_tree", - "type": "const git_tree *", - "comment": "the tree that reflects the destination tree" - }, - { - "name": "their_tree", - "type": "const git_tree *", - "comment": "the tree to merge in to `our_tree`" - }, - { - "name": "opts", - "type": "const git_merge_options *", - "comment": "the merge tree options (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, const git_tree *ancestor_tree, const git_tree *our_tree, const git_tree *their_tree, const git_merge_options *opts", - "sig": "git_index **::git_repository *::const git_tree *::const git_tree *::const git_tree *::const git_merge_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merge two trees, producing a git_index that reflects the result of\n the merge. The index may be written as-is to the working directory\n or checked out. If the index is to be converted to a tree, the caller\n should resolve any conflicts that arose as part of the merge.

\n", - "comments": "

The returned index must be freed explicitly with git_index_free.

\n", - "group": "merge" - }, - "git_merge_commits": { - "type": "function", - "file": "git2/merge.h", - "line": 572, - "lineto": 577, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "pointer to store the index result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given trees" - }, - { - "name": "our_commit", - "type": "const git_commit *", - "comment": "the commit that reflects the destination tree" - }, - { - "name": "their_commit", - "type": "const git_commit *", - "comment": "the commit to merge in to `our_commit`" - }, - { - "name": "opts", - "type": "const git_merge_options *", - "comment": "the merge tree options (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, const git_commit *our_commit, const git_commit *their_commit, const git_merge_options *opts", - "sig": "git_index **::git_repository *::const git_commit *::const git_commit *::const git_merge_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merge two commits, producing a git_index that reflects the result of\n the merge. The index may be written as-is to the working directory\n or checked out. If the index is to be converted to a tree, the caller\n should resolve any conflicts that arose as part of the merge.

\n", - "comments": "

The returned index must be freed explicitly with git_index_free.

\n", - "group": "merge" - }, - "git_merge": { - "type": "function", - "file": "git2/merge.h", - "line": 597, - "lineto": 602, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to merge" - }, - { - "name": "their_heads", - "type": "const git_annotated_commit **", - "comment": "the heads to merge into" - }, - { - "name": "their_heads_len", - "type": "size_t", - "comment": "the number of heads to merge" - }, - { - "name": "merge_opts", - "type": "const git_merge_options *", - "comment": "merge options" - }, - { - "name": "checkout_opts", - "type": "const git_checkout_options *", - "comment": "checkout options" - } - ], - "argline": "git_repository *repo, const git_annotated_commit **their_heads, size_t their_heads_len, const git_merge_options *merge_opts, const git_checkout_options *checkout_opts", - "sig": "git_repository *::const git_annotated_commit **::size_t::const git_merge_options *::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merges the given commit(s) into HEAD, writing the results into the working\n directory. Any changes are staged for commit and any conflicts are written\n to the index. Callers should inspect the repository's index after this\n completes, resolve any conflicts and prepare a commit.

\n", - "comments": "

For compatibility with git, the repository is put into a merging state. Once the commit is done (or if the uses wishes to abort), you should clear this state by calling git_repository_state_cleanup().

\n", - "group": "merge", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_merge-16" - ] - } - }, - "git_message_prettify": { - "type": "function", - "file": "git2/message.h", - "line": 38, - "lineto": 38, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The user-allocated git_buf which will be filled with the\n cleaned up message." - }, - { - "name": "message", - "type": "const char *", - "comment": "The message to be prettified." - }, - { - "name": "strip_comments", - "type": "int", - "comment": "Non-zero to remove comment lines, 0 to leave them in." - }, - { - "name": "comment_char", - "type": "char", - "comment": "Comment character. Lines starting with this character\n are considered to be comments and removed if `strip_comments` is non-zero." - } - ], - "argline": "git_buf *out, const char *message, int strip_comments, char comment_char", - "sig": "git_buf *::const char *::int::char", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Clean up excess whitespace and make sure there is a trailing newline in the message.

\n", - "comments": "

Optionally, it can remove lines which start with the comment character.

\n", - "group": "message" - }, - "git_message_trailers": { - "type": "function", - "file": "git2/message.h", - "line": 73, - "lineto": 73, - "args": [ - { - "name": "arr", - "type": "git_message_trailer_array *", - "comment": "A pre-allocated git_message_trailer_array struct to be filled in\n with any trailers found during parsing." - }, - { - "name": "message", - "type": "const char *", - "comment": "The message to be parsed" - } - ], - "argline": "git_message_trailer_array *arr, const char *message", - "sig": "git_message_trailer_array *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or non-zero on error." - }, - "description": "

Parse trailers out of a message, filling the array pointed to by +arr+.

\n", - "comments": "

Trailers are key/value pairs in the last paragraph of a message, not including any patches or conflicts that may be present.

\n", - "group": "message" - }, - "git_message_trailer_array_free": { - "type": "function", - "file": "git2/message.h", - "line": 79, - "lineto": 79, - "args": [ - { - "name": "arr", - "type": "git_message_trailer_array *", - "comment": null - } - ], - "argline": "git_message_trailer_array *arr", - "sig": "git_message_trailer_array *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Clean's up any allocated memory in the git_message_trailer_array filled by\n a call to git_message_trailers.

\n", - "comments": "", - "group": "message" - }, - "git_note_iterator_new": { - "type": "function", - "file": "git2/notes.h", - "line": 49, - "lineto": 52, - "args": [ - { - "name": "out", - "type": "git_note_iterator **", - "comment": "pointer to the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" - } - ], - "argline": "git_note_iterator **out, git_repository *repo, const char *notes_ref", - "sig": "git_note_iterator **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Creates a new iterator for notes

\n", - "comments": "

The iterator must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_commit_iterator_new": { - "type": "function", - "file": "git2/notes.h", - "line": 64, - "lineto": 66, - "args": [ - { - "name": "out", - "type": "git_note_iterator **", - "comment": "pointer to the iterator" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - } - ], - "argline": "git_note_iterator **out, git_commit *notes_commit", - "sig": "git_note_iterator **::git_commit *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Creates a new iterator for notes from a commit

\n", - "comments": "

The iterator must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_iterator_free": { - "type": "function", - "file": "git2/notes.h", - "line": 73, - "lineto": 73, - "args": [ - { - "name": "it", - "type": "git_note_iterator *", - "comment": "pointer to the iterator" - } - ], - "argline": "git_note_iterator *it", - "sig": "git_note_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees an git_note_iterator

\n", - "comments": "", - "group": "note" - }, - "git_note_next": { - "type": "function", - "file": "git2/notes.h", - "line": 86, - "lineto": 89, - "args": [ - { - "name": "note_id", - "type": "git_oid *", - "comment": "id of blob containing the message" - }, - { - "name": "annotated_id", - "type": "git_oid *", - "comment": "id of the git object being annotated" - }, - { - "name": "it", - "type": "git_note_iterator *", - "comment": "pointer to the iterator" - } - ], - "argline": "git_oid *note_id, git_oid *annotated_id, git_note_iterator *it", - "sig": "git_oid *::git_oid *::git_note_iterator *", - "return": { - "type": "int", - "comment": " 0 (no error), GIT_ITEROVER (iteration is done) or an error code\n (negative value)" - }, - "description": "

Return the current item (note_id and annotated_id) and advance the iterator\n internally to the next value

\n", - "comments": "", - "group": "note" - }, - "git_note_read": { - "type": "function", - "file": "git2/notes.h", - "line": 105, - "lineto": 109, - "args": [ - { - "name": "out", - "type": "git_note **", - "comment": "pointer to the read note; NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to read the note from" - } - ], - "argline": "git_note **out, git_repository *repo, const char *notes_ref, const git_oid *oid", - "sig": "git_note **::git_repository *::const char *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read the note for an object

\n", - "comments": "

The note must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_commit_read": { - "type": "function", - "file": "git2/notes.h", - "line": 124, - "lineto": 128, - "args": [ - { - "name": "out", - "type": "git_note **", - "comment": "pointer to the read note; NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to read the note from" - } - ], - "argline": "git_note **out, git_repository *repo, git_commit *notes_commit, const git_oid *oid", - "sig": "git_note **::git_repository *::git_commit *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read the note for an object from a note commit

\n", - "comments": "

The note must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_author": { - "type": "function", - "file": "git2/notes.h", - "line": 136, - "lineto": 136, - "args": [ - { - "name": "note", - "type": "const git_note *", - "comment": "the note" - } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const git_signature *", - "comment": " the author" - }, - "description": "

Get the note author

\n", - "comments": "", - "group": "note" - }, - "git_note_committer": { - "type": "function", - "file": "git2/notes.h", - "line": 144, - "lineto": 144, - "args": [ - { - "name": "note", - "type": "const git_note *", - "comment": "the note" - } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const git_signature *", - "comment": " the committer" - }, - "description": "

Get the note committer

\n", - "comments": "", - "group": "note" - }, - "git_note_message": { - "type": "function", - "file": "git2/notes.h", - "line": 153, - "lineto": 153, - "args": [ - { - "name": "note", - "type": "const git_note *", - "comment": "the note" - } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const char *", - "comment": " the note message" - }, - "description": "

Get the note message

\n", - "comments": "", - "group": "note" - }, - "git_note_id": { - "type": "function", - "file": "git2/notes.h", - "line": 162, - "lineto": 162, - "args": [ - { - "name": "note", - "type": "const git_note *", - "comment": "the note" - } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const git_oid *", - "comment": " the note object's id" - }, - "description": "

Get the note object's id

\n", - "comments": "", - "group": "note" - }, - "git_note_create": { - "type": "function", - "file": "git2/notes.h", - "line": 179, - "lineto": 187, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer to store the OID (optional); NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to store the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to decorate" - }, - { - "name": "note", - "type": "const char *", - "comment": "Content of the note to add for object oid" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing note" - } - ], - "argline": "git_oid *out, git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int force", - "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_commit_create": { - "type": "function", - "file": "git2/notes.h", - "line": 209, - "lineto": 218, - "args": [ - { - "name": "notes_commit_out", - "type": "git_oid *", - "comment": "pointer to store the commit (optional);\n\t\t\t\t\tNULL in case of error" - }, - { - "name": "notes_blob_out", - "type": "git_oid *", - "comment": "a point to the id of a note blob (optional)" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note will live" - }, - { - "name": "parent", - "type": "git_commit *", - "comment": "Pointer to parent note\n\t\t\t\t\tor NULL if this shall start a new notes tree" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to decorate" - }, - { - "name": "note", - "type": "const char *", - "comment": "Content of the note to add for object oid" - }, - { - "name": "allow_note_overwrite", - "type": "int", - "comment": "Overwrite existing note" - } - ], - "argline": "git_oid *notes_commit_out, git_oid *notes_blob_out, git_repository *repo, git_commit *parent, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int allow_note_overwrite", - "sig": "git_oid *::git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a note for an object from a commit

\n", - "comments": "

This function will create a notes commit for a given object, the commit is a dangling commit, no reference is created.

\n", - "group": "note" - }, - "git_note_remove": { - "type": "function", - "file": "git2/notes.h", - "line": 232, - "lineto": 237, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note lives" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to remove the note from" - } - ], - "argline": "git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid", - "sig": "git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove the note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_commit_remove": { - "type": "function", - "file": "git2/notes.h", - "line": 257, - "lineto": 263, - "args": [ - { - "name": "notes_commit_out", - "type": "git_oid *", - "comment": "pointer to store the new notes commit (optional);\n\t\t\t\t\tNULL in case of error.\n\t\t\t\t\tWhen removing a note a new tree containing all notes\n\t\t\t\t\tsans the note to be removed is created and a new commit\n\t\t\t\t\tpointing to that tree is also created.\n\t\t\t\t\tIn the case where the resulting tree is an empty tree\n\t\t\t\t\ta new commit pointing to this empty tree will be returned." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note lives" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to remove the note from" - } - ], - "argline": "git_oid *notes_commit_out, git_repository *repo, git_commit *notes_commit, const git_signature *author, const git_signature *committer, const git_oid *oid", - "sig": "git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove the note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_free": { - "type": "function", - "file": "git2/notes.h", - "line": 270, - "lineto": 270, - "args": [ - { - "name": "note", - "type": "git_note *", - "comment": "git_note object" - } - ], - "argline": "git_note *note", - "sig": "git_note *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a git_note object

\n", - "comments": "", - "group": "note" - }, - "git_note_default_ref": { - "type": "function", - "file": "git2/notes.h", - "line": 280, - "lineto": 280, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer in which to store the name of the default notes reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The Git repository" - } - ], - "argline": "git_buf *out, git_repository *repo", - "sig": "git_buf *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the default notes reference for a repository

\n", - "comments": "", - "group": "note" - }, - "git_note_foreach": { - "type": "function", - "file": "git2/notes.h", - "line": 298, - "lineto": 302, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the notes." - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "Reference to read from (optional); defaults to\n \"refs/notes/commits\"." - }, - { - "name": "note_cb", - "type": "git_note_foreach_cb", - "comment": "Callback to invoke per found annotation. Return non-zero\n to stop looping." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra parameter to callback function." - } - ], - "argline": "git_repository *repo, const char *notes_ref, git_note_foreach_cb note_cb, void *payload", - "sig": "git_repository *::const char *::git_note_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all the notes within a specified namespace\n and issue a callback for each one.

\n", - "comments": "", - "group": "note" - }, - "git_object_lookup": { - "type": "function", - "file": "git2/object.h", - "line": 44, - "lineto": 48, - "args": [ - { - "name": "object", - "type": "git_object **", - "comment": "pointer to the looked-up object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to look up the object" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the unique identifier for the object" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "the type of the object" - } - ], - "argline": "git_object **object, git_repository *repo, const git_oid *id, git_object_t type", - "sig": "git_object **::git_repository *::const git_oid *::git_object_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a reference to one of the objects in a repository.

\n", - "comments": "

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", - "group": "object", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_object_lookup-32" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_object_lookup-17" - ] - } - }, - "git_object_lookup_prefix": { - "type": "function", - "file": "git2/object.h", - "line": 77, - "lineto": 82, - "args": [ - { - "name": "object_out", - "type": "git_object **", - "comment": "pointer where to store the looked-up object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to look up the object" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "a short identifier for the object" - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "the type of the object" - } - ], - "argline": "git_object **object_out, git_repository *repo, const git_oid *id, size_t len, git_object_t type", - "sig": "git_object **::git_repository *::const git_oid *::size_t::git_object_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a reference to one of the objects in a repository,\n given a prefix of its identifier (short id).

\n", - "comments": "

The object obtained will be so that its identifier matches the first 'len' hexadecimal characters (packets of 4 bits) of the given 'id'. 'len' must be at least GIT_OID_MINPREFIXLEN, and long enough to identify a unique object matching the prefix; otherwise the method will fail.

\n\n

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", - "group": "object" - }, - "git_object_lookup_bypath": { - "type": "function", - "file": "git2/object.h", - "line": 95, - "lineto": 99, - "args": [ - { - "name": "out", - "type": "git_object **", - "comment": "buffer that receives a pointer to the object (which must be freed\n by the caller)" - }, - { - "name": "treeish", - "type": "const git_object *", - "comment": "root object that can be peeled to a tree" - }, - { - "name": "path", - "type": "const char *", - "comment": "relative path from the root object to the desired object" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "type of object desired" - } - ], - "argline": "git_object **out, const git_object *treeish, const char *path, git_object_t type", - "sig": "git_object **::const git_object *::const char *::git_object_t", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Lookup an object that represents a tree entry.

\n", - "comments": "", - "group": "object" - }, - "git_object_id": { - "type": "function", - "file": "git2/object.h", - "line": 107, - "lineto": 107, - "args": [ - { - "name": "obj", - "type": "const git_object *", - "comment": "the repository object" - } - ], - "argline": "const git_object *obj", - "sig": "const git_object *", - "return": { - "type": "const git_oid *", - "comment": " the SHA1 id" - }, - "description": "

Get the id (SHA1) of a repository object

\n", - "comments": "", - "group": "object", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_object_id-8", - "ex/v1.3.1/blame.html#git_object_id-9", - "ex/v1.3.1/blame.html#git_object_id-10", - "ex/v1.3.1/blame.html#git_object_id-11" - ], - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_object_id-10", - "ex/v1.3.1/cat-file.html#git_object_id-11" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_object_id-33", - "ex/v1.3.1/log.html#git_object_id-34", - "ex/v1.3.1/log.html#git_object_id-35", - "ex/v1.3.1/log.html#git_object_id-36" - ], - "rev-parse.c": [ - "ex/v1.3.1/rev-parse.html#git_object_id-2", - "ex/v1.3.1/rev-parse.html#git_object_id-3", - "ex/v1.3.1/rev-parse.html#git_object_id-4", - "ex/v1.3.1/rev-parse.html#git_object_id-5", - "ex/v1.3.1/rev-parse.html#git_object_id-6" - ] - } - }, - "git_object_short_id": { - "type": "function", - "file": "git2/object.h", - "line": 121, - "lineto": 121, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Buffer to write string into" - }, - { - "name": "obj", - "type": "const git_object *", - "comment": "The object to get an ID for" - } - ], - "argline": "git_buf *out, const git_object *obj", - "sig": "git_buf *::const git_object *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 for error" - }, - "description": "

Get a short abbreviated OID string for the object

\n", - "comments": "

This starts at the "core.abbrev" length (default 7 characters) and iteratively extends to a longer string if that length is ambiguous. The result will be unambiguous (at least until new objects are added to the repository).

\n", - "group": "object", - "examples": { - "tag.c": [ - "ex/v1.3.1/tag.html#git_object_short_id-3" - ] - } - }, - "git_object_type": { - "type": "function", - "file": "git2/object.h", - "line": 129, - "lineto": 129, - "args": [ - { - "name": "obj", - "type": "const git_object *", - "comment": "the repository object" - } - ], - "argline": "const git_object *obj", - "sig": "const git_object *", - "return": { - "type": "git_object_t", - "comment": " the object's type" - }, - "description": "

Get the object type of an object

\n", - "comments": "", - "group": "object", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_object_type-12", - "ex/v1.3.1/cat-file.html#git_object_type-13", - "ex/v1.3.1/cat-file.html#git_object_type-14" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_object_type-4" - ] - } - }, - "git_object_owner": { - "type": "function", - "file": "git2/object.h", - "line": 143, - "lineto": 143, - "args": [ - { - "name": "obj", - "type": "const git_object *", - "comment": "the object" - } - ], - "argline": "const git_object *obj", - "sig": "const git_object *", - "return": { - "type": "git_repository *", - "comment": " the repository who owns this object" - }, - "description": "

Get the repository that owns this object

\n", - "comments": "

Freeing or calling git_repository_close on the returned pointer will invalidate the actual object.

\n\n

Any other operation may be run on the repository without affecting the object.

\n", - "group": "object" - }, - "git_object_free": { - "type": "function", - "file": "git2/object.h", - "line": 160, - "lineto": 160, - "args": [ - { - "name": "object", - "type": "git_object *", - "comment": "the object to close" - } - ], - "argline": "git_object *object", - "sig": "git_object *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open object

\n", - "comments": "

This method instructs the library to close an existing object; note that git_objects are owned and cached by the repository so the object may or may not be freed after this library call, depending on how aggressive is the caching mechanism used by the repository.

\n\n

IMPORTANT: It is necessary to call this method when you stop using an object. Failure to do so will cause a memory leak.

\n", - "group": "object", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_object_free-12", - "ex/v1.3.1/blame.html#git_object_free-13", - "ex/v1.3.1/blame.html#git_object_free-14", - "ex/v1.3.1/blame.html#git_object_free-15" - ], - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_object_free-15" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_object_free-38" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_object_free-37" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_object_free-18" - ], - "rev-parse.c": [ - "ex/v1.3.1/rev-parse.html#git_object_free-7", - "ex/v1.3.1/rev-parse.html#git_object_free-8", - "ex/v1.3.1/rev-parse.html#git_object_free-9" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_object_free-5", - "ex/v1.3.1/tag.html#git_object_free-6", - "ex/v1.3.1/tag.html#git_object_free-7", - "ex/v1.3.1/tag.html#git_object_free-8" - ] - } - }, - "git_object_type2string": { - "type": "function", - "file": "git2/object.h", - "line": 171, - "lineto": 171, - "args": [ - { - "name": "type", - "type": "git_object_t", - "comment": "object type to convert." - } - ], - "argline": "git_object_t type", - "sig": "git_object_t", - "return": { - "type": "const char *", - "comment": " the corresponding string representation." - }, - "description": "

Convert an object type to its string representation.

\n", - "comments": "

The result is a pointer to a string in static memory and should not be free()'ed.

\n", - "group": "object", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_object_type2string-16", - "ex/v1.3.1/cat-file.html#git_object_type2string-17", - "ex/v1.3.1/cat-file.html#git_object_type2string-18", - "ex/v1.3.1/cat-file.html#git_object_type2string-19" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_object_type2string-39", - "ex/v1.3.1/general.html#git_object_type2string-40" - ] - } - }, - "git_object_string2type": { - "type": "function", - "file": "git2/object.h", - "line": 179, - "lineto": 179, - "args": [ - { - "name": "str", - "type": "const char *", - "comment": "the string to convert." - } - ], - "argline": "const char *str", - "sig": "const char *", - "return": { - "type": "git_object_t", - "comment": " the corresponding git_object_t." - }, - "description": "

Convert a string object type representation to it's git_object_t.

\n", - "comments": "", - "group": "object" - }, - "git_object_typeisloose": { - "type": "function", - "file": "git2/object.h", - "line": 188, - "lineto": 188, - "args": [ - { - "name": "type", - "type": "git_object_t", - "comment": "object type to test." - } - ], - "argline": "git_object_t type", - "sig": "git_object_t", - "return": { - "type": "int", - "comment": " true if the type represents a valid loose object type,\n false otherwise." - }, - "description": "

Determine if the given git_object_t is a valid loose object type.

\n", - "comments": "", - "group": "object" - }, - "git_object_peel": { - "type": "function", - "file": "git2/object.h", - "line": 213, - "lineto": 216, - "args": [ - { - "name": "peeled", - "type": "git_object **", - "comment": "Pointer to the peeled git_object" - }, - { - "name": "object", - "type": "const git_object *", - "comment": "The object to be processed" - }, - { - "name": "target_type", - "type": "git_object_t", - "comment": "The type of the requested object (a GIT_OBJECT_ value)" - } - ], - "argline": "git_object **peeled, const git_object *object, git_object_t target_type", - "sig": "git_object **::const git_object *::git_object_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC, GIT_EPEEL, or an error code" - }, - "description": "

Recursively peel an object until an object of the specified type is met.

\n", - "comments": "

If the query cannot be satisfied due to the object model, GIT_EINVALIDSPEC will be returned (e.g. trying to peel a blob to a tree).

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until the type changes. A tag will be peeled until the referenced object is no longer a tag, and a commit will be peeled to a tree. Any other object type will return GIT_EINVALIDSPEC.

\n\n

If peeling a tag we discover an object which cannot be peeled to the target type due to the object model, GIT_EPEEL will be returned.

\n\n

You must free the returned object.

\n", - "group": "object" - }, - "git_object_dup": { - "type": "function", - "file": "git2/object.h", - "line": 225, - "lineto": 225, - "args": [ - { - "name": "dest", - "type": "git_object **", - "comment": "Pointer to store the copy of the object" - }, - { - "name": "source", - "type": "git_object *", - "comment": "Original object to copy" - } - ], - "argline": "git_object **dest, git_object *source", - "sig": "git_object **::git_object *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an in-memory copy of a Git object. The copy must be\n explicitly free'd or it will leak.

\n", - "comments": "", - "group": "object" - }, - "git_odb_new": { - "type": "function", - "file": "git2/odb.h", - "line": 40, - "lineto": 40, - "args": [ - { - "name": "out", - "type": "git_odb **", - "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." - } - ], - "argline": "git_odb **out", - "sig": "git_odb **", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new object database with no backends.

\n", - "comments": "

Before the ODB can be used for read/writing, a custom database backend must be manually added using git_odb_add_backend()

\n", - "group": "odb" - }, - "git_odb_open": { - "type": "function", - "file": "git2/odb.h", - "line": 58, - "lineto": 58, - "args": [ - { - "name": "out", - "type": "git_odb **", - "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." - }, - { - "name": "objects_dir", - "type": "const char *", - "comment": "path of the backends' \"objects\" directory." - } - ], - "argline": "git_odb **out, const char *objects_dir", - "sig": "git_odb **::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new object database and automatically add\n the two default backends:

\n", - "comments": "
- git_odb_backend_loose: read and write loose object files      from disk, assuming `objects_dir` as the Objects folder\n\n- git_odb_backend_pack: read objects from packfiles,        assuming `objects_dir` as the Objects folder which      contains a 'pack/' folder with the corresponding data\n
\n", - "group": "odb" - }, - "git_odb_add_disk_alternate": { - "type": "function", - "file": "git2/odb.h", - "line": 75, - "lineto": 75, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "database to add the backend to" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to the objects folder for the alternate" - } - ], - "argline": "git_odb *odb, const char *path", - "sig": "git_odb *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Add an on-disk alternate to an existing Object DB.

\n", - "comments": "

Note that the added path must point to an objects, not to a full repository, to use it as an alternate store.

\n\n

Alternate backends are always checked for objects after all the main backends have been exhausted.

\n\n

Writing is disabled on alternate backends.

\n", - "group": "odb" - }, - "git_odb_free": { - "type": "function", - "file": "git2/odb.h", - "line": 82, - "lineto": 82, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "database pointer to close. If NULL no action is taken." - } - ], - "argline": "git_odb *db", - "sig": "git_odb *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open object database.

\n", - "comments": "", - "group": "odb", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_odb_free-20" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_odb_free-41" - ] - } - }, - "git_odb_read": { - "type": "function", - "file": "git2/odb.h", - "line": 100, - "lineto": 100, - "args": [ - { - "name": "out", - "type": "git_odb_object **", - "comment": "pointer where to store the read object" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "database to search for the object in." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the object to read." - } - ], - "argline": "git_odb_object **out, git_odb *db, const git_oid *id", - "sig": "git_odb_object **::git_odb *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is\n not in the database." - }, - "description": "

Read an object from the database.

\n", - "comments": "

This method queries all available ODB backends trying to read the given OID.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", - "group": "odb", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_odb_read-21" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_odb_read-42" - ] - } - }, - "git_odb_read_prefix": { - "type": "function", - "file": "git2/odb.h", - "line": 128, - "lineto": 128, - "args": [ - { - "name": "out", - "type": "git_odb_object **", - "comment": "pointer where to store the read object" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "database to search for the object in." - }, - { - "name": "short_id", - "type": "const git_oid *", - "comment": "a prefix of the id of the object to read." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the prefix" - } - ], - "argline": "git_odb_object **out, git_odb *db, const git_oid *short_id, size_t len", - "sig": "git_odb_object **::git_odb *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is not in the\n database. GIT_EAMBIGUOUS if the prefix is ambiguous\n (several objects match the prefix)" - }, - "description": "

Read an object from the database, given a prefix\n of its identifier.

\n", - "comments": "

This method queries all available ODB backends trying to match the 'len' first hexadecimal characters of the 'short_id'. The remaining (GIT_OID_HEXSZ-len)*4 bits of 'short_id' must be 0s. 'len' must be at least GIT_OID_MINPREFIXLEN, and the prefix must be long enough to identify a unique object in all the backends; the method will fail otherwise.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", - "group": "odb" - }, - "git_odb_read_header": { - "type": "function", - "file": "git2/odb.h", - "line": 147, - "lineto": 147, - "args": [ - { - "name": "len_out", - "type": "size_t *", - "comment": "pointer where to store the length" - }, - { - "name": "type_out", - "type": "git_object_t *", - "comment": "pointer where to store the type" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "database to search for the object in." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the object to read." - } - ], - "argline": "size_t *len_out, git_object_t *type_out, git_odb *db, const git_oid *id", - "sig": "size_t *::git_object_t *::git_odb *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is not\n in the database." - }, - "description": "

Read the header of an object from the database, without\n reading its full contents.

\n", - "comments": "

The header includes the length and the type of an object.

\n\n

Note that most backends do not support reading only the header of an object, so the whole object will be read and then the header will be returned.

\n", - "group": "odb" - }, - "git_odb_exists": { - "type": "function", - "file": "git2/odb.h", - "line": 156, - "lineto": 156, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "database to be searched for the given object." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the object to search for." - } - ], - "argline": "git_odb *db, const git_oid *id", - "sig": "git_odb *::const git_oid *", - "return": { - "type": "int", - "comment": " 1 if the object was found, 0 otherwise" - }, - "description": "

Determine if the given object can be found in the object database.

\n", - "comments": "", - "group": "odb" - }, - "git_odb_exists_prefix": { - "type": "function", - "file": "git2/odb.h", - "line": 169, - "lineto": 170, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "The full OID of the found object if just one is found." - }, - { - "name": "db", - "type": "git_odb *", - "comment": "The database to be searched for the given object." - }, - { - "name": "short_id", - "type": "const git_oid *", - "comment": "A prefix of the id of the object to read." - }, - { - "name": "len", - "type": "size_t", - "comment": "The length of the prefix." - } - ], - "argline": "git_oid *out, git_odb *db, const git_oid *short_id, size_t len", - "sig": "git_oid *::git_odb *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 if found, GIT_ENOTFOUND if not found, GIT_EAMBIGUOUS if multiple\n matches were found, other value \n<\n 0 if there was a read error." - }, - "description": "

Determine if an object can be found in the object database by an\n abbreviated object ID.

\n", - "comments": "", - "group": "odb" - }, - "git_odb_expand_ids": { - "type": "function", - "file": "git2/odb.h", - "line": 211, - "lineto": 214, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "The database to be searched for the given objects." - }, - { - "name": "ids", - "type": "git_odb_expand_id *", - "comment": "An array of short object IDs to search for" - }, - { - "name": "count", - "type": "size_t", - "comment": "The length of the `ids` array" - } - ], - "argline": "git_odb *db, git_odb_expand_id *ids, size_t count", - "sig": "git_odb *::git_odb_expand_id *::size_t", - "return": { - "type": "int", - "comment": " 0 on success or an error code on failure" - }, - "description": "

Determine if one or more objects can be found in the object database\n by their abbreviated object ID and type. The given array will be\n updated in place: for each abbreviated ID that is unique in the\n database, and of the given type (if specified), the full object ID,\n object ID length (GIT_OID_HEXSZ) and type will be written back to\n the array. For IDs that are not found (or are ambiguous), the\n array entry will be zeroed.

\n", - "comments": "

Note that since this function operates on multiple objects, the underlying database will not be asked to be reloaded if an object is not found (which is unlike other object database operations.)

\n", - "group": "odb" - }, - "git_odb_refresh": { - "type": "function", - "file": "git2/odb.h", - "line": 234, - "lineto": 234, - "args": [ - { - "name": "db", - "type": "struct git_odb *", - "comment": "database to refresh" - } - ], - "argline": "struct git_odb *db", - "sig": "struct git_odb *", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Refresh the object database to load newly added files.

\n", - "comments": "

If the object databases have changed on disk while the library is running, this function will force a reload of the underlying indexes.

\n\n

Use this function when you're confident that an external application has tampered with the ODB.

\n\n

NOTE that it is not necessary to call this function at all. The library will automatically attempt to refresh the ODB when a lookup fails, to see if the looked up object exists on disk but hasn't been loaded yet.

\n", - "group": "odb" - }, - "git_odb_foreach": { - "type": "function", - "file": "git2/odb.h", - "line": 249, - "lineto": 249, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "database to use" - }, - { - "name": "cb", - "type": "git_odb_foreach_cb", - "comment": "the callback to call for each object" - }, - { - "name": "payload", - "type": "void *", - "comment": "data to pass to the callback" - } - ], - "argline": "git_odb *db, git_odb_foreach_cb cb, void *payload", - "sig": "git_odb *::git_odb_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

List all objects available in the database

\n", - "comments": "

The callback will be called for each object available in the database. Note that the objects are likely to be returned in the index order, which would make accessing the objects in that order inefficient. Return a non-zero value from the callback to stop looping.

\n", - "group": "odb" - }, - "git_odb_write": { - "type": "function", - "file": "git2/odb.h", - "line": 269, - "lineto": 269, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer to store the OID result of the write" - }, - { - "name": "odb", - "type": "git_odb *", - "comment": "object database where to store the object" - }, - { - "name": "data", - "type": "const void *", - "comment": "buffer with the data to store" - }, - { - "name": "len", - "type": "size_t", - "comment": "size of the buffer" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "type of the data to store" - } - ], - "argline": "git_oid *out, git_odb *odb, const void *data, size_t len, git_object_t type", - "sig": "git_oid *::git_odb *::const void *::size_t::git_object_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write an object directly into the ODB

\n", - "comments": "

This method writes a full object straight into the ODB. For most cases, it is preferred to write objects through a write stream, which is both faster and less memory intensive, specially for big objects.

\n\n

This method is provided for compatibility with custom backends which are not able to support streaming writes

\n", - "group": "odb", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_odb_write-43" - ] - } - }, - "git_odb_open_wstream": { - "type": "function", - "file": "git2/odb.h", - "line": 292, - "lineto": 292, - "args": [ - { - "name": "out", - "type": "git_odb_stream **", - "comment": "pointer where to store the stream" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "object database where the stream will write" - }, - { - "name": "size", - "type": "git_object_size_t", - "comment": "final size of the object that will be written" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "type of the object that will be written" - } - ], - "argline": "git_odb_stream **out, git_odb *db, git_object_size_t size, git_object_t type", - "sig": "git_odb_stream **::git_odb *::git_object_size_t::git_object_t", - "return": { - "type": "int", - "comment": " 0 if the stream was created; error code otherwise" - }, - "description": "

Open a stream to write an object into the ODB

\n", - "comments": "

The type and final length of the object must be specified when opening the stream.

\n\n

The returned stream will be of type GIT_STREAM_WRONLY, and it won't be effective until git_odb_stream_finalize_write is called and returns without an error

\n\n

The stream must always be freed when done with git_odb_stream_free or will leak memory.

\n", - "group": "odb" - }, - "git_odb_stream_write": { - "type": "function", - "file": "git2/odb.h", - "line": 305, - "lineto": 305, - "args": [ - { - "name": "stream", - "type": "git_odb_stream *", - "comment": "the stream" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "the data to write" - }, - { - "name": "len", - "type": "size_t", - "comment": "the buffer's length" - } - ], - "argline": "git_odb_stream *stream, const char *buffer, size_t len", - "sig": "git_odb_stream *::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 if the write succeeded, error code otherwise" - }, - "description": "

Write to an odb stream

\n", - "comments": "

This method will fail if the total number of received bytes exceeds the size declared with git_odb_open_wstream()

\n", - "group": "odb" - }, - "git_odb_stream_finalize_write": { - "type": "function", - "file": "git2/odb.h", - "line": 320, - "lineto": 320, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer to store the resulting object's id" - }, - { - "name": "stream", - "type": "git_odb_stream *", - "comment": "the stream" - } - ], - "argline": "git_oid *out, git_odb_stream *stream", - "sig": "git_oid *::git_odb_stream *", - "return": { - "type": "int", - "comment": " 0 on success, an error code otherwise" - }, - "description": "

Finish writing to an odb stream

\n", - "comments": "

The object will take its final name and will be available to the odb.

\n\n

This method will fail if the total number of received bytes differs from the size declared with git_odb_open_wstream()

\n", - "group": "odb" - }, - "git_odb_stream_read": { - "type": "function", - "file": "git2/odb.h", - "line": 327, - "lineto": 327, - "args": [ - { - "name": "stream", - "type": "git_odb_stream *", - "comment": null - }, - { - "name": "buffer", - "type": "char *", - "comment": null - }, - { - "name": "len", - "type": "size_t", - "comment": null - } - ], - "argline": "git_odb_stream *stream, char *buffer, size_t len", - "sig": "git_odb_stream *::char *::size_t", - "return": { - "type": "int", - "comment": null - }, - "description": "

Read from an odb stream

\n", - "comments": "

Most backends don't implement streaming reads

\n", - "group": "odb" - }, - "git_odb_stream_free": { - "type": "function", - "file": "git2/odb.h", - "line": 334, - "lineto": 334, - "args": [ - { - "name": "stream", - "type": "git_odb_stream *", - "comment": "the stream to free" - } - ], - "argline": "git_odb_stream *stream", - "sig": "git_odb_stream *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an odb stream

\n", - "comments": "", - "group": "odb" - }, - "git_odb_open_rstream": { - "type": "function", - "file": "git2/odb.h", - "line": 362, - "lineto": 367, - "args": [ - { - "name": "out", - "type": "git_odb_stream **", - "comment": "pointer where to store the stream" - }, - { - "name": "len", - "type": "size_t *", - "comment": "pointer where to store the length of the object" - }, - { - "name": "type", - "type": "git_object_t *", - "comment": "pointer where to store the type of the object" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "object database where the stream will read from" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "oid of the object the stream will read from" - } - ], - "argline": "git_odb_stream **out, size_t *len, git_object_t *type, git_odb *db, const git_oid *oid", - "sig": "git_odb_stream **::size_t *::git_object_t *::git_odb *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 if the stream was created, error code otherwise" - }, - "description": "

Open a stream to read an object from the ODB

\n", - "comments": "

Note that most backends do not support streaming reads because they store their objects as compressed/delta'ed blobs.

\n\n

It's recommended to use git_odb_read instead, which is assured to work on all backends.

\n\n

The returned stream will be of type GIT_STREAM_RDONLY and will have the following methods:

\n\n
    - stream->read: read `n` bytes from the stream      - stream->free: free the stream\n
\n\n

The stream must always be free'd or will leak memory.

\n", - "group": "odb" - }, - "git_odb_write_pack": { - "type": "function", - "file": "git2/odb.h", - "line": 387, - "lineto": 391, - "args": [ - { - "name": "out", - "type": "git_odb_writepack **", - "comment": "pointer to the writepack functions" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "object database where the stream will read from" - }, - { - "name": "progress_cb", - "type": "git_indexer_progress_cb", - "comment": "function to call with progress information.\n Be aware that this is called inline with network and indexing operations,\n so performance may be affected." - }, - { - "name": "progress_payload", - "type": "void *", - "comment": "payload for the progress callback" - } - ], - "argline": "git_odb_writepack **out, git_odb *db, git_indexer_progress_cb progress_cb, void *progress_payload", - "sig": "git_odb_writepack **::git_odb *::git_indexer_progress_cb::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Open a stream for writing a pack file to the ODB.

\n", - "comments": "

If the ODB layer understands pack files, then the given packfile will likely be streamed directly to disk (and a corresponding index created). If the ODB layer does not understand pack files, the objects will be stored in whatever format the ODB layer uses.

\n", - "group": "odb" - }, - "git_odb_write_multi_pack_index": { - "type": "function", - "file": "git2/odb.h", - "line": 404, - "lineto": 405, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "object database where the `multi-pack-index` file will be written." - } - ], - "argline": "git_odb *db", - "sig": "git_odb *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Write a multi-pack-index file from all the .pack files in the ODB.

\n", - "comments": "

If the ODB layer understands pack files, then this will create a file called multi-pack-index next to the .pack and .idx files, which will contain an index of all objects stored in .pack files. This will allow for O(log n) lookup for n objects (regardless of how many packfiles there exist).

\n", - "group": "odb" - }, - "git_odb_hash": { - "type": "function", - "file": "git2/odb.h", - "line": 419, - "lineto": 419, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the resulting object-ID." - }, - { - "name": "data", - "type": "const void *", - "comment": "data to hash" - }, - { - "name": "len", - "type": "size_t", - "comment": "size of the data" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "of the data to hash" - } - ], - "argline": "git_oid *out, const void *data, size_t len, git_object_t type", - "sig": "git_oid *::const void *::size_t::git_object_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Determine the object-ID (sha1 hash) of a data buffer

\n", - "comments": "

The resulting SHA-1 OID will be the identifier for the data buffer as if the data buffer it were to written to the ODB.

\n", - "group": "odb" - }, - "git_odb_hashfile": { - "type": "function", - "file": "git2/odb.h", - "line": 434, - "lineto": 434, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "oid structure the result is written into." - }, - { - "name": "path", - "type": "const char *", - "comment": "file to read and determine object id for" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "the type of the object that will be hashed" - } - ], - "argline": "git_oid *out, const char *path, git_object_t type", - "sig": "git_oid *::const char *::git_object_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read a file from disk and fill a git_oid with the object id\n that the file would have if it were written to the Object\n Database as an object of the given type (w/o applying filters).\n Similar functionality to git.git's git hash-object without\n the -w flag, however, with the --no-filters flag.\n If you need filters, see git_repository_hashfile.

\n", - "comments": "", - "group": "odb" - }, - "git_odb_object_dup": { - "type": "function", - "file": "git2/odb.h", - "line": 448, - "lineto": 448, - "args": [ - { - "name": "dest", - "type": "git_odb_object **", - "comment": "pointer where to store the copy" - }, - { - "name": "source", - "type": "git_odb_object *", - "comment": "object to copy" - } - ], - "argline": "git_odb_object **dest, git_odb_object *source", - "sig": "git_odb_object **::git_odb_object *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a copy of an odb_object

\n", - "comments": "

The returned copy must be manually freed with git_odb_object_free. Note that because of an implementation detail, the returned copy will be the same pointer as source: the object is internally refcounted, so the copy still needs to be freed twice.

\n", - "group": "odb" - }, - "git_odb_object_free": { - "type": "function", - "file": "git2/odb.h", - "line": 458, - "lineto": 458, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "object to close" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an ODB object

\n", - "comments": "

This method must always be called once a git_odb_object is no longer needed, otherwise memory will leak.

\n", - "group": "odb", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_odb_object_free-22" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_odb_object_free-44" - ] - } - }, - "git_odb_object_id": { - "type": "function", - "file": "git2/odb.h", - "line": 468, - "lineto": 468, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "the object" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "const git_oid *", - "comment": " a pointer to the OID" - }, - "description": "

Return the OID of an ODB object

\n", - "comments": "

This is the OID from which the object was read from

\n", - "group": "odb" - }, - "git_odb_object_data": { - "type": "function", - "file": "git2/odb.h", - "line": 481, - "lineto": 481, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "the object" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "const void *", - "comment": " a pointer to the data" - }, - "description": "

Return the data of an ODB object

\n", - "comments": "

This is the uncompressed, raw data as read from the ODB, without the leading header.

\n\n

This pointer is owned by the object and shall not be free'd.

\n", - "group": "odb", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_odb_object_data-45" - ] - } - }, - "git_odb_object_size": { - "type": "function", - "file": "git2/odb.h", - "line": 492, - "lineto": 492, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "the object" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "size_t", - "comment": " the size" - }, - "description": "

Return the size of an ODB object

\n", - "comments": "

This is the real size of the data buffer, not the actual size of the object.

\n", - "group": "odb", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_odb_object_size-23" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_odb_object_size-46" - ] - } - }, - "git_odb_object_type": { - "type": "function", - "file": "git2/odb.h", - "line": 500, - "lineto": 500, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "the object" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "git_object_t", - "comment": " the type" - }, - "description": "

Return the type of an ODB object

\n", - "comments": "", - "group": "odb", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_odb_object_type-47" - ] - } - }, - "git_odb_add_backend": { - "type": "function", - "file": "git2/odb.h", - "line": 515, - "lineto": 515, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "database to add the backend to" - }, - { - "name": "backend", - "type": "git_odb_backend *", - "comment": "pointer to a git_odb_backend instance" - }, - { - "name": "priority", - "type": "int", - "comment": "Value for ordering the backends queue" - } - ], - "argline": "git_odb *odb, git_odb_backend *backend, int priority", - "sig": "git_odb *::git_odb_backend *::int", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Add a custom backend to an existing Object DB

\n", - "comments": "

The backends are checked in relative ordering, based on the value of the priority parameter.

\n\n

Read for more information.

\n", - "group": "odb" - }, - "git_odb_add_alternate": { - "type": "function", - "file": "git2/odb.h", - "line": 536, - "lineto": 536, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "database to add the backend to" - }, - { - "name": "backend", - "type": "git_odb_backend *", - "comment": "pointer to a git_odb_backend instance" - }, - { - "name": "priority", - "type": "int", - "comment": "Value for ordering the backends queue" - } - ], - "argline": "git_odb *odb, git_odb_backend *backend, int priority", - "sig": "git_odb *::git_odb_backend *::int", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Add a custom backend to an existing Object DB; this\n backend will work as an alternate.

\n", - "comments": "

Alternate backends are always checked for objects after all the main backends have been exhausted.

\n\n

The backends are checked in relative ordering, based on the value of the priority parameter.

\n\n

Writing is disabled on alternate backends.

\n\n

Read for more information.

\n", - "group": "odb" - }, - "git_odb_num_backends": { - "type": "function", - "file": "git2/odb.h", - "line": 544, - "lineto": 544, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "object database" - } - ], - "argline": "git_odb *odb", - "sig": "git_odb *", - "return": { - "type": "size_t", - "comment": " number of backends in the ODB" - }, - "description": "

Get the number of ODB backend objects

\n", - "comments": "", - "group": "odb" - }, - "git_odb_get_backend": { - "type": "function", - "file": "git2/odb.h", - "line": 554, - "lineto": 554, - "args": [ - { - "name": "out", - "type": "git_odb_backend **", - "comment": "output pointer to ODB backend at pos" - }, - { - "name": "odb", - "type": "git_odb *", - "comment": "object database" - }, - { - "name": "pos", - "type": "size_t", - "comment": "index into object database backend list" - } - ], - "argline": "git_odb_backend **out, git_odb *odb, size_t pos", - "sig": "git_odb_backend **::git_odb *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if pos is invalid, other errors \n<\n 0" - }, - "description": "

Lookup an ODB backend object by index

\n", - "comments": "", - "group": "odb" - }, - "git_odb_set_commit_graph": { - "type": "function", - "file": "git2/odb.h", - "line": 569, - "lineto": 569, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "object database" - }, - { - "name": "cgraph", - "type": "git_commit_graph *", - "comment": "the git commit-graph" - } - ], - "argline": "git_odb *odb, git_commit_graph *cgraph", - "sig": "git_odb *::git_commit_graph *", - "return": { - "type": "int", - "comment": " 0 on success; error code otherwise" - }, - "description": "

Set the git commit-graph for the ODB.

\n", - "comments": "

After a successfull call, the ownership of the cgraph parameter will be transferred to libgit2, and the caller should not free it.

\n\n

The commit-graph can also be unset by explicitly passing NULL as the cgraph parameter.

\n", - "group": "odb" - }, - "git_odb_backend_pack": { - "type": "function", - "file": "git2/odb_backend.h", - "line": 35, - "lineto": 35, - "args": [ - { - "name": "out", - "type": "git_odb_backend **", - "comment": "location to store the odb backend pointer" - }, - { - "name": "objects_dir", - "type": "const char *", - "comment": "the Git repository's objects directory" - } - ], - "argline": "git_odb_backend **out, const char *objects_dir", - "sig": "git_odb_backend **::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a backend for the packfiles.

\n", - "comments": "", - "group": "odb" - }, - "git_odb_backend_loose": { - "type": "function", - "file": "git2/odb_backend.h", - "line": 49, - "lineto": 55, - "args": [ - { - "name": "out", - "type": "git_odb_backend **", - "comment": "location to store the odb backend pointer" - }, - { - "name": "objects_dir", - "type": "const char *", - "comment": "the Git repository's objects directory" - }, - { - "name": "compression_level", - "type": "int", - "comment": "zlib compression level to use" - }, - { - "name": "do_fsync", - "type": "int", - "comment": "whether to do an fsync() after writing" - }, - { - "name": "dir_mode", - "type": "unsigned int", - "comment": "permissions to use creating a directory or 0 for defaults" - }, - { - "name": "file_mode", - "type": "unsigned int", - "comment": "permissions to use creating a file or 0 for defaults" - } - ], - "argline": "git_odb_backend **out, const char *objects_dir, int compression_level, int do_fsync, unsigned int dir_mode, unsigned int file_mode", - "sig": "git_odb_backend **::const char *::int::int::unsigned int::unsigned int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a backend for loose objects

\n", - "comments": "", - "group": "odb" - }, - "git_odb_backend_one_pack": { - "type": "function", - "file": "git2/odb_backend.h", - "line": 68, - "lineto": 68, - "args": [ - { - "name": "out", - "type": "git_odb_backend **", - "comment": "location to store the odb backend pointer" - }, - { - "name": "index_file", - "type": "const char *", - "comment": "path to the packfile's .idx file" - } - ], - "argline": "git_odb_backend **out, const char *index_file", - "sig": "git_odb_backend **::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a backend out of a single packfile

\n", - "comments": "

This can be useful for inspecting the contents of a single packfile.

\n", - "group": "odb" - }, - "git_oid_fromstr": { - "type": "function", - "file": "git2/oid.h", - "line": 47, - "lineto": 47, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "oid structure the result is written into." - }, - { - "name": "str", - "type": "const char *", - "comment": "input hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (40 bytes)." - } - ], - "argline": "git_oid *out, const char *str", - "sig": "git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Parse a hex formatted object id into a git_oid.

\n", - "comments": "", - "group": "oid", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_oid_fromstr-48", - "ex/v1.3.1/general.html#git_oid_fromstr-49", - "ex/v1.3.1/general.html#git_oid_fromstr-50", - "ex/v1.3.1/general.html#git_oid_fromstr-51", - "ex/v1.3.1/general.html#git_oid_fromstr-52", - "ex/v1.3.1/general.html#git_oid_fromstr-53", - "ex/v1.3.1/general.html#git_oid_fromstr-54", - "ex/v1.3.1/general.html#git_oid_fromstr-55" - ] - } - }, - "git_oid_fromstrp": { - "type": "function", - "file": "git2/oid.h", - "line": 56, - "lineto": 56, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "oid structure the result is written into." - }, - { - "name": "str", - "type": "const char *", - "comment": "input hex string; must be null-terminated." - } - ], - "argline": "git_oid *out, const char *str", - "sig": "git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Parse a hex formatted null-terminated string into a git_oid.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_fromstrn": { - "type": "function", - "file": "git2/oid.h", - "line": 69, - "lineto": 69, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "oid structure the result is written into." - }, - { - "name": "str", - "type": "const char *", - "comment": "input hex string of at least size `length`" - }, - { - "name": "length", - "type": "size_t", - "comment": "length of the input string" - } - ], - "argline": "git_oid *out, const char *str, size_t length", - "sig": "git_oid *::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Parse N characters of a hex formatted object id into a git_oid.

\n", - "comments": "

If N is odd, the last byte's high nibble will be read in and the low nibble set to zero.

\n", - "group": "oid" - }, - "git_oid_fromraw": { - "type": "function", - "file": "git2/oid.h", - "line": 78, - "lineto": 78, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "oid structure the result is written into." - }, - { - "name": "raw", - "type": "const unsigned char *", - "comment": "the raw input bytes to be copied." - } - ], - "argline": "git_oid *out, const unsigned char *raw", - "sig": "git_oid *::const unsigned char *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Copy an already raw oid into a git_oid structure.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_fmt": { - "type": "function", - "file": "git2/oid.h", - "line": 91, - "lineto": 91, - "args": [ - { - "name": "out", - "type": "char *", - "comment": "output hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (40 bytes). Only the\n\t\toid digits are written; a '\n\\\n0' terminator must be added\n\t\tby the caller if it is required." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure to format." - } - ], - "argline": "char *out, const git_oid *id", - "sig": "char *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Format a git_oid into a hex string.

\n", - "comments": "", - "group": "oid", - "examples": { - "fetch.c": [ - "ex/v1.3.1/fetch.html#git_oid_fmt-1", - "ex/v1.3.1/fetch.html#git_oid_fmt-2" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_oid_fmt-56", - "ex/v1.3.1/general.html#git_oid_fmt-57", - "ex/v1.3.1/general.html#git_oid_fmt-58", - "ex/v1.3.1/general.html#git_oid_fmt-59", - "ex/v1.3.1/general.html#git_oid_fmt-60" - ], - "ls-remote.c": [ - "ex/v1.3.1/ls-remote.html#git_oid_fmt-1" - ] - } - }, - "git_oid_nfmt": { - "type": "function", - "file": "git2/oid.h", - "line": 103, - "lineto": 103, - "args": [ - { - "name": "out", - "type": "char *", - "comment": "output hex string; you say how many bytes to write.\n\t\tIf the number of bytes is > GIT_OID_HEXSZ, extra bytes\n\t\twill be zeroed; if not, a '\n\\\n0' terminator is NOT added." - }, - { - "name": "n", - "type": "size_t", - "comment": "number of characters to write into out string" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure to format." - } - ], - "argline": "char *out, size_t n, const git_oid *id", - "sig": "char *::size_t::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Format a git_oid into a partial hex string.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_pathfmt": { - "type": "function", - "file": "git2/oid.h", - "line": 119, - "lineto": 119, - "args": [ - { - "name": "out", - "type": "char *", - "comment": "output hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (41 bytes). Only the\n\t\toid digits are written; a '\n\\\n0' terminator must be added\n\t\tby the caller if it is required." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure to format." - } - ], - "argline": "char *out, const git_oid *id", - "sig": "char *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Format a git_oid into a loose-object path string.

\n", - "comments": "

The resulting string is "aa/...", where "aa" is the first two hex digits of the oid and "..." is the remaining 38 digits.

\n", - "group": "oid" - }, - "git_oid_tostr_s": { - "type": "function", - "file": "git2/oid.h", - "line": 132, - "lineto": 132, - "args": [ - { - "name": "oid", - "type": "const git_oid *", - "comment": "The oid structure to format" - } - ], - "argline": "const git_oid *oid", - "sig": "const git_oid *", - "return": { - "type": "char *", - "comment": " the c-string" - }, - "description": "

Format a git_oid into a statically allocated c-string.

\n", - "comments": "

The c-string is owned by the library and should not be freed by the user. If libgit2 is built with thread support, the string will be stored in TLS (i.e. one buffer per thread) to allow for concurrent calls of the function.

\n", - "group": "oid", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_oid_tostr_s-19", - "ex/v1.3.1/merge.html#git_oid_tostr_s-20" - ] - } - }, - "git_oid_tostr": { - "type": "function", - "file": "git2/oid.h", - "line": 151, - "lineto": 151, - "args": [ - { - "name": "out", - "type": "char *", - "comment": "the buffer into which the oid string is output." - }, - { - "name": "n", - "type": "size_t", - "comment": "the size of the out buffer." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the oid structure to format." - } - ], - "argline": "char *out, size_t n, const git_oid *id", - "sig": "char *::size_t::const git_oid *", - "return": { - "type": "char *", - "comment": " the out buffer pointer, assuming no input parameter\n\t\t\terrors, otherwise a pointer to an empty string." - }, - "description": "

Format a git_oid into a buffer as a hex format c-string.

\n", - "comments": "

If the buffer is smaller than GIT_OID_HEXSZ+1, then the resulting oid c-string will be truncated to n-1 characters (but will still be NUL-byte terminated).

\n\n

If there are any input parameter errors (out == NULL, n == 0, oid == NULL), then a pointer to an empty string is returned, so that the return value can always be printed.

\n", - "group": "oid", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_oid_tostr-16", - "ex/v1.3.1/blame.html#git_oid_tostr-17" - ], - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_oid_tostr-24", - "ex/v1.3.1/cat-file.html#git_oid_tostr-25", - "ex/v1.3.1/cat-file.html#git_oid_tostr-26", - "ex/v1.3.1/cat-file.html#git_oid_tostr-27", - "ex/v1.3.1/cat-file.html#git_oid_tostr-28" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_oid_tostr-38", - "ex/v1.3.1/log.html#git_oid_tostr-39" - ], - "rev-parse.c": [ - "ex/v1.3.1/rev-parse.html#git_oid_tostr-10", - "ex/v1.3.1/rev-parse.html#git_oid_tostr-11", - "ex/v1.3.1/rev-parse.html#git_oid_tostr-12", - "ex/v1.3.1/rev-parse.html#git_oid_tostr-13" - ] - } - }, - "git_oid_cpy": { - "type": "function", - "file": "git2/oid.h", - "line": 160, - "lineto": 160, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "oid structure the result is written into." - }, - { - "name": "src", - "type": "const git_oid *", - "comment": "oid structure to copy from." - } - ], - "argline": "git_oid *out, const git_oid *src", - "sig": "git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Copy an oid from one structure to another.

\n", - "comments": "", - "group": "oid", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_oid_cpy-18", - "ex/v1.3.1/blame.html#git_oid_cpy-19", - "ex/v1.3.1/blame.html#git_oid_cpy-20" - ] - } - }, - "git_oid_cmp": { - "type": "function", - "file": "git2/oid.h", - "line": 169, - "lineto": 169, - "args": [ - { - "name": "a", - "type": "const git_oid *", - "comment": "first oid structure." - }, - { - "name": "b", - "type": "const git_oid *", - "comment": "second oid structure." - } - ], - "argline": "const git_oid *a, const git_oid *b", - "sig": "const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " \n<\n0, 0, >0 if a \n<\n b, a == b, a > b." - }, - "description": "

Compare two oid structures.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_equal": { - "type": "function", - "file": "git2/oid.h", - "line": 178, - "lineto": 178, - "args": [ - { - "name": "a", - "type": "const git_oid *", - "comment": "first oid structure." - }, - { - "name": "b", - "type": "const git_oid *", - "comment": "second oid structure." - } - ], - "argline": "const git_oid *a, const git_oid *b", - "sig": "const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " true if equal, false otherwise" - }, - "description": "

Compare two oid structures for equality

\n", - "comments": "", - "group": "oid" - }, - "git_oid_ncmp": { - "type": "function", - "file": "git2/oid.h", - "line": 189, - "lineto": 189, - "args": [ - { - "name": "a", - "type": "const git_oid *", - "comment": "first oid structure." - }, - { - "name": "b", - "type": "const git_oid *", - "comment": "second oid structure." - }, - { - "name": "len", - "type": "size_t", - "comment": "the number of hex chars to compare" - } - ], - "argline": "const git_oid *a, const git_oid *b, size_t len", - "sig": "const git_oid *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 in case of a match" - }, - "description": "

Compare the first 'len' hexadecimal characters (packets of 4 bits)\n of two oid structures.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_streq": { - "type": "function", - "file": "git2/oid.h", - "line": 198, - "lineto": 198, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure." - }, - { - "name": "str", - "type": "const char *", - "comment": "input hex string of an object id." - } - ], - "argline": "const git_oid *id, const char *str", - "sig": "const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 in case of a match, -1 otherwise." - }, - "description": "

Check if an oid equals an hex formatted object id.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_strcmp": { - "type": "function", - "file": "git2/oid.h", - "line": 208, - "lineto": 208, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure." - }, - { - "name": "str", - "type": "const char *", - "comment": "input hex string of an object id." - } - ], - "argline": "const git_oid *id, const char *str", - "sig": "const git_oid *::const char *", - "return": { - "type": "int", - "comment": " -1 if str is not valid, \n<\n0 if id sorts before str,\n 0 if id matches str, >0 if id sorts after str." - }, - "description": "

Compare an oid to an hex formatted object id.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_is_zero": { - "type": "function", - "file": "git2/oid.h", - "line": 215, - "lineto": 215, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": null - } - ], - "argline": "const git_oid *id", - "sig": "const git_oid *", - "return": { - "type": "int", - "comment": " 1 if all zeros, 0 otherwise." - }, - "description": "

Check is an oid is all zeros.

\n", - "comments": "", - "group": "oid", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_oid_is_zero-21" - ], - "fetch.c": [ - "ex/v1.3.1/fetch.html#git_oid_is_zero-3" - ] - } - }, - "git_oid_shorten_new": { - "type": "function", - "file": "git2/oid.h", - "line": 236, - "lineto": 236, - "args": [ - { - "name": "min_length", - "type": "size_t", - "comment": "The minimal length for all identifiers,\n\t\twhich will be used even if shorter OIDs would still\n\t\tbe unique." - } - ], - "argline": "size_t min_length", - "sig": "size_t", - "return": { - "type": "git_oid_shorten *", - "comment": " a `git_oid_shorten` instance, NULL if OOM" - }, - "description": "

Create a new OID shortener.

\n", - "comments": "

The OID shortener is used to process a list of OIDs in text form and return the shortest length that would uniquely identify all of them.

\n\n

E.g. look at the result of git log --abbrev.

\n", - "group": "oid" - }, - "git_oid_shorten_add": { - "type": "function", - "file": "git2/oid.h", - "line": 262, - "lineto": 262, - "args": [ - { - "name": "os", - "type": "git_oid_shorten *", - "comment": "a `git_oid_shorten` instance" - }, - { - "name": "text_id", - "type": "const char *", - "comment": "an OID in text form" - } - ], - "argline": "git_oid_shorten *os, const char *text_id", - "sig": "git_oid_shorten *::const char *", - "return": { - "type": "int", - "comment": " the minimal length to uniquely identify all OIDs\n\t\tadded so far to the set; or an error code (\n<\n0) if an\n\t\terror occurs." - }, - "description": "

Add a new OID to set of shortened OIDs and calculate\n the minimal length to uniquely identify all the OIDs in\n the set.

\n", - "comments": "

The OID is expected to be a 40-char hexadecimal string. The OID is owned by the user and will not be modified or freed.

\n\n

For performance reasons, there is a hard-limit of how many OIDs can be added to a single set (around ~32000, assuming a mostly randomized distribution), which should be enough for any kind of program, and keeps the algorithm fast and memory-efficient.

\n\n

Attempting to add more than those OIDs will result in a GIT_ERROR_INVALID error

\n", - "group": "oid" - }, - "git_oid_shorten_free": { - "type": "function", - "file": "git2/oid.h", - "line": 269, - "lineto": 269, - "args": [ - { - "name": "os", - "type": "git_oid_shorten *", - "comment": "a `git_oid_shorten` instance" - } - ], - "argline": "git_oid_shorten *os", - "sig": "git_oid_shorten *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an OID shortener instance

\n", - "comments": "", - "group": "oid" - }, - "git_oidarray_dispose": { - "type": "function", - "file": "git2/oidarray.h", - "line": 31, - "lineto": 31, - "args": [ - { - "name": "array", - "type": "git_oidarray *", - "comment": "git_oidarray from which to free oid data" - } - ], - "argline": "git_oidarray *array", - "sig": "git_oidarray *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the object IDs contained in an oid_array. This method should\n be called on git_oidarray objects that were provided by the\n library. Not doing so will result in a memory leak.

\n", - "comments": "

This does not free the git_oidarray itself, since the library will never allocate that object directly itself.

\n", - "group": "oidarray" - }, - "git_packbuilder_new": { - "type": "function", - "file": "git2/pack.h", - "line": 65, - "lineto": 65, - "args": [ - { - "name": "out", - "type": "git_packbuilder **", - "comment": "The new packbuilder object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository" - } - ], - "argline": "git_packbuilder **out, git_repository *repo", - "sig": "git_packbuilder **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Initialize a new packbuilder

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_set_threads": { - "type": "function", - "file": "git2/pack.h", - "line": 78, - "lineto": 78, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "n", - "type": "unsigned int", - "comment": "Number of threads to spawn" - } - ], - "argline": "git_packbuilder *pb, unsigned int n", - "sig": "git_packbuilder *::unsigned int", - "return": { - "type": "unsigned int", - "comment": " number of actual threads to be used" - }, - "description": "

Set number of threads to spawn

\n", - "comments": "

By default, libgit2 won't spawn any threads at all; when set to 0, libgit2 will autodetect the number of CPUs.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert": { - "type": "function", - "file": "git2/pack.h", - "line": 92, - "lineto": 92, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The oid of the commit" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name; might be NULL" - } - ], - "argline": "git_packbuilder *pb, const git_oid *id, const char *name", - "sig": "git_packbuilder *::const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Insert a single object

\n", - "comments": "

For an optimal pack it's mandatory to insert objects in recency order, commits followed by trees and blobs.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert_tree": { - "type": "function", - "file": "git2/pack.h", - "line": 104, - "lineto": 104, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The oid of the root tree" - } - ], - "argline": "git_packbuilder *pb, const git_oid *id", - "sig": "git_packbuilder *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Insert a root tree object

\n", - "comments": "

This will add the tree as well as all referenced trees and blobs.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert_commit": { - "type": "function", - "file": "git2/pack.h", - "line": 116, - "lineto": 116, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The oid of the commit" - } - ], - "argline": "git_packbuilder *pb, const git_oid *id", - "sig": "git_packbuilder *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Insert a commit object

\n", - "comments": "

This will add a commit as well as the completed referenced tree.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert_walk": { - "type": "function", - "file": "git2/pack.h", - "line": 129, - "lineto": 129, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - }, - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the revwalk to use to fill the packbuilder" - } - ], - "argline": "git_packbuilder *pb, git_revwalk *walk", - "sig": "git_packbuilder *::git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Insert objects as given by the walk

\n", - "comments": "

Those commits and all objects they reference will be inserted into the packbuilder.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert_recur": { - "type": "function", - "file": "git2/pack.h", - "line": 141, - "lineto": 141, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the id of the root object to insert" - }, - { - "name": "name", - "type": "const char *", - "comment": "optional name for the object" - } - ], - "argline": "git_packbuilder *pb, const git_oid *id, const char *name", - "sig": "git_packbuilder *::const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Recursively insert an object and its referenced objects

\n", - "comments": "

Insert the object as well as any object it references.

\n", - "group": "packbuilder" - }, - "git_packbuilder_write_buf": { - "type": "function", - "file": "git2/pack.h", - "line": 152, - "lineto": 152, - "args": [ - { - "name": "buf", - "type": "git_buf *", - "comment": "Buffer where to write the packfile" - }, - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - } - ], - "argline": "git_buf *buf, git_packbuilder *pb", - "sig": "git_buf *::git_packbuilder *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Write the contents of the packfile to an in-memory buffer

\n", - "comments": "

The contents of the buffer will become a valid packfile, even though there will be no attached index

\n", - "group": "packbuilder" - }, - "git_packbuilder_write": { - "type": "function", - "file": "git2/pack.h", - "line": 165, - "lineto": 170, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to the directory where the packfile and index should be stored, or NULL for default location" - }, - { - "name": "mode", - "type": "unsigned int", - "comment": "permissions to use creating a packfile or 0 for defaults" - }, - { - "name": "progress_cb", - "type": "git_indexer_progress_cb", - "comment": "function to call with progress information from the indexer (optional)" - }, - { - "name": "progress_cb_payload", - "type": "void *", - "comment": "payload for the progress callback (optional)" - } - ], - "argline": "git_packbuilder *pb, const char *path, unsigned int mode, git_indexer_progress_cb progress_cb, void *progress_cb_payload", - "sig": "git_packbuilder *::const char *::unsigned int::git_indexer_progress_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write the new pack and corresponding index file to path.

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_hash": { - "type": "function", - "file": "git2/pack.h", - "line": 180, - "lineto": 180, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder object" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "const git_oid *", - "comment": null - }, - "description": "

Get the packfile's hash

\n", - "comments": "

A packfile's name is derived from the sorted hashing of all object names. This is only correct after the packfile has been written.

\n", - "group": "packbuilder" - }, - "git_packbuilder_foreach": { - "type": "function", - "file": "git2/pack.h", - "line": 202, - "lineto": 202, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - }, - { - "name": "cb", - "type": "git_packbuilder_foreach_cb", - "comment": "the callback to call with each packed object's buffer" - }, - { - "name": "payload", - "type": "void *", - "comment": "the callback's data" - } - ], - "argline": "git_packbuilder *pb, git_packbuilder_foreach_cb cb, void *payload", - "sig": "git_packbuilder *::git_packbuilder_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create the new pack and pass each object to the callback

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_object_count": { - "type": "function", - "file": "git2/pack.h", - "line": 210, - "lineto": 210, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "size_t", - "comment": " the number of objects in the packfile" - }, - "description": "

Get the total number of objects the packbuilder will write out

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_written": { - "type": "function", - "file": "git2/pack.h", - "line": 218, - "lineto": 218, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "size_t", - "comment": " the number of objects which have already been written" - }, - "description": "

Get the number of objects the packbuilder has already written out

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_set_callbacks": { - "type": "function", - "file": "git2/pack.h", - "line": 237, - "lineto": 240, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder object" - }, - { - "name": "progress_cb", - "type": "git_packbuilder_progress", - "comment": "Function to call with progress information during\n pack building. Be aware that this is called inline with pack building\n operations, so performance may be affected." - }, - { - "name": "progress_cb_payload", - "type": "void *", - "comment": "Payload for progress callback." - } - ], - "argline": "git_packbuilder *pb, git_packbuilder_progress progress_cb, void *progress_cb_payload", - "sig": "git_packbuilder *::git_packbuilder_progress::void *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the callbacks for a packbuilder

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_free": { - "type": "function", - "file": "git2/pack.h", - "line": 247, - "lineto": 247, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the packbuilder and all associated data

\n", - "comments": "", - "group": "packbuilder" - }, - "git_patch_owner": { - "type": "function", - "file": "git2/patch.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "patch", - "type": "const git_patch *", - "comment": "the patch" - } - ], - "argline": "const git_patch *patch", - "sig": "const git_patch *", - "return": { - "type": "git_repository *", - "comment": " a pointer to the repository" - }, - "description": "

Get the repository associated with this patch. May be NULL.

\n", - "comments": "", - "group": "patch" - }, - "git_patch_from_diff": { - "type": "function", - "file": "git2/patch.h", - "line": 59, - "lineto": 60, - "args": [ - { - "name": "out", - "type": "git_patch **", - "comment": "Output parameter for the delta patch object" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "Diff list object" - }, - { - "name": "idx", - "type": "size_t", - "comment": "Index into diff list" - } - ], - "argline": "git_patch **out, git_diff *diff, size_t idx", - "sig": "git_patch **::git_diff *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, other value \n<\n 0 on error" - }, - "description": "

Return a patch for an entry in the diff list.

\n", - "comments": "

The git_patch is a newly created object contains the text diffs for the delta. You have to call git_patch_free() when you are done with it. You can use the patch object to loop over all the hunks and lines in the diff of the one delta.

\n\n

For an unchanged file or a binary file, no git_patch will be created, the output will be set to NULL, and the binary flag will be set true in the git_diff_delta structure.

\n\n

It is okay to pass NULL for either of the output parameters; if you pass NULL for the git_patch, then the text diff will not be calculated.

\n", - "group": "patch" - }, - "git_patch_from_blobs": { - "type": "function", - "file": "git2/patch.h", - "line": 78, - "lineto": 84, - "args": [ - { - "name": "out", - "type": "git_patch **", - "comment": "The generated patch; NULL on error" - }, - { - "name": "old_blob", - "type": "const git_blob *", - "comment": "Blob for old side of diff, or NULL for empty blob" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old blob as if it had this filename; can be NULL" - }, - { - "name": "new_blob", - "type": "const git_blob *", - "comment": "Blob for new side of diff, or NULL for empty blob" - }, - { - "name": "new_as_path", - "type": "const char *", - "comment": "Treat new blob as if it had this filename; can be NULL" - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - } - ], - "argline": "git_patch **out, const git_blob *old_blob, const char *old_as_path, const git_blob *new_blob, const char *new_as_path, const git_diff_options *opts", - "sig": "git_patch **::const git_blob *::const char *::const git_blob *::const char *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code \n<\n 0" - }, - "description": "

Directly generate a patch from the difference between two blobs.

\n", - "comments": "

This is just like git_diff_blobs() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", - "group": "patch" - }, - "git_patch_from_blob_and_buffer": { - "type": "function", - "file": "git2/patch.h", - "line": 103, - "lineto": 110, - "args": [ - { - "name": "out", - "type": "git_patch **", - "comment": "The generated patch; NULL on error" - }, - { - "name": "old_blob", - "type": "const git_blob *", - "comment": "Blob for old side of diff, or NULL for empty blob" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old blob as if it had this filename; can be NULL" - }, - { - "name": "buffer", - "type": "const void *", - "comment": "Raw data for new side of diff, or NULL for empty" - }, - { - "name": "buffer_len", - "type": "size_t", - "comment": "Length of raw data for new side of diff" - }, - { - "name": "buffer_as_path", - "type": "const char *", - "comment": "Treat buffer as if it had this filename; can be NULL" - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - } - ], - "argline": "git_patch **out, const git_blob *old_blob, const char *old_as_path, const void *buffer, size_t buffer_len, const char *buffer_as_path, const git_diff_options *opts", - "sig": "git_patch **::const git_blob *::const char *::const void *::size_t::const char *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code \n<\n 0" - }, - "description": "

Directly generate a patch from the difference between a blob and a buffer.

\n", - "comments": "

This is just like git_diff_blob_to_buffer() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", - "group": "patch" - }, - "git_patch_from_buffers": { - "type": "function", - "file": "git2/patch.h", - "line": 130, - "lineto": 138, - "args": [ - { - "name": "out", - "type": "git_patch **", - "comment": "The generated patch; NULL on error" - }, - { - "name": "old_buffer", - "type": "const void *", - "comment": "Raw data for old side of diff, or NULL for empty" - }, - { - "name": "old_len", - "type": "size_t", - "comment": "Length of the raw data for old side of the diff" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old buffer as if it had this filename; can be NULL" - }, - { - "name": "new_buffer", - "type": "const void *", - "comment": "Raw data for new side of diff, or NULL for empty" - }, - { - "name": "new_len", - "type": "size_t", - "comment": "Length of raw data for new side of diff" - }, - { - "name": "new_as_path", - "type": "const char *", - "comment": "Treat buffer as if it had this filename; can be NULL" - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - } - ], - "argline": "git_patch **out, const void *old_buffer, size_t old_len, const char *old_as_path, const void *new_buffer, size_t new_len, const char *new_as_path, const git_diff_options *opts", - "sig": "git_patch **::const void *::size_t::const char *::const void *::size_t::const char *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code \n<\n 0" - }, - "description": "

Directly generate a patch from the difference between two buffers.

\n", - "comments": "

This is just like git_diff_buffers() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", - "group": "patch", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_patch_from_buffers-15" - ] - } - }, - "git_patch_free": { - "type": "function", - "file": "git2/patch.h", - "line": 143, - "lineto": 143, - "args": [ - { - "name": "patch", - "type": "git_patch *", - "comment": null - } - ], - "argline": "git_patch *patch", - "sig": "git_patch *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a git_patch object.

\n", - "comments": "", - "group": "patch", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_patch_free-16" - ] - } - }, - "git_patch_get_delta": { - "type": "function", - "file": "git2/patch.h", - "line": 149, - "lineto": 149, - "args": [ - { - "name": "patch", - "type": "const git_patch *", - "comment": null - } - ], - "argline": "const git_patch *patch", - "sig": "const git_patch *", - "return": { - "type": "const git_diff_delta *", - "comment": null - }, - "description": "

Get the delta associated with a patch. This delta points to internal\n data and you do not have to release it when you are done with it.

\n", - "comments": "", - "group": "patch" - }, - "git_patch_num_hunks": { - "type": "function", - "file": "git2/patch.h", - "line": 154, - "lineto": 154, - "args": [ - { - "name": "patch", - "type": "const git_patch *", - "comment": null - } - ], - "argline": "const git_patch *patch", - "sig": "const git_patch *", - "return": { - "type": "size_t", - "comment": null - }, - "description": "

Get the number of hunks in a patch

\n", - "comments": "", - "group": "patch" - }, - "git_patch_line_stats": { - "type": "function", - "file": "git2/patch.h", - "line": 172, - "lineto": 176, - "args": [ - { - "name": "total_context", - "type": "size_t *", - "comment": "Count of context lines in output, can be NULL." - }, - { - "name": "total_additions", - "type": "size_t *", - "comment": "Count of addition lines in output, can be NULL." - }, - { - "name": "total_deletions", - "type": "size_t *", - "comment": "Count of deletion lines in output, can be NULL." - }, - { - "name": "patch", - "type": "const git_patch *", - "comment": "The git_patch object" - } - ], - "argline": "size_t *total_context, size_t *total_additions, size_t *total_deletions, const git_patch *patch", - "sig": "size_t *::size_t *::size_t *::const git_patch *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on error" - }, - "description": "

Get line counts of each type in a patch.

\n", - "comments": "

This helps imitate a diff --numstat type of output. For that purpose, you only need the total_additions and total_deletions values, but we include the total_context line count in case you want the total number of lines of diff output that will be generated.

\n\n

All outputs are optional. Pass NULL if you don't need a particular count.

\n", - "group": "patch" - }, - "git_patch_get_hunk": { - "type": "function", - "file": "git2/patch.h", - "line": 191, - "lineto": 195, - "args": [ - { - "name": "out", - "type": "const git_diff_hunk **", - "comment": "Output pointer to git_diff_hunk of hunk" - }, - { - "name": "lines_in_hunk", - "type": "size_t *", - "comment": "Output count of total lines in this hunk" - }, - { - "name": "patch", - "type": "git_patch *", - "comment": "Input pointer to patch object" - }, - { - "name": "hunk_idx", - "type": "size_t", - "comment": "Input index of hunk to get information about" - } - ], - "argline": "const git_diff_hunk **out, size_t *lines_in_hunk, git_patch *patch, size_t hunk_idx", - "sig": "const git_diff_hunk **::size_t *::git_patch *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if hunk_idx out of range, \n<\n0 on error" - }, - "description": "

Get the information about a hunk in a patch

\n", - "comments": "

Given a patch and a hunk index into the patch, this returns detailed information about that hunk. Any of the output pointers can be passed as NULL if you don't care about that particular piece of information.

\n", - "group": "patch" - }, - "git_patch_num_lines_in_hunk": { - "type": "function", - "file": "git2/patch.h", - "line": 204, - "lineto": 206, - "args": [ - { - "name": "patch", - "type": "const git_patch *", - "comment": "The git_patch object" - }, - { - "name": "hunk_idx", - "type": "size_t", - "comment": "Index of the hunk" - } - ], - "argline": "const git_patch *patch, size_t hunk_idx", - "sig": "const git_patch *::size_t", - "return": { - "type": "int", - "comment": " Number of lines in hunk or GIT_ENOTFOUND if invalid hunk index" - }, - "description": "

Get the number of lines in a hunk.

\n", - "comments": "", - "group": "patch" - }, - "git_patch_get_line_in_hunk": { - "type": "function", - "file": "git2/patch.h", - "line": 222, - "lineto": 226, - "args": [ - { - "name": "out", - "type": "const git_diff_line **", - "comment": "The git_diff_line data for this line" - }, - { - "name": "patch", - "type": "git_patch *", - "comment": "The patch to look in" - }, - { - "name": "hunk_idx", - "type": "size_t", - "comment": "The index of the hunk" - }, - { - "name": "line_of_hunk", - "type": "size_t", - "comment": "The index of the line in the hunk" - } - ], - "argline": "const git_diff_line **out, git_patch *patch, size_t hunk_idx, size_t line_of_hunk", - "sig": "const git_diff_line **::git_patch *::size_t::size_t", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Get data about a line in a hunk of a patch.

\n", - "comments": "

Given a patch, a hunk index, and a line index in the hunk, this will return a lot of details about that line. If you pass a hunk index larger than the number of hunks or a line index larger than the number of lines in the hunk, this will return -1.

\n", - "group": "patch" - }, - "git_patch_size": { - "type": "function", - "file": "git2/patch.h", - "line": 244, - "lineto": 248, - "args": [ - { - "name": "patch", - "type": "git_patch *", - "comment": "A git_patch representing changes to one file" - }, - { - "name": "include_context", - "type": "int", - "comment": "Include context lines in size if non-zero" - }, - { - "name": "include_hunk_headers", - "type": "int", - "comment": "Include hunk header lines if non-zero" - }, - { - "name": "include_file_headers", - "type": "int", - "comment": "Include file header lines if non-zero" - } - ], - "argline": "git_patch *patch, int include_context, int include_hunk_headers, int include_file_headers", - "sig": "git_patch *::int::int::int", - "return": { - "type": "size_t", - "comment": " The number of bytes of data" - }, - "description": "

Look up size of patch diff data in bytes

\n", - "comments": "

This returns the raw size of the patch data. This only includes the actual data from the lines of the diff, not the file or hunk headers.

\n\n

If you pass include_context as true (non-zero), this will be the size of all of the diff output; if you pass it as false (zero), this will only include the actual changed lines (as if context_lines was 0).

\n", - "group": "patch" - }, - "git_patch_print": { - "type": "function", - "file": "git2/patch.h", - "line": 262, - "lineto": 265, - "args": [ - { - "name": "patch", - "type": "git_patch *", - "comment": "A git_patch representing changes to one file" - }, - { - "name": "print_cb", - "type": "git_diff_line_cb", - "comment": "Callback function to output lines of the patch. Will be\n called for file headers, hunk headers, and diff lines." - }, - { - "name": "payload", - "type": "void *", - "comment": "Reference pointer that will be passed to your callbacks." - } - ], - "argline": "git_patch *patch, git_diff_line_cb print_cb, void *payload", - "sig": "git_patch *::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Serialize the patch to text via callback.

\n", - "comments": "

Returning a non-zero value from the callback will terminate the iteration and return that value to the caller.

\n", - "group": "patch" - }, - "git_patch_to_buf": { - "type": "function", - "file": "git2/patch.h", - "line": 274, - "lineto": 276, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The git_buf to be filled in" - }, - { - "name": "patch", - "type": "git_patch *", - "comment": "A git_patch representing changes to one file" - } - ], - "argline": "git_buf *out, git_patch *patch", - "sig": "git_buf *::git_patch *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure." - }, - "description": "

Get the content of a patch as a single diff text.

\n", - "comments": "", - "group": "patch", - "examples": { - "diff.c": [ - "ex/v1.3.1/diff.html#git_patch_to_buf-17" - ] - } - }, - "git_pathspec_new": { - "type": "function", - "file": "git2/pathspec.h", - "line": 82, - "lineto": 83, - "args": [ - { - "name": "out", - "type": "git_pathspec **", - "comment": "Output of the compiled pathspec" - }, - { - "name": "pathspec", - "type": "const git_strarray *", - "comment": "A git_strarray of the paths to match" - } - ], - "argline": "git_pathspec **out, const git_strarray *pathspec", - "sig": "git_pathspec **::const git_strarray *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Compile a pathspec

\n", - "comments": "", - "group": "pathspec", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_pathspec_new-40" - ] - } - }, - "git_pathspec_free": { - "type": "function", - "file": "git2/pathspec.h", - "line": 90, - "lineto": 90, - "args": [ - { - "name": "ps", - "type": "git_pathspec *", - "comment": "The compiled pathspec" - } - ], - "argline": "git_pathspec *ps", - "sig": "git_pathspec *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a pathspec

\n", - "comments": "", - "group": "pathspec", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_pathspec_free-41" - ] - } - }, - "git_pathspec_matches_path": { - "type": "function", - "file": "git2/pathspec.h", - "line": 105, - "lineto": 106, - "args": [ - { - "name": "ps", - "type": "const git_pathspec *", - "comment": "The compiled pathspec" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "path", - "type": "const char *", - "comment": "The pathname to attempt to match" - } - ], - "argline": "const git_pathspec *ps, uint32_t flags, const char *path", - "sig": "const git_pathspec *::uint32_t::const char *", - "return": { - "type": "int", - "comment": " 1 is path matches spec, 0 if it does not" - }, - "description": "

Try to match a path against a pathspec

\n", - "comments": "

Unlike most of the other pathspec matching functions, this will not fall back on the native case-sensitivity for your platform. You must explicitly pass flags to control case sensitivity or else this will fall back on being case sensitive.

\n", - "group": "pathspec" - }, - "git_pathspec_match_workdir": { - "type": "function", - "file": "git2/pathspec.h", - "line": 130, - "lineto": 134, - "args": [ - { - "name": "out", - "type": "git_pathspec_match_list **", - "comment": "Output list of matches; pass NULL to just get return value" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository in which to match; bare repo is an error" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "ps", - "type": "git_pathspec *", - "comment": "Pathspec to be matched" - } - ], - "argline": "git_pathspec_match_list **out, git_repository *repo, uint32_t flags, git_pathspec *ps", - "sig": "git_pathspec_match_list **::git_repository *::uint32_t::git_pathspec *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag was given" - }, - "description": "

Match a pathspec against the working directory of a repository.

\n", - "comments": "

This matches the pathspec against the current files in the working directory of the repository. It is an error to invoke this on a bare repo. This handles git ignores (i.e. ignored files will not be considered to match the pathspec unless the file is tracked in the index).

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", - "group": "pathspec" - }, - "git_pathspec_match_index": { - "type": "function", - "file": "git2/pathspec.h", - "line": 159, - "lineto": 163, - "args": [ - { - "name": "out", - "type": "git_pathspec_match_list **", - "comment": "Output list of matches; pass NULL to just get return value" - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to match against" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "ps", - "type": "git_pathspec *", - "comment": "Pathspec to be matched" - } - ], - "argline": "git_pathspec_match_list **out, git_index *index, uint32_t flags, git_pathspec *ps", - "sig": "git_pathspec_match_list **::git_index *::uint32_t::git_pathspec *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" - }, - "description": "

Match a pathspec against entries in an index.

\n", - "comments": "

This matches the pathspec against the files in the repository index.

\n\n

NOTE: At the moment, the case sensitivity of this match is controlled by the current case-sensitivity of the index object itself and the USE_CASE and IGNORE_CASE flags will have no effect. This behavior will be corrected in a future release.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", - "group": "pathspec" - }, - "git_pathspec_match_tree": { - "type": "function", - "file": "git2/pathspec.h", - "line": 183, - "lineto": 187, - "args": [ - { - "name": "out", - "type": "git_pathspec_match_list **", - "comment": "Output list of matches; pass NULL to just get return value" - }, - { - "name": "tree", - "type": "git_tree *", - "comment": "The root-level tree to match against" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "ps", - "type": "git_pathspec *", - "comment": "Pathspec to be matched" - } - ], - "argline": "git_pathspec_match_list **out, git_tree *tree, uint32_t flags, git_pathspec *ps", - "sig": "git_pathspec_match_list **::git_tree *::uint32_t::git_pathspec *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" - }, - "description": "

Match a pathspec against files in a tree.

\n", - "comments": "

This matches the pathspec against the files in the given tree.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", - "group": "pathspec", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_pathspec_match_tree-42" - ] - } - }, - "git_pathspec_match_diff": { - "type": "function", - "file": "git2/pathspec.h", - "line": 207, - "lineto": 211, - "args": [ - { - "name": "out", - "type": "git_pathspec_match_list **", - "comment": "Output list of matches; pass NULL to just get return value" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "A generated diff list" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "ps", - "type": "git_pathspec *", - "comment": "Pathspec to be matched" - } - ], - "argline": "git_pathspec_match_list **out, git_diff *diff, uint32_t flags, git_pathspec *ps", - "sig": "git_pathspec_match_list **::git_diff *::uint32_t::git_pathspec *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" - }, - "description": "

Match a pathspec against files in a diff list.

\n", - "comments": "

This matches the pathspec against the files in the given diff list.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", - "group": "pathspec" - }, - "git_pathspec_match_list_free": { - "type": "function", - "file": "git2/pathspec.h", - "line": 218, - "lineto": 218, - "args": [ - { - "name": "m", - "type": "git_pathspec_match_list *", - "comment": "The git_pathspec_match_list to be freed" - } - ], - "argline": "git_pathspec_match_list *m", - "sig": "git_pathspec_match_list *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free memory associates with a git_pathspec_match_list

\n", - "comments": "", - "group": "pathspec" - }, - "git_pathspec_match_list_entrycount": { - "type": "function", - "file": "git2/pathspec.h", - "line": 226, - "lineto": 227, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - } - ], - "argline": "const git_pathspec_match_list *m", - "sig": "const git_pathspec_match_list *", - "return": { - "type": "size_t", - "comment": " Number of items in match list" - }, - "description": "

Get the number of items in a match list.

\n", - "comments": "", - "group": "pathspec" - }, - "git_pathspec_match_list_entry": { - "type": "function", - "file": "git2/pathspec.h", - "line": 239, - "lineto": 240, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - }, - { - "name": "pos", - "type": "size_t", - "comment": "The index into the list" - } - ], - "argline": "const git_pathspec_match_list *m, size_t pos", - "sig": "const git_pathspec_match_list *::size_t", - "return": { - "type": "const char *", - "comment": " The filename of the match" - }, - "description": "

Get a matching filename by position.

\n", - "comments": "

This routine cannot be used if the match list was generated by git_pathspec_match_diff. If so, it will always return NULL.

\n", - "group": "pathspec" - }, - "git_pathspec_match_list_diff_entry": { - "type": "function", - "file": "git2/pathspec.h", - "line": 252, - "lineto": 253, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - }, - { - "name": "pos", - "type": "size_t", - "comment": "The index into the list" - } - ], - "argline": "const git_pathspec_match_list *m, size_t pos", - "sig": "const git_pathspec_match_list *::size_t", - "return": { - "type": "const git_diff_delta *", - "comment": " The filename of the match" - }, - "description": "

Get a matching diff delta by position.

\n", - "comments": "

This routine can only be used if the match list was generated by git_pathspec_match_diff. Otherwise it will always return NULL.

\n", - "group": "pathspec" - }, - "git_pathspec_match_list_failed_entrycount": { - "type": "function", - "file": "git2/pathspec.h", - "line": 264, - "lineto": 265, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - } - ], - "argline": "const git_pathspec_match_list *m", - "sig": "const git_pathspec_match_list *", - "return": { - "type": "size_t", - "comment": " Number of items in original pathspec that had no matches" - }, - "description": "

Get the number of pathspec items that did not match.

\n", - "comments": "

This will be zero unless you passed GIT_PATHSPEC_FIND_FAILURES when generating the git_pathspec_match_list.

\n", - "group": "pathspec" - }, - "git_pathspec_match_list_failed_entry": { - "type": "function", - "file": "git2/pathspec.h", - "line": 276, - "lineto": 277, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - }, - { - "name": "pos", - "type": "size_t", - "comment": "The index into the failed items" - } - ], - "argline": "const git_pathspec_match_list *m, size_t pos", - "sig": "const git_pathspec_match_list *::size_t", - "return": { - "type": "const char *", - "comment": " The pathspec pattern that didn't match anything" - }, - "description": "

Get an original pathspec string that had no matches.

\n", - "comments": "

This will be return NULL for positions out of range.

\n", - "group": "pathspec" - }, - "git_proxy_options_init": { - "type": "function", - "file": "git2/proxy.h", - "line": 94, - "lineto": 94, - "args": [ - { - "name": "opts", - "type": "git_proxy_options *", - "comment": "The `git_proxy_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_PROXY_OPTIONS_VERSION`." - } - ], - "argline": "git_proxy_options *opts, unsigned int version", - "sig": "git_proxy_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_proxy_options structure

\n", - "comments": "

Initializes a git_proxy_options with default values. Equivalent to creating an instance with GIT_PROXY_OPTIONS_INIT.

\n", - "group": "proxy" - }, - "git_rebase_options_init": { - "type": "function", - "file": "git2/rebase.h", - "line": 199, - "lineto": 201, - "args": [ - { - "name": "opts", - "type": "git_rebase_options *", - "comment": "The `git_rebase_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REBASE_OPTIONS_VERSION`." - } - ], - "argline": "git_rebase_options *opts, unsigned int version", - "sig": "git_rebase_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_rebase_options structure

\n", - "comments": "

Initializes a git_rebase_options with default values. Equivalent to creating an instance with GIT_REBASE_OPTIONS_INIT.

\n", - "group": "rebase" - }, - "git_rebase_init": { - "type": "function", - "file": "git2/rebase.h", - "line": 220, - "lineto": 226, - "args": [ - { - "name": "out", - "type": "git_rebase **", - "comment": "Pointer to store the rebase object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository to perform the rebase" - }, - { - "name": "branch", - "type": "const git_annotated_commit *", - "comment": "The terminal commit to rebase, or NULL to rebase the\n current branch" - }, - { - "name": "upstream", - "type": "const git_annotated_commit *", - "comment": "The commit to begin rebasing from, or NULL to rebase all\n reachable commits" - }, - { - "name": "onto", - "type": "const git_annotated_commit *", - "comment": "The branch to rebase onto, or NULL to rebase onto the given\n upstream" - }, - { - "name": "opts", - "type": "const git_rebase_options *", - "comment": "Options to specify how rebase is performed, or NULL" - } - ], - "argline": "git_rebase **out, git_repository *repo, const git_annotated_commit *branch, const git_annotated_commit *upstream, const git_annotated_commit *onto, const git_rebase_options *opts", - "sig": "git_rebase **::git_repository *::const git_annotated_commit *::const git_annotated_commit *::const git_annotated_commit *::const git_rebase_options *", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initializes a rebase operation to rebase the changes in branch\n relative to upstream onto another branch. To begin the rebase\n process, call git_rebase_next. When you have finished with this\n object, call git_rebase_free.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_open": { - "type": "function", - "file": "git2/rebase.h", - "line": 237, - "lineto": 240, - "args": [ - { - "name": "out", - "type": "git_rebase **", - "comment": "Pointer to store the rebase object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository that has a rebase in-progress" - }, - { - "name": "opts", - "type": "const git_rebase_options *", - "comment": "Options to specify how rebase is performed" - } - ], - "argline": "git_rebase **out, git_repository *repo, const git_rebase_options *opts", - "sig": "git_rebase **::git_repository *::const git_rebase_options *", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Opens an existing rebase that was previously started by either an\n invocation of git_rebase_init or by another client.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_orig_head_name": { - "type": "function", - "file": "git2/rebase.h", - "line": 247, - "lineto": 247, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": null - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "const char *", - "comment": " The original `HEAD` ref name" - }, - "description": "

Gets the original HEAD ref name for merge rebases.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_orig_head_id": { - "type": "function", - "file": "git2/rebase.h", - "line": 254, - "lineto": 254, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": null - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "const git_oid *", - "comment": " The original `HEAD` id" - }, - "description": "

Gets the original HEAD id for merge rebases.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_onto_name": { - "type": "function", - "file": "git2/rebase.h", - "line": 261, - "lineto": 261, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": null - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "const char *", - "comment": " The `onto` ref name" - }, - "description": "

Gets the onto ref name for merge rebases.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_onto_id": { - "type": "function", - "file": "git2/rebase.h", - "line": 268, - "lineto": 268, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": null - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "const git_oid *", - "comment": " The `onto` id" - }, - "description": "

Gets the onto id for merge rebases.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_operation_entrycount": { - "type": "function", - "file": "git2/rebase.h", - "line": 276, - "lineto": 276, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase" - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "size_t", - "comment": " The number of rebase operations in total" - }, - "description": "

Gets the count of rebase operations that are to be applied.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_operation_current": { - "type": "function", - "file": "git2/rebase.h", - "line": 287, - "lineto": 287, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase" - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "size_t", - "comment": " The index of the rebase operation currently being applied." - }, - "description": "

Gets the index of the rebase operation that is currently being applied.\n If the first operation has not yet been applied (because you have\n called init but not yet next) then this returns\n GIT_REBASE_NO_OPERATION.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_operation_byindex": { - "type": "function", - "file": "git2/rebase.h", - "line": 296, - "lineto": 298, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase" - }, - { - "name": "idx", - "type": "size_t", - "comment": "The index of the rebase operation to retrieve" - } - ], - "argline": "git_rebase *rebase, size_t idx", - "sig": "git_rebase *::size_t", - "return": { - "type": "git_rebase_operation *", - "comment": " The rebase operation or NULL if `idx` was out of bounds" - }, - "description": "

Gets the rebase operation specified by the given index.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_next": { - "type": "function", - "file": "git2/rebase.h", - "line": 311, - "lineto": 313, - "args": [ - { - "name": "operation", - "type": "git_rebase_operation **", - "comment": "Pointer to store the rebase operation that is to be performed next" - }, - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase in progress" - } - ], - "argline": "git_rebase_operation **operation, git_rebase *rebase", - "sig": "git_rebase_operation **::git_rebase *", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Performs the next rebase operation and returns the information about it.\n If the operation is one that applies a patch (which is any operation except\n GIT_REBASE_OPERATION_EXEC) then the patch will be applied and the index and\n working directory will be updated with the changes. If there are conflicts,\n you will need to address those before committing the changes.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_inmemory_index": { - "type": "function", - "file": "git2/rebase.h", - "line": 326, - "lineto": 328, - "args": [ - { - "name": "index", - "type": "git_index **", - "comment": null - }, - { - "name": "rebase", - "type": "git_rebase *", - "comment": null - } - ], - "argline": "git_index **index, git_rebase *rebase", - "sig": "git_index **::git_rebase *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Gets the index produced by the last operation, which is the result\n of git_rebase_next and which will be committed by the next\n invocation of git_rebase_commit. This is useful for resolving\n conflicts in an in-memory rebase before committing them. You must\n call git_index_free when you are finished with this.

\n", - "comments": "

This is only applicable for in-memory rebases; for rebases within a working directory, the changes were applied to the repository's index.

\n", - "group": "rebase" - }, - "git_rebase_commit": { - "type": "function", - "file": "git2/rebase.h", - "line": 352, - "lineto": 358, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "Pointer in which to store the OID of the newly created commit" - }, - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase that is in-progress" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "The author of the updated commit, or NULL to keep the\n author from the original commit" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "The committer of the rebase" - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": "The encoding for the message in the commit,\n represented with a standard encoding name. If message is NULL,\n this should also be NULL, and the encoding from the original\n commit will be maintained. If message is specified, this may be\n NULL to indicate that \"UTF-8\" is to be used." - }, - { - "name": "message", - "type": "const char *", - "comment": "The message for this commit, or NULL to use the message\n from the original commit." - } - ], - "argline": "git_oid *id, git_rebase *rebase, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message", - "sig": "git_oid *::git_rebase *::const git_signature *::const git_signature *::const char *::const char *", - "return": { - "type": "int", - "comment": " Zero on success, GIT_EUNMERGED if there are unmerged changes in\n the index, GIT_EAPPLIED if the current commit has already\n been applied to the upstream and there is nothing to commit,\n -1 on failure." - }, - "description": "

Commits the current patch. You must have resolved any conflicts that\n were introduced during the patch application from the git_rebase_next\n invocation.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_abort": { - "type": "function", - "file": "git2/rebase.h", - "line": 368, - "lineto": 368, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase that is in-progress" - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "int", - "comment": " Zero on success; GIT_ENOTFOUND if a rebase is not in progress,\n -1 on other errors." - }, - "description": "

Aborts a rebase that is currently in progress, resetting the repository\n and working directory to their state before rebase began.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_finish": { - "type": "function", - "file": "git2/rebase.h", - "line": 378, - "lineto": 380, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase that is in-progress" - }, - { - "name": "signature", - "type": "const git_signature *", - "comment": "The identity that is finishing the rebase (optional)" - } - ], - "argline": "git_rebase *rebase, const git_signature *signature", - "sig": "git_rebase *::const git_signature *", - "return": { - "type": "int", - "comment": " Zero on success; -1 on error" - }, - "description": "

Finishes a rebase that is currently in progress once all patches have\n been applied.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_free": { - "type": "function", - "file": "git2/rebase.h", - "line": 387, - "lineto": 387, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase object" - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees the git_rebase object.

\n", - "comments": "", - "group": "rebase" - }, - "git_refdb_new": { - "type": "function", - "file": "git2/refdb.h", - "line": 35, - "lineto": 35, - "args": [ - { - "name": "out", - "type": "git_refdb **", - "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_refdb **out, git_repository *repo", - "sig": "git_refdb **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new reference database with no backends.

\n", - "comments": "

Before the Ref DB can be used for read/writing, a custom database backend must be manually set using git_refdb_set_backend()

\n", - "group": "refdb" - }, - "git_refdb_open": { - "type": "function", - "file": "git2/refdb.h", - "line": 49, - "lineto": 49, - "args": [ - { - "name": "out", - "type": "git_refdb **", - "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_refdb **out, git_repository *repo", - "sig": "git_refdb **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new reference database and automatically add\n the default backends:

\n", - "comments": "
    \n
  • git_refdb_dir: read and write loose and packed refs from disk, assuming the repository dir as the folder
  • \n
\n", - "group": "refdb" - }, - "git_refdb_compress": { - "type": "function", - "file": "git2/refdb.h", - "line": 56, - "lineto": 56, - "args": [ - { - "name": "refdb", - "type": "git_refdb *", - "comment": null - } - ], - "argline": "git_refdb *refdb", - "sig": "git_refdb *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Suggests that the given refdb compress or optimize its references.\n This mechanism is implementation specific. For on-disk reference\n databases, for example, this may pack all loose references.

\n", - "comments": "", - "group": "refdb" - }, - "git_refdb_free": { - "type": "function", - "file": "git2/refdb.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "refdb", - "type": "git_refdb *", - "comment": "reference database pointer or NULL" - } - ], - "argline": "git_refdb *refdb", - "sig": "git_refdb *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open reference database.

\n", - "comments": "", - "group": "refdb" - }, - "git_reflog_read": { - "type": "function", - "file": "git2/reflog.h", - "line": 38, - "lineto": 38, - "args": [ - { - "name": "out", - "type": "git_reflog **", - "comment": "pointer to reflog" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repostiory" - }, - { - "name": "name", - "type": "const char *", - "comment": "reference to look up" - } - ], - "argline": "git_reflog **out, git_repository *repo, const char *name", - "sig": "git_reflog **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read the reflog for the given reference

\n", - "comments": "

If there is no reflog file for the given reference yet, an empty reflog object will be returned.

\n\n

The reflog must be freed manually by using git_reflog_free().

\n", - "group": "reflog" - }, - "git_reflog_write": { - "type": "function", - "file": "git2/reflog.h", - "line": 47, - "lineto": 47, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "an existing reflog object" - } - ], - "argline": "git_reflog *reflog", - "sig": "git_reflog *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write an existing in-memory reflog object back to disk\n using an atomic file lock.

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_append": { - "type": "function", - "file": "git2/reflog.h", - "line": 60, - "lineto": 60, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "an existing reflog object" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the OID the reference is now pointing to" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "the signature of the committer" - }, - { - "name": "msg", - "type": "const char *", - "comment": "the reflog message" - } - ], - "argline": "git_reflog *reflog, const git_oid *id, const git_signature *committer, const char *msg", - "sig": "git_reflog *::const git_oid *::const git_signature *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a new entry to the in-memory reflog.

\n", - "comments": "

msg is optional and can be NULL.

\n", - "group": "reflog" - }, - "git_reflog_rename": { - "type": "function", - "file": "git2/reflog.h", - "line": 75, - "lineto": 75, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "old_name", - "type": "const char *", - "comment": "the old name of the reference" - }, - { - "name": "name", - "type": "const char *", - "comment": "the new name of the reference" - } - ], - "argline": "git_repository *repo, const char *old_name, const char *name", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Rename a reflog

\n", - "comments": "

The reflog to be renamed is expected to already exist

\n\n

The new name will be checked for validity. See git_reference_create_symbolic() for rules about valid names.

\n", - "group": "reflog" - }, - "git_reflog_delete": { - "type": "function", - "file": "git2/reflog.h", - "line": 84, - "lineto": 84, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "name", - "type": "const char *", - "comment": "the reflog to delete" - } - ], - "argline": "git_repository *repo, const char *name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Delete the reflog for the given reference

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entrycount": { - "type": "function", - "file": "git2/reflog.h", - "line": 92, - "lineto": 92, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "the previously loaded reflog" - } - ], - "argline": "git_reflog *reflog", - "sig": "git_reflog *", - "return": { - "type": "size_t", - "comment": " the number of log entries" - }, - "description": "

Get the number of log entries in a reflog

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entry_byindex": { - "type": "function", - "file": "git2/reflog.h", - "line": 105, - "lineto": 105, - "args": [ - { - "name": "reflog", - "type": "const git_reflog *", - "comment": "a previously loaded reflog" - }, - { - "name": "idx", - "type": "size_t", - "comment": "the position of the entry to lookup. Should be greater than or\n equal to 0 (zero) and less than `git_reflog_entrycount()`." - } - ], - "argline": "const git_reflog *reflog, size_t idx", - "sig": "const git_reflog *::size_t", - "return": { - "type": "const git_reflog_entry *", - "comment": " the entry; NULL if not found" - }, - "description": "

Lookup an entry by its index

\n", - "comments": "

Requesting the reflog entry with an index of 0 (zero) will return the most recently created entry.

\n", - "group": "reflog" - }, - "git_reflog_drop": { - "type": "function", - "file": "git2/reflog.h", - "line": 124, - "lineto": 127, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "a previously loaded reflog." - }, - { - "name": "idx", - "type": "size_t", - "comment": "the position of the entry to remove. Should be greater than or\n equal to 0 (zero) and less than `git_reflog_entrycount()`." - }, - { - "name": "rewrite_previous_entry", - "type": "int", - "comment": "1 to rewrite the history; 0 otherwise." - } - ], - "argline": "git_reflog *reflog, size_t idx, int rewrite_previous_entry", - "sig": "git_reflog *::size_t::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if the entry doesn't exist\n or an error code." - }, - "description": "

Remove an entry from the reflog by its index

\n", - "comments": "

To ensure there's no gap in the log history, set rewrite_previous_entry param value to 1. When deleting entry n, member old_oid of entry n-1 (if any) will be updated with the value of member new_oid of entry n+1.

\n", - "group": "reflog" - }, - "git_reflog_entry_id_old": { - "type": "function", - "file": "git2/reflog.h", - "line": 135, - "lineto": 135, - "args": [ - { - "name": "entry", - "type": "const git_reflog_entry *", - "comment": "a reflog entry" - } - ], - "argline": "const git_reflog_entry *entry", - "sig": "const git_reflog_entry *", - "return": { - "type": "const git_oid *", - "comment": " the old oid" - }, - "description": "

Get the old oid

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entry_id_new": { - "type": "function", - "file": "git2/reflog.h", - "line": 143, - "lineto": 143, - "args": [ - { - "name": "entry", - "type": "const git_reflog_entry *", - "comment": "a reflog entry" - } - ], - "argline": "const git_reflog_entry *entry", - "sig": "const git_reflog_entry *", - "return": { - "type": "const git_oid *", - "comment": " the new oid at this time" - }, - "description": "

Get the new oid

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entry_committer": { - "type": "function", - "file": "git2/reflog.h", - "line": 151, - "lineto": 151, - "args": [ - { - "name": "entry", - "type": "const git_reflog_entry *", - "comment": "a reflog entry" - } - ], - "argline": "const git_reflog_entry *entry", - "sig": "const git_reflog_entry *", - "return": { - "type": "const git_signature *", - "comment": " the committer" - }, - "description": "

Get the committer of this entry

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entry_message": { - "type": "function", - "file": "git2/reflog.h", - "line": 159, - "lineto": 159, - "args": [ - { - "name": "entry", - "type": "const git_reflog_entry *", - "comment": "a reflog entry" - } - ], - "argline": "const git_reflog_entry *entry", - "sig": "const git_reflog_entry *", - "return": { - "type": "const char *", - "comment": " the log msg" - }, - "description": "

Get the log message

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_free": { - "type": "function", - "file": "git2/reflog.h", - "line": 166, - "lineto": 166, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "reflog to free" - } - ], - "argline": "git_reflog *reflog", - "sig": "git_reflog *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the reflog

\n", - "comments": "", - "group": "reflog" - }, - "git_reference_lookup": { - "type": "function", - "file": "git2/refs.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer to the looked-up reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to look up the reference" - }, - { - "name": "name", - "type": "const char *", - "comment": "the long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...)" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name", - "sig": "git_reference **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code." - }, - "description": "

Lookup a reference by name in a repository.

\n", - "comments": "

The returned reference must be freed by the user.

\n\n

The name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n", - "group": "reference", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_reference_lookup-15", - "ex/v1.3.1/checkout.html#git_reference_lookup-16" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_reference_lookup-61" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_reference_lookup-21" - ] - } - }, - "git_reference_name_to_id": { - "type": "function", - "file": "git2/refs.h", - "line": 54, - "lineto": 55, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer to oid to be filled in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository in which to look up the reference" - }, - { - "name": "name", - "type": "const char *", - "comment": "The long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...)" - } - ], - "argline": "git_oid *out, git_repository *repo, const char *name", - "sig": "git_oid *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code." - }, - "description": "

Lookup a reference by name and resolve immediately to OID.

\n", - "comments": "

This function provides a quick way to resolve a reference name straight through to the object id that it refers to. This avoids having to allocate or free any git_reference objects for simple situations.

\n\n

The name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n", - "group": "reference" - }, - "git_reference_dwim": { - "type": "function", - "file": "git2/refs.h", - "line": 68, - "lineto": 68, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer in which to store the reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to look" - }, - { - "name": "shorthand", - "type": "const char *", - "comment": "the short name for the reference" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *shorthand", - "sig": "git_reference **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a reference by DWIMing its short name

\n", - "comments": "

Apply the git precendence rules to the given shorthand to determine which reference the user is referring to.

\n", - "group": "reference", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_reference_dwim-22" - ] - } - }, - "git_reference_symbolic_create_matching": { - "type": "function", - "file": "git2/refs.h", - "line": 112, - "lineto": 112, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where that reference will live" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the reference" - }, - { - "name": "target", - "type": "const char *", - "comment": "The target of the reference" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - }, - { - "name": "current_value", - "type": "const char *", - "comment": "The expected value of the reference when updating" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *current_value, const char *log_message", - "sig": "git_reference **::git_repository *::const char *::const char *::int::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC, GIT_EMODIFIED or an error code" - }, - "description": "

Conditionally create a new symbolic reference.

\n", - "comments": "

A symbolic reference is a reference name that refers to another reference name. If the other name moves, the symbolic name will move, too. As a simple example, the "HEAD" reference might refer to "refs/heads/master" while on the "master" branch of a repository.

\n\n

The symbolic reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n\n

It will return GIT_EMODIFIED if the reference's value at the time of updating does not match the one passed through current_value (i.e. if the ref has changed since the user read it).

\n\n

If current_value is all zeros, this function will return GIT_EMODIFIED if the ref already exists.

\n", - "group": "reference" - }, - "git_reference_symbolic_create": { - "type": "function", - "file": "git2/refs.h", - "line": 148, - "lineto": 148, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where that reference will live" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the reference" - }, - { - "name": "target", - "type": "const char *", - "comment": "The target of the reference" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *log_message", - "sig": "git_reference **::git_repository *::const char *::const char *::int::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Create a new symbolic reference.

\n", - "comments": "

A symbolic reference is a reference name that refers to another reference name. If the other name moves, the symbolic name will move, too. As a simple example, the "HEAD" reference might refer to "refs/heads/master" while on the "master" branch of a repository.

\n\n

The symbolic reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", - "group": "reference" - }, - "git_reference_create": { - "type": "function", - "file": "git2/refs.h", - "line": 185, - "lineto": 185, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where that reference will live" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the reference" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The object id pointed to by the reference." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const char *log_message", - "sig": "git_reference **::git_repository *::const char *::const git_oid *::int::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Create a new direct reference.

\n", - "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", - "group": "reference", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_reference_create-23" - ] - } - }, - "git_reference_create_matching": { - "type": "function", - "file": "git2/refs.h", - "line": 228, - "lineto": 228, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where that reference will live" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the reference" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The object id pointed to by the reference." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - }, - { - "name": "current_id", - "type": "const git_oid *", - "comment": "The expected value of the reference at the time of update" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const git_oid *current_id, const char *log_message", - "sig": "git_reference **::git_repository *::const char *::const git_oid *::int::const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EMODIFIED if the value of the reference\n has changed, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Conditionally create new direct reference

\n", - "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n\n

It will return GIT_EMODIFIED if the reference's value at the time of updating does not match the one passed through current_id (i.e. if the ref has changed since the user read it).

\n", - "group": "reference" - }, - "git_reference_target": { - "type": "function", - "file": "git2/refs.h", - "line": 243, - "lineto": 243, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const git_oid *", - "comment": " a pointer to the oid if available, NULL otherwise" - }, - "description": "

Get the OID pointed to by a direct reference.

\n", - "comments": "

Only available if the reference is direct (i.e. an object id reference, not a symbolic one).

\n\n

To find the OID of a symbolic ref, call git_reference_resolve() and then this function (or maybe use git_reference_name_to_id() to directly resolve a reference name all the way through to an OID).

\n", - "group": "reference", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_reference_target-62" - ] - } - }, - "git_reference_target_peel": { - "type": "function", - "file": "git2/refs.h", - "line": 254, - "lineto": 254, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const git_oid *", - "comment": " a pointer to the oid if available, NULL otherwise" - }, - "description": "

Return the peeled OID target of this reference.

\n", - "comments": "

This peeled OID only applies to direct references that point to a hard Tag object: it is the result of peeling such Tag.

\n", - "group": "reference" - }, - "git_reference_symbolic_target": { - "type": "function", - "file": "git2/refs.h", - "line": 264, - "lineto": 264, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const char *", - "comment": " a pointer to the name if available, NULL otherwise" - }, - "description": "

Get full name to the reference pointed to by a symbolic reference.

\n", - "comments": "

Only available if the reference is symbolic.

\n", - "group": "reference", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_reference_symbolic_target-63" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_reference_symbolic_target-24" - ] - } - }, - "git_reference_type": { - "type": "function", - "file": "git2/refs.h", - "line": 274, - "lineto": 274, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "git_reference_t", - "comment": " the type" - }, - "description": "

Get the type of a reference.

\n", - "comments": "

Either direct (GIT_REFERENCE_DIRECT) or symbolic (GIT_REFERENCE_SYMBOLIC)

\n", - "group": "reference", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_reference_type-64" - ] - } - }, - "git_reference_name": { - "type": "function", - "file": "git2/refs.h", - "line": 284, - "lineto": 284, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const char *", - "comment": " the full name for the ref" - }, - "description": "

Get the full name of a reference.

\n", - "comments": "

See git_reference_symbolic_create() for rules about valid names.

\n", - "group": "reference", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_reference_name-17" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_reference_name-25" - ] - } - }, - "git_reference_resolve": { - "type": "function", - "file": "git2/refs.h", - "line": 302, - "lineto": 302, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the peeled reference" - }, - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "git_reference **out, const git_reference *ref", - "sig": "git_reference **::const git_reference *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Resolve a symbolic reference to a direct reference.

\n", - "comments": "

This method iteratively peels a symbolic reference until it resolves to a direct reference to an OID.

\n\n

The peeled reference is returned in the resolved_ref argument, and must be freed manually once it's no longer needed.

\n\n

If a direct reference is passed as an argument, a copy of that reference is returned. This copy must be manually freed too.

\n", - "group": "reference" - }, - "git_reference_owner": { - "type": "function", - "file": "git2/refs.h", - "line": 310, - "lineto": 310, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "git_repository *", - "comment": " a pointer to the repo" - }, - "description": "

Get the repository where a reference resides.

\n", - "comments": "", - "group": "reference" - }, - "git_reference_symbolic_set_target": { - "type": "function", - "file": "git2/refs.h", - "line": 332, - "lineto": 336, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "ref", - "type": "git_reference *", - "comment": "The reference" - }, - { - "name": "target", - "type": "const char *", - "comment": "The new target for the reference" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_reference *ref, const char *target, const char *log_message", - "sig": "git_reference **::git_reference *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Create a new reference with the same name as the given reference but a\n different symbolic target. The reference must be a symbolic reference,\n otherwise this will fail.

\n", - "comments": "

The new reference will be written to disk, overwriting the given reference.

\n\n

The target name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", - "group": "reference" - }, - "git_reference_set_target": { - "type": "function", - "file": "git2/refs.h", - "line": 352, - "lineto": 356, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "ref", - "type": "git_reference *", - "comment": "The reference" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The new target OID for the reference" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_reference *ref, const git_oid *id, const char *log_message", - "sig": "git_reference **::git_reference *::const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EMODIFIED if the value of the reference\n has changed since it was read, or an error code" - }, - "description": "

Conditionally create a new reference with the same name as the given reference but a\n different OID target. The reference must be a direct reference, otherwise\n this will fail.

\n", - "comments": "

The new reference will be written to disk, overwriting the given reference.

\n", - "group": "reference", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_reference_set_target-26" - ] - } - }, - "git_reference_rename": { - "type": "function", - "file": "git2/refs.h", - "line": 381, - "lineto": 386, - "args": [ - { - "name": "new_ref", - "type": "git_reference **", - "comment": null - }, - { - "name": "ref", - "type": "git_reference *", - "comment": "The reference to rename" - }, - { - "name": "new_name", - "type": "const char *", - "comment": "The new name for the reference" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite an existing reference" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **new_ref, git_reference *ref, const char *new_name, int force, const char *log_message", - "sig": "git_reference **::git_reference *::const char *::int::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Rename an existing reference.

\n", - "comments": "

This method works for both direct and symbolic references.

\n\n

The new name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n\n

If the force flag is not enabled, and there's already a reference with the given name, the renaming will fail.

\n\n

IMPORTANT: The user needs to write a proper reflog entry if the reflog is enabled for the repository. We only rename the reflog if it exists.

\n", - "group": "reference" - }, - "git_reference_delete": { - "type": "function", - "file": "git2/refs.h", - "line": 401, - "lineto": 401, - "args": [ - { - "name": "ref", - "type": "git_reference *", - "comment": "The reference to remove" - } - ], - "argline": "git_reference *ref", - "sig": "git_reference *", - "return": { - "type": "int", - "comment": " 0, GIT_EMODIFIED or an error code" - }, - "description": "

Delete an existing reference.

\n", - "comments": "

This method works for both direct and symbolic references. The reference will be immediately removed on disk but the memory will not be freed. Callers must call git_reference_free.

\n\n

This function will return an error if the reference has changed from the time it was looked up.

\n", - "group": "reference" - }, - "git_reference_remove": { - "type": "function", - "file": "git2/refs.h", - "line": 412, - "lineto": 412, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "name", - "type": "const char *", - "comment": "The reference to remove" - } - ], - "argline": "git_repository *repo, const char *name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Delete an existing reference by name

\n", - "comments": "

This method removes the named reference from the repository without looking at its old value.

\n", - "group": "reference" - }, - "git_reference_list": { - "type": "function", - "file": "git2/refs.h", - "line": 426, - "lineto": 426, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": "Pointer to a git_strarray structure where\n\t\tthe reference names will be stored" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the refs" - } - ], - "argline": "git_strarray *array, git_repository *repo", - "sig": "git_strarray *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Fill a list with all the references that can be found in a repository.

\n", - "comments": "

The string array will be filled with the names of all references; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free().

\n", - "group": "reference", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_reference_list-65" - ] - } - }, - "git_reference_foreach": { - "type": "function", - "file": "git2/refs.h", - "line": 466, - "lineto": 469, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the refs" - }, - { - "name": "callback", - "type": "git_reference_foreach_cb", - "comment": "Function which will be called for every listed ref" - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback" - } - ], - "argline": "git_repository *repo, git_reference_foreach_cb callback, void *payload", - "sig": "git_repository *::git_reference_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Perform a callback on each reference in the repository.

\n", - "comments": "

The callback function will be called for each reference in the repository, receiving the reference object and the payload value passed to this method. Returning a non-zero value from the callback will terminate the iteration.

\n\n

Note that the callback function is responsible to call git_reference_free on each reference passed to it.

\n", - "group": "reference" - }, - "git_reference_foreach_name": { - "type": "function", - "file": "git2/refs.h", - "line": 484, - "lineto": 487, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the refs" - }, - { - "name": "callback", - "type": "git_reference_foreach_name_cb", - "comment": "Function which will be called for every listed ref name" - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback" - } - ], - "argline": "git_repository *repo, git_reference_foreach_name_cb callback, void *payload", - "sig": "git_repository *::git_reference_foreach_name_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Perform a callback on the fully-qualified name of each reference.

\n", - "comments": "

The callback function will be called for each reference in the repository, receiving the name of the reference and the payload value passed to this method. Returning a non-zero value from the callback will terminate the iteration.

\n", - "group": "reference" - }, - "git_reference_dup": { - "type": "function", - "file": "git2/refs.h", - "line": 498, - "lineto": 498, - "args": [ - { - "name": "dest", - "type": "git_reference **", - "comment": "pointer where to store the copy" - }, - { - "name": "source", - "type": "git_reference *", - "comment": "object to copy" - } - ], - "argline": "git_reference **dest, git_reference *source", - "sig": "git_reference **::git_reference *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a copy of an existing reference.

\n", - "comments": "

Call git_reference_free to free the data.

\n", - "group": "reference" - }, - "git_reference_free": { - "type": "function", - "file": "git2/refs.h", - "line": 505, - "lineto": 505, - "args": [ - { - "name": "ref", - "type": "git_reference *", - "comment": "git_reference" - } - ], - "argline": "git_reference *ref", - "sig": "git_reference *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the given reference.

\n", - "comments": "", - "group": "reference", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_reference_free-18", - "ex/v1.3.1/checkout.html#git_reference_free-19", - "ex/v1.3.1/checkout.html#git_reference_free-20" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_reference_free-66" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_reference_free-27", - "ex/v1.3.1/merge.html#git_reference_free-28", - "ex/v1.3.1/merge.html#git_reference_free-29" - ], - "status.c": [ - "ex/v1.3.1/status.html#git_reference_free-1" - ] - } - }, - "git_reference_cmp": { - "type": "function", - "file": "git2/refs.h", - "line": 514, - "lineto": 516, - "args": [ - { - "name": "ref1", - "type": "const git_reference *", - "comment": "The first git_reference" - }, - { - "name": "ref2", - "type": "const git_reference *", - "comment": "The second git_reference" - } - ], - "argline": "const git_reference *ref1, const git_reference *ref2", - "sig": "const git_reference *::const git_reference *", - "return": { - "type": "int", - "comment": " 0 if the same, else a stable but meaningless ordering." - }, - "description": "

Compare two references.

\n", - "comments": "", - "group": "reference" - }, - "git_reference_iterator_new": { - "type": "function", - "file": "git2/refs.h", - "line": 525, - "lineto": 527, - "args": [ - { - "name": "out", - "type": "git_reference_iterator **", - "comment": "pointer in which to store the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_reference_iterator **out, git_repository *repo", - "sig": "git_reference_iterator **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an iterator for the repo's references

\n", - "comments": "", - "group": "reference" - }, - "git_reference_iterator_glob_new": { - "type": "function", - "file": "git2/refs.h", - "line": 538, - "lineto": 541, - "args": [ - { - "name": "out", - "type": "git_reference_iterator **", - "comment": "pointer in which to store the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "glob", - "type": "const char *", - "comment": "the glob to match against the reference names" - } - ], - "argline": "git_reference_iterator **out, git_repository *repo, const char *glob", - "sig": "git_reference_iterator **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an iterator for the repo's references that match the\n specified glob

\n", - "comments": "", - "group": "reference" - }, - "git_reference_next": { - "type": "function", - "file": "git2/refs.h", - "line": 550, - "lineto": 550, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer in which to store the reference" - }, - { - "name": "iter", - "type": "git_reference_iterator *", - "comment": "the iterator" - } - ], - "argline": "git_reference **out, git_reference_iterator *iter", - "sig": "git_reference **::git_reference_iterator *", - "return": { - "type": "int", - "comment": " 0, GIT_ITEROVER if there are no more; or an error code" - }, - "description": "

Get the next reference

\n", - "comments": "", - "group": "reference" - }, - "git_reference_next_name": { - "type": "function", - "file": "git2/refs.h", - "line": 563, - "lineto": 563, - "args": [ - { - "name": "out", - "type": "const char **", - "comment": "pointer in which to store the string" - }, - { - "name": "iter", - "type": "git_reference_iterator *", - "comment": "the iterator" - } - ], - "argline": "const char **out, git_reference_iterator *iter", - "sig": "const char **::git_reference_iterator *", - "return": { - "type": "int", - "comment": " 0, GIT_ITEROVER if there are no more; or an error code" - }, - "description": "

Get the next reference's name

\n", - "comments": "

This function is provided for convenience in case only the names are interesting as it avoids the allocation of the git_reference object which git_reference_next() needs.

\n", - "group": "reference" - }, - "git_reference_iterator_free": { - "type": "function", - "file": "git2/refs.h", - "line": 570, - "lineto": 570, - "args": [ - { - "name": "iter", - "type": "git_reference_iterator *", - "comment": "the iterator to free" - } - ], - "argline": "git_reference_iterator *iter", - "sig": "git_reference_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the iterator and its associated resources

\n", - "comments": "", - "group": "reference" - }, - "git_reference_foreach_glob": { - "type": "function", - "file": "git2/refs.h", - "line": 590, - "lineto": 594, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the refs" - }, - { - "name": "glob", - "type": "const char *", - "comment": "Pattern to match (fnmatch-style) against reference name." - }, - { - "name": "callback", - "type": "git_reference_foreach_name_cb", - "comment": "Function which will be called for every listed ref" - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback" - } - ], - "argline": "git_repository *repo, const char *glob, git_reference_foreach_name_cb callback, void *payload", - "sig": "git_repository *::const char *::git_reference_foreach_name_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUSER on non-zero callback, or error code" - }, - "description": "

Perform a callback on each reference in the repository whose name\n matches the given pattern.

\n", - "comments": "

This function acts like git_reference_foreach() with an additional pattern match being applied to the reference name before issuing the callback function. See that function for more information.

\n\n

The pattern is matched using fnmatch or "glob" style where a '*' matches any sequence of letters, a '?' matches any letter, and square brackets can be used to define character ranges (such as "[0-9]" for digits).

\n", - "group": "reference" - }, - "git_reference_has_log": { - "type": "function", - "file": "git2/refs.h", - "line": 604, - "lineto": 604, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference's name" - } - ], - "argline": "git_repository *repo, const char *refname", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 when no reflog can be found, 1 when it exists;\n otherwise an error code." - }, - "description": "

Check if a reflog exists for the specified reference.

\n", - "comments": "", - "group": "reference" - }, - "git_reference_ensure_log": { - "type": "function", - "file": "git2/refs.h", - "line": 616, - "lineto": 616, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference's name" - } - ], - "argline": "git_repository *repo, const char *refname", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Ensure there is a reflog for a particular reference.

\n", - "comments": "

Make sure that successive updates to the reference will append to its log.

\n", - "group": "reference" - }, - "git_reference_is_branch": { - "type": "function", - "file": "git2/refs.h", - "line": 626, - "lineto": 626, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "A git reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 when the reference lives in the refs/heads\n namespace; 0 otherwise." - }, - "description": "

Check if a reference is a local branch.

\n", - "comments": "", - "group": "reference" - }, - "git_reference_is_remote": { - "type": "function", - "file": "git2/refs.h", - "line": 636, - "lineto": 636, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "A git reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 when the reference lives in the refs/remotes\n namespace; 0 otherwise." - }, - "description": "

Check if a reference is a remote tracking branch

\n", - "comments": "", - "group": "reference", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_reference_is_remote-21" - ] - } - }, - "git_reference_is_tag": { - "type": "function", - "file": "git2/refs.h", - "line": 646, - "lineto": 646, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "A git reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 when the reference lives in the refs/tags\n namespace; 0 otherwise." - }, - "description": "

Check if a reference is a tag

\n", - "comments": "", - "group": "reference" - }, - "git_reference_is_note": { - "type": "function", - "file": "git2/refs.h", - "line": 656, - "lineto": 656, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "A git reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 when the reference lives in the refs/notes\n namespace; 0 otherwise." - }, - "description": "

Check if a reference is a note

\n", - "comments": "", - "group": "reference" - }, - "git_reference_normalize_name": { - "type": "function", - "file": "git2/refs.h", - "line": 712, - "lineto": 716, - "args": [ - { - "name": "buffer_out", - "type": "char *", - "comment": "User allocated buffer to store normalized name" - }, - { - "name": "buffer_size", - "type": "size_t", - "comment": "Size of buffer_out" - }, - { - "name": "name", - "type": "const char *", - "comment": "Reference name to be checked." - }, - { - "name": "flags", - "type": "unsigned int", - "comment": "Flags to constrain name validation rules - see the\n GIT_REFERENCE_FORMAT constants above." - } - ], - "argline": "char *buffer_out, size_t buffer_size, const char *name, unsigned int flags", - "sig": "char *::size_t::const char *::unsigned int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EBUFS if buffer is too small, GIT_EINVALIDSPEC\n or an error code." - }, - "description": "

Normalize reference name and check validity.

\n", - "comments": "

This will normalize the reference name by removing any leading slash '/' characters and collapsing runs of adjacent slashes between name components into a single slash.

\n\n

Once normalized, if the reference name is valid, it will be returned in the user allocated buffer.

\n\n

See git_reference_symbolic_create() for rules about valid names.

\n", - "group": "reference" - }, - "git_reference_peel": { - "type": "function", - "file": "git2/refs.h", - "line": 733, - "lineto": 736, - "args": [ - { - "name": "out", - "type": "git_object **", - "comment": "Pointer to the peeled git_object" - }, - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference to be processed" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "The type of the requested object (GIT_OBJECT_COMMIT,\n GIT_OBJECT_TAG, GIT_OBJECT_TREE, GIT_OBJECT_BLOB or GIT_OBJECT_ANY)." - } - ], - "argline": "git_object **out, const git_reference *ref, git_object_t type", - "sig": "git_object **::const git_reference *::git_object_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EAMBIGUOUS, GIT_ENOTFOUND or an error code" - }, - "description": "

Recursively peel reference until object of the specified type is found.

\n", - "comments": "

The retrieved peeled object is owned by the repository and should be closed with the git_object_free method.

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until a non-tag object is met.

\n", - "group": "reference", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_reference_peel-30" - ] - } - }, - "git_reference_name_is_valid": { - "type": "function", - "file": "git2/refs.h", - "line": 753, - "lineto": 753, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "output pointer to set with validity of given reference name" - }, - { - "name": "refname", - "type": "const char *", - "comment": "name to be checked." - } - ], - "argline": "int *valid, const char *refname", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Ensure the reference name is well-formed.

\n", - "comments": "

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n", - "group": "reference" - }, - "git_reference_shorthand": { - "type": "function", - "file": "git2/refs.h", - "line": 767, - "lineto": 767, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "a reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const char *", - "comment": " the human-readable version of the name" - }, - "description": "

Get the reference's short name

\n", - "comments": "

This will transform the reference name into a name "human-readable" version. If no shortname is appropriate, it will return the full name.

\n\n

The memory is owned by the reference and must not be freed.

\n", - "group": "reference", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_reference_shorthand-2" - ] - } - }, - "git_refspec_parse": { - "type": "function", - "file": "git2/refspec.h", - "line": 32, - "lineto": 32, - "args": [ - { - "name": "refspec", - "type": "git_refspec **", - "comment": "a pointer to hold the refspec handle" - }, - { - "name": "input", - "type": "const char *", - "comment": "the refspec string" - }, - { - "name": "is_fetch", - "type": "int", - "comment": "is this a refspec for a fetch" - } - ], - "argline": "git_refspec **refspec, const char *input, int is_fetch", - "sig": "git_refspec **::const char *::int", - "return": { - "type": "int", - "comment": " 0 if the refspec string could be parsed, -1 otherwise" - }, - "description": "

Parse a given refspec string

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_free": { - "type": "function", - "file": "git2/refspec.h", - "line": 39, - "lineto": 39, - "args": [ - { - "name": "refspec", - "type": "git_refspec *", - "comment": "the refspec object" - } - ], - "argline": "git_refspec *refspec", - "sig": "git_refspec *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a refspec object which has been created by git_refspec_parse

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_src": { - "type": "function", - "file": "git2/refspec.h", - "line": 47, - "lineto": 47, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - } - ], - "argline": "const git_refspec *refspec", - "sig": "const git_refspec *", - "return": { - "type": "const char *", - "comment": " the refspec's source specifier" - }, - "description": "

Get the source specifier

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_dst": { - "type": "function", - "file": "git2/refspec.h", - "line": 55, - "lineto": 55, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - } - ], - "argline": "const git_refspec *refspec", - "sig": "const git_refspec *", - "return": { - "type": "const char *", - "comment": " the refspec's destination specifier" - }, - "description": "

Get the destination specifier

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_string": { - "type": "function", - "file": "git2/refspec.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - } - ], - "argline": "const git_refspec *refspec", - "sig": "const git_refspec *", - "return": { - "type": "const char *", - "comment": null - }, - "description": "

Get the refspec's string

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_force": { - "type": "function", - "file": "git2/refspec.h", - "line": 71, - "lineto": 71, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - } - ], - "argline": "const git_refspec *refspec", - "sig": "const git_refspec *", - "return": { - "type": "int", - "comment": " 1 if force update has been set, 0 otherwise" - }, - "description": "

Get the force update setting

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_direction": { - "type": "function", - "file": "git2/refspec.h", - "line": 79, - "lineto": 79, - "args": [ - { - "name": "spec", - "type": "const git_refspec *", - "comment": "refspec" - } - ], - "argline": "const git_refspec *spec", - "sig": "const git_refspec *", - "return": { - "type": "git_direction", - "comment": " GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" - }, - "description": "

Get the refspec's direction.

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_src_matches": { - "type": "function", - "file": "git2/refspec.h", - "line": 88, - "lineto": 88, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the name of the reference to check" - } - ], - "argline": "const git_refspec *refspec, const char *refname", - "sig": "const git_refspec *::const char *", - "return": { - "type": "int", - "comment": " 1 if the refspec matches, 0 otherwise" - }, - "description": "

Check if a refspec's source descriptor matches a reference

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_dst_matches": { - "type": "function", - "file": "git2/refspec.h", - "line": 97, - "lineto": 97, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the name of the reference to check" - } - ], - "argline": "const git_refspec *refspec, const char *refname", - "sig": "const git_refspec *::const char *", - "return": { - "type": "int", - "comment": " 1 if the refspec matches, 0 otherwise" - }, - "description": "

Check if a refspec's destination descriptor matches a reference

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_transform": { - "type": "function", - "file": "git2/refspec.h", - "line": 107, - "lineto": 107, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "where to store the target name" - }, - { - "name": "spec", - "type": "const git_refspec *", - "comment": "the refspec" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the reference to transform" - } - ], - "argline": "git_buf *out, const git_refspec *spec, const char *name", - "sig": "git_buf *::const git_refspec *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EBUFS or another error" - }, - "description": "

Transform a reference to its target following the refspec's rules

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_rtransform": { - "type": "function", - "file": "git2/refspec.h", - "line": 117, - "lineto": 117, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "where to store the source reference name" - }, - { - "name": "spec", - "type": "const git_refspec *", - "comment": "the refspec" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the reference to transform" - } - ], - "argline": "git_buf *out, const git_refspec *spec, const char *name", - "sig": "git_buf *::const git_refspec *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EBUFS or another error" - }, - "description": "

Transform a target reference to its source reference following the refspec's rules

\n", - "comments": "", - "group": "refspec" - }, - "git_remote_create": { - "type": "function", - "file": "git2/remote.h", - "line": 38, - "lineto": 42, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "the resulting remote" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to create the remote" - }, - { - "name": "name", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote's url" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *name, const char *url", - "sig": "git_remote **::git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Add a remote with the default fetch refspec to the repository's configuration.

\n", - "comments": "", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_create-1" - ] - } - }, - "git_remote_create_options_init": { - "type": "function", - "file": "git2/remote.h", - "line": 97, - "lineto": 99, - "args": [ - { - "name": "opts", - "type": "git_remote_create_options *", - "comment": "The `git_remote_create_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REMOTE_CREATE_OPTIONS_VERSION`." - } - ], - "argline": "git_remote_create_options *opts, unsigned int version", - "sig": "git_remote_create_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_remote_create_options structure

\n", - "comments": "

Initializes a git_remote_create_options with default values. Equivalent to creating an instance with GIT_REMOTE_CREATE_OPTIONS_INIT.

\n", - "group": "remote" - }, - "git_remote_create_with_opts": { - "type": "function", - "file": "git2/remote.h", - "line": 113, - "lineto": 116, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "the resulting remote" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote's url" - }, - { - "name": "opts", - "type": "const git_remote_create_options *", - "comment": "the remote creation options" - } - ], - "argline": "git_remote **out, const char *url, const git_remote_create_options *opts", - "sig": "git_remote **::const char *::const git_remote_create_options *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Create a remote, with options.

\n", - "comments": "

This function allows more fine-grained control over the remote creation.

\n\n

Passing NULL as the opts argument will result in a detached remote.

\n", - "group": "remote" - }, - "git_remote_create_with_fetchspec": { - "type": "function", - "file": "git2/remote.h", - "line": 129, - "lineto": 134, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "the resulting remote" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to create the remote" - }, - { - "name": "name", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote's url" - }, - { - "name": "fetch", - "type": "const char *", - "comment": "the remote fetch value" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *name, const char *url, const char *fetch", - "sig": "git_remote **::git_repository *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Add a remote with the provided fetch refspec (or default if NULL) to the repository's\n configuration.

\n", - "comments": "", - "group": "remote" - }, - "git_remote_create_anonymous": { - "type": "function", - "file": "git2/remote.h", - "line": 147, - "lineto": 150, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "pointer to the new remote objects" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the associated repository" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote repository's URL" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *url", - "sig": "git_remote **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an anonymous remote

\n", - "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.3.1/fetch.html#git_remote_create_anonymous-4" - ], - "ls-remote.c": [ - "ex/v1.3.1/ls-remote.html#git_remote_create_anonymous-2" - ] - } - }, - "git_remote_create_detached": { - "type": "function", - "file": "git2/remote.h", - "line": 166, - "lineto": 168, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "pointer to the new remote objects" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote repository's URL" - } - ], - "argline": "git_remote **out, const char *url", - "sig": "git_remote **::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a remote without a connected local repo

\n", - "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n\n

Contrasted with git_remote_create_anonymous, a detached remote will not consider any repo configuration values (such as insteadof url substitutions).

\n", - "group": "remote" - }, - "git_remote_lookup": { - "type": "function", - "file": "git2/remote.h", - "line": 181, - "lineto": 181, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "pointer to the new remote object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the associated repository" - }, - { - "name": "name", - "type": "const char *", - "comment": "the remote's name" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *name", - "sig": "git_remote **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Get the information for a particular remote

\n", - "comments": "

The name will be checked for validity. See git_tag_create() for rules about valid names.

\n", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.3.1/fetch.html#git_remote_lookup-5" - ], - "ls-remote.c": [ - "ex/v1.3.1/ls-remote.html#git_remote_lookup-3" - ], - "push.c": [ - "ex/v1.3.1/push.html#git_remote_lookup-1" - ], - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_lookup-2" - ] - } - }, - "git_remote_dup": { - "type": "function", - "file": "git2/remote.h", - "line": 193, - "lineto": 193, - "args": [ - { - "name": "dest", - "type": "git_remote **", - "comment": "pointer where to store the copy" - }, - { - "name": "source", - "type": "git_remote *", - "comment": "object to copy" - } - ], - "argline": "git_remote **dest, git_remote *source", - "sig": "git_remote **::git_remote *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a copy of an existing remote. All internal strings are also\n duplicated. Callbacks are not duplicated.

\n", - "comments": "

Call git_remote_free to free the data.

\n", - "group": "remote" - }, - "git_remote_owner": { - "type": "function", - "file": "git2/remote.h", - "line": 201, - "lineto": 201, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "git_repository *", - "comment": " a pointer to the repository" - }, - "description": "

Get the remote's repository

\n", - "comments": "", - "group": "remote" - }, - "git_remote_name": { - "type": "function", - "file": "git2/remote.h", - "line": 209, - "lineto": 209, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "const char *", - "comment": " a pointer to the name or NULL for in-memory remotes" - }, - "description": "

Get the remote's name

\n", - "comments": "", - "group": "remote" - }, - "git_remote_url": { - "type": "function", - "file": "git2/remote.h", - "line": 221, - "lineto": 221, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "const char *", - "comment": " a pointer to the url" - }, - "description": "

Get the remote's url

\n", - "comments": "

If url.*.insteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_url-3" - ] - } - }, - "git_remote_pushurl": { - "type": "function", - "file": "git2/remote.h", - "line": 233, - "lineto": 233, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "const char *", - "comment": " a pointer to the url or NULL if no special url for pushing is set" - }, - "description": "

Get the remote's url for pushing.

\n", - "comments": "

If url.*.pushInsteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_pushurl-4" - ] - } - }, - "git_remote_set_url": { - "type": "function", - "file": "git2/remote.h", - "line": 246, - "lineto": 246, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the change" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the url to set" - } - ], - "argline": "git_repository *repo, const char *remote, const char *url", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error value" - }, - "description": "

Set the remote's url in the configuration

\n", - "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_set_url-5" - ] - } - }, - "git_remote_set_pushurl": { - "type": "function", - "file": "git2/remote.h", - "line": 260, - "lineto": 260, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the change" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the url to set" - } - ], - "argline": "git_repository *repo, const char *remote, const char *url", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Set the remote's url for pushing in the configuration.

\n", - "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_set_pushurl-6" - ] - } - }, - "git_remote_set_instance_url": { - "type": "function", - "file": "git2/remote.h", - "line": 270, - "lineto": 270, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the url to set" - } - ], - "argline": "git_remote *remote, const char *url", - "sig": "git_remote *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error value" - }, - "description": "

Set the url for this particular url instance. The URL in the\n configuration will be ignored, and will not be changed.

\n", - "comments": "", - "group": "remote" - }, - "git_remote_set_instance_pushurl": { - "type": "function", - "file": "git2/remote.h", - "line": 280, - "lineto": 280, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the url to set" - } - ], - "argline": "git_remote *remote, const char *url", - "sig": "git_remote *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error value" - }, - "description": "

Set the push url for this particular url instance. The URL in the\n configuration will be ignored, and will not be changed.

\n", - "comments": "", - "group": "remote" - }, - "git_remote_add_fetch": { - "type": "function", - "file": "git2/remote.h", - "line": 293, - "lineto": 293, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to change the configuration" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the name of the remote to change" - }, - { - "name": "refspec", - "type": "const char *", - "comment": "the new fetch refspec" - } - ], - "argline": "git_repository *repo, const char *remote, const char *refspec", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC if refspec is invalid or an error value" - }, - "description": "

Add a fetch refspec to the remote's configuration

\n", - "comments": "

Add the given refspec to the fetch list in the configuration. No loaded remote instances will be affected.

\n", - "group": "remote" - }, - "git_remote_get_fetch_refspecs": { - "type": "function", - "file": "git2/remote.h", - "line": 304, - "lineto": 304, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": "pointer to the array in which to store the strings" - }, - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - } - ], - "argline": "git_strarray *array, const git_remote *remote", - "sig": "git_strarray *::const git_remote *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Get the remote's list of fetch refspecs

\n", - "comments": "

The memory is owned by the user and should be freed with git_strarray_free.

\n", - "group": "remote" - }, - "git_remote_add_push": { - "type": "function", - "file": "git2/remote.h", - "line": 317, - "lineto": 317, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to change the configuration" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the name of the remote to change" - }, - { - "name": "refspec", - "type": "const char *", - "comment": "the new push refspec" - } - ], - "argline": "git_repository *repo, const char *remote, const char *refspec", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC if refspec is invalid or an error value" - }, - "description": "

Add a push refspec to the remote's configuration

\n", - "comments": "

Add the given refspec to the push list in the configuration. No loaded remote instances will be affected.

\n", - "group": "remote" - }, - "git_remote_get_push_refspecs": { - "type": "function", - "file": "git2/remote.h", - "line": 328, - "lineto": 328, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": "pointer to the array in which to store the strings" - }, - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - } - ], - "argline": "git_strarray *array, const git_remote *remote", - "sig": "git_strarray *::const git_remote *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Get the remote's list of push refspecs

\n", - "comments": "

The memory is owned by the user and should be freed with git_strarray_free.

\n", - "group": "remote" - }, - "git_remote_refspec_count": { - "type": "function", - "file": "git2/remote.h", - "line": 336, - "lineto": 336, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "size_t", - "comment": " the amount of refspecs configured in this remote" - }, - "description": "

Get the number of refspecs for a remote

\n", - "comments": "", - "group": "remote" - }, - "git_remote_get_refspec": { - "type": "function", - "file": "git2/remote.h", - "line": 345, - "lineto": 345, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - }, - { - "name": "n", - "type": "size_t", - "comment": "the refspec to get" - } - ], - "argline": "const git_remote *remote, size_t n", - "sig": "const git_remote *::size_t", - "return": { - "type": "const git_refspec *", - "comment": " the nth refspec" - }, - "description": "

Get a refspec from the remote

\n", - "comments": "", - "group": "remote" - }, - "git_remote_connect": { - "type": "function", - "file": "git2/remote.h", - "line": 362, - "lineto": 362, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to connect to" - }, - { - "name": "direction", - "type": "git_direction", - "comment": "GIT_DIRECTION_FETCH if you want to fetch or\n GIT_DIRECTION_PUSH if you want to push" - }, - { - "name": "callbacks", - "type": "const git_remote_callbacks *", - "comment": "the callbacks to use for this connection" - }, - { - "name": "proxy_opts", - "type": "const git_proxy_options *", - "comment": "proxy settings" - }, - { - "name": "custom_headers", - "type": "const git_strarray *", - "comment": "extra HTTP headers to use in this connection" - } - ], - "argline": "git_remote *remote, git_direction direction, const git_remote_callbacks *callbacks, const git_proxy_options *proxy_opts, const git_strarray *custom_headers", - "sig": "git_remote *::git_direction::const git_remote_callbacks *::const git_proxy_options *::const git_strarray *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open a connection to a remote

\n", - "comments": "

The transport is selected based on the URL. The direction argument is due to a limitation of the git protocol (over TCP or SSH) which starts up a specific binary which can only do the one or the other.

\n", - "group": "remote", - "examples": { - "ls-remote.c": [ - "ex/v1.3.1/ls-remote.html#git_remote_connect-4" - ] - } - }, - "git_remote_ls": { - "type": "function", - "file": "git2/remote.h", - "line": 384, - "lineto": 384, - "args": [ - { - "name": "out", - "type": "const git_remote_head ***", - "comment": "pointer to the array" - }, - { - "name": "size", - "type": "size_t *", - "comment": "the number of remote heads" - }, - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote_head ***out, size_t *size, git_remote *remote", - "sig": "const git_remote_head ***::size_t *::git_remote *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Get the remote repository's reference advertisement list

\n", - "comments": "

Get the list of references with which the server responds to a new connection.

\n\n

The remote (or more exactly its transport) must have connected to the remote repository. This list is available as soon as the connection to the remote is initiated and it remains available after disconnecting.

\n\n

The memory belongs to the remote. The pointer will be valid as long as a new connection is not initiated, but it is recommended that you make a copy in order to make use of the data.

\n", - "group": "remote", - "examples": { - "ls-remote.c": [ - "ex/v1.3.1/ls-remote.html#git_remote_ls-5" - ] - } - }, - "git_remote_connected": { - "type": "function", - "file": "git2/remote.h", - "line": 395, - "lineto": 395, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "int", - "comment": " 1 if it's connected, 0 otherwise." - }, - "description": "

Check whether the remote is connected

\n", - "comments": "

Check whether the remote's underlying transport is connected to the remote host.

\n", - "group": "remote" - }, - "git_remote_stop": { - "type": "function", - "file": "git2/remote.h", - "line": 406, - "lineto": 406, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - } - ], - "argline": "git_remote *remote", - "sig": "git_remote *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Cancel the operation

\n", - "comments": "

At certain points in its operation, the network code checks whether the operation has been cancelled and if so stops the operation.

\n", - "group": "remote" - }, - "git_remote_disconnect": { - "type": "function", - "file": "git2/remote.h", - "line": 416, - "lineto": 416, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to disconnect from" - } - ], - "argline": "git_remote *remote", - "sig": "git_remote *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Disconnect from the remote

\n", - "comments": "

Close the connection to the remote.

\n", - "group": "remote" - }, - "git_remote_free": { - "type": "function", - "file": "git2/remote.h", - "line": 426, - "lineto": 426, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to free" - } - ], - "argline": "git_remote *remote", - "sig": "git_remote *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory associated with a remote

\n", - "comments": "

This also disconnects from the remote, if the connection has not been closed yet (using git_remote_disconnect).

\n", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.3.1/fetch.html#git_remote_free-6", - "ex/v1.3.1/fetch.html#git_remote_free-7" - ], - "ls-remote.c": [ - "ex/v1.3.1/ls-remote.html#git_remote_free-6" - ], - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_free-7" - ] - } - }, - "git_remote_list": { - "type": "function", - "file": "git2/remote.h", - "line": 437, - "lineto": 437, - "args": [ - { - "name": "out", - "type": "git_strarray *", - "comment": "a string array which receives the names of the remotes" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to query" - } - ], - "argline": "git_strarray *out, git_repository *repo", - "sig": "git_strarray *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get a list of the configured remotes for a repo

\n", - "comments": "

The string array must be freed by the user.

\n", - "group": "remote", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_remote_list-22" - ], - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_list-8" - ] - } - }, - "git_remote_init_callbacks": { - "type": "function", - "file": "git2/remote.h", - "line": 651, - "lineto": 653, - "args": [ - { - "name": "opts", - "type": "git_remote_callbacks *", - "comment": "the `git_remote_callbacks` struct to initialize" - }, - { - "name": "version", - "type": "unsigned int", - "comment": "Version of struct; pass `GIT_REMOTE_CALLBACKS_VERSION`" - } - ], - "argline": "git_remote_callbacks *opts, unsigned int version", - "sig": "git_remote_callbacks *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initializes a git_remote_callbacks with default values. Equivalent to\n creating an instance with GIT_REMOTE_CALLBACKS_INIT.

\n", - "comments": "", - "group": "remote" - }, - "git_fetch_options_init": { - "type": "function", - "file": "git2/remote.h", - "line": 757, - "lineto": 759, - "args": [ - { - "name": "opts", - "type": "git_fetch_options *", - "comment": "The `git_fetch_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_FETCH_OPTIONS_VERSION`." - } - ], - "argline": "git_fetch_options *opts, unsigned int version", - "sig": "git_fetch_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_fetch_options structure

\n", - "comments": "

Initializes a git_fetch_options with default values. Equivalent to creating an instance with GIT_FETCH_OPTIONS_INIT.

\n", - "group": "fetch" - }, - "git_push_options_init": { - "type": "function", - "file": "git2/remote.h", - "line": 807, - "lineto": 809, - "args": [ - { - "name": "opts", - "type": "git_push_options *", - "comment": "The `git_push_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_PUSH_OPTIONS_VERSION`." - } - ], - "argline": "git_push_options *opts, unsigned int version", - "sig": "git_push_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_push_options structure

\n", - "comments": "

Initializes a git_push_options with default values. Equivalent to creating an instance with GIT_PUSH_OPTIONS_INIT.

\n", - "group": "push", - "examples": { - "push.c": [ - "ex/v1.3.1/push.html#git_push_options_init-2" - ] - } - }, - "git_remote_download": { - "type": "function", - "file": "git2/remote.h", - "line": 827, - "lineto": 827, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - }, - { - "name": "refspecs", - "type": "const git_strarray *", - "comment": "the refspecs to use for this negotiation and\n download. Use NULL or an empty array to use the base refspecs" - }, - { - "name": "opts", - "type": "const git_fetch_options *", - "comment": "the options to use for this fetch" - } - ], - "argline": "git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts", - "sig": "git_remote *::const git_strarray *::const git_fetch_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Download and index the packfile

\n", - "comments": "

Connect to the remote if it hasn't been done yet, negotiate with the remote git which objects are missing, download and index the packfile.

\n\n

The .idx file will be created and both it and the packfile with be renamed to their final name.

\n", - "group": "remote" - }, - "git_remote_upload": { - "type": "function", - "file": "git2/remote.h", - "line": 841, - "lineto": 841, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - }, - { - "name": "refspecs", - "type": "const git_strarray *", - "comment": "the refspecs to use for this negotiation and\n upload. Use NULL or an empty array to use the base refspecs" - }, - { - "name": "opts", - "type": "const git_push_options *", - "comment": "the options to use for this push" - } - ], - "argline": "git_remote *remote, const git_strarray *refspecs, const git_push_options *opts", - "sig": "git_remote *::const git_strarray *::const git_push_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a packfile and send it to the server

\n", - "comments": "

Connect to the remote if it hasn't been done yet, negotiate with the remote git which objects are missing, create a packfile with the missing objects and send it.

\n", - "group": "remote" - }, - "git_remote_update_tips": { - "type": "function", - "file": "git2/remote.h", - "line": 857, - "lineto": 862, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to update" - }, - { - "name": "callbacks", - "type": "const git_remote_callbacks *", - "comment": "pointer to the callback structure to use" - }, - { - "name": "update_fetchhead", - "type": "int", - "comment": "whether to write to FETCH_HEAD. Pass 1 to behave like git." - }, - { - "name": "download_tags", - "type": "git_remote_autotag_option_t", - "comment": "what the behaviour for downloading tags is for this fetch. This is\n ignored for push. This must be the same value passed to `git_remote_download()`." - }, - { - "name": "reflog_message", - "type": "const char *", - "comment": "The message to insert into the reflogs. If\n NULL and fetching, the default is \"fetch \n\", where \n is\n the name of the remote (or its url, for in-memory remotes). This\n parameter is ignored when pushing." - } - ], - "argline": "git_remote *remote, const git_remote_callbacks *callbacks, int update_fetchhead, git_remote_autotag_option_t download_tags, const char *reflog_message", - "sig": "git_remote *::const git_remote_callbacks *::int::git_remote_autotag_option_t::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Update the tips to the new state

\n", - "comments": "", - "group": "remote" - }, - "git_remote_fetch": { - "type": "function", - "file": "git2/remote.h", - "line": 878, - "lineto": 882, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to fetch from" - }, - { - "name": "refspecs", - "type": "const git_strarray *", - "comment": "the refspecs to use for this fetch. Pass NULL or an\n empty array to use the base refspecs." - }, - { - "name": "opts", - "type": "const git_fetch_options *", - "comment": "options to use for this fetch" - }, - { - "name": "reflog_message", - "type": "const char *", - "comment": "The message to insert into the reflogs. If NULL, the\n\t\t\t\t\t\t\t\t default is \"fetch\"" - } - ], - "argline": "git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts, const char *reflog_message", - "sig": "git_remote *::const git_strarray *::const git_fetch_options *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Download new data and update tips

\n", - "comments": "

Convenience function to connect to a remote, download the data, disconnect and update the remote-tracking branches.

\n", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.3.1/fetch.html#git_remote_fetch-8" - ] - } - }, - "git_remote_prune": { - "type": "function", - "file": "git2/remote.h", - "line": 891, - "lineto": 891, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to prune" - }, - { - "name": "callbacks", - "type": "const git_remote_callbacks *", - "comment": "callbacks to use for this prune" - } - ], - "argline": "git_remote *remote, const git_remote_callbacks *callbacks", - "sig": "git_remote *::const git_remote_callbacks *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Prune tracking refs that are no longer present on remote

\n", - "comments": "", - "group": "remote" - }, - "git_remote_push": { - "type": "function", - "file": "git2/remote.h", - "line": 903, - "lineto": 905, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to push to" - }, - { - "name": "refspecs", - "type": "const git_strarray *", - "comment": "the refspecs to use for pushing. If NULL or an empty\n array, the configured refspecs will be used" - }, - { - "name": "opts", - "type": "const git_push_options *", - "comment": "options to use for this push" - } - ], - "argline": "git_remote *remote, const git_strarray *refspecs, const git_push_options *opts", - "sig": "git_remote *::const git_strarray *::const git_push_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Perform a push

\n", - "comments": "

Peform all the steps from a push.

\n", - "group": "remote", - "examples": { - "push.c": [ - "ex/v1.3.1/push.html#git_remote_push-3" - ] - } - }, - "git_remote_stats": { - "type": "function", - "file": "git2/remote.h", - "line": 910, - "lineto": 910, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": null - } - ], - "argline": "git_remote *remote", - "sig": "git_remote *", - "return": { - "type": "const git_indexer_progress *", - "comment": null - }, - "description": "

Get the statistics structure that is filled in by the fetch operation.

\n", - "comments": "", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.3.1/fetch.html#git_remote_stats-9" - ] - } - }, - "git_remote_autotag": { - "type": "function", - "file": "git2/remote.h", - "line": 918, - "lineto": 918, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "git_remote_autotag_option_t", - "comment": " the auto-follow setting" - }, - "description": "

Retrieve the tag auto-follow setting

\n", - "comments": "", - "group": "remote" - }, - "git_remote_set_autotag": { - "type": "function", - "file": "git2/remote.h", - "line": 931, - "lineto": 931, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to make the change" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the name of the remote" - }, - { - "name": "value", - "type": "git_remote_autotag_option_t", - "comment": "the new value to take." - } - ], - "argline": "git_repository *repo, const char *remote, git_remote_autotag_option_t value", - "sig": "git_repository *::const char *::git_remote_autotag_option_t", - "return": { - "type": "int", - "comment": " 0, or an error code." - }, - "description": "

Set the remote's tag following setting.

\n", - "comments": "

The change will be made in the configuration. No loaded remotes will be affected.

\n", - "group": "remote" - }, - "git_remote_prune_refs": { - "type": "function", - "file": "git2/remote.h", - "line": 939, - "lineto": 939, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "int", - "comment": " the ref-prune setting" - }, - "description": "

Retrieve the ref-prune setting

\n", - "comments": "", - "group": "remote" - }, - "git_remote_rename": { - "type": "function", - "file": "git2/remote.h", - "line": 961, - "lineto": 965, - "args": [ - { - "name": "problems", - "type": "git_strarray *", - "comment": "non-default refspecs cannot be renamed and will be\n stored here for further processing by the caller. Always free this\n strarray on successful return." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to rename" - }, - { - "name": "name", - "type": "const char *", - "comment": "the current name of the remote" - }, - { - "name": "new_name", - "type": "const char *", - "comment": "the new name the remote should bear" - } - ], - "argline": "git_strarray *problems, git_repository *repo, const char *name, const char *new_name", - "sig": "git_strarray *::git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Give the remote a new name

\n", - "comments": "

All remote-tracking branches and configuration settings for the remote are updated.

\n\n

The new name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

No loaded instances of a the remote with the old name will change their name or their list of refspecs.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_rename-9" - ] - } - }, - "git_remote_name_is_valid": { - "type": "function", - "file": "git2/remote.h", - "line": 974, - "lineto": 974, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "output pointer to set with validity of given remote name" - }, - { - "name": "remote_name", - "type": "const char *", - "comment": "name to be checked." - } - ], - "argline": "int *valid, const char *remote_name", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Ensure the remote name is well-formed.

\n", - "comments": "", - "group": "remote" - }, - "git_remote_delete": { - "type": "function", - "file": "git2/remote.h", - "line": 986, - "lineto": 986, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to act" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the remote to delete" - } - ], - "argline": "git_repository *repo, const char *name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code." - }, - "description": "

Delete an existing persisted remote.

\n", - "comments": "

All remote-tracking branches and configuration settings for the remote will be removed.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.3.1/remote.html#git_remote_delete-10" - ] - } - }, - "git_remote_default_branch": { - "type": "function", - "file": "git2/remote.h", - "line": 1004, - "lineto": 1004, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer in which to store the reference name" - }, - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - } - ], - "argline": "git_buf *out, git_remote *remote", - "sig": "git_buf *::git_remote *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the remote does not have any references\n or none of them point to HEAD's commit, or an error message." - }, - "description": "

Retrieve the name of the remote's default branch

\n", - "comments": "

The default branch of a repository is the branch which HEAD points to. If the remote does not support reporting this information directly, it performs the guess as git does; that is, if there are multiple branches which point to the same commit, the first one is chosen. If the master branch is a candidate, it wins.

\n\n

This function must only be called after connecting.

\n", - "group": "remote" - }, - "git_repository_open": { - "type": "function", - "file": "git2/repository.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "pointer to the repo which will be opened" - }, - { - "name": "path", - "type": "const char *", - "comment": "the path to the repository" - } - ], - "argline": "git_repository **out, const char *path", - "sig": "git_repository **::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open a git repository.

\n", - "comments": "

The 'path' argument must point to either a git repository folder, or an existing work dir.

\n\n

The method will automatically detect if 'path' is a normal or bare repository or fail is 'path' is neither.

\n", - "group": "repository", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_repository_open-67" - ] - } - }, - "git_repository_open_from_worktree": { - "type": "function", - "file": "git2/repository.h", - "line": 48, - "lineto": 48, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Output pointer containing opened repository" - }, - { - "name": "wt", - "type": "git_worktree *", - "comment": "Working tree to open" - } - ], - "argline": "git_repository **out, git_worktree *wt", - "sig": "git_repository **::git_worktree *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open working tree as a repository

\n", - "comments": "

Open the working directory of the working tree as a normal repository that can then be worked on.

\n", - "group": "repository" - }, - "git_repository_wrap_odb": { - "type": "function", - "file": "git2/repository.h", - "line": 61, - "lineto": 61, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "pointer to the repo" - }, - { - "name": "odb", - "type": "git_odb *", - "comment": "the object database to wrap" - } - ], - "argline": "git_repository **out, git_odb *odb", - "sig": "git_repository **::git_odb *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a "fake" repository to wrap an object database

\n", - "comments": "

Create a repository object to wrap an object database to be used with the API when all you have is an object database. This doesn't have any paths associated with it, so use with care.

\n", - "group": "repository" - }, - "git_repository_discover": { - "type": "function", - "file": "git2/repository.h", - "line": 89, - "lineto": 93, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "A pointer to a user-allocated git_buf which will contain\n the found path." - }, - { - "name": "start_path", - "type": "const char *", - "comment": "The base path where the lookup starts." - }, - { - "name": "across_fs", - "type": "int", - "comment": "If true, then the lookup will not stop when a\n filesystem device change is detected while exploring parent directories." - }, - { - "name": "ceiling_dirs", - "type": "const char *", - "comment": "A GIT_PATH_LIST_SEPARATOR separated list of\n absolute symbolic link free paths. The lookup will stop when any\n of this paths is reached. Note that the lookup always performs on\n start_path no matter start_path appears in ceiling_dirs ceiling_dirs\n might be NULL (which is equivalent to an empty string)" - } - ], - "argline": "git_buf *out, const char *start_path, int across_fs, const char *ceiling_dirs", - "sig": "git_buf *::const char *::int::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Look for a git repository and copy its path in the given buffer.\n The lookup start from base_path and walk across parent directories\n if nothing has been found. The lookup ends when the first repository\n is found, or when reaching a directory referenced in ceiling_dirs\n or when the filesystem changes (in case across_fs is true).

\n", - "comments": "

The method will automatically detect if the repository is bare (if there is a repository).

\n", - "group": "repository" - }, - "git_repository_open_ext": { - "type": "function", - "file": "git2/repository.h", - "line": 165, - "lineto": 169, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Pointer to the repo which will be opened. This can\n actually be NULL if you only want to use the error code to\n see if a repo at this path could be opened." - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to open as git repository. If the flags\n permit \"searching\", then this can be a path to a subdirectory\n inside the working directory of the repository. May be NULL if\n flags is GIT_REPOSITORY_OPEN_FROM_ENV." - }, - { - "name": "flags", - "type": "unsigned int", - "comment": "A combination of the GIT_REPOSITORY_OPEN flags above." - }, - { - "name": "ceiling_dirs", - "type": "const char *", - "comment": "A GIT_PATH_LIST_SEPARATOR delimited list of path\n prefixes at which the search for a containing repository should\n terminate." - } - ], - "argline": "git_repository **out, const char *path, unsigned int flags, const char *ceiling_dirs", - "sig": "git_repository **::const char *::unsigned int::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if no repository could be found,\n or -1 if there was a repository but open failed for some reason\n (such as repo corruption or system errors)." - }, - "description": "

Find and open a repository with extended controls.

\n", - "comments": "", - "group": "repository", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_repository_open_ext-43" - ] - } - }, - "git_repository_open_bare": { - "type": "function", - "file": "git2/repository.h", - "line": 182, - "lineto": 182, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Pointer to the repo which will be opened." - }, - { - "name": "bare_path", - "type": "const char *", - "comment": "Direct path to the bare repository" - } - ], - "argline": "git_repository **out, const char *bare_path", - "sig": "git_repository **::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Open a bare repository on the serverside.

\n", - "comments": "

This is a fast open for bare repositories that will come in handy if you're e.g. hosting git repositories and need to access them efficiently

\n", - "group": "repository" - }, - "git_repository_free": { - "type": "function", - "file": "git2/repository.h", - "line": 195, - "lineto": 195, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository handle to close. If NULL nothing occurs." - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a previously allocated repository

\n", - "comments": "

Note that after a repository is free'd, all the objects it has spawned will still exist until they are manually closed by the user with git_object_free, but accessing any of the attributes of an object without a backing repository will result in undefined behavior

\n", - "group": "repository", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_repository_free-68" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_repository_free-4" - ] - } - }, - "git_repository_init": { - "type": "function", - "file": "git2/repository.h", - "line": 212, - "lineto": 215, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "pointer to the repo which will be created or reinitialized" - }, - { - "name": "path", - "type": "const char *", - "comment": "the path to the repository" - }, - { - "name": "is_bare", - "type": "unsigned int", - "comment": "if true, a Git repository without a working directory is\n\t\tcreated at the pointed path. If false, provided path will be\n\t\tconsidered as the working directory into which the .git directory\n\t\twill be created." - } - ], - "argline": "git_repository **out, const char *path, unsigned int is_bare", - "sig": "git_repository **::const char *::unsigned int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Creates a new Git repository in the given folder.

\n", - "comments": "

TODO: - Reinit the repository

\n", - "group": "repository", - "examples": { - "init.c": [ - "ex/v1.3.1/init.html#git_repository_init-5" - ] - } - }, - "git_repository_init_options_init": { - "type": "function", - "file": "git2/repository.h", - "line": 369, - "lineto": 371, - "args": [ - { - "name": "opts", - "type": "git_repository_init_options *", - "comment": "The `git_repository_init_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REPOSITORY_INIT_OPTIONS_VERSION`." - } - ], - "argline": "git_repository_init_options *opts, unsigned int version", - "sig": "git_repository_init_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_repository_init_options structure

\n", - "comments": "

Initializes a git_repository_init_options with default values. Equivalent to creating an instance with GIT_REPOSITORY_INIT_OPTIONS_INIT.

\n", - "group": "repository" - }, - "git_repository_init_ext": { - "type": "function", - "file": "git2/repository.h", - "line": 386, - "lineto": 389, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Pointer to the repo which will be created or reinitialized." - }, - { - "name": "repo_path", - "type": "const char *", - "comment": "The path to the repository." - }, - { - "name": "opts", - "type": "git_repository_init_options *", - "comment": "Pointer to git_repository_init_options struct." - } - ], - "argline": "git_repository **out, const char *repo_path, git_repository_init_options *opts", - "sig": "git_repository **::const char *::git_repository_init_options *", - "return": { - "type": "int", - "comment": " 0 or an error code on failure." - }, - "description": "

Create a new Git repository in the given folder with extended controls.

\n", - "comments": "

This will initialize a new git repository (creating the repo_path if requested by flags) and working directory as needed. It will auto-detect the case sensitivity of the file system and if the file system supports file mode bits correctly.

\n", - "group": "repository", - "examples": { - "init.c": [ - "ex/v1.3.1/init.html#git_repository_init_ext-6" - ] - } - }, - "git_repository_head": { - "type": "function", - "file": "git2/repository.h", - "line": 404, - "lineto": 404, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer to the reference which will be retrieved" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "a repository object" - } - ], - "argline": "git_reference **out, git_repository *repo", - "sig": "git_reference **::git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing\n branch, GIT_ENOTFOUND when HEAD is missing; an error code otherwise" - }, - "description": "

Retrieve and resolve the reference pointed at by HEAD.

\n", - "comments": "

The returned git_reference will be owned by caller and git_reference_free() must be called when done with it to release the allocated memory and prevent a leak.

\n", - "group": "repository", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_repository_head-31", - "ex/v1.3.1/merge.html#git_repository_head-32" - ], - "status.c": [ - "ex/v1.3.1/status.html#git_repository_head-3" - ] - } - }, - "git_repository_head_for_worktree": { - "type": "function", - "file": "git2/repository.h", - "line": 414, - "lineto": 415, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer to the reference which will be retrieved" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "a repository object" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the worktree to retrieve HEAD for" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name", - "sig": "git_reference **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 when successful, error-code otherwise" - }, - "description": "

Retrieve the referenced HEAD for the worktree

\n", - "comments": "", - "group": "repository" - }, - "git_repository_head_detached": { - "type": "function", - "file": "git2/repository.h", - "line": 427, - "lineto": 427, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repo to test" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 1 if HEAD is detached, 0 if it's not; error code if there\n was an error." - }, - "description": "

Check if a repository's HEAD is detached

\n", - "comments": "

A repository's HEAD is detached when it points directly to a commit instead of a branch.

\n", - "group": "repository" - }, - "git_repository_head_detached_for_worktree": { - "type": "function", - "file": "git2/repository.h", - "line": 440, - "lineto": 441, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "a repository object" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the worktree to retrieve HEAD for" - } - ], - "argline": "git_repository *repo, const char *name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 1 if HEAD is detached, 0 if its not; error code if\n there was an error" - }, - "description": "

Check if a worktree's HEAD is detached

\n", - "comments": "

A worktree's HEAD is detached when it points directly to a commit instead of a branch.

\n", - "group": "repository" - }, - "git_repository_head_unborn": { - "type": "function", - "file": "git2/repository.h", - "line": 453, - "lineto": 453, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repo to test" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 1 if the current branch is unborn, 0 if it's not; error\n code if there was an error" - }, - "description": "

Check if the current branch is unborn

\n", - "comments": "

An unborn branch is one named from HEAD but which doesn't exist in the refs namespace, because it doesn't have any commit to point to.

\n", - "group": "repository" - }, - "git_repository_is_empty": { - "type": "function", - "file": "git2/repository.h", - "line": 465, - "lineto": 465, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repo to test" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 1 if the repository is empty, 0 if it isn't, error code\n if the repository is corrupted" - }, - "description": "

Check if a repository is empty

\n", - "comments": "

An empty repository has just been initialized and contains no references apart from HEAD, which must be pointing to the unborn master branch.

\n", - "group": "repository" - }, - "git_repository_item_path": { - "type": "function", - "file": "git2/repository.h", - "line": 502, - "lineto": 502, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Buffer to store the path at" - }, - { - "name": "repo", - "type": "const git_repository *", - "comment": "Repository to get path for" - }, - { - "name": "item", - "type": "git_repository_item_t", - "comment": "The repository item for which to retrieve the path" - } - ], - "argline": "git_buf *out, const git_repository *repo, git_repository_item_t item", - "sig": "git_buf *::const git_repository *::git_repository_item_t", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the path cannot exist or an error code" - }, - "description": "

Get the location of a specific repository file or directory

\n", - "comments": "

This function will retrieve the path of a specific repository item. It will thereby honor things like the repository's common directory, gitdir, etc. In case a file path cannot exist for a given item (e.g. the working directory of a bare repository), GIT_ENOTFOUND is returned.

\n", - "group": "repository" - }, - "git_repository_path": { - "type": "function", - "file": "git2/repository.h", - "line": 513, - "lineto": 513, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "A repository object" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "const char *", - "comment": " the path to the repository" - }, - "description": "

Get the path of this repository

\n", - "comments": "

This is the path of the .git folder for normal repositories, or of the repository itself for bare repositories.

\n", - "group": "repository", - "examples": { - "init.c": [ - "ex/v1.3.1/init.html#git_repository_path-7" - ], - "status.c": [ - "ex/v1.3.1/status.html#git_repository_path-4" - ] - } - }, - "git_repository_workdir": { - "type": "function", - "file": "git2/repository.h", - "line": 524, - "lineto": 524, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "A repository object" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "const char *", - "comment": " the path to the working dir, if it exists" - }, - "description": "

Get the path of the working directory for this repository

\n", - "comments": "

If the repository is bare, this function will always return NULL.

\n", - "group": "repository", - "examples": { - "init.c": [ - "ex/v1.3.1/init.html#git_repository_workdir-8" - ] - } - }, - "git_repository_commondir": { - "type": "function", - "file": "git2/repository.h", - "line": 536, - "lineto": 536, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "A repository object" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "const char *", - "comment": " the path to the common dir" - }, - "description": "

Get the path of the shared common directory for this repository.

\n", - "comments": "

If the repository is bare, it is the root directory for the repository. If the repository is a worktree, it is the parent repo's gitdir. Otherwise, it is the gitdir.

\n", - "group": "repository" - }, - "git_repository_set_workdir": { - "type": "function", - "file": "git2/repository.h", - "line": 555, - "lineto": 556, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "workdir", - "type": "const char *", - "comment": "The path to a working directory" - }, - { - "name": "update_gitlink", - "type": "int", - "comment": "Create/update gitlink in workdir and set config\n \"core.worktree\" (if workdir is not the parent of the .git directory)" - } - ], - "argline": "git_repository *repo, const char *workdir, int update_gitlink", - "sig": "git_repository *::const char *::int", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Set the path to the working directory for this repository

\n", - "comments": "

The working directory doesn't need to be the same one that contains the .git folder for this repository.

\n\n

If this repository is bare, setting its working directory will turn it into a normal repository, capable of performing all the common workdir operations (checkout, status, index manipulation, etc).

\n", - "group": "repository" - }, - "git_repository_is_bare": { - "type": "function", - "file": "git2/repository.h", - "line": 564, - "lineto": 564, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "Repo to test" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "int", - "comment": " 1 if the repository is bare, 0 otherwise." - }, - "description": "

Check if a repository is bare

\n", - "comments": "", - "group": "repository", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_repository_is_bare-5" - ] - } - }, - "git_repository_is_worktree": { - "type": "function", - "file": "git2/repository.h", - "line": 572, - "lineto": 572, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "Repo to test" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "int", - "comment": " 1 if the repository is a linked work tree, 0 otherwise." - }, - "description": "

Check if a repository is a linked work tree

\n", - "comments": "", - "group": "repository" - }, - "git_repository_config": { - "type": "function", - "file": "git2/repository.h", - "line": 588, - "lineto": 588, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "Pointer to store the loaded configuration" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_config **out, git_repository *repo", - "sig": "git_config **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get the configuration file for this repository.

\n", - "comments": "

If a configuration file has not been set, the default config set for the repository will be returned, including global and system configurations (if they are available).

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", - "group": "repository", - "examples": { - "config.c": [ - "ex/v1.3.1/config.html#git_repository_config-9" - ] - } - }, - "git_repository_config_snapshot": { - "type": "function", - "file": "git2/repository.h", - "line": 604, - "lineto": 604, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "Pointer to store the loaded configuration" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_config **out, git_repository *repo", - "sig": "git_config **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get a snapshot of the repository's configuration

\n", - "comments": "

Convenience function to take a snapshot from the repository's configuration. The contents of this snapshot will not change, even if the underlying config files are modified.

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", - "group": "repository", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_repository_config_snapshot-69", - "ex/v1.3.1/general.html#git_repository_config_snapshot-70" - ] - } - }, - "git_repository_odb": { - "type": "function", - "file": "git2/repository.h", - "line": 620, - "lineto": 620, - "args": [ - { - "name": "out", - "type": "git_odb **", - "comment": "Pointer to store the loaded ODB" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_odb **out, git_repository *repo", - "sig": "git_odb **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get the Object Database for this repository.

\n", - "comments": "

If a custom ODB has not been set, the default database for the repository will be returned (the one located in .git/objects).

\n\n

The ODB must be freed once it's no longer being used by the user.

\n", - "group": "repository", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_repository_odb-29" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_repository_odb-71" - ] - } - }, - "git_repository_refdb": { - "type": "function", - "file": "git2/repository.h", - "line": 636, - "lineto": 636, - "args": [ - { - "name": "out", - "type": "git_refdb **", - "comment": "Pointer to store the loaded refdb" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_refdb **out, git_repository *repo", - "sig": "git_refdb **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get the Reference Database Backend for this repository.

\n", - "comments": "

If a custom refsdb has not been set, the default database for the repository will be returned (the one that manipulates loose and packed references in the .git directory).

\n\n

The refdb must be freed once it's no longer being used by the user.

\n", - "group": "repository" - }, - "git_repository_index": { - "type": "function", - "file": "git2/repository.h", - "line": 652, - "lineto": 652, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "Pointer to store the loaded index" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_index **out, git_repository *repo", - "sig": "git_index **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get the Index file for this repository.

\n", - "comments": "

If a custom index has not been set, the default index for the repository will be returned (the one located in .git/index).

\n\n

The index must be freed once it's no longer being used by the user.

\n", - "group": "repository", - "examples": { - "add.c": [ - "ex/v1.3.1/add.html#git_repository_index-5" - ], - "commit.c": [ - "ex/v1.3.1/commit.html#git_repository_index-6" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_repository_index-72" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_repository_index-9" - ], - "ls-files.c": [ - "ex/v1.3.1/ls-files.html#git_repository_index-5" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_repository_index-33" - ] - } - }, - "git_repository_message": { - "type": "function", - "file": "git2/repository.h", - "line": 670, - "lineto": 670, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "git_buf to write data into" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository to read prepared message from" - } - ], - "argline": "git_buf *out, git_repository *repo", - "sig": "git_buf *::git_repository *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if no message exists or an error code" - }, - "description": "

Retrieve git's prepared message

\n", - "comments": "

Operations such as git revert/cherry-pick/merge with the -n option stop just short of creating a commit with the changes and save their prepared message in .git/MERGE_MSG so the next git-commit execution can present it to the user for them to amend if they wish.

\n\n

Use this function to get the contents of this file. Don't forget to remove the file after you create the commit.

\n", - "group": "repository" - }, - "git_repository_message_remove": { - "type": "function", - "file": "git2/repository.h", - "line": 677, - "lineto": 677, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": null - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Remove git's prepared message.

\n", - "comments": "

Remove the message that git_repository_message retrieves.

\n", - "group": "repository" - }, - "git_repository_state_cleanup": { - "type": "function", - "file": "git2/repository.h", - "line": 686, - "lineto": 686, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, or error" - }, - "description": "

Remove all the metadata associated with an ongoing command like merge,\n revert, cherry-pick, etc. For example: MERGE_HEAD, MERGE_MSG, etc.

\n", - "comments": "", - "group": "repository", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_repository_state_cleanup-34" - ] - } - }, - "git_repository_fetchhead_foreach": { - "type": "function", - "file": "git2/repository.h", - "line": 717, - "lineto": 720, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "callback", - "type": "git_repository_fetchhead_foreach_cb", - "comment": "Callback function" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to callback data (optional)" - } - ], - "argline": "git_repository *repo, git_repository_fetchhead_foreach_cb callback, void *payload", - "sig": "git_repository *::git_repository_fetchhead_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, GIT_ENOTFOUND if\n there is no FETCH_HEAD file, or other error code." - }, - "description": "

Invoke 'callback' for each entry in the given FETCH_HEAD file.

\n", - "comments": "

Return a non-zero value from the callback to stop the loop.

\n", - "group": "repository" - }, - "git_repository_mergehead_foreach": { - "type": "function", - "file": "git2/repository.h", - "line": 746, - "lineto": 749, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "callback", - "type": "git_repository_mergehead_foreach_cb", - "comment": "Callback function" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to callback data (optional)" - } - ], - "argline": "git_repository *repo, git_repository_mergehead_foreach_cb callback, void *payload", - "sig": "git_repository *::git_repository_mergehead_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, GIT_ENOTFOUND if\n there is no MERGE_HEAD file, or other error code." - }, - "description": "

If a merge is in progress, invoke 'callback' for each commit ID in the\n MERGE_HEAD file.

\n", - "comments": "

Return a non-zero value from the callback to stop the loop.

\n", - "group": "repository" - }, - "git_repository_hashfile": { - "type": "function", - "file": "git2/repository.h", - "line": 776, - "lineto": 781, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Output value of calculated SHA" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to file on disk whose contents should be hashed. This\n may be an absolute path or a relative path, in which case it\n will be treated as a path within the working directory." - }, - { - "name": "type", - "type": "git_object_t", - "comment": "The object type to hash as (e.g. GIT_OBJECT_BLOB)" - }, - { - "name": "as_path", - "type": "const char *", - "comment": "The path to use to look up filtering rules. If this is\n an empty string then no filters will be applied when\n calculating the hash. If this is `NULL` and the `path`\n parameter is a file within the repository's working\n directory, then the `path` will be used." - } - ], - "argline": "git_oid *out, git_repository *repo, const char *path, git_object_t type, const char *as_path", - "sig": "git_oid *::git_repository *::const char *::git_object_t::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Calculate hash of file using repository filtering rules.

\n", - "comments": "

If you simply want to calculate the hash of a file on disk with no filters, you can just use the git_odb_hashfile() API. However, if you want to hash a file in the repository and you want to apply filtering rules (e.g. crlf filters) before generating the SHA, then use this function.

\n\n

Note: if the repository has core.safecrlf set to fail and the filtering triggers that failure, then this function will return an error and not calculate the hash of the file.

\n", - "group": "repository" - }, - "git_repository_set_head": { - "type": "function", - "file": "git2/repository.h", - "line": 801, - "lineto": 803, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - }, - { - "name": "refname", - "type": "const char *", - "comment": "Canonical name of the reference the HEAD should point at" - } - ], - "argline": "git_repository *repo, const char *refname", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Make the repository HEAD point to the specified reference.

\n", - "comments": "

If the provided reference points to a Tree or a Blob, the HEAD is unaltered and -1 is returned.

\n\n

If the provided reference points to a branch, the HEAD will point to that branch, staying attached, or become attached if it isn't yet. If the branch doesn't exist yet, no error will be return. The HEAD will then be attached to an unborn branch.

\n\n

Otherwise, the HEAD will be detached and will directly point to the Commit.

\n", - "group": "repository", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_repository_set_head-23" - ] - } - }, - "git_repository_set_head_detached": { - "type": "function", - "file": "git2/repository.h", - "line": 821, - "lineto": 823, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - }, - { - "name": "commitish", - "type": "const git_oid *", - "comment": "Object id of the Commit the HEAD should point to" - } - ], - "argline": "git_repository *repo, const git_oid *commitish", - "sig": "git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Make the repository HEAD directly point to the Commit.

\n", - "comments": "

If the provided committish cannot be found in the repository, the HEAD is unaltered and GIT_ENOTFOUND is returned.

\n\n

If the provided commitish cannot be peeled into a commit, the HEAD is unaltered and -1 is returned.

\n\n

Otherwise, the HEAD will eventually be detached and will directly point to the peeled Commit.

\n", - "group": "repository" - }, - "git_repository_set_head_detached_from_annotated": { - "type": "function", - "file": "git2/repository.h", - "line": 837, - "lineto": 839, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "commitish", - "type": "const git_annotated_commit *", - "comment": null - } - ], - "argline": "git_repository *repo, const git_annotated_commit *commitish", - "sig": "git_repository *::const git_annotated_commit *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Make the repository HEAD directly point to the Commit.

\n", - "comments": "

This behaves like git_repository_set_head_detached() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_repository_set_head_detached().

\n", - "group": "repository", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_repository_set_head_detached_from_annotated-24" - ] - } - }, - "git_repository_detach_head": { - "type": "function", - "file": "git2/repository.h", - "line": 858, - "lineto": 859, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing\n branch or an error code" - }, - "description": "

Detach the HEAD.

\n", - "comments": "

If the HEAD is already detached and points to a Commit, 0 is returned.

\n\n

If the HEAD is already detached and points to a Tag, the HEAD is updated into making it point to the peeled Commit, and 0 is returned.

\n\n

If the HEAD is already detached and points to a non commitish, the HEAD is unaltered, and -1 is returned.

\n\n

Otherwise, the HEAD will be detached and point to the peeled Commit.

\n", - "group": "repository" - }, - "git_repository_state": { - "type": "function", - "file": "git2/repository.h", - "line": 889, - "lineto": 889, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " The state of the repository" - }, - "description": "

Determines the status of a git repository - ie, whether an operation\n (merge, cherry-pick, etc) is in progress.

\n", - "comments": "", - "group": "repository", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_repository_state-25" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_repository_state-35" - ] - } - }, - "git_repository_set_namespace": { - "type": "function", - "file": "git2/repository.h", - "line": 903, - "lineto": 903, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repo" - }, - { - "name": "nmspace", - "type": "const char *", - "comment": "The namespace. This should not include the refs\n\tfolder, e.g. to namespace all references under `refs/namespaces/foo/`,\n\tuse `foo` as the namespace." - } - ], - "argline": "git_repository *repo, const char *nmspace", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error" - }, - "description": "

Sets the active namespace for this Git Repository

\n", - "comments": "

This namespace affects all reference operations for the repo. See man gitnamespaces

\n", - "group": "repository" - }, - "git_repository_get_namespace": { - "type": "function", - "file": "git2/repository.h", - "line": 911, - "lineto": 911, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repo" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "const char *", - "comment": " the active namespace, or NULL if there isn't one" - }, - "description": "

Get the currently active namespace for this repository

\n", - "comments": "", - "group": "repository" - }, - "git_repository_is_shallow": { - "type": "function", - "file": "git2/repository.h", - "line": 920, - "lineto": 920, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 1 if shallow, zero if not" - }, - "description": "

Determine if the repository was a shallow clone

\n", - "comments": "", - "group": "repository" - }, - "git_repository_ident": { - "type": "function", - "file": "git2/repository.h", - "line": 932, - "lineto": 932, - "args": [ - { - "name": "name", - "type": "const char **", - "comment": "where to store the pointer to the name" - }, - { - "name": "email", - "type": "const char **", - "comment": "where to store the pointer to the email" - }, - { - "name": "repo", - "type": "const git_repository *", - "comment": "the repository" - } - ], - "argline": "const char **name, const char **email, const git_repository *repo", - "sig": "const char **::const char **::const git_repository *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Retrieve the configured identity to use for reflogs

\n", - "comments": "

The memory is owned by the repository and must not be freed by the user.

\n", - "group": "repository" - }, - "git_repository_set_ident": { - "type": "function", - "file": "git2/repository.h", - "line": 945, - "lineto": 945, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to configure" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name to use for the reflog entries" - }, - { - "name": "email", - "type": "const char *", - "comment": "the email to use for the reflog entries" - } - ], - "argline": "git_repository *repo, const char *name, const char *email", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Set the identity to be used for writing reflogs

\n", - "comments": "

If both are set, this name and email will be used to write to the reflog. Pass NULL to unset. When unset, the identity will be taken from the repository's configuration.

\n", - "group": "repository" - }, - "git_reset": { - "type": "function", - "file": "git2/reset.h", - "line": 62, - "lineto": 66, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to perform the reset operation." - }, - { - "name": "target", - "type": "const git_object *", - "comment": "Committish to which the Head should be moved to. This object\n must belong to the given `repo` and can either be a git_commit or a\n git_tag. When a git_tag is being passed, it should be dereferencable\n to a git_commit which oid will be used as the target of the branch." - }, - { - "name": "reset_type", - "type": "git_reset_t", - "comment": "Kind of reset operation to perform." - }, - { - "name": "checkout_opts", - "type": "const git_checkout_options *", - "comment": "Optional checkout options to be used for a HARD reset.\n The checkout_strategy field will be overridden (based on reset_type).\n This parameter can be used to propagate notify and progress callbacks." - } - ], - "argline": "git_repository *repo, const git_object *target, git_reset_t reset_type, const git_checkout_options *checkout_opts", - "sig": "git_repository *::const git_object *::git_reset_t::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", - "comments": "

SOFT reset means the Head will be moved to the commit.

\n\n

MIXED reset will trigger a SOFT reset, plus the index will be replaced with the content of the commit tree.

\n\n

HARD reset will trigger a MIXED reset and the working directory will be replaced with the content of the index. (Untracked and ignored files will be left alone, however.)

\n\n

TODO: Implement remaining kinds of resets.

\n", - "group": "reset" - }, - "git_reset_from_annotated": { - "type": "function", - "file": "git2/reset.h", - "line": 80, - "lineto": 84, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "commit", - "type": "const git_annotated_commit *", - "comment": null - }, - { - "name": "reset_type", - "type": "git_reset_t", - "comment": null - }, - { - "name": "checkout_opts", - "type": "const git_checkout_options *", - "comment": null - } - ], - "argline": "git_repository *repo, const git_annotated_commit *commit, git_reset_t reset_type, const git_checkout_options *checkout_opts", - "sig": "git_repository *::const git_annotated_commit *::git_reset_t::const git_checkout_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", - "comments": "

This behaves like git_reset() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_reset().

\n", - "group": "reset" - }, - "git_reset_default": { - "type": "function", - "file": "git2/reset.h", - "line": 104, - "lineto": 107, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to perform the reset operation." - }, - { - "name": "target", - "type": "const git_object *", - "comment": "The committish which content will be used to reset the content\n of the index." - }, - { - "name": "pathspecs", - "type": "const git_strarray *", - "comment": "List of pathspecs to operate on." - } - ], - "argline": "git_repository *repo, const git_object *target, const git_strarray *pathspecs", - "sig": "git_repository *::const git_object *::const git_strarray *", - "return": { - "type": "int", - "comment": " 0 on success or an error code \n<\n 0" - }, - "description": "

Updates some entries in the index from the target commit tree.

\n", - "comments": "

The scope of the updated entries is determined by the paths being passed in the pathspec parameters.

\n\n

Passing a NULL target will result in removing entries in the index matching the provided pathspecs.

\n", - "group": "reset" - }, - "git_revert_options_init": { - "type": "function", - "file": "git2/revert.h", - "line": 49, - "lineto": 51, - "args": [ - { - "name": "opts", - "type": "git_revert_options *", - "comment": "The `git_revert_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REVERT_OPTIONS_VERSION`." - } - ], - "argline": "git_revert_options *opts, unsigned int version", - "sig": "git_revert_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_revert_options structure

\n", - "comments": "

Initializes a git_revert_options with default values. Equivalent to creating an instance with GIT_REVERT_OPTIONS_INIT.

\n", - "group": "revert" - }, - "git_revert_commit": { - "type": "function", - "file": "git2/revert.h", - "line": 67, - "lineto": 73, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "pointer to store the index result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository that contains the given commits" - }, - { - "name": "revert_commit", - "type": "git_commit *", - "comment": "the commit to revert" - }, - { - "name": "our_commit", - "type": "git_commit *", - "comment": "the commit to revert against (eg, HEAD)" - }, - { - "name": "mainline", - "type": "unsigned int", - "comment": "the parent of the revert commit, if it is a merge" - }, - { - "name": "merge_options", - "type": "const git_merge_options *", - "comment": "the merge options (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, git_commit *revert_commit, git_commit *our_commit, unsigned int mainline, const git_merge_options *merge_options", - "sig": "git_index **::git_repository *::git_commit *::git_commit *::unsigned int::const git_merge_options *", - "return": { - "type": "int", - "comment": " zero on success, -1 on failure." - }, - "description": "

Reverts the given commit against the given "our" commit, producing an\n index that reflects the result of the revert.

\n", - "comments": "

The returned index must be freed explicitly with git_index_free.

\n", - "group": "revert" - }, - "git_revert": { - "type": "function", - "file": "git2/revert.h", - "line": 83, - "lineto": 86, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to revert" - }, - { - "name": "commit", - "type": "git_commit *", - "comment": "the commit to revert" - }, - { - "name": "given_opts", - "type": "const git_revert_options *", - "comment": "the revert options (or null for defaults)" - } - ], - "argline": "git_repository *repo, git_commit *commit, const git_revert_options *given_opts", - "sig": "git_repository *::git_commit *::const git_revert_options *", - "return": { - "type": "int", - "comment": " zero on success, -1 on failure." - }, - "description": "

Reverts the given commit, producing changes in the index and working directory.

\n", - "comments": "", - "group": "revert" - }, - "git_revparse_single": { - "type": "function", - "file": "git2/revparse.h", - "line": 37, - "lineto": 38, - "args": [ - { - "name": "out", - "type": "git_object **", - "comment": "pointer to output object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to search in" - }, - { - "name": "spec", - "type": "const char *", - "comment": "the textual specification for an object" - } - ], - "argline": "git_object **out, git_repository *repo, const char *spec", - "sig": "git_object **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Find a single object, as specified by a revision string.

\n", - "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

The returned object should be released with git_object_free when no longer needed.

\n", - "group": "revparse", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_revparse_single-22" - ], - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_revparse_single-30" - ], - "describe.c": [ - "ex/v1.3.1/describe.html#git_revparse_single-6" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_revparse_single-44" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_revparse_single-9", - "ex/v1.3.1/tag.html#git_revparse_single-10", - "ex/v1.3.1/tag.html#git_revparse_single-11", - "ex/v1.3.1/tag.html#git_revparse_single-12" - ] - } - }, - "git_revparse_ext": { - "type": "function", - "file": "git2/revparse.h", - "line": 61, - "lineto": 65, - "args": [ - { - "name": "object_out", - "type": "git_object **", - "comment": "pointer to output object" - }, - { - "name": "reference_out", - "type": "git_reference **", - "comment": "pointer to output reference or NULL" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to search in" - }, - { - "name": "spec", - "type": "const char *", - "comment": "the textual specification for an object" - } - ], - "argline": "git_object **object_out, git_reference **reference_out, git_repository *repo, const char *spec", - "sig": "git_object **::git_reference **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC\n or an error code" - }, - "description": "

Find a single object and intermediate reference by a revision string.

\n", - "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

In some cases (@{<-n>} or <branchname>@{upstream}), the expression may point to an intermediate reference. When such expressions are being passed in, reference_out will be valued as well.

\n\n

The returned object should be released with git_object_free and the returned reference with git_reference_free when no longer needed.

\n", - "group": "revparse", - "examples": { - "commit.c": [ - "ex/v1.3.1/commit.html#git_revparse_ext-7" - ] - } - }, - "git_revparse": { - "type": "function", - "file": "git2/revparse.h", - "line": 105, - "lineto": 108, - "args": [ - { - "name": "revspec", - "type": "git_revspec *", - "comment": "Pointer to an user-allocated git_revspec struct where\n\t the result of the rev-parse will be stored" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to search in" - }, - { - "name": "spec", - "type": "const char *", - "comment": "the rev-parse spec to parse" - } - ], - "argline": "git_revspec *revspec, git_repository *repo, const char *spec", - "sig": "git_revspec *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_INVALIDSPEC, GIT_ENOTFOUND, GIT_EAMBIGUOUS or an error code" - }, - "description": "

Parse a revision string for from, to, and intent.

\n", - "comments": "

See man gitrevisions or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", - "group": "revparse", - "examples": { - "blame.c": [ - "ex/v1.3.1/blame.html#git_revparse-23" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_revparse-45" - ], - "rev-parse.c": [ - "ex/v1.3.1/rev-parse.html#git_revparse-14", - "ex/v1.3.1/rev-parse.html#git_revparse-15" - ] - } - }, - "git_revwalk_new": { - "type": "function", - "file": "git2/revwalk.h", - "line": 73, - "lineto": 73, - "args": [ - { - "name": "out", - "type": "git_revwalk **", - "comment": "pointer to the new revision walker" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to walk through" - } - ], - "argline": "git_revwalk **out, git_repository *repo", - "sig": "git_revwalk **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Allocate a new revision walker to iterate through a repo.

\n", - "comments": "

This revision walker uses a custom memory pool and an internal commit cache, so it is relatively expensive to allocate.

\n\n

For maximum performance, this revision walker should be reused for different walks.

\n\n

This revision walker is not thread safe: it may only be used to walk a repository on a single thread; however, it is possible to have several revision walkers in several different threads walking the same repository.

\n", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_revwalk_new-73" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_revwalk_new-46", - "ex/v1.3.1/log.html#git_revwalk_new-47" - ] - } - }, - "git_revwalk_reset": { - "type": "function", - "file": "git2/revwalk.h", - "line": 89, - "lineto": 89, - "args": [ - { - "name": "walker", - "type": "git_revwalk *", - "comment": "handle to reset." - } - ], - "argline": "git_revwalk *walker", - "sig": "git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Reset the revision walker for reuse.

\n", - "comments": "

This will clear all the pushed and hidden commits, and leave the walker in a blank state (just like at creation) ready to receive new commit pushes and start a new walk.

\n\n

The revision walk is automatically reset when a walk is over.

\n", - "group": "revwalk" - }, - "git_revwalk_push": { - "type": "function", - "file": "git2/revwalk.h", - "line": 108, - "lineto": 108, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the oid of the commit to start from." - } - ], - "argline": "git_revwalk *walk, const git_oid *id", - "sig": "git_revwalk *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a new root for the traversal

\n", - "comments": "

The pushed commit will be marked as one of the roots from which to start the walk. This commit may not be walked if it or a child is hidden.

\n\n

At least one commit must be pushed onto the walker before a walk can be started.

\n\n

The given id must belong to a committish on the walked repository.

\n", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_revwalk_push-74" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_revwalk_push-48" - ] - } - }, - "git_revwalk_push_glob": { - "type": "function", - "file": "git2/revwalk.h", - "line": 126, - "lineto": 126, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "glob", - "type": "const char *", - "comment": "the glob pattern references should match" - } - ], - "argline": "git_revwalk *walk, const char *glob", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Push matching references

\n", - "comments": "

The OIDs pointed to by the references that match the given glob pattern will be pushed to the revision walker.

\n\n

A leading 'refs/' is implied if not present as well as a trailing '/*' if the glob lacks '?', '*' or '['.

\n\n

Any references matching this glob which do not point to a committish will be ignored.

\n", - "group": "revwalk" - }, - "git_revwalk_push_head": { - "type": "function", - "file": "git2/revwalk.h", - "line": 134, - "lineto": 134, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Push the repository's HEAD

\n", - "comments": "", - "group": "revwalk", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_revwalk_push_head-49" - ] - } - }, - "git_revwalk_hide": { - "type": "function", - "file": "git2/revwalk.h", - "line": 149, - "lineto": 149, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal." - }, - { - "name": "commit_id", - "type": "const git_oid *", - "comment": "the oid of commit that will be ignored during the traversal" - } - ], - "argline": "git_revwalk *walk, const git_oid *commit_id", - "sig": "git_revwalk *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Mark a commit (and its ancestors) uninteresting for the output.

\n", - "comments": "

The given id must belong to a committish on the walked repository.

\n\n

The resolved commit and all its parents will be hidden from the output on the revision walk.

\n", - "group": "revwalk", - "examples": { - "log.c": [ - "ex/v1.3.1/log.html#git_revwalk_hide-50" - ] - } - }, - "git_revwalk_hide_glob": { - "type": "function", - "file": "git2/revwalk.h", - "line": 168, - "lineto": 168, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "glob", - "type": "const char *", - "comment": "the glob pattern references should match" - } - ], - "argline": "git_revwalk *walk, const char *glob", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Hide matching references.

\n", - "comments": "

The OIDs pointed to by the references that match the given glob pattern and their ancestors will be hidden from the output on the revision walk.

\n\n

A leading 'refs/' is implied if not present as well as a trailing '/*' if the glob lacks '?', '*' or '['.

\n\n

Any references matching this glob which do not point to a committish will be ignored.

\n", - "group": "revwalk" - }, - "git_revwalk_hide_head": { - "type": "function", - "file": "git2/revwalk.h", - "line": 176, - "lineto": 176, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Hide the repository's HEAD

\n", - "comments": "", - "group": "revwalk" - }, - "git_revwalk_push_ref": { - "type": "function", - "file": "git2/revwalk.h", - "line": 187, - "lineto": 187, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference to push" - } - ], - "argline": "git_revwalk *walk, const char *refname", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Push the OID pointed to by a reference

\n", - "comments": "

The reference must point to a committish.

\n", - "group": "revwalk" - }, - "git_revwalk_hide_ref": { - "type": "function", - "file": "git2/revwalk.h", - "line": 198, - "lineto": 198, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference to hide" - } - ], - "argline": "git_revwalk *walk, const char *refname", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Hide the OID pointed to by a reference

\n", - "comments": "

The reference must point to a committish.

\n", - "group": "revwalk" - }, - "git_revwalk_next": { - "type": "function", - "file": "git2/revwalk.h", - "line": 218, - "lineto": 218, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer where to store the oid of the next commit" - }, - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker to pop the commit from." - } - ], - "argline": "git_oid *out, git_revwalk *walk", - "sig": "git_oid *::git_revwalk *", - "return": { - "type": "int", - "comment": " 0 if the next commit was found;\n\tGIT_ITEROVER if there are no commits left to iterate" - }, - "description": "

Get the next commit from the revision walk.

\n", - "comments": "

The initial call to this method is not blocking when iterating through a repo with a time-sorting mode.

\n\n

Iterating with Topological or inverted modes makes the initial call blocking to preprocess the commit list, but this block should be mostly unnoticeable on most repositories (topological preprocessing times at 0.3s on the git.git repo).

\n\n

The revision walker is reset when the walk is over.

\n", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_revwalk_next-75" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_revwalk_next-51" - ] - } - }, - "git_revwalk_sorting": { - "type": "function", - "file": "git2/revwalk.h", - "line": 230, - "lineto": 230, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal." - }, - { - "name": "sort_mode", - "type": "unsigned int", - "comment": "combination of GIT_SORT_XXX flags" - } - ], - "argline": "git_revwalk *walk, unsigned int sort_mode", - "sig": "git_revwalk *::unsigned int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Change the sorting mode when iterating through the\n repository's contents.

\n", - "comments": "

Changing the sorting mode resets the walker.

\n", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_revwalk_sorting-76" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_revwalk_sorting-52", - "ex/v1.3.1/log.html#git_revwalk_sorting-53" - ] - } - }, - "git_revwalk_push_range": { - "type": "function", - "file": "git2/revwalk.h", - "line": 245, - "lineto": 245, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "range", - "type": "const char *", - "comment": "the range" - } - ], - "argline": "git_revwalk *walk, const char *range", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Push and hide the respective endpoints of the given range.

\n", - "comments": "

The range should be of the form .. where each is in the form accepted by 'git_revparse_single'. The left-hand commit will be hidden and the right-hand commit pushed.

\n", - "group": "revwalk" - }, - "git_revwalk_simplify_first_parent": { - "type": "function", - "file": "git2/revwalk.h", - "line": 254, - "lineto": 254, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": null - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Simplify the history by first-parent

\n", - "comments": "

No parents other than the first for each commit will be enqueued.

\n", - "group": "revwalk" - }, - "git_revwalk_free": { - "type": "function", - "file": "git2/revwalk.h", - "line": 262, - "lineto": 262, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "traversal handle to close. If NULL nothing occurs." - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a revision walker previously allocated.

\n", - "comments": "", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_revwalk_free-77" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_revwalk_free-54" - ] - } - }, - "git_revwalk_repository": { - "type": "function", - "file": "git2/revwalk.h", - "line": 271, - "lineto": 271, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the revision walker" - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "git_repository *", - "comment": " the repository being walked" - }, - "description": "

Return the repository on which this walker\n is operating.

\n", - "comments": "", - "group": "revwalk" - }, - "git_revwalk_add_hide_cb": { - "type": "function", - "file": "git2/revwalk.h", - "line": 292, - "lineto": 295, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the revision walker" - }, - { - "name": "hide_cb", - "type": "git_revwalk_hide_cb", - "comment": "callback function to hide a commit and its parents" - }, - { - "name": "payload", - "type": "void *", - "comment": "data payload to be passed to callback function" - } - ], - "argline": "git_revwalk *walk, git_revwalk_hide_cb hide_cb, void *payload", - "sig": "git_revwalk *::git_revwalk_hide_cb::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Adds, changes or removes a callback function to hide a commit and its parents

\n", - "comments": "", - "group": "revwalk" - }, - "git_signature_new": { - "type": "function", - "file": "git2/signature.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature, in case of error NULL" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the person" - }, - { - "name": "email", - "type": "const char *", - "comment": "email of the person" - }, - { - "name": "time", - "type": "git_time_t", - "comment": "time (in seconds from epoch) when the action happened" - }, - { - "name": "offset", - "type": "int", - "comment": "timezone offset (in minutes) for the time" - } - ], - "argline": "git_signature **out, const char *name, const char *email, git_time_t time, int offset", - "sig": "git_signature **::const char *::const char *::git_time_t::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new action signature.

\n", - "comments": "

Call git_signature_free() to free the data.

\n\n

Note: angle brackets ('<' and '>') characters are not allowed to be used in either the name or the email parameter.

\n", - "group": "signature", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_signature_new-78", - "ex/v1.3.1/general.html#git_signature_new-79" - ] - } - }, - "git_signature_now": { - "type": "function", - "file": "git2/signature.h", - "line": 49, - "lineto": 49, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature, in case of error NULL" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the person" - }, - { - "name": "email", - "type": "const char *", - "comment": "email of the person" - } - ], - "argline": "git_signature **out, const char *name, const char *email", - "sig": "git_signature **::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new action signature with a timestamp of 'now'.

\n", - "comments": "

Call git_signature_free() to free the data.

\n", - "group": "signature", - "examples": { - "merge.c": [ - "ex/v1.3.1/merge.html#git_signature_now-36" - ] - } - }, - "git_signature_default": { - "type": "function", - "file": "git2/signature.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository pointer" - } - ], - "argline": "git_signature **out, git_repository *repo", - "sig": "git_signature **::git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if config is missing, or error code" - }, - "description": "

Create a new action signature with default user and now timestamp.

\n", - "comments": "

This looks up the user.name and user.email from the configuration and uses the current time as the timestamp, and creates a new signature based on that information. It will return GIT_ENOTFOUND if either the user.name or user.email are not set.

\n", - "group": "signature", - "examples": { - "commit.c": [ - "ex/v1.3.1/commit.html#git_signature_default-8" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_signature_default-10" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_signature_default-13" - ] - } - }, - "git_signature_from_buffer": { - "type": "function", - "file": "git2/signature.h", - "line": 76, - "lineto": 76, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature" - }, - { - "name": "buf", - "type": "const char *", - "comment": "signature string" - } - ], - "argline": "git_signature **out, const char *buf", - "sig": "git_signature **::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Create a new signature by parsing the given buffer, which is\n expected to be in the format "Real Name \n<email

\n\n
\n

timestamp tzoffset",\n where timestamp is the number of seconds since the Unix epoch and\n tzoffset is the timezone offset in hhmm format (note the lack\n of a colon separator).

\n
\n", - "comments": "", - "group": "signature" - }, - "git_signature_dup": { - "type": "function", - "file": "git2/signature.h", - "line": 88, - "lineto": 88, - "args": [ - { - "name": "dest", - "type": "git_signature **", - "comment": "pointer where to store the copy" - }, - { - "name": "sig", - "type": "const git_signature *", - "comment": "signature to duplicate" - } - ], - "argline": "git_signature **dest, const git_signature *sig", - "sig": "git_signature **::const git_signature *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a copy of an existing signature. All internal strings are also\n duplicated.

\n", - "comments": "

Call git_signature_free() to free the data.

\n", - "group": "signature" - }, - "git_signature_free": { - "type": "function", - "file": "git2/signature.h", - "line": 99, - "lineto": 99, - "args": [ - { - "name": "sig", - "type": "git_signature *", - "comment": "signature to free" - } - ], - "argline": "git_signature *sig", - "sig": "git_signature *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an existing signature.

\n", - "comments": "

Because the signature is not an opaque structure, it is legal to free it manually, but be sure to free the "name" and "email" strings in addition to the structure itself.

\n", - "group": "signature", - "examples": { - "commit.c": [ - "ex/v1.3.1/commit.html#git_signature_free-9" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_signature_free-80", - "ex/v1.3.1/general.html#git_signature_free-81" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_signature_free-11" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_signature_free-14" - ] - } - }, - "git_stash_save": { - "type": "function", - "file": "git2/stash.h", - "line": 67, - "lineto": 72, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Object id of the commit containing the stashed state.\n This commit is also the target of the direct reference refs/stash." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "stasher", - "type": "const git_signature *", - "comment": "The identity of the person performing the stashing." - }, - { - "name": "message", - "type": "const char *", - "comment": "Optional description along with the stashed state." - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Flags to control the stashing process. (see GIT_STASH_* above)" - } - ], - "argline": "git_oid *out, git_repository *repo, const git_signature *stasher, const char *message, uint32_t flags", - "sig": "git_oid *::git_repository *::const git_signature *::const char *::uint32_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND where there's nothing to stash,\n or error code." - }, - "description": "

Save the local modifications to a new stash.

\n", - "comments": "", - "group": "stash" - }, - "git_stash_apply_options_init": { - "type": "function", - "file": "git2/stash.h", - "line": 156, - "lineto": 157, - "args": [ - { - "name": "opts", - "type": "git_stash_apply_options *", - "comment": "The `git_stash_apply_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_STASH_APPLY_OPTIONS_VERSION`." - } - ], - "argline": "git_stash_apply_options *opts, unsigned int version", - "sig": "git_stash_apply_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_stash_apply_options structure

\n", - "comments": "

Initializes a git_stash_apply_options with default values. Equivalent to creating an instance with GIT_STASH_APPLY_OPTIONS_INIT.

\n", - "group": "stash" - }, - "git_stash_apply": { - "type": "function", - "file": "git2/stash.h", - "line": 185, - "lineto": 188, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "index", - "type": "size_t", - "comment": "The position within the stash list. 0 points to the\n most recent stashed state." - }, - { - "name": "options", - "type": "const git_stash_apply_options *", - "comment": "Optional options to control how stashes are applied." - } - ], - "argline": "git_repository *repo, size_t index, const git_stash_apply_options *options", - "sig": "git_repository *::size_t::const git_stash_apply_options *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the\n given index, GIT_EMERGECONFLICT if changes exist in the working\n directory, or an error code" - }, - "description": "

Apply a single stashed state from the stash list.

\n", - "comments": "

If local changes in the working directory conflict with changes in the stash then GIT_EMERGECONFLICT will be returned. In this case, the index will always remain unmodified and all files in the working directory will remain unmodified. However, if you are restoring untracked files or ignored files and there is a conflict when applying the modified files, then those files will remain in the working directory.

\n\n

If passing the GIT_STASH_APPLY_REINSTATE_INDEX flag and there would be conflicts when reinstating the index, the function will return GIT_EMERGECONFLICT and both the working directory and index will be left unmodified.

\n\n

Note that a minimum checkout strategy of GIT_CHECKOUT_SAFE is implied.

\n", - "group": "stash" - }, - "git_stash_foreach": { - "type": "function", - "file": "git2/stash.h", - "line": 221, - "lineto": 224, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the stash." - }, - { - "name": "callback", - "type": "git_stash_cb", - "comment": "Callback to invoke per found stashed state. The most\n recent stash state will be enumerated first." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra parameter to callback function." - } - ], - "argline": "git_repository *repo, git_stash_cb callback, void *payload", - "sig": "git_repository *::git_stash_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code." - }, - "description": "

Loop over all the stashed states and issue a callback for each one.

\n", - "comments": "

If the callback returns a non-zero value, this will stop looping.

\n", - "group": "stash" - }, - "git_stash_drop": { - "type": "function", - "file": "git2/stash.h", - "line": 237, - "lineto": 239, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "index", - "type": "size_t", - "comment": "The position within the stash list. 0 points to the\n most recent stashed state." - } - ], - "argline": "git_repository *repo, size_t index", - "sig": "git_repository *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the given\n index, or error code." - }, - "description": "

Remove a single stashed state from the stash list.

\n", - "comments": "", - "group": "stash" - }, - "git_stash_pop": { - "type": "function", - "file": "git2/stash.h", - "line": 253, - "lineto": 256, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "index", - "type": "size_t", - "comment": "The position within the stash list. 0 points to the\n most recent stashed state." - }, - { - "name": "options", - "type": "const git_stash_apply_options *", - "comment": "Optional options to control how stashes are applied." - } - ], - "argline": "git_repository *repo, size_t index, const git_stash_apply_options *options", - "sig": "git_repository *::size_t::const git_stash_apply_options *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the given\n index, or error code. (see git_stash_apply() above for details)" - }, - "description": "

Apply a single stashed state from the stash list and remove it from the list\n if successful.

\n", - "comments": "", - "group": "stash" - }, - "git_status_options_init": { - "type": "function", - "file": "git2/status.h", - "line": 268, - "lineto": 270, - "args": [ - { - "name": "opts", - "type": "git_status_options *", - "comment": "The `git_status_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_STATUS_OPTIONS_VERSION`." - } - ], - "argline": "git_status_options *opts, unsigned int version", - "sig": "git_status_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_status_options structure

\n", - "comments": "

Initializes a git_status_options with default values. Equivalent to creating an instance with GIT_STATUS_OPTIONS_INIT.

\n", - "group": "status" - }, - "git_status_foreach": { - "type": "function", - "file": "git2/status.h", - "line": 308, - "lineto": 311, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "callback", - "type": "git_status_cb", - "comment": "The function to call on each file" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to pass through to callback function" - } - ], - "argline": "git_repository *repo, git_status_cb callback, void *payload", - "sig": "git_repository *::git_status_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Gather file statuses and run a callback for each one.

\n", - "comments": "

The callback is passed the path of the file, the status (a combination of the git_status_t values above) and the payload data pointer passed into this function.

\n\n

If the callback returns a non-zero value, this function will stop looping and return that value to caller.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_status_foreach-6" - ] - } - }, - "git_status_foreach_ext": { - "type": "function", - "file": "git2/status.h", - "line": 332, - "lineto": 336, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository object" - }, - { - "name": "opts", - "type": "const git_status_options *", - "comment": "Status options structure" - }, - { - "name": "callback", - "type": "git_status_cb", - "comment": "The function to call on each file" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to pass through to callback function" - } - ], - "argline": "git_repository *repo, const git_status_options *opts, git_status_cb callback, void *payload", - "sig": "git_repository *::const git_status_options *::git_status_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Gather file status information and run callbacks as requested.

\n", - "comments": "

This is an extended version of the git_status_foreach() API that allows for more granular control over which paths will be processed and in what order. See the git_status_options structure for details about the additional controls that this makes available.

\n\n

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_status_foreach_ext-7" - ] - } - }, - "git_status_file": { - "type": "function", - "file": "git2/status.h", - "line": 364, - "lineto": 367, - "args": [ - { - "name": "status_flags", - "type": "unsigned int *", - "comment": "Output combination of git_status_t values for file" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "path", - "type": "const char *", - "comment": "The exact path to retrieve status for relative to the\n repository working directory" - } - ], - "argline": "unsigned int *status_flags, git_repository *repo, const char *path", - "sig": "unsigned int *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if the file is not found in the HEAD,\n index, and work tree, GIT_EAMBIGUOUS if `path` matches multiple files\n or if it refers to a folder, and -1 on other errors." - }, - "description": "

Get file status for a single file.

\n", - "comments": "

This tries to get status for the filename that you give. If no files match that name (in either the HEAD, index, or working directory), this returns GIT_ENOTFOUND.

\n\n

If the name matches multiple files (for example, if the path names a directory or if running on a case- insensitive filesystem and yet the HEAD has two entries that both match the path), then this returns GIT_EAMBIGUOUS because it cannot give correct results.

\n\n

This does not do any sort of rename detection. Renames require a set of targets and because of the path filtering, there is not enough information to check renames correctly. To check file status with rename detection, there is no choice but to do a full git_status_list_new and scan through looking for the path that you are interested in.

\n", - "group": "status", - "examples": { - "add.c": [ - "ex/v1.3.1/add.html#git_status_file-6" - ] - } - }, - "git_status_list_new": { - "type": "function", - "file": "git2/status.h", - "line": 382, - "lineto": 385, - "args": [ - { - "name": "out", - "type": "git_status_list **", - "comment": "Pointer to store the status results in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository object" - }, - { - "name": "opts", - "type": "const git_status_options *", - "comment": "Status options structure" - } - ], - "argline": "git_status_list **out, git_repository *repo, const git_status_options *opts", - "sig": "git_status_list **::git_repository *::const git_status_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Gather file status information and populate the git_status_list.

\n", - "comments": "

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_status_list_new-8", - "ex/v1.3.1/status.html#git_status_list_new-9" - ] - } - }, - "git_status_list_entrycount": { - "type": "function", - "file": "git2/status.h", - "line": 396, - "lineto": 397, - "args": [ - { - "name": "statuslist", - "type": "git_status_list *", - "comment": "Existing status list object" - } - ], - "argline": "git_status_list *statuslist", - "sig": "git_status_list *", - "return": { - "type": "size_t", - "comment": " the number of status entries" - }, - "description": "

Gets the count of status entries in this list.

\n", - "comments": "

If there are no changes in status (at least according the options given when the status list was created), this can return 0.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_status_list_entrycount-10", - "ex/v1.3.1/status.html#git_status_list_entrycount-11" - ] - } - }, - "git_status_byindex": { - "type": "function", - "file": "git2/status.h", - "line": 408, - "lineto": 410, - "args": [ - { - "name": "statuslist", - "type": "git_status_list *", - "comment": "Existing status list object" - }, - { - "name": "idx", - "type": "size_t", - "comment": "Position of the entry" - } - ], - "argline": "git_status_list *statuslist, size_t idx", - "sig": "git_status_list *::size_t", - "return": { - "type": "const git_status_entry *", - "comment": " Pointer to the entry; NULL if out of bounds" - }, - "description": "

Get a pointer to one of the entries in the status list.

\n", - "comments": "

The entry is not modifiable and should not be freed.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_status_byindex-12", - "ex/v1.3.1/status.html#git_status_byindex-13", - "ex/v1.3.1/status.html#git_status_byindex-14", - "ex/v1.3.1/status.html#git_status_byindex-15", - "ex/v1.3.1/status.html#git_status_byindex-16", - "ex/v1.3.1/status.html#git_status_byindex-17" - ] - } - }, - "git_status_list_free": { - "type": "function", - "file": "git2/status.h", - "line": 417, - "lineto": 418, - "args": [ - { - "name": "statuslist", - "type": "git_status_list *", - "comment": "Existing status list object" - } - ], - "argline": "git_status_list *statuslist", - "sig": "git_status_list *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an existing status list

\n", - "comments": "", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_status_list_free-18" - ] - } - }, - "git_status_should_ignore": { - "type": "function", - "file": "git2/status.h", - "line": 436, - "lineto": 439, - "args": [ - { - "name": "ignored", - "type": "int *", - "comment": "Boolean returning 0 if the file is not ignored, 1 if it is" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "path", - "type": "const char *", - "comment": "The file to check ignores for, rooted at the repo's workdir." - } - ], - "argline": "int *ignored, git_repository *repo, const char *path", - "sig": "int *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 if ignore rules could be processed for the file (regardless\n of whether it exists or not), or an error \n<\n 0 if they could not." - }, - "description": "

Test if the ignore rules apply to a given file.

\n", - "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git add ." on the directory containing the file, would it be added or not?

\n", - "group": "status" - }, - "git_strarray_dispose": { - "type": "function", - "file": "git2/strarray.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": "The git_strarray that contains strings to free" - } - ], - "argline": "git_strarray *array", - "sig": "git_strarray *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the strings contained in a string array. This method should\n be called on git_strarray objects that were provided by the\n library. Not doing so, will result in a memory leak.

\n", - "comments": "

This does not free the git_strarray itself, since the library will never allocate that object directly itself.

\n", - "group": "strarray", - "examples": { - "checkout.c": [ - "ex/v1.3.1/checkout.html#git_strarray_dispose-26" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_strarray_dispose-82" - ], - "remote.c": [ - "ex/v1.3.1/remote.html#git_strarray_dispose-11", - "ex/v1.3.1/remote.html#git_strarray_dispose-12" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_strarray_dispose-15" - ] - } - }, - "git_submodule_update_options_init": { - "type": "function", - "file": "git2/submodule.h", - "line": 171, - "lineto": 172, - "args": [ - { - "name": "opts", - "type": "git_submodule_update_options *", - "comment": "The `git_submodule_update_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_SUBMODULE_UPDATE_OPTIONS_VERSION`." - } - ], - "argline": "git_submodule_update_options *opts, unsigned int version", - "sig": "git_submodule_update_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_submodule_update_options structure

\n", - "comments": "

Initializes a git_submodule_update_options with default values. Equivalent to creating an instance with GIT_SUBMODULE_UPDATE_OPTIONS_INIT.

\n", - "group": "submodule" - }, - "git_submodule_update": { - "type": "function", - "file": "git2/submodule.h", - "line": 192, - "lineto": 192, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Submodule object" - }, - { - "name": "init", - "type": "int", - "comment": "If the submodule is not initialized, setting this flag to true\n will initialize the submodule before updating. Otherwise, this will\n return an error if attempting to update an uninitialzed repository.\n but setting this to true forces them to be updated." - }, - { - "name": "options", - "type": "git_submodule_update_options *", - "comment": "configuration options for the update. If NULL, the\n function works as though GIT_SUBMODULE_UPDATE_OPTIONS_INIT was passed." - } - ], - "argline": "git_submodule *submodule, int init, git_submodule_update_options *options", - "sig": "git_submodule *::int::git_submodule_update_options *", - "return": { - "type": "int", - "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)." - }, - "description": "

Update a submodule. This will clone a missing submodule and\n checkout the subrepository to the commit specified in the index of\n the containing repository. If the submodule repository doesn't contain\n the target commit (e.g. because fetchRecurseSubmodules isn't set), then\n the submodule is fetched using the fetch options supplied in options.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_lookup": { - "type": "function", - "file": "git2/submodule.h", - "line": 221, - "lineto": 224, - "args": [ - { - "name": "out", - "type": "git_submodule **", - "comment": "Output ptr to submodule; pass NULL to just get return code" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The parent repository" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of or path to the submodule; trailing slashes okay" - } - ], - "argline": "git_submodule **out, git_repository *repo, const char *name", - "sig": "git_submodule **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if submodule does not exist,\n GIT_EEXISTS if a repository is found in working directory only,\n -1 on other errors." - }, - "description": "

Lookup submodule information by name or path.

\n", - "comments": "

Given either the submodule name or path (they are usually the same), this returns a structure describing the submodule.

\n\n

There are two expected error scenarios:

\n\n
    \n
  • The submodule is not mentioned in the HEAD, the index, and the config, but does "exist" in the working directory (i.e. there is a subdirectory that appears to be a Git repository). In this case, this function returns GIT_EEXISTS to indicate a sub-repository exists but not in a state where a git_submodule can be instantiated. - The submodule is not mentioned in the HEAD, index, or config and the working directory doesn't contain a value git repo at that path. There may or may not be anything else at that path, but nothing that looks like a submodule. In this case, this returns GIT_ENOTFOUND.
  • \n
\n\n

You must call git_submodule_free when done with the submodule.

\n", - "group": "submodule" - }, - "git_submodule_dup": { - "type": "function", - "file": "git2/submodule.h", - "line": 233, - "lineto": 233, - "args": [ - { - "name": "out", - "type": "git_submodule **", - "comment": "Pointer to store the copy of the submodule." - }, - { - "name": "source", - "type": "git_submodule *", - "comment": "Original submodule to copy." - } - ], - "argline": "git_submodule **out, git_submodule *source", - "sig": "git_submodule **::git_submodule *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an in-memory copy of a submodule. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_free": { - "type": "function", - "file": "git2/submodule.h", - "line": 240, - "lineto": 240, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Release a submodule

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_foreach": { - "type": "function", - "file": "git2/submodule.h", - "line": 260, - "lineto": 263, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository" - }, - { - "name": "callback", - "type": "git_submodule_cb", - "comment": "Function to be called with the name of each submodule.\n Return a non-zero value to terminate the iteration." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra data to pass to callback" - } - ], - "argline": "git_repository *repo, git_submodule_cb callback, void *payload", - "sig": "git_repository *::git_submodule_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, or non-zero return value of callback" - }, - "description": "

Iterate over all tracked submodules of a repository.

\n", - "comments": "

See the note on git_submodule above. This iterates over the tracked submodules as described therein.

\n\n

If you are concerned about items in the working directory that look like submodules but are not tracked, the diff API will generate a diff record for workdir items that look like submodules but are not tracked, showing them as added in the workdir. Also, the status API will treat the entire subdirectory of a contained git repo as a single GIT_STATUS_WT_NEW item.

\n", - "group": "submodule", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_submodule_foreach-19" - ] - } - }, - "git_submodule_add_setup": { - "type": "function", - "file": "git2/submodule.h", - "line": 291, - "lineto": 296, - "args": [ - { - "name": "out", - "type": "git_submodule **", - "comment": "The newly created submodule ready to open for clone" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository in which you want to create the submodule" - }, - { - "name": "url", - "type": "const char *", - "comment": "URL for the submodule's remote" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path at which the submodule should be created" - }, - { - "name": "use_gitlink", - "type": "int", - "comment": "Should workdir contain a gitlink to the repo in\n .git/modules vs. repo directly in workdir." - } - ], - "argline": "git_submodule **out, git_repository *repo, const char *url, const char *path, int use_gitlink", - "sig": "git_submodule **::git_repository *::const char *::const char *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS if submodule already exists,\n -1 on other errors." - }, - "description": "

Set up a new git submodule for checkout.

\n", - "comments": "

This does "git submodule add" up to the fetch and checkout of the submodule contents. It preps a new submodule, creates an entry in .gitmodules and creates an empty initialized repository either at the given path in the working directory or in .git/modules with a gitlink from the working directory to the new repo.

\n\n

To fully emulate "git submodule add" call this function, then open the submodule repo and perform the clone step as needed (if you don't need anything custom see git_submodule_add_clone()). Lastly, call git_submodule_add_finalize() to wrap up adding the new submodule and .gitmodules to the index to be ready to commit.

\n\n

You must call git_submodule_free on the submodule object when done.

\n", - "group": "submodule" - }, - "git_submodule_clone": { - "type": "function", - "file": "git2/submodule.h", - "line": 309, - "lineto": 312, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "The newly created repository object. Optional." - }, - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule currently waiting for its clone." - }, - { - "name": "opts", - "type": "const git_submodule_update_options *", - "comment": "The options to use." - } - ], - "argline": "git_repository **out, git_submodule *submodule, const git_submodule_update_options *opts", - "sig": "git_repository **::git_submodule *::const git_submodule_update_options *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on other errors (see git_clone)." - }, - "description": "

Perform the clone step for a newly created submodule.

\n", - "comments": "

This performs the necessary git_clone to setup a newly-created submodule.

\n", - "group": "submodule" - }, - "git_submodule_add_finalize": { - "type": "function", - "file": "git2/submodule.h", - "line": 324, - "lineto": 324, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to finish adding." - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Resolve the setup of a new git submodule.

\n", - "comments": "

This should be called on a submodule once you have called add setup and done the clone of the submodule. This adds the .gitmodules file and the newly cloned submodule to the index to be ready to be committed (but doesn't actually do the commit).

\n", - "group": "submodule" - }, - "git_submodule_add_to_index": { - "type": "function", - "file": "git2/submodule.h", - "line": 336, - "lineto": 338, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to add to the index" - }, - { - "name": "write_index", - "type": "int", - "comment": "Boolean if this should immediately write the index\n file. If you pass this as false, you will have to get the\n git_index and explicitly call `git_index_write()` on it to\n save the change." - } - ], - "argline": "git_submodule *submodule, int write_index", - "sig": "git_submodule *::int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Add current submodule HEAD commit to index of superproject.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_owner": { - "type": "function", - "file": "git2/submodule.h", - "line": 351, - "lineto": 351, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "git_repository *", - "comment": " Pointer to `git_repository`" - }, - "description": "

Get the containing repository for a submodule.

\n", - "comments": "

This returns a pointer to the repository that contains the submodule. This is a just a reference to the repository that was passed to the original git_submodule_lookup() call, so if that repository has been freed, then this may be a dangling reference.

\n", - "group": "submodule" - }, - "git_submodule_name": { - "type": "function", - "file": "git2/submodule.h", - "line": 359, - "lineto": 359, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const char *", - "comment": " Pointer to the submodule name" - }, - "description": "

Get the name of submodule.

\n", - "comments": "", - "group": "submodule", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_submodule_name-20" - ] - } - }, - "git_submodule_path": { - "type": "function", - "file": "git2/submodule.h", - "line": 370, - "lineto": 370, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const char *", - "comment": " Pointer to the submodule path" - }, - "description": "

Get the path to the submodule.

\n", - "comments": "

The path is almost always the same as the submodule name, but the two are actually not required to match.

\n", - "group": "submodule", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_submodule_path-21" - ] - } - }, - "git_submodule_url": { - "type": "function", - "file": "git2/submodule.h", - "line": 378, - "lineto": 378, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const char *", - "comment": " Pointer to the submodule url" - }, - "description": "

Get the URL for the submodule.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_resolve_url": { - "type": "function", - "file": "git2/submodule.h", - "line": 388, - "lineto": 388, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer to store the absolute submodule url in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Pointer to repository object" - }, - { - "name": "url", - "type": "const char *", - "comment": "Relative url" - } - ], - "argline": "git_buf *out, git_repository *repo, const char *url", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Resolve a submodule url relative to the given repository.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_branch": { - "type": "function", - "file": "git2/submodule.h", - "line": 396, - "lineto": 396, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const char *", - "comment": " Pointer to the submodule branch" - }, - "description": "

Get the branch for the submodule.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_set_branch": { - "type": "function", - "file": "git2/submodule.h", - "line": 409, - "lineto": 409, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the submodule to configure" - }, - { - "name": "branch", - "type": "const char *", - "comment": "Branch that should be used for the submodule" - } - ], - "argline": "git_repository *repo, const char *name, const char *branch", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Set the branch for the submodule in the configuration

\n", - "comments": "

After calling this, you may wish to call git_submodule_sync() to write the changes to the checked out submodule repository.

\n", - "group": "submodule" - }, - "git_submodule_set_url": { - "type": "function", - "file": "git2/submodule.h", - "line": 423, - "lineto": 423, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the submodule to configure" - }, - { - "name": "url", - "type": "const char *", - "comment": "URL that should be used for the submodule" - } - ], - "argline": "git_repository *repo, const char *name, const char *url", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Set the URL for the submodule in the configuration

\n", - "comments": "

After calling this, you may wish to call git_submodule_sync() to write the changes to the checked out submodule repository.

\n", - "group": "submodule" - }, - "git_submodule_index_id": { - "type": "function", - "file": "git2/submodule.h", - "line": 431, - "lineto": 431, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const git_oid *", - "comment": " Pointer to git_oid or NULL if submodule is not in index." - }, - "description": "

Get the OID for the submodule in the index.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_head_id": { - "type": "function", - "file": "git2/submodule.h", - "line": 439, - "lineto": 439, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const git_oid *", - "comment": " Pointer to git_oid or NULL if submodule is not in the HEAD." - }, - "description": "

Get the OID for the submodule in the current HEAD tree.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_wd_id": { - "type": "function", - "file": "git2/submodule.h", - "line": 452, - "lineto": 452, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const git_oid *", - "comment": " Pointer to git_oid or NULL if submodule is not checked out." - }, - "description": "

Get the OID for the submodule in the current working directory.

\n", - "comments": "

This returns the OID that corresponds to looking up 'HEAD' in the checked out submodule. If there are pending changes in the index or anything else, this won't notice that. You should call git_submodule_status() for a more complete picture about the state of the working directory.

\n", - "group": "submodule" - }, - "git_submodule_ignore": { - "type": "function", - "file": "git2/submodule.h", - "line": 477, - "lineto": 478, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to check" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "git_submodule_ignore_t", - "comment": " The current git_submodule_ignore_t valyue what will be used for\n this submodule." - }, - "description": "

Get the ignore rule that will be used for the submodule.

\n", - "comments": "

These values control the behavior of git_submodule_status() for this submodule. There are four ignore values:

\n\n
    \n
  • GIT_SUBMODULE_IGNORE_NONE will consider any change to the contents of the submodule from a clean checkout to be dirty, including the addition of untracked files. This is the default if unspecified. - GIT_SUBMODULE_IGNORE_UNTRACKED examines the contents of the working tree (i.e. call git_status_foreach() on the submodule) but UNTRACKED files will not count as making the submodule dirty. - GIT_SUBMODULE_IGNORE_DIRTY means to only check if the HEAD of the submodule has moved for status. This is fast since it does not need to scan the working tree of the submodule at all. - GIT_SUBMODULE_IGNORE_ALL means not to open the submodule repo. The working directory will be consider clean so long as there is a checked out version present.
  • \n
\n", - "group": "submodule" - }, - "git_submodule_set_ignore": { - "type": "function", - "file": "git2/submodule.h", - "line": 490, - "lineto": 493, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the submdule" - }, - { - "name": "ignore", - "type": "git_submodule_ignore_t", - "comment": "The new value for the ignore rule" - } - ], - "argline": "git_repository *repo, const char *name, git_submodule_ignore_t ignore", - "sig": "git_repository *::const char *::git_submodule_ignore_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the ignore rule for the submodule in the configuration

\n", - "comments": "

This does not affect any currently-loaded instances.

\n", - "group": "submodule" - }, - "git_submodule_update_strategy": { - "type": "function", - "file": "git2/submodule.h", - "line": 505, - "lineto": 506, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to check" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "git_submodule_update_t", - "comment": " The current git_submodule_update_t value that will be used\n for this submodule." - }, - "description": "

Get the update rule that will be used for the submodule.

\n", - "comments": "

This value controls the behavior of the git submodule update command. There are four useful values documented with git_submodule_update_t.

\n", - "group": "submodule" - }, - "git_submodule_set_update": { - "type": "function", - "file": "git2/submodule.h", - "line": 518, - "lineto": 521, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the submodule to configure" - }, - { - "name": "update", - "type": "git_submodule_update_t", - "comment": "The new value to use" - } - ], - "argline": "git_repository *repo, const char *name, git_submodule_update_t update", - "sig": "git_repository *::const char *::git_submodule_update_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the update rule for the submodule in the configuration

\n", - "comments": "

This setting won't affect any existing instances.

\n", - "group": "submodule" - }, - "git_submodule_fetch_recurse_submodules": { - "type": "function", - "file": "git2/submodule.h", - "line": 534, - "lineto": 535, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": null - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "git_submodule_recurse_t", - "comment": " 0 if fetchRecurseSubmodules is false, 1 if true" - }, - "description": "

Read the fetchRecurseSubmodules rule for a submodule.

\n", - "comments": "

This accesses the submodule..fetchRecurseSubmodules value for the submodule that controls fetching behavior for the submodule.

\n\n

Note that at this time, libgit2 does not honor this setting and the fetch functionality current ignores submodules.

\n", - "group": "submodule" - }, - "git_submodule_set_fetch_recurse_submodules": { - "type": "function", - "file": "git2/submodule.h", - "line": 547, - "lineto": 550, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the submodule to configure" - }, - { - "name": "fetch_recurse_submodules", - "type": "git_submodule_recurse_t", - "comment": "Boolean value" - } - ], - "argline": "git_repository *repo, const char *name, git_submodule_recurse_t fetch_recurse_submodules", - "sig": "git_repository *::const char *::git_submodule_recurse_t", - "return": { - "type": "int", - "comment": " old value for fetchRecurseSubmodules" - }, - "description": "

Set the fetchRecurseSubmodules rule for a submodule in the configuration

\n", - "comments": "

This setting won't affect any existing instances.

\n", - "group": "submodule" - }, - "git_submodule_init": { - "type": "function", - "file": "git2/submodule.h", - "line": 565, - "lineto": 565, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to write into the superproject config" - }, - { - "name": "overwrite", - "type": "int", - "comment": "By default, existing entries will not be overwritten,\n but setting this to true forces them to be updated." - } - ], - "argline": "git_submodule *submodule, int overwrite", - "sig": "git_submodule *::int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure." - }, - "description": "

Copy submodule info into ".git/config" file.

\n", - "comments": "

Just like "git submodule init", this copies information about the submodule into ".git/config". You can use the accessor functions above to alter the in-memory git_submodule object and control what is written to the config, overriding what is in .gitmodules.

\n", - "group": "submodule" - }, - "git_submodule_repo_init": { - "type": "function", - "file": "git2/submodule.h", - "line": 580, - "lineto": 583, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Output pointer to the created git repository." - }, - { - "name": "sm", - "type": "const git_submodule *", - "comment": "The submodule to create a new subrepository from." - }, - { - "name": "use_gitlink", - "type": "int", - "comment": "Should the workdir contain a gitlink to\n the repo in .git/modules vs. repo directly in workdir." - } - ], - "argline": "git_repository **out, const git_submodule *sm, int use_gitlink", - "sig": "git_repository **::const git_submodule *::int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure." - }, - "description": "

Set up the subrepository for a submodule in preparation for clone.

\n", - "comments": "

This function can be called to init and set up a submodule repository from a submodule in preparation to clone it from its remote.

\n", - "group": "submodule" - }, - "git_submodule_sync": { - "type": "function", - "file": "git2/submodule.h", - "line": 593, - "lineto": 593, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": null - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Copy submodule remote info into submodule repo.

\n", - "comments": "

This copies the information about the submodules URL into the checked out submodule config, acting like "git submodule sync". This is useful if you have altered the URL for the submodule (or it has been altered by a fetch of upstream changes) and you need to update your local repo.

\n", - "group": "submodule" - }, - "git_submodule_open": { - "type": "function", - "file": "git2/submodule.h", - "line": 607, - "lineto": 609, - "args": [ - { - "name": "repo", - "type": "git_repository **", - "comment": "Pointer to the submodule repo which was opened" - }, - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Submodule to be opened" - } - ], - "argline": "git_repository **repo, git_submodule *submodule", - "sig": "git_repository **::git_submodule *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 if submodule repo could not be opened." - }, - "description": "

Open the repository for a submodule.

\n", - "comments": "

This is a newly opened repository object. The caller is responsible for calling git_repository_free() on it when done. Multiple calls to this function will return distinct git_repository objects. This will only work if the submodule is checked out into the working directory.

\n", - "group": "submodule" - }, - "git_submodule_reload": { - "type": "function", - "file": "git2/submodule.h", - "line": 621, - "lineto": 621, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to reload" - }, - { - "name": "force", - "type": "int", - "comment": "Force reload even if the data doesn't seem out of date" - } - ], - "argline": "git_submodule *submodule, int force", - "sig": "git_submodule *::int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on error" - }, - "description": "

Reread submodule info from config, index, and HEAD.

\n", - "comments": "

Call this to reread cached submodule information for this submodule if you have reason to believe that it has changed.

\n", - "group": "submodule" - }, - "git_submodule_status": { - "type": "function", - "file": "git2/submodule.h", - "line": 637, - "lineto": 641, - "args": [ - { - "name": "status", - "type": "unsigned int *", - "comment": "Combination of `GIT_SUBMODULE_STATUS` flags" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to look" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the submodule" - }, - { - "name": "ignore", - "type": "git_submodule_ignore_t", - "comment": "the ignore rules to follow" - } - ], - "argline": "unsigned int *status, git_repository *repo, const char *name, git_submodule_ignore_t ignore", - "sig": "unsigned int *::git_repository *::const char *::git_submodule_ignore_t", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on error" - }, - "description": "

Get the status for a submodule.

\n", - "comments": "

This looks at a submodule and tries to determine the status. It will return a combination of the GIT_SUBMODULE_STATUS values above. How deeply it examines the working directory to do this will depend on the git_submodule_ignore_t value for the submodule.

\n", - "group": "submodule", - "examples": { - "status.c": [ - "ex/v1.3.1/status.html#git_submodule_status-22" - ] - } - }, - "git_submodule_location": { - "type": "function", - "file": "git2/submodule.h", - "line": 657, - "lineto": 659, - "args": [ - { - "name": "location_status", - "type": "unsigned int *", - "comment": "Combination of first four `GIT_SUBMODULE_STATUS` flags" - }, - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Submodule for which to get status" - } - ], - "argline": "unsigned int *location_status, git_submodule *submodule", - "sig": "unsigned int *::git_submodule *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on error" - }, - "description": "

Get the locations of submodule information.

\n", - "comments": "

This is a bit like a very lightweight version of git_submodule_status. It just returns a made of the first four submodule status values (i.e. the ones like GIT_SUBMODULE_STATUS_IN_HEAD, etc) that tell you where the submodule data comes from (i.e. the HEAD commit, gitmodules file, etc.). This can be useful if you want to know if the submodule is present in the working directory at this point in time, etc.

\n", - "group": "submodule" - }, - "git_tag_lookup": { - "type": "function", - "file": "git2/tag.h", - "line": 33, - "lineto": 34, - "args": [ - { - "name": "out", - "type": "git_tag **", - "comment": "pointer to the looked up tag" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the tag." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the tag to locate." - } - ], - "argline": "git_tag **out, git_repository *repo, const git_oid *id", - "sig": "git_tag **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a tag object from the repository.

\n", - "comments": "", - "group": "tag", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_tag_lookup-83" - ] - } - }, - "git_tag_lookup_prefix": { - "type": "function", - "file": "git2/tag.h", - "line": 48, - "lineto": 49, - "args": [ - { - "name": "out", - "type": "git_tag **", - "comment": "pointer to the looked up tag" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the tag." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the tag to locate." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - } - ], - "argline": "git_tag **out, git_repository *repo, const git_oid *id, size_t len", - "sig": "git_tag **::git_repository *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a tag object from the repository,\n given a prefix of its identifier (short id).

\n", - "comments": "", - "group": "tag" - }, - "git_tag_free": { - "type": "function", - "file": "git2/tag.h", - "line": 61, - "lineto": 61, - "args": [ - { - "name": "tag", - "type": "git_tag *", - "comment": "the tag to close" - } - ], - "argline": "git_tag *tag", - "sig": "git_tag *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open tag

\n", - "comments": "

You can no longer use the git_tag pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you are through with a tag to release memory. Failure to do so will cause a memory leak.

\n", - "group": "tag", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_tag_free-84" - ] - } - }, - "git_tag_id": { - "type": "function", - "file": "git2/tag.h", - "line": 69, - "lineto": 69, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const git_oid *", - "comment": " object identity for the tag." - }, - "description": "

Get the id of a tag.

\n", - "comments": "", - "group": "tag" - }, - "git_tag_owner": { - "type": "function", - "file": "git2/tag.h", - "line": 77, - "lineto": 77, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "A previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "git_repository *", - "comment": " Repository that contains this tag." - }, - "description": "

Get the repository that contains the tag.

\n", - "comments": "", - "group": "tag" - }, - "git_tag_target": { - "type": "function", - "file": "git2/tag.h", - "line": 89, - "lineto": 89, - "args": [ - { - "name": "target_out", - "type": "git_object **", - "comment": "pointer where to store the target" - }, - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "git_object **target_out, const git_tag *tag", - "sig": "git_object **::const git_tag *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the tagged object of a tag

\n", - "comments": "

This method performs a repository lookup for the given object and returns it

\n", - "group": "tag", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_tag_target-85" - ] - } - }, - "git_tag_target_id": { - "type": "function", - "file": "git2/tag.h", - "line": 97, - "lineto": 97, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const git_oid *", - "comment": " pointer to the OID" - }, - "description": "

Get the OID of the tagged object of a tag

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tag_target_id-31" - ] - } - }, - "git_tag_target_type": { - "type": "function", - "file": "git2/tag.h", - "line": 105, - "lineto": 105, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "git_object_t", - "comment": " type of the tagged object" - }, - "description": "

Get the type of a tag's tagged object

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tag_target_type-32" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_tag_target_type-86" - ] - } - }, - "git_tag_name": { - "type": "function", - "file": "git2/tag.h", - "line": 113, - "lineto": 113, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const char *", - "comment": " name of the tag" - }, - "description": "

Get the name of a tag

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tag_name-33" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_tag_name-87" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_tag_name-16" - ] - } - }, - "git_tag_tagger": { - "type": "function", - "file": "git2/tag.h", - "line": 121, - "lineto": 121, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const git_signature *", - "comment": " reference to the tag's author or NULL when unspecified" - }, - "description": "

Get the tagger (author) of a tag

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tag_tagger-34" - ] - } - }, - "git_tag_message": { - "type": "function", - "file": "git2/tag.h", - "line": 129, - "lineto": 129, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const char *", - "comment": " message of the tag or NULL when unspecified" - }, - "description": "

Get the message of a tag

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tag_message-35", - "ex/v1.3.1/cat-file.html#git_tag_message-36" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_tag_message-88" - ], - "tag.c": [ - "ex/v1.3.1/tag.html#git_tag_message-17" - ] - } - }, - "git_tag_create": { - "type": "function", - "file": "git2/tag.h", - "line": 171, - "lineto": 178, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the\n newly created tag. If the tag already exists, this parameter\n will be the oid of the existing tag, and the function will\n return a GIT_EEXISTS error code." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the tag" - }, - { - "name": "tag_name", - "type": "const char *", - "comment": "Name for the tag; this name is validated\n for consistency. It should also not conflict with an\n already existing tag name" - }, - { - "name": "target", - "type": "const git_object *", - "comment": "Object to which this tag points. This object\n must belong to the given `repo`." - }, - { - "name": "tagger", - "type": "const git_signature *", - "comment": "Signature of the tagger for this tag, and\n of the tagging time" - }, - { - "name": "message", - "type": "const char *", - "comment": "Full message for this tag" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - } - ], - "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, const git_signature *tagger, const char *message, int force", - "sig": "git_oid *::git_repository *::const char *::const git_object *::const git_signature *::const char *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code\n\tA tag object is written to the ODB, and a proper reference\n\tis written in the /refs/tags folder, pointing to it" - }, - "description": "

Create a new tag in the repository from an object

\n", - "comments": "

A new reference will also be created pointing to this tag object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n\n

The tag name will be checked for validity. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.

\n", - "group": "tag", - "examples": { - "tag.c": [ - "ex/v1.3.1/tag.html#git_tag_create-18" - ] - } - }, - "git_tag_annotation_create": { - "type": "function", - "file": "git2/tag.h", - "line": 203, - "lineto": 209, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the\n newly created tag" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the tag" - }, - { - "name": "tag_name", - "type": "const char *", - "comment": "Name for the tag" - }, - { - "name": "target", - "type": "const git_object *", - "comment": "Object to which this tag points. This object\n must belong to the given `repo`." - }, - { - "name": "tagger", - "type": "const git_signature *", - "comment": "Signature of the tagger for this tag, and\n of the tagging time" - }, - { - "name": "message", - "type": "const char *", - "comment": "Full message for this tag" - } - ], - "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, const git_signature *tagger, const char *message", - "sig": "git_oid *::git_repository *::const char *::const git_object *::const git_signature *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Create a new tag in the object database pointing to a git_object

\n", - "comments": "

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n", - "group": "tag" - }, - "git_tag_create_from_buffer": { - "type": "function", - "file": "git2/tag.h", - "line": 220, - "lineto": 224, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the newly created tag" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the tag" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "Raw tag data" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing tags" - } - ], - "argline": "git_oid *oid, git_repository *repo, const char *buffer, int force", - "sig": "git_oid *::git_repository *::const char *::int", - "return": { - "type": "int", - "comment": " 0 on success; error code otherwise" - }, - "description": "

Create a new tag in the repository from a buffer

\n", - "comments": "", - "group": "tag" - }, - "git_tag_create_lightweight": { - "type": "function", - "file": "git2/tag.h", - "line": 256, - "lineto": 261, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the provided\n target object. If the tag already exists, this parameter\n will be filled with the oid of the existing pointed object\n and the function will return a GIT_EEXISTS error code." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the lightweight tag" - }, - { - "name": "tag_name", - "type": "const char *", - "comment": "Name for the tag; this name is validated\n for consistency. It should also not conflict with an\n already existing tag name" - }, - { - "name": "target", - "type": "const git_object *", - "comment": "Object to which this tag points. This object\n must belong to the given `repo`." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - } - ], - "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, int force", - "sig": "git_oid *::git_repository *::const char *::const git_object *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code\n\tA proper reference is written in the /refs/tags folder,\n pointing to the provided target object" - }, - "description": "

Create a new lightweight tag pointing at a target object

\n", - "comments": "

A new direct reference will be created pointing to this target object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", - "group": "tag", - "examples": { - "tag.c": [ - "ex/v1.3.1/tag.html#git_tag_create_lightweight-19" - ] - } - }, - "git_tag_delete": { - "type": "function", - "file": "git2/tag.h", - "line": 276, - "lineto": 278, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where lives the tag" - }, - { - "name": "tag_name", - "type": "const char *", - "comment": "Name of the tag to be deleted;\n this name is validated for consistency." - } - ], - "argline": "git_repository *repo, const char *tag_name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Delete an existing tag reference.

\n", - "comments": "

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", - "group": "tag", - "examples": { - "tag.c": [ - "ex/v1.3.1/tag.html#git_tag_delete-20" - ] - } - }, - "git_tag_list": { - "type": "function", - "file": "git2/tag.h", - "line": 293, - "lineto": 295, - "args": [ - { - "name": "tag_names", - "type": "git_strarray *", - "comment": "Pointer to a git_strarray structure where\n\t\tthe tag names will be stored" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the tags" - } - ], - "argline": "git_strarray *tag_names, git_repository *repo", - "sig": "git_strarray *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Fill a list with all the tags in the Repository

\n", - "comments": "

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", - "group": "tag" - }, - "git_tag_list_match": { - "type": "function", - "file": "git2/tag.h", - "line": 315, - "lineto": 318, - "args": [ - { - "name": "tag_names", - "type": "git_strarray *", - "comment": "Pointer to a git_strarray structure where\n\t\tthe tag names will be stored" - }, - { - "name": "pattern", - "type": "const char *", - "comment": "Standard fnmatch pattern" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the tags" - } - ], - "argline": "git_strarray *tag_names, const char *pattern, git_repository *repo", - "sig": "git_strarray *::const char *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Fill a list with all the tags in the Repository\n which name match a defined pattern

\n", - "comments": "

If an empty pattern is provided, all the tags will be returned.

\n\n

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", - "group": "tag", - "examples": { - "tag.c": [ - "ex/v1.3.1/tag.html#git_tag_list_match-21" - ] - } - }, - "git_tag_foreach": { - "type": "function", - "file": "git2/tag.h", - "line": 339, - "lineto": 342, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository" - }, - { - "name": "callback", - "type": "git_tag_foreach_cb", - "comment": "Callback function" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to callback data (optional)" - } - ], - "argline": "git_repository *repo, git_tag_foreach_cb callback, void *payload", - "sig": "git_repository *::git_tag_foreach_cb::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Call callback `cb' for each tag in the repository

\n", - "comments": "", - "group": "tag" - }, - "git_tag_peel": { - "type": "function", - "file": "git2/tag.h", - "line": 355, - "lineto": 357, - "args": [ - { - "name": "tag_target_out", - "type": "git_object **", - "comment": "Pointer to the peeled git_object" - }, - { - "name": "tag", - "type": "const git_tag *", - "comment": "The tag to be processed" - } - ], - "argline": "git_object **tag_target_out, const git_tag *tag", - "sig": "git_object **::const git_tag *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Recursively peel a tag until a non tag git_object is found

\n", - "comments": "

The retrieved tag_target object is owned by the repository and should be closed with the git_object_free method.

\n", - "group": "tag" - }, - "git_tag_dup": { - "type": "function", - "file": "git2/tag.h", - "line": 366, - "lineto": 366, - "args": [ - { - "name": "out", - "type": "git_tag **", - "comment": "Pointer to store the copy of the tag" - }, - { - "name": "source", - "type": "git_tag *", - "comment": "Original tag to copy" - } - ], - "argline": "git_tag **out, git_tag *source", - "sig": "git_tag **::git_tag *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an in-memory copy of a tag. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "tag" - }, - "git_tag_name_is_valid": { - "type": "function", - "file": "git2/tag.h", - "line": 378, - "lineto": 378, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "output pointer to set with validity of given tag name" - }, - { - "name": "name", - "type": "const char *", - "comment": "a tag name to test" - } - ], - "argline": "int *valid, const char *name", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Determine whether a tag name is valid, meaning that (when prefixed\n with refs/tags/) that it is a valid reference name, and that any\n additional tag name restrictions are imposed (eg, it cannot start\n with a -).

\n", - "comments": "", - "group": "tag" - }, - "git_trace_set": { - "type": "function", - "file": "git2/trace.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "level", - "type": "git_trace_level_t", - "comment": "Level to set tracing to" - }, - { - "name": "cb", - "type": "git_trace_cb", - "comment": "Function to call with trace data" - } - ], - "argline": "git_trace_level_t level, git_trace_cb cb", - "sig": "git_trace_level_t::git_trace_cb", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Sets the system tracing configuration to the specified level with the\n specified callback. When system events occur at a level equal to, or\n lower than, the given level they will be reported to the given callback.

\n", - "comments": "", - "group": "trace" - }, - "git_transaction_new": { - "type": "function", - "file": "git2/transaction.h", - "line": 32, - "lineto": 32, - "args": [ - { - "name": "out", - "type": "git_transaction **", - "comment": "the resulting transaction" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to lock" - } - ], - "argline": "git_transaction **out, git_repository *repo", - "sig": "git_transaction **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new transaction object

\n", - "comments": "

This does not lock anything, but sets up the transaction object to know from which repository to lock.

\n", - "group": "transaction" - }, - "git_transaction_lock_ref": { - "type": "function", - "file": "git2/transaction.h", - "line": 44, - "lineto": 44, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference to lock" - } - ], - "argline": "git_transaction *tx, const char *refname", - "sig": "git_transaction *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error message" - }, - "description": "

Lock a reference

\n", - "comments": "

Lock the specified reference. This is the first step to updating a reference.

\n", - "group": "transaction" - }, - "git_transaction_set_target": { - "type": "function", - "file": "git2/transaction.h", - "line": 59, - "lineto": 59, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "reference to update" - }, - { - "name": "target", - "type": "const git_oid *", - "comment": "target to set the reference to" - }, - { - "name": "sig", - "type": "const git_signature *", - "comment": "signature to use in the reflog; pass NULL to read the identity from the config" - }, - { - "name": "msg", - "type": "const char *", - "comment": "message to use in the reflog" - } - ], - "argline": "git_transaction *tx, const char *refname, const git_oid *target, const git_signature *sig, const char *msg", - "sig": "git_transaction *::const char *::const git_oid *::const git_signature *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" - }, - "description": "

Set the target of a reference

\n", - "comments": "

Set the target of the specified reference. This reference must be locked.

\n", - "group": "transaction" - }, - "git_transaction_set_symbolic_target": { - "type": "function", - "file": "git2/transaction.h", - "line": 74, - "lineto": 74, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "reference to update" - }, - { - "name": "target", - "type": "const char *", - "comment": "target to set the reference to" - }, - { - "name": "sig", - "type": "const git_signature *", - "comment": "signature to use in the reflog; pass NULL to read the identity from the config" - }, - { - "name": "msg", - "type": "const char *", - "comment": "message to use in the reflog" - } - ], - "argline": "git_transaction *tx, const char *refname, const char *target, const git_signature *sig, const char *msg", - "sig": "git_transaction *::const char *::const char *::const git_signature *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" - }, - "description": "

Set the target of a reference

\n", - "comments": "

Set the target of the specified reference. This reference must be locked.

\n", - "group": "transaction" - }, - "git_transaction_set_reflog": { - "type": "function", - "file": "git2/transaction.h", - "line": 87, - "lineto": 87, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference whose reflog to set" - }, - { - "name": "reflog", - "type": "const git_reflog *", - "comment": "the reflog as it should be written out" - } - ], - "argline": "git_transaction *tx, const char *refname, const git_reflog *reflog", - "sig": "git_transaction *::const char *::const git_reflog *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" - }, - "description": "

Set the reflog of a reference

\n", - "comments": "

Set the specified reference's reflog. If this is combined with setting the target, that update won't be written to the reflog.

\n", - "group": "transaction" - }, - "git_transaction_remove": { - "type": "function", - "file": "git2/transaction.h", - "line": 96, - "lineto": 96, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference to remove" - } - ], - "argline": "git_transaction *tx, const char *refname", - "sig": "git_transaction *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" - }, - "description": "

Remove a reference

\n", - "comments": "", - "group": "transaction" - }, - "git_transaction_commit": { - "type": "function", - "file": "git2/transaction.h", - "line": 107, - "lineto": 107, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - } - ], - "argline": "git_transaction *tx", - "sig": "git_transaction *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Commit the changes from the transaction

\n", - "comments": "

Perform the changes that have been queued. The updates will be made one by one, and the first failure will stop the processing.

\n", - "group": "transaction" - }, - "git_transaction_free": { - "type": "function", - "file": "git2/transaction.h", - "line": 117, - "lineto": 117, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - } - ], - "argline": "git_transaction *tx", - "sig": "git_transaction *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the resources allocated by this transaction

\n", - "comments": "

If any references remain locked, they will be unlocked without any changes made to them.

\n", - "group": "transaction" - }, - "git_tree_lookup": { - "type": "function", - "file": "git2/tree.h", - "line": 32, - "lineto": 33, - "args": [ - { - "name": "out", - "type": "git_tree **", - "comment": "Pointer to the looked up tree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repo to use when locating the tree." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "Identity of the tree to locate." - } - ], - "argline": "git_tree **out, git_repository *repo, const git_oid *id", - "sig": "git_tree **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a tree object from the repository.

\n", - "comments": "", - "group": "tree", - "examples": { - "commit.c": [ - "ex/v1.3.1/commit.html#git_tree_lookup-10" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_tree_lookup-89", - "ex/v1.3.1/general.html#git_tree_lookup-90" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_tree_lookup-12" - ], - "merge.c": [ - "ex/v1.3.1/merge.html#git_tree_lookup-37" - ] - } - }, - "git_tree_lookup_prefix": { - "type": "function", - "file": "git2/tree.h", - "line": 47, - "lineto": 51, - "args": [ - { - "name": "out", - "type": "git_tree **", - "comment": "pointer to the looked up tree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the tree." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the tree to locate." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - } - ], - "argline": "git_tree **out, git_repository *repo, const git_oid *id, size_t len", - "sig": "git_tree **::git_repository *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a tree object from the repository,\n given a prefix of its identifier (short id).

\n", - "comments": "", - "group": "tree" - }, - "git_tree_free": { - "type": "function", - "file": "git2/tree.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "tree", - "type": "git_tree *", - "comment": "The tree to close" - } - ], - "argline": "git_tree *tree", - "sig": "git_tree *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open tree

\n", - "comments": "

You can no longer use the git_tree pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you stop using a tree to release memory. Failure to do so will cause a memory leak.

\n", - "group": "tree", - "examples": { - "commit.c": [ - "ex/v1.3.1/commit.html#git_tree_free-11" - ], - "diff.c": [ - "ex/v1.3.1/diff.html#git_tree_free-18", - "ex/v1.3.1/diff.html#git_tree_free-19" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_tree_free-91", - "ex/v1.3.1/general.html#git_tree_free-92" - ], - "init.c": [ - "ex/v1.3.1/init.html#git_tree_free-13" - ], - "log.c": [ - "ex/v1.3.1/log.html#git_tree_free-55", - "ex/v1.3.1/log.html#git_tree_free-56", - "ex/v1.3.1/log.html#git_tree_free-57", - "ex/v1.3.1/log.html#git_tree_free-58", - "ex/v1.3.1/log.html#git_tree_free-59" - ] - } - }, - "git_tree_id": { - "type": "function", - "file": "git2/tree.h", - "line": 71, - "lineto": 71, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - } - ], - "argline": "const git_tree *tree", - "sig": "const git_tree *", - "return": { - "type": "const git_oid *", - "comment": " object identity for the tree." - }, - "description": "

Get the id of a tree.

\n", - "comments": "", - "group": "tree" - }, - "git_tree_owner": { - "type": "function", - "file": "git2/tree.h", - "line": 79, - "lineto": 79, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "A previously loaded tree." - } - ], - "argline": "const git_tree *tree", - "sig": "const git_tree *", - "return": { - "type": "git_repository *", - "comment": " Repository that contains this tree." - }, - "description": "

Get the repository that contains the tree.

\n", - "comments": "", - "group": "tree" - }, - "git_tree_entrycount": { - "type": "function", - "file": "git2/tree.h", - "line": 87, - "lineto": 87, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - } - ], - "argline": "const git_tree *tree", - "sig": "const git_tree *", - "return": { - "type": "size_t", - "comment": " the number of entries in the tree" - }, - "description": "

Get the number of entries listed in a tree

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tree_entrycount-37" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_tree_entrycount-93" - ] - } - }, - "git_tree_entry_byname": { - "type": "function", - "file": "git2/tree.h", - "line": 99, - "lineto": 100, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - }, - { - "name": "filename", - "type": "const char *", - "comment": "the filename of the desired entry" - } - ], - "argline": "const git_tree *tree, const char *filename", - "sig": "const git_tree *::const char *", - "return": { - "type": "const git_tree_entry *", - "comment": " the tree entry; NULL if not found" - }, - "description": "

Lookup a tree entry by its filename

\n", - "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", - "group": "tree", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_tree_entry_byname-94" - ] - } - }, - "git_tree_entry_byindex": { - "type": "function", - "file": "git2/tree.h", - "line": 112, - "lineto": 113, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - }, - { - "name": "idx", - "type": "size_t", - "comment": "the position in the entry list" - } - ], - "argline": "const git_tree *tree, size_t idx", - "sig": "const git_tree *::size_t", - "return": { - "type": "const git_tree_entry *", - "comment": " the tree entry; NULL if not found" - }, - "description": "

Lookup a tree entry by its position in the tree

\n", - "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tree_entry_byindex-38" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_tree_entry_byindex-95" - ] - } - }, - "git_tree_entry_byid": { - "type": "function", - "file": "git2/tree.h", - "line": 127, - "lineto": 128, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the sha being looked for" - } - ], - "argline": "const git_tree *tree, const git_oid *id", - "sig": "const git_tree *::const git_oid *", - "return": { - "type": "const git_tree_entry *", - "comment": " the tree entry; NULL if not found" - }, - "description": "

Lookup a tree entry by SHA value.

\n", - "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n\n

Warning: this must examine every entry in the tree, so it is not fast.

\n", - "group": "tree" - }, - "git_tree_entry_bypath": { - "type": "function", - "file": "git2/tree.h", - "line": 142, - "lineto": 145, - "args": [ - { - "name": "out", - "type": "git_tree_entry **", - "comment": "Pointer where to store the tree entry" - }, - { - "name": "root", - "type": "const git_tree *", - "comment": "Previously loaded tree which is the root of the relative path" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to the contained entry" - } - ], - "argline": "git_tree_entry **out, const git_tree *root, const char *path", - "sig": "git_tree_entry **::const git_tree *::const char *", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND if the path does not exist" - }, - "description": "

Retrieve a tree entry contained in a tree or in any of its subtrees,\n given its relative path.

\n", - "comments": "

Unlike the other lookup functions, the returned tree entry is owned by the user and must be freed explicitly with git_tree_entry_free().

\n", - "group": "tree" - }, - "git_tree_entry_dup": { - "type": "function", - "file": "git2/tree.h", - "line": 157, - "lineto": 157, - "args": [ - { - "name": "dest", - "type": "git_tree_entry **", - "comment": "pointer where to store the copy" - }, - { - "name": "source", - "type": "const git_tree_entry *", - "comment": "tree entry to duplicate" - } - ], - "argline": "git_tree_entry **dest, const git_tree_entry *source", - "sig": "git_tree_entry **::const git_tree_entry *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Duplicate a tree entry

\n", - "comments": "

Create a copy of a tree entry. The returned copy is owned by the user, and must be freed explicitly with git_tree_entry_free().

\n", - "group": "tree" - }, - "git_tree_entry_free": { - "type": "function", - "file": "git2/tree.h", - "line": 168, - "lineto": 168, - "args": [ - { - "name": "entry", - "type": "git_tree_entry *", - "comment": "The entry to free" - } - ], - "argline": "git_tree_entry *entry", - "sig": "git_tree_entry *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a user-owned tree entry

\n", - "comments": "

IMPORTANT: This function is only needed for tree entries owned by the user, such as the ones returned by git_tree_entry_dup() or git_tree_entry_bypath().

\n", - "group": "tree" - }, - "git_tree_entry_name": { - "type": "function", - "file": "git2/tree.h", - "line": 176, - "lineto": 176, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "const char *", - "comment": " the name of the file" - }, - "description": "

Get the filename of a tree entry

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tree_entry_name-39" - ], - "general.c": [ - "ex/v1.3.1/general.html#git_tree_entry_name-96", - "ex/v1.3.1/general.html#git_tree_entry_name-97" - ] - } - }, - "git_tree_entry_id": { - "type": "function", - "file": "git2/tree.h", - "line": 184, - "lineto": 184, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "const git_oid *", - "comment": " the oid of the object" - }, - "description": "

Get the id of the object pointed by the entry

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tree_entry_id-40" - ] - } - }, - "git_tree_entry_type": { - "type": "function", - "file": "git2/tree.h", - "line": 192, - "lineto": 192, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "git_object_t", - "comment": " the type of the pointed object" - }, - "description": "

Get the type of the object pointed by the entry

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tree_entry_type-41" - ] - } - }, - "git_tree_entry_filemode": { - "type": "function", - "file": "git2/tree.h", - "line": 200, - "lineto": 200, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "git_filemode_t", - "comment": " filemode as an integer" - }, - "description": "

Get the UNIX file attributes of a tree entry

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.3.1/cat-file.html#git_tree_entry_filemode-42" - ] - } - }, - "git_tree_entry_filemode_raw": { - "type": "function", - "file": "git2/tree.h", - "line": 212, - "lineto": 212, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "git_filemode_t", - "comment": " filemode as an integer" - }, - "description": "

Get the raw UNIX file attributes of a tree entry

\n", - "comments": "

This function does not perform any normalization and is only useful if you need to be able to recreate the original tree object.

\n", - "group": "tree" - }, - "git_tree_entry_cmp": { - "type": "function", - "file": "git2/tree.h", - "line": 220, - "lineto": 220, - "args": [ - { - "name": "e1", - "type": "const git_tree_entry *", - "comment": "first tree entry" - }, - { - "name": "e2", - "type": "const git_tree_entry *", - "comment": "second tree entry" - } - ], - "argline": "const git_tree_entry *e1, const git_tree_entry *e2", - "sig": "const git_tree_entry *::const git_tree_entry *", - "return": { - "type": "int", - "comment": " \n<\n0 if e1 is before e2, 0 if e1 == e2, >0 if e1 is after e2" - }, - "description": "

Compare two tree entries

\n", - "comments": "", - "group": "tree" - }, - "git_tree_entry_to_object": { - "type": "function", - "file": "git2/tree.h", - "line": 232, - "lineto": 235, - "args": [ - { - "name": "object_out", - "type": "git_object **", - "comment": "pointer to the converted object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to lookup the pointed object" - }, - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "git_object **object_out, git_repository *repo, const git_tree_entry *entry", - "sig": "git_object **::git_repository *::const git_tree_entry *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Convert a tree entry to the git_object it points to.

\n", - "comments": "

You must call git_object_free() on the object when you are done with it.

\n", - "group": "tree", - "examples": { - "general.c": [ - "ex/v1.3.1/general.html#git_tree_entry_to_object-98" - ] - } - }, - "git_treebuilder_new": { - "type": "function", - "file": "git2/tree.h", - "line": 254, - "lineto": 255, - "args": [ - { - "name": "out", - "type": "git_treebuilder **", - "comment": "Pointer where to store the tree builder" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository in which to store the object" - }, - { - "name": "source", - "type": "const git_tree *", - "comment": "Source tree to initialize the builder (optional)" - } - ], - "argline": "git_treebuilder **out, git_repository *repo, const git_tree *source", - "sig": "git_treebuilder **::git_repository *::const git_tree *", - "return": { - "type": "int", - "comment": " 0 on success; error code otherwise" - }, - "description": "

Create a new tree builder.

\n", - "comments": "

The tree builder can be used to create or modify trees in memory and write them as tree objects to the database.

\n\n

If the source parameter is not NULL, the tree builder will be initialized with the entries of the given tree.

\n\n

If the source parameter is NULL, the tree builder will start with no entries and will have to be filled manually.

\n", - "group": "treebuilder" - }, - "git_treebuilder_clear": { - "type": "function", - "file": "git2/tree.h", - "line": 263, - "lineto": 263, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Builder to clear" - } - ], - "argline": "git_treebuilder *bld", - "sig": "git_treebuilder *", - "return": { - "type": "int", - "comment": " 0 on success; error code otherwise" - }, - "description": "

Clear all the entires in the builder

\n", - "comments": "", - "group": "treebuilder" - }, - "git_treebuilder_entrycount": { - "type": "function", - "file": "git2/tree.h", - "line": 271, - "lineto": 271, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "a previously loaded treebuilder." - } - ], - "argline": "git_treebuilder *bld", - "sig": "git_treebuilder *", - "return": { - "type": "size_t", - "comment": " the number of entries in the treebuilder" - }, - "description": "

Get the number of entries listed in a treebuilder

\n", - "comments": "", - "group": "treebuilder" - }, - "git_treebuilder_free": { - "type": "function", - "file": "git2/tree.h", - "line": 282, - "lineto": 282, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Builder to free" - } - ], - "argline": "git_treebuilder *bld", - "sig": "git_treebuilder *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a tree builder

\n", - "comments": "

This will clear all the entries and free to builder. Failing to free the builder after you're done using it will result in a memory leak

\n", - "group": "treebuilder" - }, - "git_treebuilder_get": { - "type": "function", - "file": "git2/tree.h", - "line": 294, - "lineto": 295, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder" - }, - { - "name": "filename", - "type": "const char *", - "comment": "Name of the entry" - } - ], - "argline": "git_treebuilder *bld, const char *filename", - "sig": "git_treebuilder *::const char *", - "return": { - "type": "const git_tree_entry *", - "comment": " pointer to the entry; NULL if not found" - }, - "description": "

Get an entry from the builder from its filename

\n", - "comments": "

The returned entry is owned by the builder and should not be freed manually.

\n", - "group": "treebuilder" - }, - "git_treebuilder_insert": { - "type": "function", - "file": "git2/tree.h", - "line": 325, - "lineto": 330, - "args": [ - { - "name": "out", - "type": "const git_tree_entry **", - "comment": "Pointer to store the entry (optional)" - }, - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder" - }, - { - "name": "filename", - "type": "const char *", - "comment": "Filename of the entry" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "SHA1 oid of the entry" - }, - { - "name": "filemode", - "type": "git_filemode_t", - "comment": "Folder attributes of the entry. This parameter must\n\t\t\tbe valued with one of the following entries: 0040000, 0100644,\n\t\t\t0100755, 0120000 or 0160000." - } - ], - "argline": "const git_tree_entry **out, git_treebuilder *bld, const char *filename, const git_oid *id, git_filemode_t filemode", - "sig": "const git_tree_entry **::git_treebuilder *::const char *::const git_oid *::git_filemode_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update an entry to the builder

\n", - "comments": "

Insert a new entry for filename in the builder with the given attributes.

\n\n

If an entry named filename already exists, its attributes will be updated with the given ones.

\n\n

The optional pointer out can be used to retrieve a pointer to the newly created/updated entry. Pass NULL if you do not need it. The pointer may not be valid past the next operation in this builder. Duplicate the entry if you want to keep it.

\n\n

By default the entry that you are inserting will be checked for validity; that it exists in the object database and is of the correct type. If you do not want this behavior, set the GIT_OPT_ENABLE_STRICT_OBJECT_CREATION library option to false.

\n", - "group": "treebuilder" - }, - "git_treebuilder_remove": { - "type": "function", - "file": "git2/tree.h", - "line": 339, - "lineto": 340, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder" - }, - { - "name": "filename", - "type": "const char *", - "comment": "Filename of the entry to remove" - } - ], - "argline": "git_treebuilder *bld, const char *filename", - "sig": "git_treebuilder *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove an entry from the builder by its filename

\n", - "comments": "", - "group": "treebuilder" - }, - "git_treebuilder_filter": { - "type": "function", - "file": "git2/tree.h", - "line": 364, - "lineto": 367, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder" - }, - { - "name": "filter", - "type": "git_treebuilder_filter_cb", - "comment": "Callback to filter entries" - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra data to pass to filter callback" - } - ], - "argline": "git_treebuilder *bld, git_treebuilder_filter_cb filter, void *payload", - "sig": "git_treebuilder *::git_treebuilder_filter_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Selectively remove entries in the tree

\n", - "comments": "

The filter callback will be called for each entry in the tree with a pointer to the entry and the provided payload; if the callback returns non-zero, the entry will be filtered (removed from the builder).

\n", - "group": "treebuilder" - }, - "git_treebuilder_write": { - "type": "function", - "file": "git2/tree.h", - "line": 379, - "lineto": 380, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "Pointer to store the OID of the newly written tree" - }, - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder to write" - } - ], - "argline": "git_oid *id, git_treebuilder *bld", - "sig": "git_oid *::git_treebuilder *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write the contents of the tree builder as a tree object

\n", - "comments": "

The tree builder will be written to the given repo, and its identifying SHA1 hash will be stored in the id pointer.

\n", - "group": "treebuilder" - }, - "git_tree_walk": { - "type": "function", - "file": "git2/tree.h", - "line": 409, - "lineto": 413, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "The tree to walk" - }, - { - "name": "mode", - "type": "git_treewalk_mode", - "comment": "Traversal mode (pre or post-order)" - }, - { - "name": "callback", - "type": "git_treewalk_cb", - "comment": "Function to call on each tree entry" - }, - { - "name": "payload", - "type": "void *", - "comment": "Opaque pointer to be passed on each callback" - } - ], - "argline": "const git_tree *tree, git_treewalk_mode mode, git_treewalk_cb callback, void *payload", - "sig": "const git_tree *::git_treewalk_mode::git_treewalk_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Traverse the entries in a tree and its subtrees in post or pre order.

\n", - "comments": "

The entries will be traversed in the specified order, children subtrees will be automatically loaded as required, and the callback will be called once per entry with the current (relative) root for the entry and the entry data itself.

\n\n

If the callback returns a positive value, the passed entry will be skipped on the traversal (in pre mode). A negative value stops the walk.

\n", - "group": "tree" - }, - "git_tree_dup": { - "type": "function", - "file": "git2/tree.h", - "line": 422, - "lineto": 422, - "args": [ - { - "name": "out", - "type": "git_tree **", - "comment": "Pointer to store the copy of the tree" - }, - { - "name": "source", - "type": "git_tree *", - "comment": "Original tree to copy" - } - ], - "argline": "git_tree **out, git_tree *source", - "sig": "git_tree **::git_tree *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an in-memory copy of a tree. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "tree" - }, - "git_tree_create_updated": { - "type": "function", - "file": "git2/tree.h", - "line": 469, - "lineto": 469, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "id of the new tree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to create the tree, must be the\n same as for `baseline`" - }, - { - "name": "baseline", - "type": "git_tree *", - "comment": "the tree to base these changes on" - }, - { - "name": "nupdates", - "type": "size_t", - "comment": "the number of elements in the update list" - }, - { - "name": "updates", - "type": "const git_tree_update *", - "comment": "the list of updates to perform" - } - ], - "argline": "git_oid *out, git_repository *repo, git_tree *baseline, size_t nupdates, const git_tree_update *updates", - "sig": "git_oid *::git_repository *::git_tree *::size_t::const git_tree_update *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a tree based on another one with the specified modifications

\n", - "comments": "

Given the baseline perform the changes described in the list of updates and create a new tree.

\n\n

This function is optimized for common file/directory addition, removal and replacement in trees. It is much more efficient than reading the tree into a git_index and modifying that, but in exchange it is not as flexible.

\n\n

Deleting and adding the same entry is undefined behaviour, changing a tree to a blob or viceversa is not supported.

\n", - "group": "tree" - }, - "git_worktree_list": { - "type": "function", - "file": "git2/worktree.h", - "line": 34, - "lineto": 34, - "args": [ - { - "name": "out", - "type": "git_strarray *", - "comment": "pointer to the array of working tree names" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when listing working trees" - } - ], - "argline": "git_strarray *out, git_repository *repo", - "sig": "git_strarray *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

List names of linked working trees

\n", - "comments": "

The returned list should be released with git_strarray_free when no longer needed.

\n", - "group": "worktree" - }, - "git_worktree_lookup": { - "type": "function", - "file": "git2/worktree.h", - "line": 44, - "lineto": 44, - "args": [ - { - "name": "out", - "type": "git_worktree **", - "comment": "Output pointer to looked up worktree or `NULL`" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing worktrees" - }, - { - "name": "name", - "type": "const char *", - "comment": "Name of the working tree to look up" - } - ], - "argline": "git_worktree **out, git_repository *repo, const char *name", - "sig": "git_worktree **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a working tree by its name for a given repository

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_open_from_repository": { - "type": "function", - "file": "git2/worktree.h", - "line": 56, - "lineto": 56, - "args": [ - { - "name": "out", - "type": "git_worktree **", - "comment": "Out-pointer for the newly allocated worktree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository to look up worktree for" - } - ], - "argline": "git_worktree **out, git_repository *repo", - "sig": "git_worktree **::git_repository *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Open a worktree of a given repository

\n", - "comments": "

If a repository is not the main tree but a worktree, this function will look up the worktree inside the parent repository and create a new git_worktree structure.

\n", - "group": "worktree" - }, - "git_worktree_free": { - "type": "function", - "file": "git2/worktree.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "worktree handle to close. If NULL nothing occurs." - } - ], - "argline": "git_worktree *wt", - "sig": "git_worktree *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a previously allocated worktree

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_validate": { - "type": "function", - "file": "git2/worktree.h", - "line": 75, - "lineto": 75, - "args": [ - { - "name": "wt", - "type": "const git_worktree *", - "comment": "Worktree to check" - } - ], - "argline": "const git_worktree *wt", - "sig": "const git_worktree *", - "return": { - "type": "int", - "comment": " 0 when worktree is valid, error-code otherwise" - }, - "description": "

Check if worktree is valid

\n", - "comments": "

A valid worktree requires both the git data structures inside the linked parent repository and the linked working copy to be present.

\n", - "group": "worktree" - }, - "git_worktree_add_options_init": { - "type": "function", - "file": "git2/worktree.h", - "line": 104, - "lineto": 105, - "args": [ - { - "name": "opts", - "type": "git_worktree_add_options *", - "comment": "The `git_worktree_add_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_WORKTREE_ADD_OPTIONS_VERSION`." - } - ], - "argline": "git_worktree_add_options *opts, unsigned int version", - "sig": "git_worktree_add_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_worktree_add_options structure

\n", - "comments": "

Initializes a git_worktree_add_options with default values. Equivalent to creating an instance with GIT_WORKTREE_ADD_OPTIONS_INIT.

\n", - "group": "worktree" - }, - "git_worktree_add": { - "type": "function", - "file": "git2/worktree.h", - "line": 121, - "lineto": 123, - "args": [ - { - "name": "out", - "type": "git_worktree **", - "comment": "Output pointer containing new working tree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository to create working tree for" - }, - { - "name": "name", - "type": "const char *", - "comment": "Name of the working tree" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to create working tree at" - }, - { - "name": "opts", - "type": "const git_worktree_add_options *", - "comment": "Options to modify default behavior. May be NULL" - } - ], - "argline": "git_worktree **out, git_repository *repo, const char *name, const char *path, const git_worktree_add_options *opts", - "sig": "git_worktree **::git_repository *::const char *::const char *::const git_worktree_add_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a new working tree

\n", - "comments": "

Add a new working tree for the repository, that is create the required data structures inside the repository and check out the current HEAD at path

\n", - "group": "worktree" - }, - "git_worktree_lock": { - "type": "function", - "file": "git2/worktree.h", - "line": 135, - "lineto": 135, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "Worktree to lock" - }, - { - "name": "reason", - "type": "const char *", - "comment": "Reason why the working tree is being locked" - } - ], - "argline": "git_worktree *wt, const char *reason", - "sig": "git_worktree *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero otherwise" - }, - "description": "

Lock worktree if not already locked

\n", - "comments": "

Lock a worktree, optionally specifying a reason why the linked working tree is being locked.

\n", - "group": "worktree" - }, - "git_worktree_unlock": { - "type": "function", - "file": "git2/worktree.h", - "line": 144, - "lineto": 144, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "Worktree to unlock" - } - ], - "argline": "git_worktree *wt", - "sig": "git_worktree *", - "return": { - "type": "int", - "comment": " 0 on success, 1 if worktree was not locked, error-code\n otherwise" - }, - "description": "

Unlock a locked worktree

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_is_locked": { - "type": "function", - "file": "git2/worktree.h", - "line": 158, - "lineto": 158, - "args": [ - { - "name": "reason", - "type": "git_buf *", - "comment": "Buffer to store reason in. If NULL no reason is stored." - }, - { - "name": "wt", - "type": "const git_worktree *", - "comment": "Worktree to check" - } - ], - "argline": "git_buf *reason, const git_worktree *wt", - "sig": "git_buf *::const git_worktree *", - "return": { - "type": "int", - "comment": " 0 when the working tree not locked, a value greater\n than zero if it is locked, less than zero if there was an\n error" - }, - "description": "

Check if worktree is locked

\n", - "comments": "

A worktree may be locked if the linked working tree is stored on a portable device which is not available.

\n", - "group": "worktree" - }, - "git_worktree_name": { - "type": "function", - "file": "git2/worktree.h", - "line": 167, - "lineto": 167, - "args": [ - { - "name": "wt", - "type": "const git_worktree *", - "comment": "Worktree to get the name for" - } - ], - "argline": "const git_worktree *wt", - "sig": "const git_worktree *", - "return": { - "type": "const char *", - "comment": " The worktree's name. The pointer returned is valid for the\n lifetime of the git_worktree" - }, - "description": "

Retrieve the name of the worktree

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_path": { - "type": "function", - "file": "git2/worktree.h", - "line": 176, - "lineto": 176, - "args": [ - { - "name": "wt", - "type": "const git_worktree *", - "comment": "Worktree to get the path for" - } - ], - "argline": "const git_worktree *wt", - "sig": "const git_worktree *", - "return": { - "type": "const char *", - "comment": " The worktree's filesystem path. The pointer returned\n is valid for the lifetime of the git_worktree." - }, - "description": "

Retrieve the filesystem path for the worktree

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_prune_options_init": { - "type": "function", - "file": "git2/worktree.h", - "line": 218, - "lineto": 220, - "args": [ - { - "name": "opts", - "type": "git_worktree_prune_options *", - "comment": "The `git_worktree_prune_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_WORKTREE_PRUNE_OPTIONS_VERSION`." - } - ], - "argline": "git_worktree_prune_options *opts, unsigned int version", - "sig": "git_worktree_prune_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_worktree_prune_options structure

\n", - "comments": "

Initializes a git_worktree_prune_options with default values. Equivalent to creating an instance with GIT_WORKTREE_PRUNE_OPTIONS_INIT.

\n", - "group": "worktree" - }, - "git_worktree_is_prunable": { - "type": "function", - "file": "git2/worktree.h", - "line": 236, - "lineto": 237, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": null - }, - { - "name": "opts", - "type": "git_worktree_prune_options *", - "comment": null - } - ], - "argline": "git_worktree *wt, git_worktree_prune_options *opts", - "sig": "git_worktree *::git_worktree_prune_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Is the worktree prunable with the given options?

\n", - "comments": "

A worktree is not prunable in the following scenarios:

\n\n
    \n
  • the worktree is linking to a valid on-disk worktree. The valid member will cause this check to be ignored. - the worktree is locked. The locked flag will cause this check to be ignored.
  • \n
\n\n

If the worktree is not valid and not locked or if the above flags have been passed in, this function will return a positive value.

\n", - "group": "worktree" - }, - "git_worktree_prune": { - "type": "function", - "file": "git2/worktree.h", - "line": 251, - "lineto": 252, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "Worktree to prune" - }, - { - "name": "opts", - "type": "git_worktree_prune_options *", - "comment": "Specifies which checks to override. See\n `git_worktree_is_prunable`. May be NULL" - } - ], - "argline": "git_worktree *wt, git_worktree_prune_options *opts", - "sig": "git_worktree *::git_worktree_prune_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Prune working tree

\n", - "comments": "

Prune the working tree, that is remove the git data structures on disk. The repository will only be pruned of git_worktree_is_prunable succeeds.

\n", - "group": "worktree" - } - }, - "callbacks": { - "git_apply_delta_cb": { - "type": "callback", - "file": "git2/apply.h", - "line": 36, - "lineto": 38, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": "The delta to be applied" - }, - { - "name": "payload", - "type": "void *", - "comment": "User-specified payload" - } - ], - "argline": "const git_diff_delta *delta, void *payload", - "sig": "const git_diff_delta *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When applying a patch, callback that will be made per delta (file).

\n", - "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the delta will not be applied, but the apply process continues - returns 0, the delta is applied, and the apply process continues.

\n" - }, - "git_apply_hunk_cb": { - "type": "callback", - "file": "git2/apply.h", - "line": 52, - "lineto": 54, - "args": [ - { - "name": "hunk", - "type": "const git_diff_hunk *", - "comment": "The hunk to be applied" - }, - { - "name": "payload", - "type": "void *", - "comment": "User-specified payload" - } - ], - "argline": "const git_diff_hunk *hunk, void *payload", - "sig": "const git_diff_hunk *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When applying a patch, callback that will be made per hunk.

\n", - "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the hunk will not be applied, but the apply process continues - returns 0, the hunk is applied, and the apply process continues.

\n" - }, - "git_attr_foreach_cb": { - "type": "callback", - "file": "git2/attr.h", - "line": 287, - "lineto": 287, - "args": [ - { - "name": "name", - "type": "const char *", - "comment": "The attribute name." - }, - { - "name": "value", - "type": "const char *", - "comment": "The attribute value. May be NULL if the attribute is explicitly\n set to UNSPECIFIED using the '!' sign." - }, - { - "name": "payload", - "type": "void *", - "comment": "A user-specified pointer." - } - ], - "argline": "const char *name, const char *value, void *payload", - "sig": "const char *::const char *::void *", - "return": { - "type": "int", - "comment": " 0 to continue looping, non-zero to stop. This value will be returned\n from git_attr_foreach." - }, - "description": "

The callback used with git_attr_foreach.

\n", - "comments": "

This callback will be invoked only once per attribute name, even if there are multiple rules for a given file. The highest priority rule will be used.

\n" - }, - "git_transport_certificate_check_cb": { - "type": "callback", - "file": "git2/cert.h", - "line": 72, - "lineto": 72, - "args": [ - { - "name": "cert", - "type": "git_cert *", - "comment": "The host certificate" - }, - { - "name": "valid", - "type": "int", - "comment": "Whether the libgit2 checks (OpenSSL or WinHTTP) think\n this certificate is valid" - }, - { - "name": "host", - "type": "const char *", - "comment": "Hostname of the host libgit2 connected to" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "git_cert *cert, int valid, const char *host, void *payload", - "sig": "git_cert *::int::const char *::void *", - "return": { - "type": "int", - "comment": " 0 to proceed with the connection, \n<\n 0 to fail the connection\n or > 0 to indicate that the callback refused to act and that\n the existing validity determination should be honored" - }, - "description": "

Callback for the user's custom certificate checks.

\n", - "comments": "" - }, - "git_checkout_notify_cb": { - "type": "callback", - "file": "git2/checkout.h", - "line": 252, - "lineto": 258, - "args": [ - { - "name": "why", - "type": "git_checkout_notify_t", - "comment": null - }, - { - "name": "path", - "type": "const char *", - "comment": null - }, - { - "name": "baseline", - "type": "const git_diff_file *", - "comment": null - }, - { - "name": "target", - "type": "const git_diff_file *", - "comment": null - }, - { - "name": "workdir", - "type": "const git_diff_file *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "git_checkout_notify_t why, const char *path, const git_diff_file *baseline, const git_diff_file *target, const git_diff_file *workdir, void *payload", - "sig": "git_checkout_notify_t::const char *::const git_diff_file *::const git_diff_file *::const git_diff_file *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Checkout notification callback function

\n", - "comments": "" - }, - "git_checkout_progress_cb": { - "type": "callback", - "file": "git2/checkout.h", - "line": 261, - "lineto": 265, - "args": [ - { - "name": "path", - "type": "const char *", - "comment": null - }, - { - "name": "completed_steps", - "type": "size_t", - "comment": null - }, - { - "name": "total_steps", - "type": "size_t", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const char *path, size_t completed_steps, size_t total_steps, void *payload", - "sig": "const char *::size_t::size_t::void *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Checkout progress notification function

\n", - "comments": "" - }, - "git_checkout_perfdata_cb": { - "type": "callback", - "file": "git2/checkout.h", - "line": 268, - "lineto": 270, - "args": [ - { - "name": "perfdata", - "type": "const git_checkout_perfdata *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_checkout_perfdata *perfdata, void *payload", - "sig": "const git_checkout_perfdata *::void *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Checkout perfdata notification function

\n", - "comments": "" - }, - "git_remote_create_cb": { - "type": "callback", - "file": "git2/clone.h", - "line": 69, - "lineto": 74, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "the resulting remote" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to create the remote" - }, - { - "name": "name", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote's url" - }, - { - "name": "payload", - "type": "void *", - "comment": "an opaque payload" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *name, const char *url, void *payload", - "sig": "git_remote **::git_repository *::const char *::const char *::void *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

The signature of a function matching git_remote_create, with an additional\n void* as a callback payload.

\n", - "comments": "

Callers of git_clone may provide a function matching this signature to override the remote creation and customization process during a clone operation.

\n" - }, - "git_repository_create_cb": { - "type": "callback", - "file": "git2/clone.h", - "line": 90, - "lineto": 94, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "the resulting repository" - }, - { - "name": "path", - "type": "const char *", - "comment": "path in which to create the repository" - }, - { - "name": "bare", - "type": "int", - "comment": "whether the repository is bare. This is the value from the clone options" - }, - { - "name": "payload", - "type": "void *", - "comment": "payload specified by the options" - } - ], - "argline": "git_repository **out, const char *path, int bare, void *payload", - "sig": "git_repository **::const char *::int::void *", - "return": { - "type": "int", - "comment": " 0, or a negative value to indicate error" - }, - "description": "

The signature of a function matchin git_repository_init, with an\n aditional void * as callback payload.

\n", - "comments": "

Callers of git_clone my provide a function matching this signature to override the repository creation and customization process during a clone operation.

\n" - }, - "git_commit_create_cb": { - "type": "callback", - "file": "git2/commit.h", - "line": 531, - "lineto": 540, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer that this callback will populate with the object\n id of the commit that is created" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "the author name and time of the commit" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "the committer name and time of the commit" - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": "the encoding of the given message, or NULL\n to assume UTF8" - }, - { - "name": "message", - "type": "const char *", - "comment": "the commit message" - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": "the tree to be committed" - }, - { - "name": "parent_count", - "type": "size_t", - "comment": "the number of parents for this commit" - }, - { - "name": "parents", - "type": "const git_commit *[]", - "comment": "the commit parents" - }, - { - "name": "payload", - "type": "void *", - "comment": "the payload pointer in the rebase options" - } - ], - "argline": "git_oid *out, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents, void *payload", - "sig": "git_oid *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]::void *", - "return": { - "type": "int", - "comment": " 0 if this callback has created the commit and populated the out\n parameter, GIT_PASSTHROUGH if the callback has not created a\n commit and wants the calling function to create the commit as\n if no callback had been specified, any other value to stop\n and return a failure" - }, - "description": "

Commit creation callback: used when a function is going to create\n commits (for example, in git_rebase_commit) to allow callers to\n override the commit creation behavior. For example, users may\n wish to sign commits by providing this information to\n git_commit_create_buffer, signing that buffer, then calling\n git_commit_create_with_signature. The resultant commit id\n should be set in the out object id parameter.

\n", - "comments": "" - }, - "git_config_foreach_cb": { - "type": "callback", - "file": "git2/config.h", - "line": 84, - "lineto": 84, - "args": [ - { - "name": "entry", - "type": "const git_config_entry *", - "comment": "the entry currently being enumerated" - }, - { - "name": "payload", - "type": "void *", - "comment": "a user-specified pointer" - } - ], - "argline": "const git_config_entry *entry, void *payload", - "sig": "const git_config_entry *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

A config enumeration callback

\n", - "comments": "" - }, - "git_credential_acquire_cb": { - "type": "callback", - "file": "git2/credential.h", - "line": 131, - "lineto": 136, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "url", - "type": "const char *", - "comment": "The resource for which we are demanding a credential." - }, - { - "name": "username_from_url", - "type": "const char *", - "comment": "The username that was embedded in a \"user\n@\nhost\"\n remote url, or NULL if not included." - }, - { - "name": "allowed_types", - "type": "unsigned int", - "comment": "A bitmask stating which credential types are OK to return." - }, - { - "name": "payload", - "type": "void *", - "comment": "The payload provided when specifying this callback." - } - ], - "argline": "git_credential **out, const char *url, const char *username_from_url, unsigned int allowed_types, void *payload", - "sig": "git_credential **::const char *::const char *::unsigned int::void *", - "return": { - "type": "int", - "comment": " 0 for success, \n<\n 0 to indicate an error, > 0 to indicate\n no credential was acquired" - }, - "description": "

Credential acquisition callback.

\n", - "comments": "

This callback is usually involved any time another system might need authentication. As such, you are expected to provide a valid git_credential object back, depending on allowed_types (a git_credential_t bitmask).

\n\n

Note that most authentication details are your responsibility - this callback will be called until the authentication succeeds, or you report an error. As such, it's easy to get in a loop if you fail to stop providing the same incorrect credentials.

\n" - }, - "git_commit_signing_cb": { - "type": "callback", - "file": "git2/deprecated.h", - "line": 276, - "lineto": 280, - "args": [ - { - "name": "signature", - "type": "git_buf *", - "comment": null - }, - { - "name": "signature_field", - "type": "git_buf *", - "comment": null - }, - { - "name": "commit_content", - "type": "const char *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "git_buf *signature, git_buf *signature_field, const char *commit_content, void *payload", - "sig": "git_buf *::git_buf *::const char *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Provide a commit signature during commit creation.

\n", - "comments": "

Callers should instead define a git_commit_create_cb that generates a commit buffer using git_commit_create_buffer, sign that buffer and call git_commit_create_with_signature.

\n" - }, - "git_headlist_cb": { - "type": "callback", - "file": "git2/deprecated.h", - "line": 847, - "lineto": 847, - "args": [ - { - "name": "rhead", - "type": "git_remote_head *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "git_remote_head *rhead, void *payload", - "sig": "git_remote_head *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for listing the remote heads

\n", - "comments": "" - }, - "git_diff_notify_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 345, - "lineto": 349, - "args": [ - { - "name": "diff_so_far", - "type": "const git_diff *", - "comment": null - }, - { - "name": "delta_to_add", - "type": "const git_diff_delta *", - "comment": null - }, - { - "name": "matched_pathspec", - "type": "const char *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff *diff_so_far, const git_diff_delta *delta_to_add, const char *matched_pathspec, void *payload", - "sig": "const git_diff *::const git_diff_delta *::const char *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Diff notification callback function.

\n", - "comments": "

The callback will be called for each file, just before the git_diff_delta gets inserted into the diff.

\n\n

When the callback: - returns < 0, the diff process will be aborted. - returns > 0, the delta will not be inserted into the diff, but the diff process continues. - returns 0, the delta is inserted into the diff, and the diff process continues.

\n" - }, - "git_diff_progress_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 361, - "lineto": 365, - "args": [ - { - "name": "diff_so_far", - "type": "const git_diff *", - "comment": "The diff being generated." - }, - { - "name": "old_path", - "type": "const char *", - "comment": "The path to the old file or NULL." - }, - { - "name": "new_path", - "type": "const char *", - "comment": "The path to the new file or NULL." - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff *diff_so_far, const char *old_path, const char *new_path, void *payload", - "sig": "const git_diff *::const char *::const char *::void *", - "return": { - "type": "int", - "comment": " Non-zero to abort the diff." - }, - "description": "

Diff progress callback.

\n", - "comments": "

Called before each file comparison.

\n" - }, - "git_diff_file_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 479, - "lineto": 482, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": "A pointer to the delta data for the file" - }, - { - "name": "progress", - "type": "float", - "comment": "Goes from 0 to 1 over the diff" - }, - { - "name": "payload", - "type": "void *", - "comment": "User-specified pointer from foreach function" - } - ], - "argline": "const git_diff_delta *delta, float progress, void *payload", - "sig": "const git_diff_delta *::float::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When iterating over a diff, callback that will be made per file.

\n", - "comments": "" - }, - "git_diff_binary_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 545, - "lineto": 548, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": null - }, - { - "name": "binary", - "type": "const git_diff_binary *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff_delta *delta, const git_diff_binary *binary, void *payload", - "sig": "const git_diff_delta *::const git_diff_binary *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When iterating over a diff, callback that will be made for\n binary content within the diff.

\n", - "comments": "" - }, - "git_diff_hunk_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 571, - "lineto": 574, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": null - }, - { - "name": "hunk", - "type": "const git_diff_hunk *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, void *payload", - "sig": "const git_diff_delta *::const git_diff_hunk *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When iterating over a diff, callback that will be made per hunk.

\n", - "comments": "" - }, - "git_diff_line_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 632, - "lineto": 636, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": null - }, - { - "name": "hunk", - "type": "const git_diff_hunk *", - "comment": null - }, - { - "name": "line", - "type": "const git_diff_line *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, const git_diff_line *line, void *payload", - "sig": "const git_diff_delta *::const git_diff_hunk *::const git_diff_line *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When iterating over a diff, callback that will be made per text diff\n line. In this context, the provided range will be NULL.

\n", - "comments": "

When printing a diff, callback that will be made to output each line of text. This uses some extra GIT_DIFF_LINE_... constants for output of lines of file and hunk headers.

\n" - }, - "git_index_matched_path_cb": { - "type": "callback", - "file": "git2/index.h", - "line": 135, - "lineto": 136, - "args": [ - { - "name": "path", - "type": "const char *", - "comment": null - }, - { - "name": "matched_pathspec", - "type": "const char *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const char *path, const char *matched_pathspec, void *payload", - "sig": "const char *::const char *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for APIs that add/remove/update files matching pathspec

\n", - "comments": "" - }, - "git_indexer_progress_cb": { - "type": "callback", - "file": "git2/indexer.h", - "line": 57, - "lineto": 57, - "args": [ - { - "name": "stats", - "type": "const git_indexer_progress *", - "comment": "Structure containing information about the state of the transfer" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by caller" - } - ], - "argline": "const git_indexer_progress *stats, void *payload", - "sig": "const git_indexer_progress *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Type for progress callbacks during indexing. Return a value less\n than zero to cancel the indexing or download.

\n", - "comments": "" - }, - "git_note_foreach_cb": { - "type": "callback", - "file": "git2/notes.h", - "line": 29, - "lineto": 30, - "args": [ - { - "name": "blob_id", - "type": "const git_oid *", - "comment": null - }, - { - "name": "annotated_object_id", - "type": "const git_oid *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_oid *blob_id, const git_oid *annotated_object_id, void *payload", - "sig": "const git_oid *::const git_oid *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for git_note_foreach.

\n", - "comments": "

Receives: - blob_id: Oid of the blob containing the message - annotated_object_id: Oid of the git object being annotated - payload: Payload data passed to git_note_foreach

\n" - }, - "git_odb_foreach_cb": { - "type": "callback", - "file": "git2/odb.h", - "line": 28, - "lineto": 28, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_oid *id, void *payload", - "sig": "const git_oid *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Function type for callbacks from git_odb_foreach.

\n", - "comments": "" - }, - "git_packbuilder_foreach_cb": { - "type": "callback", - "file": "git2/pack.h", - "line": 192, - "lineto": 192, - "args": [ - { - "name": "buf", - "type": "void *", - "comment": "A pointer to the object's data" - }, - { - "name": "size", - "type": "size_t", - "comment": "The size of the underlying object" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_packbuilder_foreach" - } - ], - "argline": "void *buf, size_t size, void *payload", - "sig": "void *::size_t::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over packed objects

\n", - "comments": "" - }, - "git_packbuilder_progress": { - "type": "callback", - "file": "git2/pack.h", - "line": 221, - "lineto": 225, - "args": [ - { - "name": "stage", - "type": "int", - "comment": null - }, - { - "name": "current", - "type": "uint32_t", - "comment": null - }, - { - "name": "total", - "type": "uint32_t", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "int stage, uint32_t current, uint32_t total, void *payload", - "sig": "int::uint32_t::uint32_t::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Packbuilder progress notification function

\n", - "comments": "" - }, - "git_reference_foreach_cb": { - "type": "callback", - "file": "git2/refs.h", - "line": 437, - "lineto": 437, - "args": [ - { - "name": "reference", - "type": "git_reference *", - "comment": "The reference object" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_reference_foreach" - } - ], - "argline": "git_reference *reference, void *payload", - "sig": "git_reference *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over references

\n", - "comments": "" - }, - "git_reference_foreach_name_cb": { - "type": "callback", - "file": "git2/refs.h", - "line": 448, - "lineto": 448, - "args": [ - { - "name": "name", - "type": "const char *", - "comment": "The reference name" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_reference_foreach_name" - } - ], - "argline": "const char *name, void *payload", - "sig": "const char *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over reference names

\n", - "comments": "" - }, - "git_push_transfer_progress_cb": { - "type": "callback", - "file": "git2/remote.h", - "line": 450, - "lineto": 454, - "args": [ - { - "name": "current", - "type": "unsigned int", - "comment": null - }, - { - "name": "total", - "type": "unsigned int", - "comment": null - }, - { - "name": "bytes", - "type": "size_t", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "unsigned int current, unsigned int total, size_t bytes, void *payload", - "sig": "unsigned int::unsigned int::size_t::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Push network progress notification function

\n", - "comments": "" - }, - "git_push_negotiation": { - "type": "callback", - "file": "git2/remote.h", - "line": 486, - "lineto": 486, - "args": [ - { - "name": "updates", - "type": "const git_push_update **", - "comment": "an array containing the updates which will be sent\n as commands to the destination." - }, - { - "name": "len", - "type": "size_t", - "comment": "number of elements in `updates`" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "const git_push_update **updates, size_t len, void *payload", - "sig": "const git_push_update **::size_t::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback used to inform of upcoming updates.

\n", - "comments": "" - }, - "git_push_update_reference_cb": { - "type": "callback", - "file": "git2/remote.h", - "line": 500, - "lineto": 500, - "args": [ - { - "name": "refname", - "type": "const char *", - "comment": "refname specifying to the remote ref" - }, - { - "name": "status", - "type": "const char *", - "comment": "status message sent from the remote" - }, - { - "name": "data", - "type": "void *", - "comment": "data provided by the caller" - } - ], - "argline": "const char *refname, const char *status, void *data", - "sig": "const char *::const char *::void *", - "return": { - "type": "int", - "comment": " 0 on success, otherwise an error" - }, - "description": "

Callback used to inform of the update status from the remote.

\n", - "comments": "

Called for each updated reference on push. If status is not NULL, the update was rejected by the remote server and status contains the reason given.

\n" - }, - "git_url_resolve_cb": { - "type": "callback", - "file": "git2/remote.h", - "line": 516, - "lineto": 516, - "args": [ - { - "name": "url_resolved", - "type": "git_buf *", - "comment": "The buffer to write the resolved URL to" - }, - { - "name": "url", - "type": "const char *", - "comment": "The URL to resolve" - }, - { - "name": "direction", - "type": "int", - "comment": "GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "git_buf *url_resolved, const char *url, int direction, void *payload", - "sig": "git_buf *::const char *::int::void *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_PASSTHROUGH or an error\n " - }, - "description": "

Callback to resolve URLs before connecting to remote

\n", - "comments": "

If you return GIT_PASSTHROUGH, you don't need to write anything to url_resolved.

\n" - }, - "git_remote_ready_cb": { - "type": "callback", - "file": "git2/remote.h", - "line": 529, - "lineto": 529, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "The remote to be connected" - }, - { - "name": "direction", - "type": "int", - "comment": "GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "git_remote *remote, int direction, void *payload", - "sig": "git_remote *::int::void *", - "return": { - "type": "int", - "comment": " 0 on success, or an error" - }, - "description": "

Callback invoked immediately before we attempt to connect to the\n given url. Callers may change the URL before the connection by\n calling git_remote_set_instance_url in the callback.

\n", - "comments": "" - }, - "git_repository_fetchhead_foreach_cb": { - "type": "callback", - "file": "git2/repository.h", - "line": 700, - "lineto": 704, - "args": [ - { - "name": "ref_name", - "type": "const char *", - "comment": "The reference name" - }, - { - "name": "remote_url", - "type": "const char *", - "comment": "The remote URL" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "The reference target OID" - }, - { - "name": "is_merge", - "type": "unsigned int", - "comment": "Was the reference the result of a merge" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_repository_fetchhead_foreach" - } - ], - "argline": "const char *ref_name, const char *remote_url, const git_oid *oid, unsigned int is_merge, void *payload", - "sig": "const char *::const char *::const git_oid *::unsigned int::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over each FETCH_HEAD entry

\n", - "comments": "" - }, - "git_repository_mergehead_foreach_cb": { - "type": "callback", - "file": "git2/repository.h", - "line": 731, - "lineto": 732, - "args": [ - { - "name": "oid", - "type": "const git_oid *", - "comment": "The merge OID" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_repository_mergehead_foreach" - } - ], - "argline": "const git_oid *oid, void *payload", - "sig": "const git_oid *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over each MERGE_HEAD entry

\n", - "comments": "" - }, - "git_revwalk_hide_cb": { - "type": "callback", - "file": "git2/revwalk.h", - "line": 281, - "lineto": 283, - "args": [ - { - "name": "commit_id", - "type": "const git_oid *", - "comment": "oid of Commit" - }, - { - "name": "payload", - "type": "void *", - "comment": "User-specified pointer to data to be passed as data payload" - } - ], - "argline": "const git_oid *commit_id, void *payload", - "sig": "const git_oid *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

This is a callback function that user can provide to hide a\n commit and its parents. If the callback function returns non-zero value,\n then this commit and its parents will be hidden.

\n", - "comments": "" - }, - "git_stash_apply_progress_cb": { - "type": "callback", - "file": "git2/stash.h", - "line": 115, - "lineto": 117, - "args": [ - { - "name": "progress", - "type": "git_stash_apply_progress_t", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "git_stash_apply_progress_t progress, void *payload", - "sig": "git_stash_apply_progress_t::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Stash application progress notification function.\n Return 0 to continue processing, or a negative value to\n abort the stash application.

\n", - "comments": "" - }, - "git_stash_cb": { - "type": "callback", - "file": "git2/stash.h", - "line": 201, - "lineto": 205, - "args": [ - { - "name": "index", - "type": "size_t", - "comment": "The position within the stash list. 0 points to the\n most recent stashed state." - }, - { - "name": "message", - "type": "const char *", - "comment": "The stash message." - }, - { - "name": "stash_id", - "type": "const git_oid *", - "comment": "The commit oid of the stashed state." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra parameter to callback function." - } - ], - "argline": "size_t index, const char *message, const git_oid *stash_id, void *payload", - "sig": "size_t::const char *::const git_oid *::void *", - "return": { - "type": "int", - "comment": " 0 to continue iterating or non-zero to stop." - }, - "description": "

This is a callback function you can provide to iterate over all the\n stashed states that will be invoked per entry.

\n", - "comments": "" - }, - "git_status_cb": { - "type": "callback", - "file": "git2/status.h", - "line": 63, - "lineto": 64, - "args": [ - { - "name": "path", - "type": "const char *", - "comment": null - }, - { - "name": "status_flags", - "type": "unsigned int", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const char *path, unsigned int status_flags, void *payload", - "sig": "const char *::unsigned int::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Function pointer to receive status on individual files

\n", - "comments": "

path is the relative path to the file from the root of the repository.

\n\n

status_flags is a combination of git_status_t values that apply.

\n\n

payload is the value you passed to the foreach function as payload.

\n" - }, - "git_submodule_cb": { - "type": "callback", - "file": "git2/submodule.h", - "line": 118, - "lineto": 119, - "args": [ - { - "name": "sm", - "type": "git_submodule *", - "comment": "git_submodule currently being visited" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the submodule" - }, - { - "name": "payload", - "type": "void *", - "comment": "value you passed to the foreach function as payload" - } - ], - "argline": "git_submodule *sm, const char *name, void *payload", - "sig": "git_submodule *::const char *::void *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Function pointer to receive each submodule

\n", - "comments": "" - }, - "git_tag_foreach_cb": { - "type": "callback", - "file": "git2/tag.h", - "line": 330, - "lineto": 330, - "args": [ - { - "name": "name", - "type": "const char *", - "comment": "The tag name" - }, - { - "name": "oid", - "type": "git_oid *", - "comment": "The tag's OID" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_tag_foreach" - } - ], - "argline": "const char *name, git_oid *oid, void *payload", - "sig": "const char *::git_oid *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over tag names

\n", - "comments": "" - }, - "git_trace_cb": { - "type": "callback", - "file": "git2/trace.h", - "line": 52, - "lineto": 52, - "args": [ - { - "name": "level", - "type": "git_trace_level_t", - "comment": null - }, - { - "name": "msg", - "type": "const char *", - "comment": null - } - ], - "argline": "git_trace_level_t level, const char *msg", - "sig": "git_trace_level_t::const char *", - "return": { - "type": "void", - "comment": null - }, - "description": "

An instance for a tracing function

\n", - "comments": "" - }, - "git_transport_message_cb": { - "type": "callback", - "file": "git2/transport.h", - "line": 34, - "lineto": 34, - "args": [ - { - "name": "str", - "type": "const char *", - "comment": "The message from the transport" - }, - { - "name": "len", - "type": "int", - "comment": "The length of the message" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "const char *str, int len, void *payload", - "sig": "const char *::int::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for messages received by the transport.

\n", - "comments": "

Return a negative value to cancel the network operation.

\n" - }, - "git_transport_cb": { - "type": "callback", - "file": "git2/transport.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "out", - "type": "git_transport **", - "comment": null - }, - { - "name": "owner", - "type": "git_remote *", - "comment": null - }, - { - "name": "param", - "type": "void *", - "comment": null - } - ], - "argline": "git_transport **out, git_remote *owner, void *param", - "sig": "git_transport **::git_remote *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Signature of a function which creates a transport

\n", - "comments": "" - }, - "git_treebuilder_filter_cb": { - "type": "callback", - "file": "git2/tree.h", - "line": 349, - "lineto": 350, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_tree_entry *entry, void *payload", - "sig": "const git_tree_entry *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for git_treebuilder_filter

\n", - "comments": "

The return value is treated as a boolean, with zero indicating that the entry should be left alone and any non-zero value meaning that the entry should be removed from the treebuilder list (i.e. filtered out).

\n" - }, - "git_treewalk_cb": { - "type": "callback", - "file": "git2/tree.h", - "line": 383, - "lineto": 384, - "args": [ - { - "name": "root", - "type": "const char *", - "comment": null - }, - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const char *root, const git_tree_entry *entry, void *payload", - "sig": "const char *::const git_tree_entry *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for the tree traversal method

\n", - "comments": "" - } - }, - "globals": {}, - "types": [ - [ - "git_annotated_commit", - { - "decl": "git_annotated_commit", - "type": "struct", - "value": "git_annotated_commit", - "file": "git2/types.h", - "line": 198, - "lineto": 198, - "tdef": "typedef", - "description": " Annotated commits, the input to merge and rebase. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_annotated_commit_free", - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_from_ref", - "git_annotated_commit_from_revspec", - "git_annotated_commit_id", - "git_annotated_commit_lookup", - "git_annotated_commit_ref", - "git_branch_create_from_annotated", - "git_merge", - "git_merge_analysis", - "git_merge_analysis_for_ref", - "git_rebase_init", - "git_repository_set_head_detached_from_annotated", - "git_reset_from_annotated" - ] - } - } - ], - [ - "git_apply_flags_t", - { - "decl": [ - "GIT_APPLY_CHECK" - ], - "type": "enum", - "file": "git2/apply.h", - "line": 57, - "lineto": 63, - "block": "GIT_APPLY_CHECK", - "tdef": "typedef", - "description": " Flags controlling the behavior of git_apply ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_APPLY_CHECK", - "comments": "

Don't actually make changes, just test that the patch applies.\n This is the equivalent of git apply --check.

\n", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_apply_location_t", - { - "decl": [ - "GIT_APPLY_LOCATION_WORKDIR", - "GIT_APPLY_LOCATION_INDEX", - "GIT_APPLY_LOCATION_BOTH" - ], - "type": "enum", - "file": "git2/apply.h", - "line": 113, - "lineto": 131, - "block": "GIT_APPLY_LOCATION_WORKDIR\nGIT_APPLY_LOCATION_INDEX\nGIT_APPLY_LOCATION_BOTH", - "tdef": "typedef", - "description": " Possible application locations for git_apply ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_APPLY_LOCATION_WORKDIR", - "comments": "

Apply the patch to the workdir, leaving the index untouched.\n This is the equivalent of git apply with no location argument.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_APPLY_LOCATION_INDEX", - "comments": "

Apply the patch to the index, leaving the working directory\n untouched. This is the equivalent of git apply --cached.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_APPLY_LOCATION_BOTH", - "comments": "

Apply the patch to both the working directory and the index.\n This is the equivalent of git apply --index.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [ - "git_apply" - ] - } - } - ], - [ - "git_apply_options", - { - "decl": [ - "unsigned int version", - "git_apply_delta_cb delta_cb", - "git_apply_hunk_cb hunk_cb", - "void * payload", - "unsigned int flags" - ], - "type": "struct", - "value": "git_apply_options", - "file": "git2/apply.h", - "line": 73, - "lineto": 87, - "block": "unsigned int version\ngit_apply_delta_cb delta_cb\ngit_apply_hunk_cb hunk_cb\nvoid * payload\nunsigned int flags", - "tdef": "typedef", - "description": " Apply options structure", - "comments": "

Initialize with GIT_APPLY_OPTIONS_INIT. Alternatively, you can use git_apply_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " The version " - }, - { - "type": "git_apply_delta_cb", - "name": "delta_cb", - "comments": " When applying a patch, callback that will be made per delta (file). " - }, - { - "type": "git_apply_hunk_cb", - "name": "hunk_cb", - "comments": " When applying a patch, callback that will be made per hunk. " - }, - { - "type": "void *", - "name": "payload", - "comments": " Payload passed to both delta_cb \n&\n hunk_cb. " - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " Bitmask of git_apply_flags_t " - } - ], - "used": { - "returns": [], - "needs": [ - "git_apply", - "git_apply_to_tree" - ] - } - } - ], - [ - "git_attr_options", - { - "decl": [ - "unsigned int version", - "unsigned int flags", - "git_oid * commit_id", - "git_oid attr_commit_id" - ], - "type": "struct", - "value": "git_attr_options", - "file": "git2/attr.h", - "line": 144, - "lineto": 161, - "block": "unsigned int version\nunsigned int flags\ngit_oid * commit_id\ngit_oid attr_commit_id", - "tdef": "typedef", - "description": " An options structure for querying attributes.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " A combination of GIT_ATTR_CHECK flags " - }, - { - "type": "git_oid *", - "name": "commit_id", - "comments": "" - }, - { - "type": "git_oid", - "name": "attr_commit_id", - "comments": " The commit to load attributes from, when\n `GIT_ATTR_CHECK_INCLUDE_COMMIT` is specified." - } - ], - "used": { - "returns": [], - "needs": [ - "git_attr_foreach_ext", - "git_attr_get_ext", - "git_attr_get_many_ext" - ] - } - } - ], - [ - "git_attr_value_t", - { - "decl": [ - "GIT_ATTR_VALUE_UNSPECIFIED", - "GIT_ATTR_VALUE_TRUE", - "GIT_ATTR_VALUE_FALSE", - "GIT_ATTR_VALUE_STRING" - ], - "type": "enum", - "file": "git2/attr.h", - "line": 82, - "lineto": 87, - "block": "GIT_ATTR_VALUE_UNSPECIFIED\nGIT_ATTR_VALUE_TRUE\nGIT_ATTR_VALUE_FALSE\nGIT_ATTR_VALUE_STRING", - "tdef": "typedef", - "description": " Possible states for an attribute", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_ATTR_VALUE_UNSPECIFIED", - "comments": "

The attribute has been left unspecified

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_ATTR_VALUE_TRUE", - "comments": "

The attribute has been set

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_ATTR_VALUE_FALSE", - "comments": "

The attribute has been unset

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_ATTR_VALUE_STRING", - "comments": "

This attribute has a value

\n", - "value": 3 - } - ], - "used": { - "returns": [ - "git_attr_value" - ], - "needs": [] - } - } - ], - [ - "git_blame", - { - "decl": "git_blame", - "type": "struct", - "value": "git_blame", - "file": "git2/blame.h", - "line": 202, - "lineto": 202, - "tdef": "typedef", - "description": " Opaque structure to hold blame results ", - "comments": "", - "used": { - "returns": [ - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline" - ], - "needs": [ - "git_blame_buffer", - "git_blame_file", - "git_blame_free", - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline", - "git_blame_get_hunk_count", - "git_blame_init_options", - "git_blame_options_init" - ] - } - } - ], - [ - "git_blame_flag_t", - { - "decl": [ - "GIT_BLAME_NORMAL", - "GIT_BLAME_TRACK_COPIES_SAME_FILE", - "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES", - "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES", - "GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES", - "GIT_BLAME_FIRST_PARENT", - "GIT_BLAME_USE_MAILMAP", - "GIT_BLAME_IGNORE_WHITESPACE" - ], - "type": "enum", - "file": "git2/blame.h", - "line": 26, - "lineto": 77, - "block": "GIT_BLAME_NORMAL\nGIT_BLAME_TRACK_COPIES_SAME_FILE\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES\nGIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES\nGIT_BLAME_FIRST_PARENT\nGIT_BLAME_USE_MAILMAP\nGIT_BLAME_IGNORE_WHITESPACE", - "tdef": "typedef", - "description": " Flags for indicating option behavior for git_blame APIs.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_BLAME_NORMAL", - "comments": "

Normal blame, the default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_BLAME_TRACK_COPIES_SAME_FILE", - "comments": "

Track lines that have moved within a file (like git blame -M).

\n\n

This is not yet implemented and reserved for future use.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES", - "comments": "

Track lines that have moved across files in the same commit\n (like git blame -C).

\n\n

This is not yet implemented and reserved for future use.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES", - "comments": "

Track lines that have been copied from another file that exists\n in the same commit (like git blame -CC). Implies SAME_FILE.

\n\n

This is not yet implemented and reserved for future use.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES", - "comments": "

Track lines that have been copied from another file that exists in\n any commit (like git blame -CCC). Implies SAME_COMMIT_COPIES.

\n\n

This is not yet implemented and reserved for future use.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_BLAME_FIRST_PARENT", - "comments": "

Restrict the search of commits to those reachable following only\n the first parents.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_BLAME_USE_MAILMAP", - "comments": "

Use mailmap file to map author and committer names and email\n addresses to canonical real names and email addresses. The\n mailmap will be read from the working directory, or HEAD in a\n bare repository.

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_BLAME_IGNORE_WHITESPACE", - "comments": "

Ignore whitespace differences

\n", - "value": 64 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_blame_hunk", - { - "decl": [ - "size_t lines_in_hunk", - "git_oid final_commit_id", - "size_t final_start_line_number", - "git_signature * final_signature", - "git_oid orig_commit_id", - "const char * orig_path", - "size_t orig_start_line_number", - "git_signature * orig_signature", - "char boundary" - ], - "type": "struct", - "value": "git_blame_hunk", - "file": "git2/blame.h", - "line": 145, - "lineto": 198, - "block": "size_t lines_in_hunk\ngit_oid final_commit_id\nsize_t final_start_line_number\ngit_signature * final_signature\ngit_oid orig_commit_id\nconst char * orig_path\nsize_t orig_start_line_number\ngit_signature * orig_signature\nchar boundary", - "tdef": "typedef", - "description": " Structure that represents a blame hunk.", - "comments": "", - "fields": [ - { - "type": "size_t", - "name": "lines_in_hunk", - "comments": " The number of lines in this hunk." - }, - { - "type": "git_oid", - "name": "final_commit_id", - "comments": " The OID of the commit where this line was last changed." - }, - { - "type": "size_t", - "name": "final_start_line_number", - "comments": " The 1-based line number where this hunk begins, in the final version\n of the file." - }, - { - "type": "git_signature *", - "name": "final_signature", - "comments": " The author of `final_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." - }, - { - "type": "git_oid", - "name": "orig_commit_id", - "comments": " The OID of the commit where this hunk was found.\n This will usually be the same as `final_commit_id`, except when\n `GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES` has been specified." - }, - { - "type": "const char *", - "name": "orig_path", - "comments": " The path to the file where this hunk originated, as of the commit\n specified by `orig_commit_id`." - }, - { - "type": "size_t", - "name": "orig_start_line_number", - "comments": " The 1-based line number where this hunk begins in the file named by\n `orig_path` in the commit specified by `orig_commit_id`." - }, - { - "type": "git_signature *", - "name": "orig_signature", - "comments": " The author of `orig_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." - }, - { - "type": "char", - "name": "boundary", - "comments": " The 1 iff the hunk has been tracked to a boundary commit (the root,\n or the commit specified in git_blame_options.oldest_commit)" - } - ], - "used": { - "returns": [ - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline" - ], - "needs": [] - } - } - ], - [ - "git_blame_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "uint16_t min_match_characters", - "git_oid newest_commit", - "git_oid oldest_commit", - "size_t min_line", - "size_t max_line" - ], - "type": "struct", - "value": "git_blame_options", - "file": "git2/blame.h", - "line": 86, - "lineto": 123, - "block": "unsigned int version\nuint32_t flags\nuint16_t min_match_characters\ngit_oid newest_commit\ngit_oid oldest_commit\nsize_t min_line\nsize_t max_line", - "tdef": "typedef", - "description": " Blame options structure", - "comments": "

Initialize with GIT_BLAME_OPTIONS_INIT. Alternatively, you can use git_blame_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of `git_blame_flag_t` " - }, - { - "type": "uint16_t", - "name": "min_match_characters", - "comments": " The lower bound on the number of alphanumeric characters that\n must be detected as moving/copying within a file for it to\n associate those lines with the parent commit. The default value\n is 20.\n\n This value only takes effect if any of the `GIT_BLAME_TRACK_COPIES_*`\n flags are specified." - }, - { - "type": "git_oid", - "name": "newest_commit", - "comments": " The id of the newest commit to consider. The default is HEAD. " - }, - { - "type": "git_oid", - "name": "oldest_commit", - "comments": " The id of the oldest commit to consider.\n The default is the first commit encountered with a NULL parent." - }, - { - "type": "size_t", - "name": "min_line", - "comments": " The first line in the file to blame.\n The default is 1 (line numbers start with 1)." - }, - { - "type": "size_t", - "name": "max_line", - "comments": " The last line in the file to blame.\n The default is the last line of the file." - } - ], - "used": { - "returns": [], - "needs": [ - "git_blame_file", - "git_blame_init_options", - "git_blame_options_init" - ] - } - } - ], - [ - "git_blob", - { - "decl": "git_blob", - "type": "struct", - "value": "git_blob", - "file": "git2/types.h", - "line": 133, - "lineto": 133, - "tdef": "typedef", - "description": " In-memory representation of a blob object. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_blob_dup", - "git_blob_filter", - "git_blob_filter_options_init", - "git_blob_filtered_content", - "git_blob_free", - "git_blob_id", - "git_blob_is_binary", - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_blob_owner", - "git_blob_rawcontent", - "git_blob_rawsize", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_filter_list_apply_to_blob", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_blob", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs" - ] - } - } - ], - [ - "git_blob_filter_flag_t", - { - "decl": [ - "GIT_BLOB_FILTER_CHECK_FOR_BINARY", - "GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES", - "GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD", - "GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT" - ], - "type": "enum", - "file": "git2/blob.h", - "line": 102, - "lineto": 123, - "block": "GIT_BLOB_FILTER_CHECK_FOR_BINARY\nGIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", - "tdef": "typedef", - "description": " Flags to control the functionality of `git_blob_filter`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_BLOB_FILTER_CHECK_FOR_BINARY", - "comments": "

When set, filters will not be applied to binary files.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES", - "comments": "

When set, filters will not load configuration from the\n system-wide gitattributes in /etc (or system equivalent).

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD", - "comments": "

When set, filters will be loaded from a .gitattributes file\n in the HEAD commit.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", - "comments": "

When set, filters will be loaded from a .gitattributes file\n in the specified commit.

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_blob_filter_options", - { - "decl": [ - "int version", - "uint32_t flags", - "git_oid * commit_id", - "git_oid attr_commit_id" - ], - "type": "struct", - "value": "git_blob_filter_options", - "file": "git2/blob.h", - "line": 132, - "lineto": 149, - "block": "int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", - "tdef": "typedef", - "description": " The options used when applying filter options to a file.", - "comments": "

Initialize with GIT_BLOB_FILTER_OPTIONS_INIT. Alternatively, you can use git_blob_filter_options_init.

\n", - "fields": [ - { - "type": "int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " Flags to control the filtering process, see `git_blob_filter_flag_t` above " - }, - { - "type": "git_oid *", - "name": "commit_id", - "comments": "" - }, - { - "type": "git_oid", - "name": "attr_commit_id", - "comments": " The commit to load attributes from, when\n `GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT` is specified." - } - ], - "used": { - "returns": [], - "needs": [ - "git_blob_filter", - "git_blob_filter_options_init" - ] - } - } - ], - [ - "git_branch_iterator", - { - "decl": "git_branch_iterator", - "type": "struct", - "value": "git_branch_iterator", - "file": "git2/branch.h", - "line": 88, - "lineto": 88, - "tdef": "typedef", - "description": " Iterator type for branches ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_branch_iterator_free", - "git_branch_iterator_new", - "git_branch_next" - ] - } - } - ], - [ - "git_branch_t", - { - "decl": [ - "GIT_BRANCH_LOCAL", - "GIT_BRANCH_REMOTE", - "GIT_BRANCH_ALL" - ], - "type": "enum", - "file": "git2/types.h", - "line": 215, - "lineto": 219, - "block": "GIT_BRANCH_LOCAL\nGIT_BRANCH_REMOTE\nGIT_BRANCH_ALL", - "tdef": "typedef", - "description": " Basic type of any Git branch. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_BRANCH_LOCAL", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_BRANCH_REMOTE", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_BRANCH_ALL", - "comments": "", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [ - "git_branch_iterator_new", - "git_branch_lookup", - "git_branch_next" - ] - } - } - ], - [ - "git_buf", - { - "decl": [ - "char * ptr", - "size_t asize", - "size_t size" - ], - "type": "struct", - "value": "git_buf", - "file": "git2/buffer.h", - "line": 39, - "lineto": 61, - "block": "char * ptr\nsize_t asize\nsize_t size", - "tdef": "typedef", - "description": " A data buffer for exporting data from libgit2", - "comments": "

Sometimes libgit2 wants to return an allocated data buffer to the caller and have the caller take responsibility for freeing that memory. This can be awkward if the caller does not have easy access to the same allocation functions that libgit2 is using. In those cases, libgit2 will fill in a git_buf and the caller can use git_buf_dispose() to release it when they are done.

\n\n

A git_buf may also be used for the caller to pass in a reference to a block of memory they hold. In this case, libgit2 will not resize or free the memory, but will read from it as needed.

\n\n

Some APIs may occasionally do something slightly unusual with a buffer, such as setting ptr to a value that was passed in by the user. In those cases, the behavior will be clearly documented by the API.

\n", - "fields": [ - { - "type": "char *", - "name": "ptr", - "comments": " The buffer contents.\n\n `ptr` points to the start of the allocated memory. If it is NULL,\n then the `git_buf` is considered empty and libgit2 will feel free\n to overwrite it with new data." - }, - { - "type": "size_t", - "name": "asize", - "comments": " `asize` holds the known total amount of allocated memory if the `ptr`\n was allocated by libgit2. It may be larger than `size`. If `ptr`\n was not allocated by libgit2 and should not be resized and/or freed,\n then `asize` will be set to zero." - }, - { - "type": "size_t", - "name": "size", - "comments": " `size` holds the size (in bytes) of the data that is actually used." - } - ], - "used": { - "returns": [], - "needs": [ - "git_blob_filter", - "git_blob_filtered_content", - "git_branch_remote_name", - "git_branch_upstream_merge", - "git_branch_upstream_name", - "git_branch_upstream_remote", - "git_buf_contains_nul", - "git_buf_dispose", - "git_buf_free", - "git_buf_grow", - "git_buf_is_binary", - "git_buf_set", - "git_commit_create_buffer", - "git_commit_extract_signature", - "git_commit_header_field", - "git_commit_signing_cb", - "git_config_find_global", - "git_config_find_programdata", - "git_config_find_system", - "git_config_find_xdg", - "git_config_get_path", - "git_config_get_string_buf", - "git_config_parse_path", - "git_describe_format", - "git_diff_commit_as_email", - "git_diff_format_email", - "git_diff_stats_to_buf", - "git_diff_to_buf", - "git_filter_list_apply_to_blob", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_data", - "git_filter_list_apply_to_file", - "git_filter_list_stream_data", - "git_message_prettify", - "git_note_default_ref", - "git_object_short_id", - "git_packbuilder_write_buf", - "git_patch_to_buf", - "git_refspec_rtransform", - "git_refspec_transform", - "git_remote_default_branch", - "git_repository_discover", - "git_repository_item_path", - "git_repository_message", - "git_submodule_resolve_url", - "git_treebuilder_write_with_buffer", - "git_url_resolve_cb", - "git_worktree_is_locked" - ] - } - } - ], - [ - "git_cert", - { - "decl": "git_cert", - "type": "struct", - "value": "git_cert", - "file": "git2/types.h", - "line": 262, - "lineto": 262, - "block": "git_cert_t cert_type", - "tdef": "typedef", - "description": " Parent type for `git_cert_hostkey` and `git_cert_x509`.", - "comments": "", - "fields": [ - { - "type": "git_cert_t", - "name": "cert_type", - "comments": " Type of certificate. A `GIT_CERT_` value." - } - ], - "used": { - "returns": [], - "needs": [ - "git_transport_certificate_check_cb" - ] - } - } - ], - [ - "git_cert_hostkey", - { - "decl": [ - "git_cert parent", - "git_cert_ssh_t type", - "unsigned char [16] hash_md5", - "unsigned char [20] hash_sha1", - "unsigned char [32] hash_sha256", - "git_cert_ssh_raw_type_t raw_type", - "const char * hostkey", - "size_t hostkey_len" - ], - "type": "struct", - "value": "git_cert_hostkey", - "file": "git2/cert.h", - "line": 108, - "lineto": 151, - "block": "git_cert parent\ngit_cert_ssh_t type\nunsigned char [16] hash_md5\nunsigned char [20] hash_sha1\nunsigned char [32] hash_sha256\ngit_cert_ssh_raw_type_t raw_type\nconst char * hostkey\nsize_t hostkey_len", - "tdef": "typedef", - "description": " Hostkey information taken from libssh2", - "comments": "", - "fields": [ - { - "type": "git_cert", - "name": "parent", - "comments": " The parent cert " - }, - { - "type": "git_cert_ssh_t", - "name": "type", - "comments": " A bitmask containing the available fields." - }, - { - "type": "unsigned char [16]", - "name": "hash_md5", - "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_MD5` set, this will\n have the MD5 hash of the hostkey." - }, - { - "type": "unsigned char [20]", - "name": "hash_sha1", - "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_SHA1` set, this will\n have the SHA-1 hash of the hostkey." - }, - { - "type": "unsigned char [32]", - "name": "hash_sha256", - "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_SHA256` set, this will\n have the SHA-256 hash of the hostkey." - }, - { - "type": "git_cert_ssh_raw_type_t", - "name": "raw_type", - "comments": " Raw hostkey type. If `type` has `GIT_CERT_SSH_RAW` set, this will\n have the type of the raw hostkey." - }, - { - "type": "const char *", - "name": "hostkey", - "comments": " Pointer to the raw hostkey. If `type` has `GIT_CERT_SSH_RAW` set,\n this will have the raw contents of the hostkey." - }, - { - "type": "size_t", - "name": "hostkey_len", - "comments": " Raw hostkey length. If `type` has `GIT_CERT_SSH_RAW` set, this will\n have the length of the raw contents of the hostkey." - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_cert_ssh_t", - { - "decl": [ - "GIT_CERT_SSH_MD5", - "GIT_CERT_SSH_SHA1", - "GIT_CERT_SSH_SHA256", - "GIT_CERT_SSH_RAW" - ], - "type": "enum", - "file": "git2/cert.h", - "line": 77, - "lineto": 86, - "block": "GIT_CERT_SSH_MD5\nGIT_CERT_SSH_SHA1\nGIT_CERT_SSH_SHA256\nGIT_CERT_SSH_RAW", - "tdef": "typedef", - "description": " Type of SSH host fingerprint", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_CERT_SSH_MD5", - "comments": "

MD5 is available

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CERT_SSH_SHA1", - "comments": "

SHA-1 is available

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CERT_SSH_SHA256", - "comments": "

SHA-256 is available

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CERT_SSH_RAW", - "comments": "

Raw hostkey is available

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_cert_t", - { - "decl": [ - "GIT_CERT_NONE", - "GIT_CERT_X509", - "GIT_CERT_HOSTKEY_LIBSSH2", - "GIT_CERT_STRARRAY" - ], - "type": "enum", - "file": "git2/cert.h", - "line": 25, - "lineto": 48, - "block": "GIT_CERT_NONE\nGIT_CERT_X509\nGIT_CERT_HOSTKEY_LIBSSH2\nGIT_CERT_STRARRAY\nGIT_CERT_NONE\nGIT_CERT_X509\nGIT_CERT_HOSTKEY_LIBSSH2\nGIT_CERT_STRARRAY", - "tdef": "typedef", - "description": " Type of host certificate structure that is passed to the check callback", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_CERT_NONE", - "comments": "

No information about the certificate is available. This may\n happen when using curl.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CERT_X509", - "comments": "

The data argument to the callback will be a pointer to\n the DER-encoded data.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CERT_HOSTKEY_LIBSSH2", - "comments": "

The data argument to the callback will be a pointer to a\n git_cert_hostkey structure.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CERT_STRARRAY", - "comments": "

The data argument to the callback will be a pointer to a\n git_strarray with name:content strings containing\n information about the certificate. This is used when using\n curl.

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_cert_x509", - { - "decl": [ - "git_cert parent", - "void * data", - "size_t len" - ], - "type": "struct", - "value": "git_cert_x509", - "file": "git2/cert.h", - "line": 156, - "lineto": 168, - "block": "git_cert parent\nvoid * data\nsize_t len", - "tdef": "typedef", - "description": " X.509 certificate information", - "comments": "", - "fields": [ - { - "type": "git_cert", - "name": "parent", - "comments": " The parent cert " - }, - { - "type": "void *", - "name": "data", - "comments": " Pointer to the X.509 certificate data" - }, - { - "type": "size_t", - "name": "len", - "comments": " Length of the memory block pointed to by `data`." - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_checkout_notify_t", - { - "decl": [ - "GIT_CHECKOUT_NOTIFY_NONE", - "GIT_CHECKOUT_NOTIFY_CONFLICT", - "GIT_CHECKOUT_NOTIFY_DIRTY", - "GIT_CHECKOUT_NOTIFY_UPDATED", - "GIT_CHECKOUT_NOTIFY_UNTRACKED", - "GIT_CHECKOUT_NOTIFY_IGNORED", - "GIT_CHECKOUT_NOTIFY_ALL" - ], - "type": "enum", - "file": "git2/checkout.h", - "line": 211, - "lineto": 242, - "block": "GIT_CHECKOUT_NOTIFY_NONE\nGIT_CHECKOUT_NOTIFY_CONFLICT\nGIT_CHECKOUT_NOTIFY_DIRTY\nGIT_CHECKOUT_NOTIFY_UPDATED\nGIT_CHECKOUT_NOTIFY_UNTRACKED\nGIT_CHECKOUT_NOTIFY_IGNORED\nGIT_CHECKOUT_NOTIFY_ALL", - "tdef": "typedef", - "description": " Checkout notification flags", - "comments": "

Checkout will invoke an options notification callback (notify_cb) for certain cases - you pick which ones via notify_flags:

\n\n

Returning a non-zero value from this callback will cancel the checkout. The non-zero return value will be propagated back and returned by the git_checkout_... call.

\n\n

Notification callbacks are made prior to modifying any files on disk, so canceling on any notification will still happen prior to any files being modified.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_NONE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_CONFLICT", - "comments": "

Invokes checkout on conflicting paths.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_DIRTY", - "comments": "

Notifies about "dirty" files, i.e. those that do not need an update\n but no longer match the baseline. Core git displays these files when\n checkout runs, but won't stop the checkout.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_UPDATED", - "comments": "

Sends notification for any file changed.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_UNTRACKED", - "comments": "

Notifies about untracked files.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_IGNORED", - "comments": "

Notifies about ignored files.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_ALL", - "comments": "

Notifies about ignored files.

\n", - "value": 65535 - } - ], - "used": { - "returns": [], - "needs": [ - "git_checkout_notify_cb" - ] - } - } - ], - [ - "git_checkout_options", - { - "decl": [ - "unsigned int version", - "unsigned int checkout_strategy", - "int disable_filters", - "unsigned int dir_mode", - "unsigned int file_mode", - "int file_open_flags", - "unsigned int notify_flags", - "git_checkout_notify_cb notify_cb", - "void * notify_payload", - "git_checkout_progress_cb progress_cb", - "void * progress_payload", - "git_strarray paths", - "git_tree * baseline", - "git_index * baseline_index", - "const char * target_directory", - "const char * ancestor_label", - "const char * our_label", - "const char * their_label", - "git_checkout_perfdata_cb perfdata_cb", - "void * perfdata_payload" - ], - "type": "struct", - "value": "git_checkout_options", - "file": "git2/checkout.h", - "line": 279, - "lineto": 342, - "block": "unsigned int version\nunsigned int checkout_strategy\nint disable_filters\nunsigned int dir_mode\nunsigned int file_mode\nint file_open_flags\nunsigned int notify_flags\ngit_checkout_notify_cb notify_cb\nvoid * notify_payload\ngit_checkout_progress_cb progress_cb\nvoid * progress_payload\ngit_strarray paths\ngit_tree * baseline\ngit_index * baseline_index\nconst char * target_directory\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_checkout_perfdata_cb perfdata_cb\nvoid * perfdata_payload", - "tdef": "typedef", - "description": " Checkout options structure", - "comments": "

Initialize with GIT_CHECKOUT_OPTIONS_INIT. Alternatively, you can use git_checkout_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " The version " - }, - { - "type": "unsigned int", - "name": "checkout_strategy", - "comments": " default will be a safe checkout " - }, - { - "type": "int", - "name": "disable_filters", - "comments": " don't apply filters like CRLF conversion " - }, - { - "type": "unsigned int", - "name": "dir_mode", - "comments": " default is 0755 " - }, - { - "type": "unsigned int", - "name": "file_mode", - "comments": " default is 0644 or 0755 as dictated by blob " - }, - { - "type": "int", - "name": "file_open_flags", - "comments": " default is O_CREAT | O_TRUNC | O_WRONLY " - }, - { - "type": "unsigned int", - "name": "notify_flags", - "comments": " see `git_checkout_notify_t` above " - }, - { - "type": "git_checkout_notify_cb", - "name": "notify_cb", - "comments": " Optional callback to get notifications on specific file states.\n " - }, - { - "type": "void *", - "name": "notify_payload", - "comments": " Payload passed to notify_cb " - }, - { - "type": "git_checkout_progress_cb", - "name": "progress_cb", - "comments": " Optional callback to notify the consumer of checkout progress. " - }, - { - "type": "void *", - "name": "progress_payload", - "comments": " Payload passed to progress_cb " - }, - { - "type": "git_strarray", - "name": "paths", - "comments": " A list of wildmatch patterns or paths.\n\n By default, all paths are processed. If you pass an array of wildmatch\n patterns, those will be used to filter which paths should be taken into\n account.\n\n Use GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH to treat as a simple list." - }, - { - "type": "git_tree *", - "name": "baseline", - "comments": " The expected content of the working directory; defaults to HEAD.\n\n If the working directory does not match this baseline information,\n that will produce a checkout conflict." - }, - { - "type": "git_index *", - "name": "baseline_index", - "comments": " Like `baseline` above, though expressed as an index. This\n option overrides `baseline`." - }, - { - "type": "const char *", - "name": "target_directory", - "comments": " alternative checkout path to workdir " - }, - { - "type": "const char *", - "name": "ancestor_label", - "comments": " the name of the common ancestor side of conflicts " - }, - { - "type": "const char *", - "name": "our_label", - "comments": " the name of the \"our\" side of conflicts " - }, - { - "type": "const char *", - "name": "their_label", - "comments": " the name of the \"their\" side of conflicts " - }, - { - "type": "git_checkout_perfdata_cb", - "name": "perfdata_cb", - "comments": " Optional callback to notify the consumer of performance data. " - }, - { - "type": "void *", - "name": "perfdata_payload", - "comments": " Payload passed to perfdata_cb " - } - ], - "used": { - "returns": [], - "needs": [ - "git_checkout_head", - "git_checkout_index", - "git_checkout_options_init", - "git_checkout_tree", - "git_merge", - "git_reset", - "git_reset_from_annotated" - ] - } - } - ], - [ - "git_checkout_perfdata", - { - "decl": [ - "size_t mkdir_calls", - "size_t stat_calls", - "size_t chmod_calls" - ], - "type": "struct", - "value": "git_checkout_perfdata", - "file": "git2/checkout.h", - "line": 245, - "lineto": 249, - "block": "size_t mkdir_calls\nsize_t stat_calls\nsize_t chmod_calls", - "tdef": "typedef", - "description": " Checkout performance-reporting structure ", - "comments": "", - "fields": [ - { - "type": "size_t", - "name": "mkdir_calls", - "comments": "" - }, - { - "type": "size_t", - "name": "stat_calls", - "comments": "" - }, - { - "type": "size_t", - "name": "chmod_calls", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_checkout_perfdata_cb" - ] - } - } - ], - [ - "git_checkout_strategy_t", - { - "decl": [ - "GIT_CHECKOUT_NONE", - "GIT_CHECKOUT_SAFE", - "GIT_CHECKOUT_FORCE", - "GIT_CHECKOUT_RECREATE_MISSING", - "GIT_CHECKOUT_ALLOW_CONFLICTS", - "GIT_CHECKOUT_REMOVE_UNTRACKED", - "GIT_CHECKOUT_REMOVE_IGNORED", - "GIT_CHECKOUT_UPDATE_ONLY", - "GIT_CHECKOUT_DONT_UPDATE_INDEX", - "GIT_CHECKOUT_NO_REFRESH", - "GIT_CHECKOUT_SKIP_UNMERGED", - "GIT_CHECKOUT_USE_OURS", - "GIT_CHECKOUT_USE_THEIRS", - "GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH", - "GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES", - "GIT_CHECKOUT_DONT_OVERWRITE_IGNORED", - "GIT_CHECKOUT_CONFLICT_STYLE_MERGE", - "GIT_CHECKOUT_CONFLICT_STYLE_DIFF3", - "GIT_CHECKOUT_DONT_REMOVE_EXISTING", - "GIT_CHECKOUT_DONT_WRITE_INDEX", - "GIT_CHECKOUT_DRY_RUN", - "GIT_CHECKOUT_UPDATE_SUBMODULES", - "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED" - ], - "type": "enum", - "file": "git2/checkout.h", - "line": 106, - "lineto": 195, - "block": "GIT_CHECKOUT_NONE\nGIT_CHECKOUT_SAFE\nGIT_CHECKOUT_FORCE\nGIT_CHECKOUT_RECREATE_MISSING\nGIT_CHECKOUT_ALLOW_CONFLICTS\nGIT_CHECKOUT_REMOVE_UNTRACKED\nGIT_CHECKOUT_REMOVE_IGNORED\nGIT_CHECKOUT_UPDATE_ONLY\nGIT_CHECKOUT_DONT_UPDATE_INDEX\nGIT_CHECKOUT_NO_REFRESH\nGIT_CHECKOUT_SKIP_UNMERGED\nGIT_CHECKOUT_USE_OURS\nGIT_CHECKOUT_USE_THEIRS\nGIT_CHECKOUT_DISABLE_PATHSPEC_MATCH\nGIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES\nGIT_CHECKOUT_DONT_OVERWRITE_IGNORED\nGIT_CHECKOUT_CONFLICT_STYLE_MERGE\nGIT_CHECKOUT_CONFLICT_STYLE_DIFF3\nGIT_CHECKOUT_DONT_REMOVE_EXISTING\nGIT_CHECKOUT_DONT_WRITE_INDEX\nGIT_CHECKOUT_DRY_RUN\nGIT_CHECKOUT_UPDATE_SUBMODULES\nGIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", - "tdef": "typedef", - "description": " Checkout behavior flags", - "comments": "

In libgit2, checkout is used to update the working directory and index to match a target tree. Unlike git checkout, it does not move the HEAD commit for you - use git_repository_set_head or the like to do that.

\n\n

Checkout looks at (up to) four things: the "target" tree you want to check out, the "baseline" tree of what was checked out previously, the working directory for actual files, and the index for staged changes.

\n\n

You give checkout one of three strategies for update:

\n\n
    \n
  • GIT_CHECKOUT_NONE is a dry-run strategy that checks for conflicts, etc., but doesn't make any actual changes.

  • \n
  • GIT_CHECKOUT_FORCE is at the opposite extreme, taking any action to make the working directory match the target (including potentially discarding modified files).

  • \n
  • GIT_CHECKOUT_SAFE is between these two options, it will only make modifications that will not lose changes.

    \n\n
                     |  target == baseline   |  target != baseline  |    ---------------------|-----------------------|----------------------|     workdir == baseline |       no action       |  create, update, or  |                         |                       |     delete file      |    ---------------------|-----------------------|----------------------|     workdir exists and  |       no action       |   conflict (notify   |       is != baseline    | notify dirty MODIFIED | and cancel checkout) |    ---------------------|-----------------------|----------------------|      workdir missing,   | notify dirty DELETED  |     create file      |      baseline present   |                       |                      |    ---------------------|-----------------------|----------------------|\n
  • \n
\n\n

To emulate git checkout, use GIT_CHECKOUT_SAFE with a checkout notification callback (see below) that displays information about dirty files. The default behavior will cancel checkout on conflicts.

\n\n

To emulate git checkout-index, use GIT_CHECKOUT_SAFE with a notification callback that cancels the operation if a dirty-but-existing file is found in the working directory. This core git command isn't quite "force" but is sensitive about some types of changes.

\n\n

To emulate git checkout -f, use GIT_CHECKOUT_FORCE.

\n\n

There are some additional flags to modify the behavior of checkout:

\n\n
    \n
  • GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates even if there are conflicts (instead of cancelling the checkout).

  • \n
  • GIT_CHECKOUT_REMOVE_UNTRACKED means remove untracked files (i.e. not in target, baseline, or index, and not ignored) from the working dir.

  • \n
  • GIT_CHECKOUT_REMOVE_IGNORED means remove ignored files (that are also untracked) from the working directory as well.

  • \n
  • GIT_CHECKOUT_UPDATE_ONLY means to only update the content of files that already exist. Files will not be created nor deleted. This just skips applying adds, deletes, and typechanges.

  • \n
  • GIT_CHECKOUT_DONT_UPDATE_INDEX prevents checkout from writing the updated files' information to the index.

  • \n
  • Normally, checkout will reload the index and git attributes from disk before any operations. GIT_CHECKOUT_NO_REFRESH prevents this reload.

  • \n
  • Unmerged index entries are conflicts. GIT_CHECKOUT_SKIP_UNMERGED skips files with unmerged index entries instead. GIT_CHECKOUT_USE_OURS and GIT_CHECKOUT_USE_THEIRS to proceed with the checkout using either the stage 2 ("ours") or stage 3 ("theirs") version of files in the index.

  • \n
  • GIT_CHECKOUT_DONT_OVERWRITE_IGNORED prevents ignored files from being overwritten. Normally, files that are ignored in the working directory are not considered "precious" and may be overwritten if the checkout target contains that file.

  • \n
  • GIT_CHECKOUT_DONT_REMOVE_EXISTING prevents checkout from removing files or folders that fold to the same name on case insensitive filesystems. This can cause files to retain their existing names and write through existing symbolic links.

  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_CHECKOUT_NONE", - "comments": "

default is a dry run, no actual updates

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_SAFE", - "comments": "

Allow safe updates that cannot overwrite uncommitted data.\n If the uncommitted changes don't conflict with the checked out files,\n the checkout will still proceed, leaving the changes intact.

\n\n

Mutually exclusive with GIT_CHECKOUT_FORCE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_FORCE", - "comments": "

Allow all updates to force working directory to look like index.

\n\n

Mutually exclusive with GIT_CHECKOUT_SAFE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_RECREATE_MISSING", - "comments": "

Allow checkout to recreate missing files

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_ALLOW_CONFLICTS", - "comments": "

Allow checkout to make safe updates even if conflicts are found

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_REMOVE_UNTRACKED", - "comments": "

Remove untracked files not in index (that are not ignored)

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_REMOVE_IGNORED", - "comments": "

Remove ignored files not in index

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_UPDATE_ONLY", - "comments": "

Only update existing files, don't create new ones

\n", - "value": 128 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DONT_UPDATE_INDEX", - "comments": "

Normally checkout updates index entries as it goes; this stops that.\n Implies GIT_CHECKOUT_DONT_WRITE_INDEX.

\n", - "value": 256 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NO_REFRESH", - "comments": "

Don't refresh index/config/etc before doing checkout

\n", - "value": 512 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_SKIP_UNMERGED", - "comments": "

Allow checkout to skip unmerged files

\n", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_USE_OURS", - "comments": "

For unmerged files, checkout stage 2 from index

\n", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_USE_THEIRS", - "comments": "

For unmerged files, checkout stage 3 from index

\n", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH", - "comments": "

Treat pathspec as simple list of exact match file paths

\n", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES", - "comments": "

Ignore directories in use, they will be left empty

\n", - "value": 262144 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DONT_OVERWRITE_IGNORED", - "comments": "

Don't overwrite ignored files that exist in the checkout target

\n", - "value": 524288 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_CONFLICT_STYLE_MERGE", - "comments": "

Write normal merge files for conflicts

\n", - "value": 1048576 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_CONFLICT_STYLE_DIFF3", - "comments": "

Include common ancestor data in diff3 format files for conflicts

\n", - "value": 2097152 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DONT_REMOVE_EXISTING", - "comments": "

Don't overwrite existing files or folders

\n", - "value": 4194304 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DONT_WRITE_INDEX", - "comments": "

Normally checkout writes the index upon completion; this prevents that.

\n", - "value": 8388608 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DRY_RUN", - "comments": "

Show what would be done by a checkout. Stop after sending\n notifications; don't update the working directory or index.

\n", - "value": 16777216 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_UPDATE_SUBMODULES", - "comments": "

Recursively checkout submodules with same options (NOT IMPLEMENTED)

\n", - "value": 65536 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", - "comments": "

Recursively checkout submodules if HEAD moved in super repo (NOT IMPLEMENTED)

\n", - "value": 131072 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_cherrypick_options", - { - "decl": [ - "unsigned int version", - "unsigned int mainline", - "git_merge_options merge_opts", - "git_checkout_options checkout_opts" - ], - "type": "struct", - "value": "git_cherrypick_options", - "file": "git2/cherrypick.h", - "line": 26, - "lineto": 34, - "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", - "tdef": "typedef", - "description": " Cherry-pick options", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "mainline", - "comments": " For merge commits, the \"mainline\" is treated as the parent. " - }, - { - "type": "git_merge_options", - "name": "merge_opts", - "comments": " Options for the merging " - }, - { - "type": "git_checkout_options", - "name": "checkout_opts", - "comments": " Options for the checkout " - } - ], - "used": { - "returns": [], - "needs": [ - "git_cherrypick", - "git_cherrypick_options_init" - ] - } - } - ], - [ - "git_clone_local_t", - { - "decl": [ - "GIT_CLONE_LOCAL_AUTO", - "GIT_CLONE_LOCAL", - "GIT_CLONE_NO_LOCAL", - "GIT_CLONE_LOCAL_NO_LINKS" - ], - "type": "enum", - "file": "git2/clone.h", - "line": 33, - "lineto": 53, - "block": "GIT_CLONE_LOCAL_AUTO\nGIT_CLONE_LOCAL\nGIT_CLONE_NO_LOCAL\nGIT_CLONE_LOCAL_NO_LINKS", - "tdef": "typedef", - "description": " Options for bypassing the git-aware transport on clone. Bypassing\n it means that instead of a fetch, libgit2 will copy the object\n database directory instead of figuring out what it needs, which is\n faster. If possible, it will hardlink the files to save space.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_CLONE_LOCAL_AUTO", - "comments": "

Auto-detect (default), libgit2 will bypass the git-aware\n transport for local paths, but use a normal fetch for\n file:// urls.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CLONE_LOCAL", - "comments": "

Bypass the git-aware transport even for a file:// url.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CLONE_NO_LOCAL", - "comments": "

Do no bypass the git-aware transport

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CLONE_LOCAL_NO_LINKS", - "comments": "

Bypass the git-aware transport, but do not try to use\n hardlinks.

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_clone_options", - { - "decl": [ - "unsigned int version", - "git_checkout_options checkout_opts", - "git_fetch_options fetch_opts", - "int bare", - "git_clone_local_t local", - "const char * checkout_branch", - "git_repository_create_cb repository_cb", - "void * repository_cb_payload", - "git_remote_create_cb remote_cb", - "void * remote_cb_payload" - ], - "type": "struct", - "value": "git_clone_options", - "file": "git2/clone.h", - "line": 103, - "lineto": 164, - "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint bare\ngit_clone_local_t local\nconst char * checkout_branch\ngit_repository_create_cb repository_cb\nvoid * repository_cb_payload\ngit_remote_create_cb remote_cb\nvoid * remote_cb_payload", - "tdef": "typedef", - "description": " Clone options structure", - "comments": "

Initialize with GIT_CLONE_OPTIONS_INIT. Alternatively, you can use git_clone_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_checkout_options", - "name": "checkout_opts", - "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`." - }, - { - "type": "git_fetch_options", - "name": "fetch_opts", - "comments": " Options which control the fetch, including callbacks.\n\n The callbacks are used for reporting fetch progress, and for acquiring\n credentials in the event they are needed." - }, - { - "type": "int", - "name": "bare", - "comments": " Set to zero (false) to create a standard repo, or non-zero\n for a bare repo" - }, - { - "type": "git_clone_local_t", - "name": "local", - "comments": " Whether to use a fetch or copy the object database." - }, - { - "type": "const char *", - "name": "checkout_branch", - "comments": " The name of the branch to checkout. NULL means use the\n remote's default branch." - }, - { - "type": "git_repository_create_cb", - "name": "repository_cb", - "comments": " A callback used to create the new repository into which to\n clone. If NULL, the 'bare' field will be used to determine\n whether to create a bare repository." - }, - { - "type": "void *", - "name": "repository_cb_payload", - "comments": " An opaque payload to pass to the git_repository creation callback.\n This parameter is ignored unless repository_cb is non-NULL." - }, - { - "type": "git_remote_create_cb", - "name": "remote_cb", - "comments": " A callback used to create the git_remote, prior to its being\n used to perform the clone operation. See the documentation for\n git_remote_create_cb for details. This parameter may be NULL,\n indicating that git_clone should provide default behavior." - }, - { - "type": "void *", - "name": "remote_cb_payload", - "comments": " An opaque payload to pass to the git_remote creation callback.\n This parameter is ignored unless remote_cb is non-NULL." - } - ], - "used": { - "returns": [], - "needs": [ - "git_clone", - "git_clone_options_init" - ] - } - } - ], - [ - "git_commit", - { - "decl": "git_commit", - "type": "struct", - "value": "git_commit", - "file": "git2/types.h", - "line": 136, - "lineto": 136, - "tdef": "typedef", - "description": " Parsed representation of a commit object. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_branch_create", - "git_cherrypick", - "git_cherrypick_commit", - "git_commit_amend", - "git_commit_author", - "git_commit_author_with_mailmap", - "git_commit_body", - "git_commit_committer", - "git_commit_committer_with_mailmap", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_cb", - "git_commit_dup", - "git_commit_free", - "git_commit_header_field", - "git_commit_id", - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_commit_message", - "git_commit_message_encoding", - "git_commit_message_raw", - "git_commit_nth_gen_ancestor", - "git_commit_owner", - "git_commit_parent", - "git_commit_parent_id", - "git_commit_parentcount", - "git_commit_raw_header", - "git_commit_summary", - "git_commit_time", - "git_commit_time_offset", - "git_commit_tree", - "git_commit_tree_id", - "git_diff_commit_as_email", - "git_merge_commits", - "git_note_commit_create", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_commit_remove", - "git_odb_set_commit_graph", - "git_revert", - "git_revert_commit" - ] - } - } - ], - [ - "git_commit_graph", - { - "decl": "git_commit_graph", - "type": "struct", - "value": "git_commit_graph", - "file": "git2/types.h", - "line": 109, - "lineto": 109, - "tdef": "typedef", - "description": " A git commit-graph ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_odb_set_commit_graph" - ] - } - } - ], - [ - "git_commit_graph_split_strategy_t", - { - "decl": [ - "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE" - ], - "type": "enum", - "file": "git2/sys/commit_graph.h", - "line": 92, - "lineto": 98, - "block": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", - "tdef": "typedef", - "description": " The strategy to use when adding a new set of commits to a pre-existing\n commit-graph chain.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", - "comments": "

Do not split commit-graph files. The other split strategy-related option\n fields are ignored.

\n", - "value": 0 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_commit_graph_writer", - { - "decl": "git_commit_graph_writer", - "type": "struct", - "value": "git_commit_graph_writer", - "file": "git2/types.h", - "line": 112, - "lineto": 112, - "tdef": "typedef", - "description": " a writer for commit-graph files. ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_config", - { - "decl": "git_config", - "type": "struct", - "value": "git_config", - "file": "git2/types.h", - "line": 157, - "lineto": 157, - "tdef": "typedef", - "description": " Memory representation of a set of config files ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_config_add_file_ondisk", - "git_config_backend_foreach_match", - "git_config_delete_entry", - "git_config_delete_multivar", - "git_config_entry_free", - "git_config_foreach", - "git_config_foreach_cb", - "git_config_foreach_match", - "git_config_free", - "git_config_get_bool", - "git_config_get_entry", - "git_config_get_int32", - "git_config_get_int64", - "git_config_get_mapped", - "git_config_get_multivar_foreach", - "git_config_get_path", - "git_config_get_string", - "git_config_get_string_buf", - "git_config_iterator_free", - "git_config_iterator_glob_new", - "git_config_iterator_new", - "git_config_lock", - "git_config_lookup_map_value", - "git_config_multivar_iterator_new", - "git_config_new", - "git_config_next", - "git_config_open_default", - "git_config_open_global", - "git_config_open_level", - "git_config_open_ondisk", - "git_config_set_bool", - "git_config_set_int32", - "git_config_set_int64", - "git_config_set_multivar", - "git_config_set_string", - "git_config_snapshot", - "git_repository_config", - "git_repository_config_snapshot" - ] - } - } - ], - [ - "git_config_backend", - { - "decl": "git_config_backend", - "type": "struct", - "value": "git_config_backend", - "file": "git2/types.h", - "line": 160, - "lineto": 160, - "tdef": "typedef", - "description": " Interface to access a configuration file ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_config_backend_foreach_match" - ] - } - } - ], - [ - "git_config_entry", - { - "decl": [ - "const char * name", - "const char * value", - "unsigned int include_depth", - "git_config_level_t level", - "void (*)(struct git_config_entry *) free", - "void * payload" - ], - "type": "struct", - "value": "git_config_entry", - "file": "git2/config.h", - "line": 64, - "lineto": 71, - "block": "const char * name\nconst char * value\nunsigned int include_depth\ngit_config_level_t level\nvoid (*)(struct git_config_entry *) free\nvoid * payload", - "tdef": "typedef", - "description": " An entry in a configuration file", - "comments": "", - "fields": [ - { - "type": "const char *", - "name": "name", - "comments": " Name of the entry (normalised) " - }, - { - "type": "const char *", - "name": "value", - "comments": " String value of the entry " - }, - { - "type": "unsigned int", - "name": "include_depth", - "comments": " Depth of includes where this variable was found " - }, - { - "type": "git_config_level_t", - "name": "level", - "comments": " Which config file this was found in " - }, - { - "type": "void (*)(struct git_config_entry *)", - "name": "free", - "comments": "" - }, - { - "type": "void *", - "name": "payload", - "comments": " Opaque value for the free function. Do not read or write " - } - ], - "used": { - "returns": [], - "needs": [ - "git_config_entry_free", - "git_config_foreach_cb", - "git_config_get_entry", - "git_config_next" - ] - } - } - ], - [ - "git_config_iterator", - { - "decl": "git_config_iterator", - "type": "struct", - "value": "git_config_iterator", - "file": "git2/config.h", - "line": 89, - "lineto": 89, - "tdef": "typedef", - "description": " An opaque structure for a configuration iterator", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_config_iterator_free", - "git_config_iterator_glob_new", - "git_config_iterator_new", - "git_config_multivar_iterator_new", - "git_config_next" - ] - } - } - ], - [ - "git_config_level_t", - { - "decl": [ - "GIT_CONFIG_LEVEL_PROGRAMDATA", - "GIT_CONFIG_LEVEL_SYSTEM", - "GIT_CONFIG_LEVEL_XDG", - "GIT_CONFIG_LEVEL_GLOBAL", - "GIT_CONFIG_LEVEL_LOCAL", - "GIT_CONFIG_LEVEL_APP", - "GIT_CONFIG_HIGHEST_LEVEL" - ], - "type": "enum", - "file": "git2/config.h", - "line": 31, - "lineto": 59, - "block": "GIT_CONFIG_LEVEL_PROGRAMDATA\nGIT_CONFIG_LEVEL_SYSTEM\nGIT_CONFIG_LEVEL_XDG\nGIT_CONFIG_LEVEL_GLOBAL\nGIT_CONFIG_LEVEL_LOCAL\nGIT_CONFIG_LEVEL_APP\nGIT_CONFIG_HIGHEST_LEVEL", - "tdef": "typedef", - "description": " Priority level of a config file.\n These priority levels correspond to the natural escalation logic\n (from higher to lower) when searching for config entries in git.git.", - "comments": "

git_config_open_default() and git_repository_config() honor those priority levels as well.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_PROGRAMDATA", - "comments": "

System-wide on Windows, for compatibility with portable git

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_SYSTEM", - "comments": "

System-wide configuration file; /etc/gitconfig on Linux systems

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_XDG", - "comments": "

XDG compatible configuration file; typically ~/.config/git/config

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_GLOBAL", - "comments": "

User-specific configuration file (also called Global configuration\n file); typically ~/.gitconfig

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_LOCAL", - "comments": "

Repository specific configuration file; $WORK_DIR/.git/config on\n non-bare repos

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_APP", - "comments": "

Application specific configuration file; freely defined by applications

\n", - "value": 6 - }, - { - "type": "int", - "name": "GIT_CONFIG_HIGHEST_LEVEL", - "comments": "

Represents the highest level available config file (i.e. the most\n specific config file available that actually is loaded)

\n", - "value": -1 - } - ], - "used": { - "returns": [], - "needs": [ - "git_config_add_file_ondisk", - "git_config_open_level" - ] - } - } - ], - [ - "git_configmap", - { - "decl": [ - "git_configmap_t type", - "const char * str_match", - "int map_value" - ], - "type": "struct", - "value": "git_configmap", - "file": "git2/config.h", - "line": 104, - "lineto": 108, - "block": "git_configmap_t type\nconst char * str_match\nint map_value", - "tdef": "typedef", - "description": " Mapping from config variables to values.", - "comments": "", - "fields": [ - { - "type": "git_configmap_t", - "name": "type", - "comments": "" - }, - { - "type": "const char *", - "name": "str_match", - "comments": "" - }, - { - "type": "int", - "name": "map_value", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_config_get_mapped", - "git_config_lookup_map_value" - ] - } - } - ], - [ - "git_configmap_t", - { - "decl": [ - "GIT_CONFIGMAP_FALSE", - "GIT_CONFIGMAP_TRUE", - "GIT_CONFIGMAP_INT32", - "GIT_CONFIGMAP_STRING" - ], - "type": "enum", - "file": "git2/config.h", - "line": 94, - "lineto": 99, - "block": "GIT_CONFIGMAP_FALSE\nGIT_CONFIGMAP_TRUE\nGIT_CONFIGMAP_INT32\nGIT_CONFIGMAP_STRING", - "tdef": "typedef", - "description": " Config var type", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_CONFIGMAP_FALSE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CONFIGMAP_TRUE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CONFIGMAP_INT32", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CONFIGMAP_STRING", - "comments": "", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential", - { - "decl": "git_credential", - "type": "struct", - "value": "git_credential", - "file": "git2/credential.h", - "line": 84, - "lineto": 84, - "tdef": "typedef", - "description": " The base structure for all credential types", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_credential_acquire_cb", - "git_credential_default_new", - "git_credential_free", - "git_credential_get_username", - "git_credential_has_username", - "git_credential_ssh_custom_new", - "git_credential_ssh_interactive_new", - "git_credential_ssh_key_from_agent", - "git_credential_ssh_key_memory_new", - "git_credential_ssh_key_new", - "git_credential_username_new", - "git_credential_userpass", - "git_credential_userpass_plaintext_new" - ] - } - } - ], - [ - "git_credential_default", - { - "decl": "git_credential_default", - "type": "struct", - "value": "git_credential_default", - "file": "git2/credential.h", - "line": 92, - "lineto": 92, - "tdef": "typedef", - "description": " A key for NTLM/Kerberos \"default\" credentials ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_ssh_custom", - { - "decl": "git_credential_ssh_custom", - "type": "struct", - "value": "git_credential_ssh_custom", - "file": "git2/credential.h", - "line": 107, - "lineto": 107, - "tdef": "typedef", - "description": " A key with a custom signature function", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_ssh_interactive", - { - "decl": "git_credential_ssh_interactive", - "type": "struct", - "value": "git_credential_ssh_interactive", - "file": "git2/credential.h", - "line": 102, - "lineto": 102, - "tdef": "typedef", - "description": " Keyboard-interactive based ssh authentication", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_credential_ssh_interactive_new" - ] - } - } - ], - [ - "git_credential_ssh_key", - { - "decl": "git_credential_ssh_key", - "type": "struct", - "value": "git_credential_ssh_key", - "file": "git2/credential.h", - "line": 97, - "lineto": 97, - "tdef": "typedef", - "description": " A ssh key from disk", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_t", - { - "decl": [ - "GIT_CREDENTIAL_USERPASS_PLAINTEXT", - "GIT_CREDENTIAL_SSH_KEY", - "GIT_CREDENTIAL_SSH_CUSTOM", - "GIT_CREDENTIAL_DEFAULT", - "GIT_CREDENTIAL_SSH_INTERACTIVE", - "GIT_CREDENTIAL_USERNAME", - "GIT_CREDENTIAL_SSH_MEMORY" - ], - "type": "enum", - "file": "git2/credential.h", - "line": 27, - "lineto": 79, - "block": "GIT_CREDENTIAL_USERPASS_PLAINTEXT\nGIT_CREDENTIAL_SSH_KEY\nGIT_CREDENTIAL_SSH_CUSTOM\nGIT_CREDENTIAL_DEFAULT\nGIT_CREDENTIAL_SSH_INTERACTIVE\nGIT_CREDENTIAL_USERNAME\nGIT_CREDENTIAL_SSH_MEMORY", - "tdef": "typedef", - "description": " Supported credential types", - "comments": "

This represents the various types of authentication methods supported by the library.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_CREDENTIAL_USERPASS_PLAINTEXT", - "comments": "

A vanilla user/password request

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_SSH_KEY", - "comments": "

An SSH key-based authentication request

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_SSH_CUSTOM", - "comments": "

An SSH key-based authentication request, with a custom signature

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_DEFAULT", - "comments": "

An NTLM/Negotiate-based authentication request.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_SSH_INTERACTIVE", - "comments": "

An SSH interactive authentication request

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_USERNAME", - "comments": "

Username-only authentication request

\n\n

Used as a pre-authentication step if the underlying transport\n (eg. SSH, with no username in its URL) does not know which username\n to use.

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_SSH_MEMORY", - "comments": "

An SSH key-based authentication request

\n\n

Allows credentials to be read from memory instead of files.\n Note that because of differences in crypto backend support, it might\n not be functional.

\n", - "value": 64 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_username", - { - "decl": "git_credential_username", - "type": "struct", - "value": "git_credential_username", - "file": "git2/credential.h", - "line": 89, - "lineto": 89, - "tdef": "typedef", - "description": " Username-only credential information ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_userpass_payload", - { - "decl": [ - "const char * username", - "const char * password" - ], - "type": "struct", - "value": "git_credential_userpass_payload", - "file": "git2/credential_helpers.h", - "line": 24, - "lineto": 27, - "block": "const char * username\nconst char * password", - "tdef": "typedef", - "description": " Payload for git_credential_userpass_plaintext.", - "comments": "", - "fields": [ - { - "type": "const char *", - "name": "username", - "comments": "" - }, - { - "type": "const char *", - "name": "password", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_delta_t", - { - "decl": [ - "GIT_DELTA_UNMODIFIED", - "GIT_DELTA_ADDED", - "GIT_DELTA_DELETED", - "GIT_DELTA_MODIFIED", - "GIT_DELTA_RENAMED", - "GIT_DELTA_COPIED", - "GIT_DELTA_IGNORED", - "GIT_DELTA_UNTRACKED", - "GIT_DELTA_TYPECHANGE", - "GIT_DELTA_UNREADABLE", - "GIT_DELTA_CONFLICTED" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 223, - "lineto": 235, - "block": "GIT_DELTA_UNMODIFIED\nGIT_DELTA_ADDED\nGIT_DELTA_DELETED\nGIT_DELTA_MODIFIED\nGIT_DELTA_RENAMED\nGIT_DELTA_COPIED\nGIT_DELTA_IGNORED\nGIT_DELTA_UNTRACKED\nGIT_DELTA_TYPECHANGE\nGIT_DELTA_UNREADABLE\nGIT_DELTA_CONFLICTED", - "tdef": "typedef", - "description": " What type of change is described by a git_diff_delta?", - "comments": "

GIT_DELTA_RENAMED and GIT_DELTA_COPIED will only show up if you run git_diff_find_similar() on the diff object.

\n\n

GIT_DELTA_TYPECHANGE only shows up given GIT_DIFF_INCLUDE_TYPECHANGE in the option flags (otherwise type changes will be split into ADDED / DELETED pairs).

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DELTA_UNMODIFIED", - "comments": "

no changes

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DELTA_ADDED", - "comments": "

entry does not exist in old version

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DELTA_DELETED", - "comments": "

entry does not exist in new version

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DELTA_MODIFIED", - "comments": "

entry content changed between old and new

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_DELTA_RENAMED", - "comments": "

entry was renamed between old and new

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DELTA_COPIED", - "comments": "

entry was copied from another old entry

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_DELTA_IGNORED", - "comments": "

entry is ignored item in workdir

\n", - "value": 6 - }, - { - "type": "int", - "name": "GIT_DELTA_UNTRACKED", - "comments": "

entry is untracked item in workdir

\n", - "value": 7 - }, - { - "type": "int", - "name": "GIT_DELTA_TYPECHANGE", - "comments": "

type of entry changed between old and new

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_DELTA_UNREADABLE", - "comments": "

entry is unreadable

\n", - "value": 9 - }, - { - "type": "int", - "name": "GIT_DELTA_CONFLICTED", - "comments": "

entry in the index is conflicted

\n", - "value": 10 - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_num_deltas_of_type", - "git_diff_status_char" - ] - } - } - ], - [ - "git_describe_format_options", - { - "decl": [ - "unsigned int version", - "unsigned int abbreviated_size", - "int always_use_long_format", - "const char * dirty_suffix" - ], - "type": "struct", - "value": "git_describe_format_options", - "file": "git2/describe.h", - "line": 91, - "lineto": 111, - "block": "unsigned int version\nunsigned int abbreviated_size\nint always_use_long_format\nconst char * dirty_suffix", - "tdef": "typedef", - "description": " Describe format options structure", - "comments": "

Initialize with GIT_DESCRIBE_FORMAT_OPTIONS_INIT. Alternatively, you can use git_describe_format_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "abbreviated_size", - "comments": " Size of the abbreviated commit id to use. This value is the\n lower bound for the length of the abbreviated string. The\n default is 7." - }, - { - "type": "int", - "name": "always_use_long_format", - "comments": " Set to use the long format even when a shorter name could be used." - }, - { - "type": "const char *", - "name": "dirty_suffix", - "comments": " If the workdir is dirty and this is set, this string will\n be appended to the description string." - } - ], - "used": { - "returns": [], - "needs": [ - "git_describe_format", - "git_describe_format_options_init" - ] - } - } - ], - [ - "git_describe_options", - { - "decl": [ - "unsigned int version", - "unsigned int max_candidates_tags", - "unsigned int describe_strategy", - "const char * pattern", - "int only_follow_first_parent", - "int show_commit_oid_as_fallback" - ], - "type": "struct", - "value": "git_describe_options", - "file": "git2/describe.h", - "line": 43, - "lineto": 61, - "block": "unsigned int version\nunsigned int max_candidates_tags\nunsigned int describe_strategy\nconst char * pattern\nint only_follow_first_parent\nint show_commit_oid_as_fallback", - "tdef": "typedef", - "description": " Describe options structure", - "comments": "

Initialize with GIT_DESCRIBE_OPTIONS_INIT. Alternatively, you can use git_describe_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "max_candidates_tags", - "comments": " default: 10 " - }, - { - "type": "unsigned int", - "name": "describe_strategy", - "comments": " default: GIT_DESCRIBE_DEFAULT " - }, - { - "type": "const char *", - "name": "pattern", - "comments": "" - }, - { - "type": "int", - "name": "only_follow_first_parent", - "comments": " When calculating the distance from the matching tag or\n reference, only walk down the first-parent ancestry." - }, - { - "type": "int", - "name": "show_commit_oid_as_fallback", - "comments": " If no matching tag or reference is found, the describe\n operation would normally fail. If this option is set, it\n will instead fall back to showing the full id of the\n commit." - } - ], - "used": { - "returns": [], - "needs": [ - "git_describe_commit", - "git_describe_options_init", - "git_describe_workdir" - ] - } - } - ], - [ - "git_describe_result", - { - "decl": "git_describe_result", - "type": "struct", - "value": "git_describe_result", - "file": "git2/describe.h", - "line": 134, - "lineto": 134, - "tdef": "typedef", - "description": " A struct that stores the result of a describe operation.", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_describe_commit", - "git_describe_format", - "git_describe_result_free", - "git_describe_workdir" - ] - } - } - ], - [ - "git_describe_strategy_t", - { - "decl": [ - "GIT_DESCRIBE_DEFAULT", - "GIT_DESCRIBE_TAGS", - "GIT_DESCRIBE_ALL" - ], - "type": "enum", - "file": "git2/describe.h", - "line": 30, - "lineto": 34, - "block": "GIT_DESCRIBE_DEFAULT\nGIT_DESCRIBE_TAGS\nGIT_DESCRIBE_ALL", - "tdef": "typedef", - "description": " Reference lookup strategy", - "comments": "

These behave like the --tags and --all options to git-describe, namely they say to look for any reference in either refs/tags/ or refs/ respectively.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DESCRIBE_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DESCRIBE_TAGS", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DESCRIBE_ALL", - "comments": "", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff", - { - "decl": "git_diff", - "type": "struct", - "value": "git_diff", - "file": "git2/diff.h", - "line": 196, - "lineto": 196, - "tdef": "typedef", - "description": " The diff object that contains all individual file deltas.", - "comments": "

A diff represents the cumulative list of differences between two snapshots of a repository (possibly filtered by a set of file name patterns).

\n\n

Calculating diffs is generally done in two phases: building a list of diffs then traversing it. This makes is easier to share logic across the various types of diffs (tree vs tree, workdir vs index, etc.), and also allows you to insert optional diff post-processing phases, such as rename detection, in between the steps. When you are done with a diff object, it must be freed.

\n\n

This is an opaque structure which will be allocated by one of the diff generator functions below (such as git_diff_tree_to_tree). You are responsible for releasing the object memory when done, using the git_diff_free() function.

\n", - "used": { - "returns": [ - "git_diff_get_delta", - "git_patch_get_delta", - "git_pathspec_match_list_diff_entry" - ], - "needs": [ - "git_apply", - "git_apply_delta_cb", - "git_apply_hunk_cb", - "git_apply_to_tree", - "git_checkout_notify_cb", - "git_diff_binary_cb", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_commit_as_email", - "git_diff_file_cb", - "git_diff_find_options_init", - "git_diff_find_similar", - "git_diff_foreach", - "git_diff_format_email", - "git_diff_format_email_options_init", - "git_diff_free", - "git_diff_from_buffer", - "git_diff_get_delta", - "git_diff_get_stats", - "git_diff_hunk_cb", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_is_sorted_icase", - "git_diff_line_cb", - "git_diff_merge", - "git_diff_notify_cb", - "git_diff_num_deltas", - "git_diff_num_deltas_of_type", - "git_diff_options_init", - "git_diff_patchid", - "git_diff_patchid_options_init", - "git_diff_print", - "git_diff_progress_cb", - "git_diff_stats_deletions", - "git_diff_stats_files_changed", - "git_diff_stats_free", - "git_diff_stats_insertions", - "git_diff_stats_to_buf", - "git_diff_to_buf", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs", - "git_patch_from_buffers", - "git_patch_from_diff", - "git_patch_get_hunk", - "git_patch_get_line_in_hunk", - "git_patch_print", - "git_pathspec_match_diff" - ] - } - } - ], - [ - "git_diff_binary", - { - "decl": [ - "unsigned int contains_data", - "git_diff_binary_file old_file", - "git_diff_binary_file new_file" - ], - "type": "struct", - "value": "git_diff_binary", - "file": "git2/diff.h", - "line": 527, - "lineto": 539, - "block": "unsigned int contains_data\ngit_diff_binary_file old_file\ngit_diff_binary_file new_file", - "tdef": "typedef", - "description": " Structure describing the binary contents of a diff.", - "comments": "

A binary file / delta is a file (or pair) for which no text diffs should be generated. A diff can contain delta entries that are binary, but no diff content will be output for those files. There is a base heuristic for binary detection and you can further tune the behavior with git attributes or diff flags and option settings.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "contains_data", - "comments": " Whether there is data in this binary structure or not.\n\n If this is `1`, then this was produced and included binary content.\n If this is `0` then this was generated knowing only that a binary\n file changed but without providing the data, probably from a patch\n that said `Binary files a/file.txt and b/file.txt differ`." - }, - { - "type": "git_diff_binary_file", - "name": "old_file", - "comments": " The contents of the old file. " - }, - { - "type": "git_diff_binary_file", - "name": "new_file", - "comments": " The contents of the new file. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_binary_cb", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_foreach" - ] - } - } - ], - [ - "git_diff_binary_file", - { - "decl": [ - "git_diff_binary_t type", - "const char * data", - "size_t datalen", - "size_t inflatedlen" - ], - "type": "struct", - "value": "git_diff_binary_file", - "file": "git2/diff.h", - "line": 504, - "lineto": 516, - "block": "git_diff_binary_t type\nconst char * data\nsize_t datalen\nsize_t inflatedlen", - "tdef": "typedef", - "description": " The contents of one of the files in a binary diff. ", - "comments": "", - "fields": [ - { - "type": "git_diff_binary_t", - "name": "type", - "comments": " The type of binary data for this file. " - }, - { - "type": "const char *", - "name": "data", - "comments": " The binary data, deflated. " - }, - { - "type": "size_t", - "name": "datalen", - "comments": " The length of the binary data. " - }, - { - "type": "size_t", - "name": "inflatedlen", - "comments": " The length of the binary data after inflation. " - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_binary_t", - { - "decl": [ - "GIT_DIFF_BINARY_NONE", - "GIT_DIFF_BINARY_LITERAL", - "GIT_DIFF_BINARY_DELTA" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 492, - "lineto": 501, - "block": "GIT_DIFF_BINARY_NONE\nGIT_DIFF_BINARY_LITERAL\nGIT_DIFF_BINARY_DELTA", - "tdef": "typedef", - "description": " When producing a binary diff, the binary data returned will be\n either the deflated full (\"literal\") contents of the file, or\n the deflated binary delta between the two sides (whichever is\n smaller).", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_BINARY_NONE", - "comments": "

There is no binary delta.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_BINARY_LITERAL", - "comments": "

The binary data is the literal contents of the file.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_BINARY_DELTA", - "comments": "

The binary data is the delta from one side to the other.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_delta", - { - "decl": [ - "git_delta_t status", - "uint32_t flags", - "uint16_t similarity", - "uint16_t nfiles", - "git_diff_file old_file", - "git_diff_file new_file" - ], - "type": "struct", - "value": "git_diff_delta", - "file": "git2/diff.h", - "line": 323, - "lineto": 330, - "block": "git_delta_t status\nuint32_t flags\nuint16_t similarity\nuint16_t nfiles\ngit_diff_file old_file\ngit_diff_file new_file", - "tdef": "typedef", - "description": " Description of changes to one entry.", - "comments": "

A delta is a file pair with an old and new revision. The old version may be absent if the file was just created and the new version may be absent if the file was deleted. A diff is mostly just a list of deltas.

\n\n

When iterating over a diff, this will be passed to most callbacks and you can use the contents to understand exactly what has changed.

\n\n

The old_file represents the "from" side of the diff and the new_file represents to "to" side of the diff. What those means depend on the function that was used to generate the diff and will be documented below. You can also use the GIT_DIFF_REVERSE flag to flip it around.

\n\n

Although the two sides of the delta are named "old_file" and "new_file", they actually may correspond to entries that represent a file, a symbolic link, a submodule commit id, or even a tree (if you are tracking type changes or ignored/untracked directories).

\n\n

Under some circumstances, in the name of efficiency, not all fields will be filled in, but we generally try to fill in as much as possible. One example is that the "flags" field may not have either the BINARY or the NOT_BINARY flag set to avoid examining file contents if you do not pass in hunk and/or line callbacks to the diff foreach iteration function. It will just use the git attributes for those files.

\n\n

The similarity score is zero unless you call git_diff_find_similar() which does a similarity analysis of files in the diff. Use that function to do rename and copy detection, and to split heavily modified files in add/delete pairs. After that call, deltas with a status of GIT_DELTA_RENAMED or GIT_DELTA_COPIED will have a similarity score between 0 and 100 indicating how similar the old and new sides are.

\n\n

If you ask git_diff_find_similar to find heavily modified files to break, but to not actually break the records, then GIT_DELTA_MODIFIED records may have a non-zero similarity score if the self-similarity is below the split threshold. To display this value like core Git, invert the score (a la printf("M%03d", 100 - delta->similarity)).

\n", - "fields": [ - { - "type": "git_delta_t", - "name": "status", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " git_diff_flag_t values " - }, - { - "type": "uint16_t", - "name": "similarity", - "comments": " for RENAMED and COPIED, value 0-100 " - }, - { - "type": "uint16_t", - "name": "nfiles", - "comments": " number of files in this delta " - }, - { - "type": "git_diff_file", - "name": "old_file", - "comments": "" - }, - { - "type": "git_diff_file", - "name": "new_file", - "comments": "" - } - ], - "used": { - "returns": [ - "git_diff_get_delta", - "git_patch_get_delta", - "git_pathspec_match_list_diff_entry" - ], - "needs": [ - "git_apply_delta_cb", - "git_diff_binary_cb", - "git_diff_file_cb", - "git_diff_hunk_cb", - "git_diff_line_cb", - "git_diff_notify_cb" - ] - } - } - ], - [ - "git_diff_file", - { - "decl": [ - "git_oid id", - "const char * path", - "git_object_size_t size", - "uint32_t flags", - "uint16_t mode", - "uint16_t id_abbrev" - ], - "type": "struct", - "value": "git_diff_file", - "file": "git2/diff.h", - "line": 244, - "lineto": 281, - "block": "git_oid id\nconst char * path\ngit_object_size_t size\nuint32_t flags\nuint16_t mode\nuint16_t id_abbrev", - "tdef": "typedef", - "description": " Description of one side of a delta.", - "comments": "

Although this is called a "file", it could represent a file, a symbolic link, a submodule commit id, or even a tree (although that only if you are tracking type changes or ignored/untracked directories).

\n", - "fields": [ - { - "type": "git_oid", - "name": "id", - "comments": " The `git_oid` of the item. If the entry represents an\n absent side of a diff (e.g. the `old_file` of a `GIT_DELTA_ADDED` delta),\n then the oid will be zeroes." - }, - { - "type": "const char *", - "name": "path", - "comments": " The NUL-terminated path to the entry relative to the working\n directory of the repository." - }, - { - "type": "git_object_size_t", - "name": "size", - "comments": " The size of the entry in bytes." - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of the `git_diff_flag_t` types" - }, - { - "type": "uint16_t", - "name": "mode", - "comments": " Roughly, the stat() `st_mode` value for the item. This will\n be restricted to one of the `git_filemode_t` values." - }, - { - "type": "uint16_t", - "name": "id_abbrev", - "comments": " Represents the known length of the `id` field, when\n converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this\n delta was created from reading a patch file, in which case it may be\n abbreviated to something reasonable, like 7 characters." - } - ], - "used": { - "returns": [], - "needs": [ - "git_checkout_notify_cb", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_foreach" - ] - } - } - ], - [ - "git_diff_find_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "uint16_t rename_threshold", - "uint16_t rename_from_rewrite_threshold", - "uint16_t copy_threshold", - "uint16_t break_rewrite_threshold", - "size_t rename_limit", - "git_diff_similarity_metric * metric" - ], - "type": "struct", - "value": "git_diff_find_options", - "file": "git2/diff.h", - "line": 732, - "lineto": 786, - "block": "unsigned int version\nuint32_t flags\nuint16_t rename_threshold\nuint16_t rename_from_rewrite_threshold\nuint16_t copy_threshold\nuint16_t break_rewrite_threshold\nsize_t rename_limit\ngit_diff_similarity_metric * metric", - "tdef": "typedef", - "description": " Control behavior of rename and copy detection", - "comments": "

These options mostly mimic parameters that can be passed to git-diff.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " Combination of git_diff_find_t values (default GIT_DIFF_FIND_BY_CONFIG).\n NOTE: if you don't explicitly set this, `diff.renames` could be set\n to false, resulting in `git_diff_find_similar` doing nothing." - }, - { - "type": "uint16_t", - "name": "rename_threshold", - "comments": " Threshold above which similar files will be considered renames.\n This is equivalent to the -M option. Defaults to 50." - }, - { - "type": "uint16_t", - "name": "rename_from_rewrite_threshold", - "comments": " Threshold below which similar files will be eligible to be a rename source.\n This is equivalent to the first part of the -B option. Defaults to 50." - }, - { - "type": "uint16_t", - "name": "copy_threshold", - "comments": " Threshold above which similar files will be considered copies.\n This is equivalent to the -C option. Defaults to 50." - }, - { - "type": "uint16_t", - "name": "break_rewrite_threshold", - "comments": " Treshold below which similar files will be split into a delete/add pair.\n This is equivalent to the last part of the -B option. Defaults to 60." - }, - { - "type": "size_t", - "name": "rename_limit", - "comments": " Maximum number of matches to consider for a particular file.\n\n This is a little different from the `-l` option from Git because we\n will still process up to this many matches before abandoning the search.\n Defaults to 200." - }, - { - "type": "git_diff_similarity_metric *", - "name": "metric", - "comments": " The `metric` option allows you to plug in a custom similarity metric.\n\n Set it to NULL to use the default internal metric.\n\n The default metric is based on sampling hashes of ranges of data in\n the file, which is a pretty good similarity approximation that should\n work fairly well for both text and binary data while still being\n pretty fast with a fixed memory overhead." - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_find_options_init", - "git_diff_find_similar" - ] - } - } - ], - [ - "git_diff_find_t", - { - "decl": [ - "GIT_DIFF_FIND_BY_CONFIG", - "GIT_DIFF_FIND_RENAMES", - "GIT_DIFF_FIND_RENAMES_FROM_REWRITES", - "GIT_DIFF_FIND_COPIES", - "GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED", - "GIT_DIFF_FIND_REWRITES", - "GIT_DIFF_BREAK_REWRITES", - "GIT_DIFF_FIND_AND_BREAK_REWRITES", - "GIT_DIFF_FIND_FOR_UNTRACKED", - "GIT_DIFF_FIND_ALL", - "GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE", - "GIT_DIFF_FIND_IGNORE_WHITESPACE", - "GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE", - "GIT_DIFF_FIND_EXACT_MATCH_ONLY", - "GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY", - "GIT_DIFF_FIND_REMOVE_UNMODIFIED" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 641, - "lineto": 710, - "block": "GIT_DIFF_FIND_BY_CONFIG\nGIT_DIFF_FIND_RENAMES\nGIT_DIFF_FIND_RENAMES_FROM_REWRITES\nGIT_DIFF_FIND_COPIES\nGIT_DIFF_FIND_COPIES_FROM_UNMODIFIED\nGIT_DIFF_FIND_REWRITES\nGIT_DIFF_BREAK_REWRITES\nGIT_DIFF_FIND_AND_BREAK_REWRITES\nGIT_DIFF_FIND_FOR_UNTRACKED\nGIT_DIFF_FIND_ALL\nGIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE\nGIT_DIFF_FIND_IGNORE_WHITESPACE\nGIT_DIFF_FIND_DONT_IGNORE_WHITESPACE\nGIT_DIFF_FIND_EXACT_MATCH_ONLY\nGIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY\nGIT_DIFF_FIND_REMOVE_UNMODIFIED", - "tdef": "typedef", - "description": " Flags to control the behavior of diff rename/copy detection.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_FIND_BY_CONFIG", - "comments": "

Obey diff.renames. Overridden by any other GIT_DIFF_FIND_... flag.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_RENAMES", - "comments": "

Look for renames? (--find-renames)

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_RENAMES_FROM_REWRITES", - "comments": "

Consider old side of MODIFIED for renames? (--break-rewrites=N)

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_COPIES", - "comments": "

Look for copies? (a la --find-copies).

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED", - "comments": "

Consider UNMODIFIED as copy sources? (--find-copies-harder).

\n\n

For this to work correctly, use GIT_DIFF_INCLUDE_UNMODIFIED when\n the initial git_diff is being generated.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_REWRITES", - "comments": "

Mark significant rewrites for split (--break-rewrites=/M)

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_DIFF_BREAK_REWRITES", - "comments": "

Actually split large rewrites into delete/add pairs

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_AND_BREAK_REWRITES", - "comments": "

Mark rewrites for split and break into delete/add pairs

\n", - "value": 48 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_FOR_UNTRACKED", - "comments": "

Find renames/copies for UNTRACKED items in working directory.

\n\n

For this to work correctly, use GIT_DIFF_INCLUDE_UNTRACKED when the\n initial git_diff is being generated (and obviously the diff must\n be against the working directory for this to make sense).

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_ALL", - "comments": "

Turn on all finding features.

\n", - "value": 255 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE", - "comments": "

Measure similarity ignoring leading whitespace (default)

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_IGNORE_WHITESPACE", - "comments": "

Measure similarity ignoring all whitespace

\n", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE", - "comments": "

Measure similarity including all data

\n", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_EXACT_MATCH_ONLY", - "comments": "

Measure similarity only by comparing SHAs (fast and cheap)

\n", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY", - "comments": "

Do not break rewrites unless they contribute to a rename.

\n\n

Normally, GIT_DIFF_FIND_AND_BREAK_REWRITES will measure the self-\n similarity of modified files and split the ones that have changed a\n lot into a DELETE / ADD pair. Then the sides of that pair will be\n considered candidates for rename and copy detection.

\n\n

If you add this flag in and the split pair is not used for an\n actual rename or copy, then the modified record will be restored to\n a regular MODIFIED record instead of being split.

\n", - "value": 32768 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_REMOVE_UNMODIFIED", - "comments": "

Remove any UNMODIFIED deltas after find_similar is done.

\n\n

Using GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED to emulate the\n --find-copies-harder behavior requires building a diff with the\n GIT_DIFF_INCLUDE_UNMODIFIED flag. If you do not want UNMODIFIED\n records in the final result, pass this flag to have them removed.

\n", - "value": 65536 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_flag_t", - { - "decl": [ - "GIT_DIFF_FLAG_BINARY", - "GIT_DIFF_FLAG_NOT_BINARY", - "GIT_DIFF_FLAG_VALID_ID", - "GIT_DIFF_FLAG_EXISTS" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 206, - "lineto": 211, - "block": "GIT_DIFF_FLAG_BINARY\nGIT_DIFF_FLAG_NOT_BINARY\nGIT_DIFF_FLAG_VALID_ID\nGIT_DIFF_FLAG_EXISTS", - "tdef": "typedef", - "description": " Flags for the delta object and the file objects on each side.", - "comments": "

These flags are used for both the flags value of the git_diff_delta and the flags for the git_diff_file objects representing the old and new sides of the delta. Values outside of this public range should be considered reserved for internal or future use.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_FLAG_BINARY", - "comments": "

file(s) treated as binary data

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_FLAG_NOT_BINARY", - "comments": "

file(s) treated as text data

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_FLAG_VALID_ID", - "comments": "

id value is known correct

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_FLAG_EXISTS", - "comments": "

file exists at this side of the delta

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_format_email_flags_t", - { - "decl": [ - "GIT_DIFF_FORMAT_EMAIL_NONE", - "GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER" - ], - "type": "enum", - "file": "git2/deprecated.h", - "line": 311, - "lineto": 318, - "block": "GIT_DIFF_FORMAT_EMAIL_NONE\nGIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", - "tdef": "typedef", - "description": " Formatting options for diff e-mail generation", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_FORMAT_EMAIL_NONE", - "comments": "

Normal patch, the default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", - "comments": "

Don't insert "[PATCH]" in the subject header

\n", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_format_email_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "size_t patch_no", - "size_t total_patches", - "const git_oid * id", - "const char * summary", - "const char * body", - "const git_signature * author" - ], - "type": "struct", - "value": "git_diff_format_email_options", - "file": "git2/deprecated.h", - "line": 323, - "lineto": 346, - "block": "unsigned int version\nuint32_t flags\nsize_t patch_no\nsize_t total_patches\nconst git_oid * id\nconst char * summary\nconst char * body\nconst git_signature * author", - "tdef": "typedef", - "description": " Options for controlling the formatting of the generated e-mail.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " see `git_diff_format_email_flags_t` above " - }, - { - "type": "size_t", - "name": "patch_no", - "comments": " This patch number " - }, - { - "type": "size_t", - "name": "total_patches", - "comments": " Total number of patches in this series " - }, - { - "type": "const git_oid *", - "name": "id", - "comments": " id to use for the commit " - }, - { - "type": "const char *", - "name": "summary", - "comments": " Summary of the change " - }, - { - "type": "const char *", - "name": "body", - "comments": " Commit message's body " - }, - { - "type": "const git_signature *", - "name": "author", - "comments": " Author of the change " - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_format_email", - "git_diff_format_email_options_init" - ] - } - } - ], - [ - "git_diff_format_t", - { - "decl": [ - "GIT_DIFF_FORMAT_PATCH", - "GIT_DIFF_FORMAT_PATCH_HEADER", - "GIT_DIFF_FORMAT_RAW", - "GIT_DIFF_FORMAT_NAME_ONLY", - "GIT_DIFF_FORMAT_NAME_STATUS", - "GIT_DIFF_FORMAT_PATCH_ID" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 1104, - "lineto": 1111, - "block": "GIT_DIFF_FORMAT_PATCH\nGIT_DIFF_FORMAT_PATCH_HEADER\nGIT_DIFF_FORMAT_RAW\nGIT_DIFF_FORMAT_NAME_ONLY\nGIT_DIFF_FORMAT_NAME_STATUS\nGIT_DIFF_FORMAT_PATCH_ID", - "tdef": "typedef", - "description": " Possible output formats for diff data", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_FORMAT_PATCH", - "comments": "

full git diff

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_PATCH_HEADER", - "comments": "

just the file headers of patch

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_RAW", - "comments": "

like git diff --raw

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_NAME_ONLY", - "comments": "

like git diff --name-only

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_NAME_STATUS", - "comments": "

like git diff --name-status

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_PATCH_ID", - "comments": "

git diff as used by git patch-id

\n", - "value": 6 - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_print", - "git_diff_to_buf" - ] - } - } - ], - [ - "git_diff_hunk", - { - "decl": [ - "int old_start", - "int old_lines", - "int new_start", - "int new_lines", - "size_t header_len", - "char [128] header" - ], - "type": "struct", - "value": "git_diff_hunk", - "file": "git2/diff.h", - "line": 559, - "lineto": 566, - "block": "int old_start\nint old_lines\nint new_start\nint new_lines\nsize_t header_len\nchar [128] header", - "tdef": "typedef", - "description": " Structure describing a hunk of a diff.", - "comments": "

A hunk is a span of modified lines in a delta along with some stable surrounding context. You can configure the amount of context and other properties of how hunks are generated. Each hunk also comes with a header that described where it starts and ends in both the old and new versions in the delta.

\n", - "fields": [ - { - "type": "int", - "name": "old_start", - "comments": " Starting line number in old_file " - }, - { - "type": "int", - "name": "old_lines", - "comments": " Number of lines in old_file " - }, - { - "type": "int", - "name": "new_start", - "comments": " Starting line number in new_file " - }, - { - "type": "int", - "name": "new_lines", - "comments": " Number of lines in new_file " - }, - { - "type": "size_t", - "name": "header_len", - "comments": " Number of bytes in header text " - }, - { - "type": "char [128]", - "name": "header", - "comments": " Header text, NUL-byte terminated " - } - ], - "used": { - "returns": [], - "needs": [ - "git_apply_hunk_cb", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_foreach", - "git_diff_hunk_cb", - "git_diff_line_cb", - "git_patch_get_hunk" - ] - } - } - ], - [ - "git_diff_line", - { - "decl": [ - "char origin", - "int old_lineno", - "int new_lineno", - "int num_lines", - "size_t content_len", - "git_off_t content_offset", - "const char * content" - ], - "type": "struct", - "value": "git_diff_line", - "file": "git2/diff.h", - "line": 614, - "lineto": 622, - "block": "char origin\nint old_lineno\nint new_lineno\nint num_lines\nsize_t content_len\ngit_off_t content_offset\nconst char * content", - "tdef": "typedef", - "description": " Structure describing a line (or data span) of a diff.", - "comments": "

A line is a range of characters inside a hunk. It could be a context line (i.e. in both old and new versions), an added line (i.e. only in the new version), or a removed line (i.e. only in the old version). Unfortunately, we don't know anything about the encoding of data in the file being diffed, so we cannot tell you much about the line content. Line data will not be NUL-byte terminated, however, because it will be just a span of bytes inside the larger file.

\n", - "fields": [ - { - "type": "char", - "name": "origin", - "comments": " A git_diff_line_t value " - }, - { - "type": "int", - "name": "old_lineno", - "comments": " Line number in old file or -1 for added line " - }, - { - "type": "int", - "name": "new_lineno", - "comments": " Line number in new file or -1 for deleted line " - }, - { - "type": "int", - "name": "num_lines", - "comments": " Number of newline characters in content " - }, - { - "type": "size_t", - "name": "content_len", - "comments": " Number of bytes of data " - }, - { - "type": "git_off_t", - "name": "content_offset", - "comments": " Offset in the original file to the content " - }, - { - "type": "const char *", - "name": "content", - "comments": " Pointer to diff text, not NUL-byte terminated " - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_foreach", - "git_diff_line_cb", - "git_diff_print", - "git_patch_get_line_in_hunk", - "git_patch_print" - ] - } - } - ], - [ - "git_diff_line_t", - { - "decl": [ - "GIT_DIFF_LINE_CONTEXT", - "GIT_DIFF_LINE_ADDITION", - "GIT_DIFF_LINE_DELETION", - "GIT_DIFF_LINE_CONTEXT_EOFNL", - "GIT_DIFF_LINE_ADD_EOFNL", - "GIT_DIFF_LINE_DEL_EOFNL", - "GIT_DIFF_LINE_FILE_HDR", - "GIT_DIFF_LINE_HUNK_HDR", - "GIT_DIFF_LINE_BINARY" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 585, - "lineto": 601, - "block": "GIT_DIFF_LINE_CONTEXT\nGIT_DIFF_LINE_ADDITION\nGIT_DIFF_LINE_DELETION\nGIT_DIFF_LINE_CONTEXT_EOFNL\nGIT_DIFF_LINE_ADD_EOFNL\nGIT_DIFF_LINE_DEL_EOFNL\nGIT_DIFF_LINE_FILE_HDR\nGIT_DIFF_LINE_HUNK_HDR\nGIT_DIFF_LINE_BINARY", - "tdef": "typedef", - "description": " Line origin constants.", - "comments": "

These values describe where a line came from and will be passed to the git_diff_line_cb when iterating over a diff. There are some special origin constants at the end that are used for the text output callbacks to demarcate lines that are actually part of the file or hunk headers.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_LINE_CONTEXT", - "comments": "", - "value": 32 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_ADDITION", - "comments": "", - "value": 43 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_DELETION", - "comments": "", - "value": 45 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_CONTEXT_EOFNL", - "comments": "

Both files have no LF at end

\n", - "value": 61 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_ADD_EOFNL", - "comments": "

Old has no LF at end, new does

\n", - "value": 62 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_DEL_EOFNL", - "comments": "

Old has LF at end, new does not

\n", - "value": 60 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_FILE_HDR", - "comments": "", - "value": 70 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_HUNK_HDR", - "comments": "", - "value": 72 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_BINARY", - "comments": "

For "Binary files x and y differ"

\n", - "value": 66 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_option_t", - { - "decl": [ - "GIT_DIFF_NORMAL", - "GIT_DIFF_REVERSE", - "GIT_DIFF_INCLUDE_IGNORED", - "GIT_DIFF_RECURSE_IGNORED_DIRS", - "GIT_DIFF_INCLUDE_UNTRACKED", - "GIT_DIFF_RECURSE_UNTRACKED_DIRS", - "GIT_DIFF_INCLUDE_UNMODIFIED", - "GIT_DIFF_INCLUDE_TYPECHANGE", - "GIT_DIFF_INCLUDE_TYPECHANGE_TREES", - "GIT_DIFF_IGNORE_FILEMODE", - "GIT_DIFF_IGNORE_SUBMODULES", - "GIT_DIFF_IGNORE_CASE", - "GIT_DIFF_INCLUDE_CASECHANGE", - "GIT_DIFF_DISABLE_PATHSPEC_MATCH", - "GIT_DIFF_SKIP_BINARY_CHECK", - "GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS", - "GIT_DIFF_UPDATE_INDEX", - "GIT_DIFF_INCLUDE_UNREADABLE", - "GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED", - "GIT_DIFF_INDENT_HEURISTIC", - "GIT_DIFF_IGNORE_BLANK_LINES", - "GIT_DIFF_FORCE_TEXT", - "GIT_DIFF_FORCE_BINARY", - "GIT_DIFF_IGNORE_WHITESPACE", - "GIT_DIFF_IGNORE_WHITESPACE_CHANGE", - "GIT_DIFF_IGNORE_WHITESPACE_EOL", - "GIT_DIFF_SHOW_UNTRACKED_CONTENT", - "GIT_DIFF_SHOW_UNMODIFIED", - "GIT_DIFF_PATIENCE", - "GIT_DIFF_MINIMAL", - "GIT_DIFF_SHOW_BINARY" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 28, - "lineto": 174, - "block": "GIT_DIFF_NORMAL\nGIT_DIFF_REVERSE\nGIT_DIFF_INCLUDE_IGNORED\nGIT_DIFF_RECURSE_IGNORED_DIRS\nGIT_DIFF_INCLUDE_UNTRACKED\nGIT_DIFF_RECURSE_UNTRACKED_DIRS\nGIT_DIFF_INCLUDE_UNMODIFIED\nGIT_DIFF_INCLUDE_TYPECHANGE\nGIT_DIFF_INCLUDE_TYPECHANGE_TREES\nGIT_DIFF_IGNORE_FILEMODE\nGIT_DIFF_IGNORE_SUBMODULES\nGIT_DIFF_IGNORE_CASE\nGIT_DIFF_INCLUDE_CASECHANGE\nGIT_DIFF_DISABLE_PATHSPEC_MATCH\nGIT_DIFF_SKIP_BINARY_CHECK\nGIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS\nGIT_DIFF_UPDATE_INDEX\nGIT_DIFF_INCLUDE_UNREADABLE\nGIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED\nGIT_DIFF_INDENT_HEURISTIC\nGIT_DIFF_IGNORE_BLANK_LINES\nGIT_DIFF_FORCE_TEXT\nGIT_DIFF_FORCE_BINARY\nGIT_DIFF_IGNORE_WHITESPACE\nGIT_DIFF_IGNORE_WHITESPACE_CHANGE\nGIT_DIFF_IGNORE_WHITESPACE_EOL\nGIT_DIFF_SHOW_UNTRACKED_CONTENT\nGIT_DIFF_SHOW_UNMODIFIED\nGIT_DIFF_PATIENCE\nGIT_DIFF_MINIMAL\nGIT_DIFF_SHOW_BINARY", - "tdef": "typedef", - "description": " Flags for diff options. A combination of these flags can be passed\n in via the `flags` value in the `git_diff_options`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_NORMAL", - "comments": "

Normal diff, the default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_REVERSE", - "comments": "

Reverse the sides of the diff

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_IGNORED", - "comments": "

Include ignored files in the diff

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_RECURSE_IGNORED_DIRS", - "comments": "

Even with GIT_DIFF_INCLUDE_IGNORED, an entire ignored directory\n will be marked with only a single entry in the diff; this flag\n adds all files under the directory as IGNORED entries, too.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_UNTRACKED", - "comments": "

Include untracked files in the diff

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_DIFF_RECURSE_UNTRACKED_DIRS", - "comments": "

Even with GIT_DIFF_INCLUDE_UNTRACKED, an entire untracked\n directory will be marked with only a single entry in the diff\n (a la what core Git does in git status); this flag adds all\n files under untracked directories as UNTRACKED entries, too.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_UNMODIFIED", - "comments": "

Include unmodified files in the diff

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_TYPECHANGE", - "comments": "

Normally, a type change between files will be converted into a\n DELETED record for the old and an ADDED record for the new; this\n options enabled the generation of TYPECHANGE delta records.

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_TYPECHANGE_TREES", - "comments": "

Even with GIT_DIFF_INCLUDE_TYPECHANGE, blob->tree changes still\n generally show as a DELETED blob. This flag tries to correctly\n label blob->tree transitions as TYPECHANGE records with new_file's\n mode set to tree. Note: the tree SHA will not be available.

\n", - "value": 128 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_FILEMODE", - "comments": "

Ignore file mode changes

\n", - "value": 256 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_SUBMODULES", - "comments": "

Treat all submodules as unmodified

\n", - "value": 512 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_CASE", - "comments": "

Use case insensitive filename comparisons

\n", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_CASECHANGE", - "comments": "

May be combined with GIT_DIFF_IGNORE_CASE to specify that a file\n that has changed case will be returned as an add/delete pair.

\n", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_DIFF_DISABLE_PATHSPEC_MATCH", - "comments": "

If the pathspec is set in the diff options, this flags indicates\n that the paths will be treated as literal paths instead of\n fnmatch patterns. Each path in the list must either be a full\n path to a file or a directory. (A trailing slash indicates that\n the path will only match a directory). If a directory is\n specified, all children will be included.

\n", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_DIFF_SKIP_BINARY_CHECK", - "comments": "

Disable updating of the binary flag in delta records. This is\n useful when iterating over a diff if you don't need hunk and data\n callbacks and want to avoid having to load file completely.

\n", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS", - "comments": "

When diff finds an untracked directory, to match the behavior of\n core Git, it scans the contents for IGNORED and UNTRACKED files.\n If all contents are IGNORED, then the directory is IGNORED; if\n any contents are not IGNORED, then the directory is UNTRACKED.\n This is extra work that may not matter in many cases. This flag\n turns off that scan and immediately labels an untracked directory\n as UNTRACKED (changing the behavior to not match core Git).

\n", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_DIFF_UPDATE_INDEX", - "comments": "

When diff finds a file in the working directory with stat\n information different from the index, but the OID ends up being the\n same, write the correct stat information into the index. Note:\n without this flag, diff will always leave the index untouched.

\n", - "value": 32768 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_UNREADABLE", - "comments": "

Include unreadable files in the diff

\n", - "value": 65536 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED", - "comments": "

Include unreadable files in the diff

\n", - "value": 131072 - }, - { - "type": "int", - "name": "GIT_DIFF_INDENT_HEURISTIC", - "comments": "

Use a heuristic that takes indentation and whitespace into account\n which generally can produce better diffs when dealing with ambiguous\n diff hunks.

\n", - "value": 262144 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_BLANK_LINES", - "comments": "

Ignore blank lines

\n", - "value": 524288 - }, - { - "type": "int", - "name": "GIT_DIFF_FORCE_TEXT", - "comments": "

Treat all files as text, disabling binary attributes \n&\n detection

\n", - "value": 1048576 - }, - { - "type": "int", - "name": "GIT_DIFF_FORCE_BINARY", - "comments": "

Treat all files as binary, disabling text diffs

\n", - "value": 2097152 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_WHITESPACE", - "comments": "

Ignore all whitespace

\n", - "value": 4194304 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_WHITESPACE_CHANGE", - "comments": "

Ignore changes in amount of whitespace

\n", - "value": 8388608 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_WHITESPACE_EOL", - "comments": "

Ignore whitespace at end of line

\n", - "value": 16777216 - }, - { - "type": "int", - "name": "GIT_DIFF_SHOW_UNTRACKED_CONTENT", - "comments": "

When generating patch text, include the content of untracked\n files. This automatically turns on GIT_DIFF_INCLUDE_UNTRACKED but\n it does not turn on GIT_DIFF_RECURSE_UNTRACKED_DIRS. Add that\n flag if you want the content of every single UNTRACKED file.

\n", - "value": 33554432 - }, - { - "type": "int", - "name": "GIT_DIFF_SHOW_UNMODIFIED", - "comments": "

When generating output, include the names of unmodified files if\n they are included in the git_diff. Normally these are skipped in\n the formats that list files (e.g. name-only, name-status, raw).\n Even with this, these will not be included in patch format.

\n", - "value": 67108864 - }, - { - "type": "int", - "name": "GIT_DIFF_PATIENCE", - "comments": "

Use the "patience diff" algorithm

\n", - "value": 268435456 - }, - { - "type": "int", - "name": "GIT_DIFF_MINIMAL", - "comments": "

Take extra time to find minimal diff

\n", - "value": 536870912 - }, - { - "type": "int", - "name": "GIT_DIFF_SHOW_BINARY", - "comments": "

Include the necessary deflate / delta information so that git-apply\n can apply given diff information to binary files.

\n", - "value": 1073741824 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "git_submodule_ignore_t ignore_submodules", - "git_strarray pathspec", - "git_diff_notify_cb notify_cb", - "git_diff_progress_cb progress_cb", - "void * payload", - "uint32_t context_lines", - "uint32_t interhunk_lines", - "uint16_t id_abbrev", - "git_off_t max_size", - "const char * old_prefix", - "const char * new_prefix" - ], - "type": "struct", - "value": "git_diff_options", - "file": "git2/diff.h", - "line": 375, - "lineto": 447, - "block": "unsigned int version\nuint32_t flags\ngit_submodule_ignore_t ignore_submodules\ngit_strarray pathspec\ngit_diff_notify_cb notify_cb\ngit_diff_progress_cb progress_cb\nvoid * payload\nuint32_t context_lines\nuint32_t interhunk_lines\nuint16_t id_abbrev\ngit_off_t max_size\nconst char * old_prefix\nconst char * new_prefix", - "tdef": "typedef", - "description": " Structure describing options about how the diff should be executed.", - "comments": "

Setting all values of the structure to zero will yield the default values. Similarly, passing NULL for the options structure will give the defaults. The default values are marked below.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " version for the struct " - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of `git_diff_option_t` values above.\n Defaults to GIT_DIFF_NORMAL" - }, - { - "type": "git_submodule_ignore_t", - "name": "ignore_submodules", - "comments": " Overrides the submodule ignore setting for all submodules in the diff. " - }, - { - "type": "git_strarray", - "name": "pathspec", - "comments": " An array of paths / fnmatch patterns to constrain diff.\n All paths are included by default." - }, - { - "type": "git_diff_notify_cb", - "name": "notify_cb", - "comments": " An optional callback function, notifying the consumer of changes to\n the diff as new deltas are added." - }, - { - "type": "git_diff_progress_cb", - "name": "progress_cb", - "comments": " An optional callback function, notifying the consumer of which files\n are being examined as the diff is generated." - }, - { - "type": "void *", - "name": "payload", - "comments": " The payload to pass to the callback functions. " - }, - { - "type": "uint32_t", - "name": "context_lines", - "comments": " The number of unchanged lines that define the boundary of a hunk\n (and to display before and after). Defaults to 3." - }, - { - "type": "uint32_t", - "name": "interhunk_lines", - "comments": " The maximum number of unchanged lines between hunk boundaries before\n the hunks will be merged into one. Defaults to 0." - }, - { - "type": "uint16_t", - "name": "id_abbrev", - "comments": " The abbreviation length to use when formatting object ids.\n Defaults to the value of 'core.abbrev' from the config, or 7 if unset." - }, - { - "type": "git_off_t", - "name": "max_size", - "comments": " A size (in bytes) above which a blob will be marked as binary\n automatically; pass a negative value to disable.\n Defaults to 512MB." - }, - { - "type": "const char *", - "name": "old_prefix", - "comments": " The virtual \"directory\" prefix for old file names in hunk headers.\n Default is \"a\"." - }, - { - "type": "const char *", - "name": "new_prefix", - "comments": " The virtual \"directory\" prefix for new file names in hunk headers.\n Defaults to \"b\"." - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_commit_as_email", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_options_init", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs", - "git_patch_from_buffers" - ] - } - } - ], - [ - "git_diff_patchid_options", - { - "decl": [ - "unsigned int version" - ], - "type": "struct", - "value": "git_diff_patchid_options", - "file": "git2/diff.h", - "line": 1385, - "lineto": 1387, - "block": "unsigned int version", - "tdef": "typedef", - "description": " Patch ID options structure", - "comments": "

Initialize with GIT_PATCHID_OPTIONS_INIT. Alternatively, you can use git_diff_patchid_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_patchid", - "git_diff_patchid_options_init" - ] - } - } - ], - [ - "git_diff_similarity_metric", - { - "decl": [ - "int (*)(void **, const git_diff_file *, const char *, void *) file_signature", - "int (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature", - "void (*)(void *, void *) free_signature", - "int (*)(int *, void *, void *, void *) similarity", - "void * payload" - ], - "type": "struct", - "value": "git_diff_similarity_metric", - "file": "git2/diff.h", - "line": 715, - "lineto": 725, - "block": "int (*)(void **, const git_diff_file *, const char *, void *) file_signature\nint (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature\nvoid (*)(void *, void *) free_signature\nint (*)(int *, void *, void *, void *) similarity\nvoid * payload", - "tdef": "typedef", - "description": " Pluggable similarity metric", - "comments": "", - "fields": [ - { - "type": "int (*)(void **, const git_diff_file *, const char *, void *)", - "name": "file_signature", - "comments": "" - }, - { - "type": "int (*)(void **, const git_diff_file *, const char *, size_t, void *)", - "name": "buffer_signature", - "comments": "" - }, - { - "type": "void (*)(void *, void *)", - "name": "free_signature", - "comments": "" - }, - { - "type": "int (*)(int *, void *, void *, void *)", - "name": "similarity", - "comments": "" - }, - { - "type": "void *", - "name": "payload", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_stats", - { - "decl": "git_diff_stats", - "type": "struct", - "value": "git_diff_stats", - "file": "git2/diff.h", - "line": 1295, - "lineto": 1295, - "tdef": "typedef", - "description": " This is an opaque structure which is allocated by `git_diff_get_stats`.\n You are responsible for releasing the object memory when done, using the\n `git_diff_stats_free()` function.", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_diff_get_stats", - "git_diff_stats_deletions", - "git_diff_stats_files_changed", - "git_diff_stats_free", - "git_diff_stats_insertions", - "git_diff_stats_to_buf" - ] - } - } - ], - [ - "git_diff_stats_format_t", - { - "decl": [ - "GIT_DIFF_STATS_NONE", - "GIT_DIFF_STATS_FULL", - "GIT_DIFF_STATS_SHORT", - "GIT_DIFF_STATS_NUMBER", - "GIT_DIFF_STATS_INCLUDE_SUMMARY" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 1300, - "lineto": 1315, - "block": "GIT_DIFF_STATS_NONE\nGIT_DIFF_STATS_FULL\nGIT_DIFF_STATS_SHORT\nGIT_DIFF_STATS_NUMBER\nGIT_DIFF_STATS_INCLUDE_SUMMARY", - "tdef": "typedef", - "description": " Formatting options for diff stats", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_STATS_NONE", - "comments": "

No stats

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_STATS_FULL", - "comments": "

Full statistics, equivalent of --stat

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_STATS_SHORT", - "comments": "

Short statistics, equivalent of --shortstat

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_STATS_NUMBER", - "comments": "

Number statistics, equivalent of --numstat

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_STATS_INCLUDE_SUMMARY", - "comments": "

Extended header information such as creations, renames and mode changes, equivalent of --summary

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_stats_to_buf" - ] - } - } - ], - [ - "git_direction", - { - "decl": [ - "GIT_DIRECTION_FETCH", - "GIT_DIRECTION_PUSH" - ], - "type": "enum", - "file": "git2/net.h", - "line": 31, - "lineto": 34, - "block": "GIT_DIRECTION_FETCH\nGIT_DIRECTION_PUSH", - "tdef": "typedef", - "description": " Direction of the connection.", - "comments": "

We need this because we need to know whether we should call git-upload-pack or git-receive-pack on the remote end when get_refs gets called.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DIRECTION_FETCH", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIRECTION_PUSH", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [ - "git_refspec_direction" - ], - "needs": [ - "git_remote_connect" - ] - } - } - ], - [ - "git_email_create_flags_t", - { - "decl": [ - "GIT_EMAIL_CREATE_DEFAULT", - "GIT_EMAIL_CREATE_OMIT_NUMBERS", - "GIT_EMAIL_CREATE_ALWAYS_NUMBER", - "GIT_EMAIL_CREATE_NO_RENAMES" - ], - "type": "enum", - "file": "git2/email.h", - "line": 23, - "lineto": 38, - "block": "GIT_EMAIL_CREATE_DEFAULT\nGIT_EMAIL_CREATE_OMIT_NUMBERS\nGIT_EMAIL_CREATE_ALWAYS_NUMBER\nGIT_EMAIL_CREATE_NO_RENAMES", - "tdef": "typedef", - "description": " Formatting options for diff e-mail generation", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_EMAIL_CREATE_DEFAULT", - "comments": "

Normal patch, the default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_EMAIL_CREATE_OMIT_NUMBERS", - "comments": "

Do not include patch numbers in the subject prefix.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_EMAIL_CREATE_ALWAYS_NUMBER", - "comments": "

Include numbers in the subject prefix even when the\n patch is for a single commit (1/1).

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_EMAIL_CREATE_NO_RENAMES", - "comments": "

Do not perform rename or similarity detection.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_error", - { - "decl": [ - "char * message", - "int klass" - ], - "type": "struct", - "value": "git_error", - "file": "git2/errors.h", - "line": 70, - "lineto": 73, - "block": "char * message\nint klass", - "tdef": "typedef", - "description": " Structure to store extra details of the last error that occurred.", - "comments": "

This is kept on a per-thread basis if GIT_THREADS was defined when the library was build, otherwise one is kept globally for the library

\n", - "fields": [ - { - "type": "char *", - "name": "message", - "comments": "" - }, - { - "type": "int", - "name": "klass", - "comments": "" - } - ], - "used": { - "returns": [ - "git_error_last", - "giterr_last" - ], - "needs": [] - } - } - ], - [ - "git_error_code", - { - "decl": [ - "GIT_OK", - "GIT_ERROR", - "GIT_ENOTFOUND", - "GIT_EEXISTS", - "GIT_EAMBIGUOUS", - "GIT_EBUFS", - "GIT_EUSER", - "GIT_EBAREREPO", - "GIT_EUNBORNBRANCH", - "GIT_EUNMERGED", - "GIT_ENONFASTFORWARD", - "GIT_EINVALIDSPEC", - "GIT_ECONFLICT", - "GIT_ELOCKED", - "GIT_EMODIFIED", - "GIT_EAUTH", - "GIT_ECERTIFICATE", - "GIT_EAPPLIED", - "GIT_EPEEL", - "GIT_EEOF", - "GIT_EINVALID", - "GIT_EUNCOMMITTED", - "GIT_EDIRECTORY", - "GIT_EMERGECONFLICT", - "GIT_PASSTHROUGH", - "GIT_ITEROVER", - "GIT_RETRY", - "GIT_EMISMATCH", - "GIT_EINDEXDIRTY", - "GIT_EAPPLYFAIL", - "GIT_EOWNER" - ], - "type": "enum", - "file": "git2/errors.h", - "line": 21, - "lineto": 62, - "block": "GIT_OK\nGIT_ERROR\nGIT_ENOTFOUND\nGIT_EEXISTS\nGIT_EAMBIGUOUS\nGIT_EBUFS\nGIT_EUSER\nGIT_EBAREREPO\nGIT_EUNBORNBRANCH\nGIT_EUNMERGED\nGIT_ENONFASTFORWARD\nGIT_EINVALIDSPEC\nGIT_ECONFLICT\nGIT_ELOCKED\nGIT_EMODIFIED\nGIT_EAUTH\nGIT_ECERTIFICATE\nGIT_EAPPLIED\nGIT_EPEEL\nGIT_EEOF\nGIT_EINVALID\nGIT_EUNCOMMITTED\nGIT_EDIRECTORY\nGIT_EMERGECONFLICT\nGIT_PASSTHROUGH\nGIT_ITEROVER\nGIT_RETRY\nGIT_EMISMATCH\nGIT_EINDEXDIRTY\nGIT_EAPPLYFAIL\nGIT_EOWNER", - "tdef": "typedef", - "description": " Generic return codes ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_OK", - "comments": "

No error

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_ERROR", - "comments": "

Generic error

\n", - "value": -1 - }, - { - "type": "int", - "name": "GIT_ENOTFOUND", - "comments": "

Requested object could not be found

\n", - "value": -3 - }, - { - "type": "int", - "name": "GIT_EEXISTS", - "comments": "

Object exists preventing operation

\n", - "value": -4 - }, - { - "type": "int", - "name": "GIT_EAMBIGUOUS", - "comments": "

More than one object matches

\n", - "value": -5 - }, - { - "type": "int", - "name": "GIT_EBUFS", - "comments": "

Output buffer too short to hold data

\n", - "value": -6 - }, - { - "type": "int", - "name": "GIT_EUSER", - "comments": "

GIT_EUSER is a special error that is never generated by libgit2\n code. You can return it from a callback (e.g to stop an iteration)\n to know that it was generated by the callback and not by libgit2.

\n", - "value": -7 - }, - { - "type": "int", - "name": "GIT_EBAREREPO", - "comments": "

Operation not allowed on bare repository

\n", - "value": -8 - }, - { - "type": "int", - "name": "GIT_EUNBORNBRANCH", - "comments": "

HEAD refers to branch with no commits

\n", - "value": -9 - }, - { - "type": "int", - "name": "GIT_EUNMERGED", - "comments": "

Merge in progress prevented operation

\n", - "value": -10 - }, - { - "type": "int", - "name": "GIT_ENONFASTFORWARD", - "comments": "

Reference was not fast-forwardable

\n", - "value": -11 - }, - { - "type": "int", - "name": "GIT_EINVALIDSPEC", - "comments": "

Name/ref spec was not in a valid format

\n", - "value": -12 - }, - { - "type": "int", - "name": "GIT_ECONFLICT", - "comments": "

Checkout conflicts prevented operation

\n", - "value": -13 - }, - { - "type": "int", - "name": "GIT_ELOCKED", - "comments": "

Lock file prevented operation

\n", - "value": -14 - }, - { - "type": "int", - "name": "GIT_EMODIFIED", - "comments": "

Reference value does not match expected

\n", - "value": -15 - }, - { - "type": "int", - "name": "GIT_EAUTH", - "comments": "

Authentication error

\n", - "value": -16 - }, - { - "type": "int", - "name": "GIT_ECERTIFICATE", - "comments": "

Server certificate is invalid

\n", - "value": -17 - }, - { - "type": "int", - "name": "GIT_EAPPLIED", - "comments": "

Patch/merge has already been applied

\n", - "value": -18 - }, - { - "type": "int", - "name": "GIT_EPEEL", - "comments": "

The requested peel operation is not possible

\n", - "value": -19 - }, - { - "type": "int", - "name": "GIT_EEOF", - "comments": "

Unexpected EOF

\n", - "value": -20 - }, - { - "type": "int", - "name": "GIT_EINVALID", - "comments": "

Invalid operation or input

\n", - "value": -21 - }, - { - "type": "int", - "name": "GIT_EUNCOMMITTED", - "comments": "

Uncommitted changes in index prevented operation

\n", - "value": -22 - }, - { - "type": "int", - "name": "GIT_EDIRECTORY", - "comments": "

The operation is not valid for a directory

\n", - "value": -23 - }, - { - "type": "int", - "name": "GIT_EMERGECONFLICT", - "comments": "

A merge conflict exists and cannot continue

\n", - "value": -24 - }, - { - "type": "int", - "name": "GIT_PASSTHROUGH", - "comments": "

A user-configured callback refused to act

\n", - "value": -30 - }, - { - "type": "int", - "name": "GIT_ITEROVER", - "comments": "

Signals end of iteration with iterator

\n", - "value": -31 - }, - { - "type": "int", - "name": "GIT_RETRY", - "comments": "

Internal only

\n", - "value": -32 - }, - { - "type": "int", - "name": "GIT_EMISMATCH", - "comments": "

Hashsum mismatch in object

\n", - "value": -33 - }, - { - "type": "int", - "name": "GIT_EINDEXDIRTY", - "comments": "

Unsaved changes in the index would be overwritten

\n", - "value": -34 - }, - { - "type": "int", - "name": "GIT_EAPPLYFAIL", - "comments": "

Patch application failed

\n", - "value": -35 - }, - { - "type": "int", - "name": "GIT_EOWNER", - "comments": "

The object is not owned by the current user

\n", - "value": -36 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_error_t", - { - "decl": [ - "GIT_ERROR_NONE", - "GIT_ERROR_NOMEMORY", - "GIT_ERROR_OS", - "GIT_ERROR_INVALID", - "GIT_ERROR_REFERENCE", - "GIT_ERROR_ZLIB", - "GIT_ERROR_REPOSITORY", - "GIT_ERROR_CONFIG", - "GIT_ERROR_REGEX", - "GIT_ERROR_ODB", - "GIT_ERROR_INDEX", - "GIT_ERROR_OBJECT", - "GIT_ERROR_NET", - "GIT_ERROR_TAG", - "GIT_ERROR_TREE", - "GIT_ERROR_INDEXER", - "GIT_ERROR_SSL", - "GIT_ERROR_SUBMODULE", - "GIT_ERROR_THREAD", - "GIT_ERROR_STASH", - "GIT_ERROR_CHECKOUT", - "GIT_ERROR_FETCHHEAD", - "GIT_ERROR_MERGE", - "GIT_ERROR_SSH", - "GIT_ERROR_FILTER", - "GIT_ERROR_REVERT", - "GIT_ERROR_CALLBACK", - "GIT_ERROR_CHERRYPICK", - "GIT_ERROR_DESCRIBE", - "GIT_ERROR_REBASE", - "GIT_ERROR_FILESYSTEM", - "GIT_ERROR_PATCH", - "GIT_ERROR_WORKTREE", - "GIT_ERROR_SHA1", - "GIT_ERROR_HTTP", - "GIT_ERROR_INTERNAL" - ], - "type": "enum", - "file": "git2/errors.h", - "line": 76, - "lineto": 113, - "block": "GIT_ERROR_NONE\nGIT_ERROR_NOMEMORY\nGIT_ERROR_OS\nGIT_ERROR_INVALID\nGIT_ERROR_REFERENCE\nGIT_ERROR_ZLIB\nGIT_ERROR_REPOSITORY\nGIT_ERROR_CONFIG\nGIT_ERROR_REGEX\nGIT_ERROR_ODB\nGIT_ERROR_INDEX\nGIT_ERROR_OBJECT\nGIT_ERROR_NET\nGIT_ERROR_TAG\nGIT_ERROR_TREE\nGIT_ERROR_INDEXER\nGIT_ERROR_SSL\nGIT_ERROR_SUBMODULE\nGIT_ERROR_THREAD\nGIT_ERROR_STASH\nGIT_ERROR_CHECKOUT\nGIT_ERROR_FETCHHEAD\nGIT_ERROR_MERGE\nGIT_ERROR_SSH\nGIT_ERROR_FILTER\nGIT_ERROR_REVERT\nGIT_ERROR_CALLBACK\nGIT_ERROR_CHERRYPICK\nGIT_ERROR_DESCRIBE\nGIT_ERROR_REBASE\nGIT_ERROR_FILESYSTEM\nGIT_ERROR_PATCH\nGIT_ERROR_WORKTREE\nGIT_ERROR_SHA1\nGIT_ERROR_HTTP\nGIT_ERROR_INTERNAL", - "tdef": "typedef", - "description": " Error classes ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_ERROR_NONE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_ERROR_NOMEMORY", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_ERROR_OS", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_ERROR_INVALID", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_ERROR_REFERENCE", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_ERROR_ZLIB", - "comments": "", - "value": 5 - }, - { - "type": "int", - "name": "GIT_ERROR_REPOSITORY", - "comments": "", - "value": 6 - }, - { - "type": "int", - "name": "GIT_ERROR_CONFIG", - "comments": "", - "value": 7 - }, - { - "type": "int", - "name": "GIT_ERROR_REGEX", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_ERROR_ODB", - "comments": "", - "value": 9 - }, - { - "type": "int", - "name": "GIT_ERROR_INDEX", - "comments": "", - "value": 10 - }, - { - "type": "int", - "name": "GIT_ERROR_OBJECT", - "comments": "", - "value": 11 - }, - { - "type": "int", - "name": "GIT_ERROR_NET", - "comments": "", - "value": 12 - }, - { - "type": "int", - "name": "GIT_ERROR_TAG", - "comments": "", - "value": 13 - }, - { - "type": "int", - "name": "GIT_ERROR_TREE", - "comments": "", - "value": 14 - }, - { - "type": "int", - "name": "GIT_ERROR_INDEXER", - "comments": "", - "value": 15 - }, - { - "type": "int", - "name": "GIT_ERROR_SSL", - "comments": "", - "value": 16 - }, - { - "type": "int", - "name": "GIT_ERROR_SUBMODULE", - "comments": "", - "value": 17 - }, - { - "type": "int", - "name": "GIT_ERROR_THREAD", - "comments": "", - "value": 18 - }, - { - "type": "int", - "name": "GIT_ERROR_STASH", - "comments": "", - "value": 19 - }, - { - "type": "int", - "name": "GIT_ERROR_CHECKOUT", - "comments": "", - "value": 20 - }, - { - "type": "int", - "name": "GIT_ERROR_FETCHHEAD", - "comments": "", - "value": 21 - }, - { - "type": "int", - "name": "GIT_ERROR_MERGE", - "comments": "", - "value": 22 - }, - { - "type": "int", - "name": "GIT_ERROR_SSH", - "comments": "", - "value": 23 - }, - { - "type": "int", - "name": "GIT_ERROR_FILTER", - "comments": "", - "value": 24 - }, - { - "type": "int", - "name": "GIT_ERROR_REVERT", - "comments": "", - "value": 25 - }, - { - "type": "int", - "name": "GIT_ERROR_CALLBACK", - "comments": "", - "value": 26 - }, - { - "type": "int", - "name": "GIT_ERROR_CHERRYPICK", - "comments": "", - "value": 27 - }, - { - "type": "int", - "name": "GIT_ERROR_DESCRIBE", - "comments": "", - "value": 28 - }, - { - "type": "int", - "name": "GIT_ERROR_REBASE", - "comments": "", - "value": 29 - }, - { - "type": "int", - "name": "GIT_ERROR_FILESYSTEM", - "comments": "", - "value": 30 - }, - { - "type": "int", - "name": "GIT_ERROR_PATCH", - "comments": "", - "value": 31 - }, - { - "type": "int", - "name": "GIT_ERROR_WORKTREE", - "comments": "", - "value": 32 - }, - { - "type": "int", - "name": "GIT_ERROR_SHA1", - "comments": "", - "value": 33 - }, - { - "type": "int", - "name": "GIT_ERROR_HTTP", - "comments": "", - "value": 34 - }, - { - "type": "int", - "name": "GIT_ERROR_INTERNAL", - "comments": "", - "value": 35 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_feature_t", - { - "decl": [ - "GIT_FEATURE_THREADS", - "GIT_FEATURE_HTTPS", - "GIT_FEATURE_SSH", - "GIT_FEATURE_NSEC" - ], - "type": "enum", - "file": "git2/common.h", - "line": 128, - "lineto": 151, - "block": "GIT_FEATURE_THREADS\nGIT_FEATURE_HTTPS\nGIT_FEATURE_SSH\nGIT_FEATURE_NSEC", - "tdef": "typedef", - "description": " Combinations of these values describe the features with which libgit2\n was compiled", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FEATURE_THREADS", - "comments": "

If set, libgit2 was built thread-aware and can be safely used from multiple\n threads.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_FEATURE_HTTPS", - "comments": "

If set, libgit2 was built with and linked against a TLS implementation.\n Custom TLS streams may still be added by the user to support HTTPS\n regardless of this.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_FEATURE_SSH", - "comments": "

If set, libgit2 was built with and linked against libssh2. A custom\n transport may still be added by the user to support libssh2 regardless of\n this.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_FEATURE_NSEC", - "comments": "

If set, libgit2 was built with support for sub-second resolution in file\n modification times.

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_fetch_options", - { - "decl": [ - "int version", - "git_remote_callbacks callbacks", - "git_fetch_prune_t prune", - "int update_fetchhead", - "git_remote_autotag_option_t download_tags", - "git_proxy_options proxy_opts", - "git_strarray custom_headers" - ], - "type": "struct", - "value": "git_fetch_options", - "file": "git2/remote.h", - "line": 704, - "lineto": 741, - "block": "int version\ngit_remote_callbacks callbacks\ngit_fetch_prune_t prune\nint update_fetchhead\ngit_remote_autotag_option_t download_tags\ngit_proxy_options proxy_opts\ngit_strarray custom_headers", - "tdef": "typedef", - "description": " Fetch options structure.", - "comments": "

Zero out for defaults. Initialize with GIT_FETCH_OPTIONS_INIT macro to correctly set the version field. E.g.

\n\n
    git_fetch_options opts = GIT_FETCH_OPTIONS_INIT;\n
\n", - "fields": [ - { - "type": "int", - "name": "version", - "comments": "" - }, - { - "type": "git_remote_callbacks", - "name": "callbacks", - "comments": " Callbacks to use for this fetch operation" - }, - { - "type": "git_fetch_prune_t", - "name": "prune", - "comments": " Whether to perform a prune after the fetch" - }, - { - "type": "int", - "name": "update_fetchhead", - "comments": " Whether to write the results to FETCH_HEAD. Defaults to\n on. Leave this default in order to behave like git." - }, - { - "type": "git_remote_autotag_option_t", - "name": "download_tags", - "comments": " Determines how to behave regarding tags on the remote, such\n as auto-downloading tags for objects we're downloading or\n downloading all of them.\n\n The default is to auto-follow tags." - }, - { - "type": "git_proxy_options", - "name": "proxy_opts", - "comments": " Proxy options to use, by default no proxy is used." - }, - { - "type": "git_strarray", - "name": "custom_headers", - "comments": " Extra headers for this fetch operation" - } - ], - "used": { - "returns": [], - "needs": [ - "git_fetch_options_init", - "git_remote_download", - "git_remote_fetch" - ] - } - } - ], - [ - "git_fetch_prune_t", - { - "decl": [ - "GIT_FETCH_PRUNE_UNSPECIFIED", - "GIT_FETCH_PRUNE", - "GIT_FETCH_NO_PRUNE" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 656, - "lineto": 669, - "block": "GIT_FETCH_PRUNE_UNSPECIFIED\nGIT_FETCH_PRUNE\nGIT_FETCH_NO_PRUNE", - "tdef": "typedef", - "description": " Acceptable prune settings when fetching ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FETCH_PRUNE_UNSPECIFIED", - "comments": "

Use the setting from the configuration

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FETCH_PRUNE", - "comments": "

Force pruning on

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_FETCH_NO_PRUNE", - "comments": "

Force pruning off

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_filemode_t", - { - "decl": [ - "GIT_FILEMODE_UNREADABLE", - "GIT_FILEMODE_TREE", - "GIT_FILEMODE_BLOB", - "GIT_FILEMODE_BLOB_EXECUTABLE", - "GIT_FILEMODE_LINK", - "GIT_FILEMODE_COMMIT" - ], - "type": "enum", - "file": "git2/types.h", - "line": 222, - "lineto": 229, - "block": "GIT_FILEMODE_UNREADABLE\nGIT_FILEMODE_TREE\nGIT_FILEMODE_BLOB\nGIT_FILEMODE_BLOB_EXECUTABLE\nGIT_FILEMODE_LINK\nGIT_FILEMODE_COMMIT", - "tdef": "typedef", - "description": " Valid modes for index and tree entries. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FILEMODE_UNREADABLE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FILEMODE_TREE", - "comments": "", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_FILEMODE_BLOB", - "comments": "", - "value": 33188 - }, - { - "type": "int", - "name": "GIT_FILEMODE_BLOB_EXECUTABLE", - "comments": "", - "value": 33261 - }, - { - "type": "int", - "name": "GIT_FILEMODE_LINK", - "comments": "", - "value": 40960 - }, - { - "type": "int", - "name": "GIT_FILEMODE_COMMIT", - "comments": "", - "value": 57344 - } - ], - "used": { - "returns": [ - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw" - ], - "needs": [ - "git_treebuilder_insert" - ] - } - } - ], - [ - "git_filter", - { - "decl": "git_filter", - "type": "struct", - "value": "git_filter", - "file": "git2/filter.h", - "line": 100, - "lineto": 100, - "tdef": "typedef", - "description": " A filter that can transform file data", - "comments": "

This represents a filter that can be used to transform or even replace file data. Libgit2 includes one built in filter and it is possible to write your own (see git2/sys/filter.h for information on that).

\n\n

The two builtin filters are:

\n\n
    \n
  • "crlf" which uses the complex rules with the "text", "eol", and "crlf" file attributes to decide how to convert between LF and CRLF line endings * "ident" which replaces "$Id$" in a blob with "$Id: $" upon checkout and replaced "$Id: $" with "$Id$" on checkin.
  • \n
\n", - "used": { - "returns": [], - "needs": [ - "git_filter_list_apply_to_blob", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_data", - "git_filter_list_apply_to_file", - "git_filter_list_contains", - "git_filter_list_free", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_data", - "git_filter_list_stream_file" - ] - } - } - ], - [ - "git_filter_flag_t", - { - "decl": [ - "GIT_FILTER_DEFAULT", - "GIT_FILTER_ALLOW_UNSAFE", - "GIT_FILTER_NO_SYSTEM_ATTRIBUTES", - "GIT_FILTER_ATTRIBUTES_FROM_HEAD", - "GIT_FILTER_ATTRIBUTES_FROM_COMMIT" - ], - "type": "enum", - "file": "git2/filter.h", - "line": 41, - "lineto": 58, - "block": "GIT_FILTER_DEFAULT\nGIT_FILTER_ALLOW_UNSAFE\nGIT_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_FILTER_ATTRIBUTES_FROM_COMMIT", - "tdef": "typedef", - "description": " Filter option flags.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FILTER_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FILTER_ALLOW_UNSAFE", - "comments": "

Don't error for safecrlf violations, allow them to continue.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_FILTER_NO_SYSTEM_ATTRIBUTES", - "comments": "

Don't load /etc/gitattributes (or the system equivalent)

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_FILTER_ATTRIBUTES_FROM_HEAD", - "comments": "

Load attributes from .gitattributes in the root of HEAD

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_FILTER_ATTRIBUTES_FROM_COMMIT", - "comments": "

Load attributes from .gitattributes in a given commit.\n This can only be specified in a git_filter_options.

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_filter_list", - { - "decl": "git_filter_list", - "type": "struct", - "value": "git_filter_list", - "file": "git2/filter.h", - "line": 112, - "lineto": 112, - "tdef": "typedef", - "description": " List of filters to be applied", - "comments": "

This represents a list of filters to be applied to a file / blob. You can build the list with one call, apply it with another, and dispose it with a third. In typical usage, there are not many occasions where a git_filter_list is needed directly since the library will generally handle conversions for you, but it can be convenient to be able to build and apply the list sometimes.

\n", - "used": { - "returns": [], - "needs": [ - "git_filter_list_apply_to_blob", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_data", - "git_filter_list_apply_to_file", - "git_filter_list_contains", - "git_filter_list_free", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_data", - "git_filter_list_stream_file" - ] - } - } - ], - [ - "git_filter_mode_t", - { - "decl": [ - "GIT_FILTER_TO_WORKTREE", - "GIT_FILTER_SMUDGE", - "GIT_FILTER_TO_ODB", - "GIT_FILTER_CLEAN" - ], - "type": "enum", - "file": "git2/filter.h", - "line": 31, - "lineto": 36, - "block": "GIT_FILTER_TO_WORKTREE\nGIT_FILTER_SMUDGE\nGIT_FILTER_TO_ODB\nGIT_FILTER_CLEAN", - "tdef": "typedef", - "description": " Filters are applied in one of two directions: smudging - which is\n exporting a file from the Git object database to the working directory,\n and cleaning - which is importing a file from the working directory to\n the Git object database. These values control which direction of\n change is being applied.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FILTER_TO_WORKTREE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FILTER_SMUDGE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FILTER_TO_ODB", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_FILTER_CLEAN", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [ - "git_filter_list_load", - "git_filter_list_load_ext" - ] - } - } - ], - [ - "git_filter_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "git_oid * commit_id", - "git_oid attr_commit_id" - ], - "type": "struct", - "value": "git_filter_options", - "file": "git2/filter.h", - "line": 63, - "lineto": 80, - "block": "unsigned int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", - "tdef": "typedef", - "description": " Filtering options", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " See `git_filter_flag_t` above " - }, - { - "type": "git_oid *", - "name": "commit_id", - "comments": "" - }, - { - "type": "git_oid", - "name": "attr_commit_id", - "comments": " The commit to load attributes from, when\n `GIT_FILTER_ATTRIBUTES_FROM_COMMIT` is specified." - } - ], - "used": { - "returns": [], - "needs": [ - "git_filter_list_load_ext" - ] - } - } - ], - [ - "git_filter_source", - { - "decl": "git_filter_source", - "type": "struct", - "value": "git_filter_source", - "file": "git2/sys/filter.h", - "line": 95, - "lineto": 95, - "tdef": "typedef", - "description": " A filter source represents a file/blob to be processed", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_hashsig_option_t", - { - "decl": [ - "GIT_HASHSIG_NORMAL", - "GIT_HASHSIG_IGNORE_WHITESPACE", - "GIT_HASHSIG_SMART_WHITESPACE", - "GIT_HASHSIG_ALLOW_SMALL_FILES" - ], - "type": "enum", - "file": "git2/sys/hashsig.h", - "line": 25, - "lineto": 45, - "block": "GIT_HASHSIG_NORMAL\nGIT_HASHSIG_IGNORE_WHITESPACE\nGIT_HASHSIG_SMART_WHITESPACE\nGIT_HASHSIG_ALLOW_SMALL_FILES", - "tdef": "typedef", - "description": " Options for hashsig computation", - "comments": "

The options GIT_HASHSIG_NORMAL, GIT_HASHSIG_IGNORE_WHITESPACE, GIT_HASHSIG_SMART_WHITESPACE are exclusive and should not be combined.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_HASHSIG_NORMAL", - "comments": "

Use all data

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_HASHSIG_IGNORE_WHITESPACE", - "comments": "

Ignore whitespace

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_HASHSIG_SMART_WHITESPACE", - "comments": "

Ignore

\n\n

and all space after

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_HASHSIG_ALLOW_SMALL_FILES", - "comments": "

Allow hashing of small files

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index", - { - "decl": "git_index", - "type": "struct", - "value": "git_index", - "file": "git2/types.h", - "line": 148, - "lineto": 148, - "tdef": "typedef", - "description": " Memory representation of an index file. ", - "comments": "", - "used": { - "returns": [ - "git_index_get_byindex", - "git_index_get_bypath", - "git_remote_stats" - ], - "needs": [ - "git_apply_to_tree", - "git_checkout_index", - "git_cherrypick_commit", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_tree_to_index", - "git_index_add", - "git_index_add_all", - "git_index_add_bypath", - "git_index_add_from_buffer", - "git_index_caps", - "git_index_checksum", - "git_index_clear", - "git_index_conflict_add", - "git_index_conflict_cleanup", - "git_index_conflict_get", - "git_index_conflict_iterator_free", - "git_index_conflict_iterator_new", - "git_index_conflict_next", - "git_index_conflict_remove", - "git_index_entry_is_conflict", - "git_index_entry_stage", - "git_index_entrycount", - "git_index_find", - "git_index_find_prefix", - "git_index_free", - "git_index_get_byindex", - "git_index_get_bypath", - "git_index_has_conflicts", - "git_index_iterator_free", - "git_index_iterator_new", - "git_index_iterator_next", - "git_index_new", - "git_index_open", - "git_index_owner", - "git_index_path", - "git_index_read", - "git_index_read_tree", - "git_index_remove", - "git_index_remove_all", - "git_index_remove_bypath", - "git_index_remove_directory", - "git_index_set_caps", - "git_index_set_version", - "git_index_update_all", - "git_index_version", - "git_index_write", - "git_index_write_tree", - "git_index_write_tree_to", - "git_indexer_append", - "git_indexer_commit", - "git_indexer_free", - "git_indexer_hash", - "git_indexer_new", - "git_indexer_options_init", - "git_indexer_progress_cb", - "git_merge_commits", - "git_merge_file_from_index", - "git_merge_trees", - "git_odb_write_pack", - "git_packbuilder_write", - "git_pathspec_match_index", - "git_rebase_inmemory_index", - "git_repository_index", - "git_revert_commit" - ] - } - } - ], - [ - "git_index_add_option_t", - { - "decl": [ - "GIT_INDEX_ADD_DEFAULT", - "GIT_INDEX_ADD_FORCE", - "GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH", - "GIT_INDEX_ADD_CHECK_PATHSPEC" - ], - "type": "enum", - "file": "git2/index.h", - "line": 139, - "lineto": 144, - "block": "GIT_INDEX_ADD_DEFAULT\nGIT_INDEX_ADD_FORCE\nGIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH\nGIT_INDEX_ADD_CHECK_PATHSPEC", - "tdef": "typedef", - "description": " Flags for APIs that add files matching pathspec ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_ADD_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_INDEX_ADD_FORCE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_INDEX_ADD_CHECK_PATHSPEC", - "comments": "", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_capability_t", - { - "decl": [ - "GIT_INDEX_CAPABILITY_IGNORE_CASE", - "GIT_INDEX_CAPABILITY_NO_FILEMODE", - "GIT_INDEX_CAPABILITY_NO_SYMLINKS", - "GIT_INDEX_CAPABILITY_FROM_OWNER" - ], - "type": "enum", - "file": "git2/index.h", - "line": 126, - "lineto": 131, - "block": "GIT_INDEX_CAPABILITY_IGNORE_CASE\nGIT_INDEX_CAPABILITY_NO_FILEMODE\nGIT_INDEX_CAPABILITY_NO_SYMLINKS\nGIT_INDEX_CAPABILITY_FROM_OWNER", - "tdef": "typedef", - "description": " Capabilities of system that affect index actions. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_CAPABILITY_IGNORE_CASE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_INDEX_CAPABILITY_NO_FILEMODE", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_INDEX_CAPABILITY_NO_SYMLINKS", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_INDEX_CAPABILITY_FROM_OWNER", - "comments": "", - "value": -1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_conflict_iterator", - { - "decl": "git_index_conflict_iterator", - "type": "struct", - "value": "git_index_conflict_iterator", - "file": "git2/types.h", - "line": 154, - "lineto": 154, - "tdef": "typedef", - "description": " An iterator for conflicts in the index. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_index_conflict_iterator_free", - "git_index_conflict_iterator_new", - "git_index_conflict_next" - ] - } - } - ], - [ - "git_index_entry", - { - "decl": [ - "git_index_time ctime", - "git_index_time mtime", - "uint32_t dev", - "uint32_t ino", - "uint32_t mode", - "uint32_t uid", - "uint32_t gid", - "uint32_t file_size", - "git_oid id", - "uint16_t flags", - "uint16_t flags_extended", - "const char * path" - ], - "type": "struct", - "value": "git_index_entry", - "file": "git2/index.h", - "line": 53, - "lineto": 70, - "block": "git_index_time ctime\ngit_index_time mtime\nuint32_t dev\nuint32_t ino\nuint32_t mode\nuint32_t uid\nuint32_t gid\nuint32_t file_size\ngit_oid id\nuint16_t flags\nuint16_t flags_extended\nconst char * path", - "tdef": "typedef", - "description": " In-memory representation of a file entry in the index.", - "comments": "

This is a public structure that represents a file entry in the index. The meaning of the fields corresponds to core Git's documentation (in "Documentation/technical/index-format.txt").

\n\n

The flags field consists of a number of bit fields which can be accessed via the first set of GIT_INDEX_ENTRY_... bitmasks below. These flags are all read from and persisted to disk.

\n\n

The flags_extended field also has a number of bit fields which can be accessed via the later GIT_INDEX_ENTRY_... bitmasks below. Some of these flags are read from and written to disk, but some are set aside for in-memory only reference.

\n\n

Note that the time and size fields are truncated to 32 bits. This is enough to detect changes, which is enough for the index to function as a cache, but it should not be taken as an authoritative source for that data.

\n", - "fields": [ - { - "type": "git_index_time", - "name": "ctime", - "comments": "" - }, - { - "type": "git_index_time", - "name": "mtime", - "comments": "" - }, - { - "type": "uint32_t", - "name": "dev", - "comments": "" - }, - { - "type": "uint32_t", - "name": "ino", - "comments": "" - }, - { - "type": "uint32_t", - "name": "mode", - "comments": "" - }, - { - "type": "uint32_t", - "name": "uid", - "comments": "" - }, - { - "type": "uint32_t", - "name": "gid", - "comments": "" - }, - { - "type": "uint32_t", - "name": "file_size", - "comments": "" - }, - { - "type": "git_oid", - "name": "id", - "comments": "" - }, - { - "type": "uint16_t", - "name": "flags", - "comments": "" - }, - { - "type": "uint16_t", - "name": "flags_extended", - "comments": "" - }, - { - "type": "const char *", - "name": "path", - "comments": "" - } - ], - "used": { - "returns": [ - "git_index_get_byindex", - "git_index_get_bypath" - ], - "needs": [ - "git_index_add", - "git_index_add_from_buffer", - "git_index_conflict_add", - "git_index_conflict_get", - "git_index_conflict_next", - "git_index_entry_is_conflict", - "git_index_entry_stage", - "git_index_iterator_next", - "git_merge_file_from_index" - ] - } - } - ], - [ - "git_index_entry_extended_flag_t", - { - "decl": [ - "GIT_INDEX_ENTRY_INTENT_TO_ADD", - "GIT_INDEX_ENTRY_SKIP_WORKTREE", - "GIT_INDEX_ENTRY_EXTENDED_FLAGS", - "GIT_INDEX_ENTRY_UPTODATE" - ], - "type": "enum", - "file": "git2/index.h", - "line": 116, - "lineto": 123, - "block": "GIT_INDEX_ENTRY_INTENT_TO_ADD\nGIT_INDEX_ENTRY_SKIP_WORKTREE\nGIT_INDEX_ENTRY_EXTENDED_FLAGS\nGIT_INDEX_ENTRY_UPTODATE", - "tdef": "typedef", - "description": " Bitmasks for on-disk fields of `git_index_entry`'s `flags_extended`", - "comments": "

In memory, the flags_extended fields are divided into two parts: the fields that are read from and written to disk, and other fields that in-memory only and used by libgit2. Only the flags in GIT_INDEX_ENTRY_EXTENDED_FLAGS will get saved on-disk.

\n\n

Thee first three bitmasks match the three fields in the git_index_entry flags_extended value that belong on disk. You can use them to interpret the data in the flags_extended.

\n\n

The rest of the bitmasks match the other fields in the git_index_entry flags_extended value that are only used in-memory by libgit2. You can use them to interpret the data in the flags_extended.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_ENTRY_INTENT_TO_ADD", - "comments": "", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_INDEX_ENTRY_SKIP_WORKTREE", - "comments": "", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_INDEX_ENTRY_EXTENDED_FLAGS", - "comments": "", - "value": 24576 - }, - { - "type": "int", - "name": "GIT_INDEX_ENTRY_UPTODATE", - "comments": "", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_entry_flag_t", - { - "decl": [ - "GIT_INDEX_ENTRY_EXTENDED", - "GIT_INDEX_ENTRY_VALID" - ], - "type": "enum", - "file": "git2/index.h", - "line": 87, - "lineto": 90, - "block": "GIT_INDEX_ENTRY_EXTENDED\nGIT_INDEX_ENTRY_VALID", - "tdef": "typedef", - "description": " Flags for index entries", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_ENTRY_EXTENDED", - "comments": "", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_INDEX_ENTRY_VALID", - "comments": "", - "value": 32768 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_iterator", - { - "decl": "git_index_iterator", - "type": "struct", - "value": "git_index_iterator", - "file": "git2/types.h", - "line": 151, - "lineto": 151, - "tdef": "typedef", - "description": " An iterator for entries in the index. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_index_iterator_free", - "git_index_iterator_new", - "git_index_iterator_next" - ] - } - } - ], - [ - "git_index_stage_t", - { - "decl": [ - "GIT_INDEX_STAGE_ANY", - "GIT_INDEX_STAGE_NORMAL", - "GIT_INDEX_STAGE_ANCESTOR", - "GIT_INDEX_STAGE_OURS", - "GIT_INDEX_STAGE_THEIRS" - ], - "type": "enum", - "file": "git2/index.h", - "line": 147, - "lineto": 167, - "block": "GIT_INDEX_STAGE_ANY\nGIT_INDEX_STAGE_NORMAL\nGIT_INDEX_STAGE_ANCESTOR\nGIT_INDEX_STAGE_OURS\nGIT_INDEX_STAGE_THEIRS", - "tdef": "typedef", - "description": " Git index stage states ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_STAGE_ANY", - "comments": "

Match any index stage.

\n\n

Some index APIs take a stage to match; pass this value to match\n any entry matching the path regardless of stage.

\n", - "value": -1 - }, - { - "type": "int", - "name": "GIT_INDEX_STAGE_NORMAL", - "comments": "

A normal staged file in the index.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_INDEX_STAGE_ANCESTOR", - "comments": "

The ancestor side of a conflict.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_INDEX_STAGE_OURS", - "comments": "

The "ours" side of a conflict.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_INDEX_STAGE_THEIRS", - "comments": "

The "theirs" side of a conflict.

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_time", - { - "decl": [ - "int32_t seconds", - "uint32_t nanoseconds" - ], - "type": "struct", - "value": "git_index_time", - "file": "git2/index.h", - "line": 26, - "lineto": 30, - "block": "int32_t seconds\nuint32_t nanoseconds", - "tdef": "typedef", - "description": " Time structure used in a git index entry ", - "comments": "", - "fields": [ - { - "type": "int32_t", - "name": "seconds", - "comments": "" - }, - { - "type": "uint32_t", - "name": "nanoseconds", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_indexer", - { - "decl": "git_indexer", - "type": "struct", - "value": "git_indexer", - "file": "git2/indexer.h", - "line": 17, - "lineto": 17, - "tdef": "typedef", - "description": " A git indexer object ", - "comments": "", - "used": { - "returns": [ - "git_remote_stats" - ], - "needs": [ - "git_indexer_append", - "git_indexer_commit", - "git_indexer_free", - "git_indexer_hash", - "git_indexer_new", - "git_indexer_options_init", - "git_indexer_progress_cb", - "git_odb_write_pack", - "git_packbuilder_write" - ] - } - } - ], - [ - "git_indexer_options", - { - "decl": [ - "unsigned int version", - "git_indexer_progress_cb progress_cb", - "void * progress_cb_payload", - "unsigned char verify" - ], - "type": "struct", - "value": "git_indexer_options", - "file": "git2/indexer.h", - "line": 62, - "lineto": 73, - "block": "unsigned int version\ngit_indexer_progress_cb progress_cb\nvoid * progress_cb_payload\nunsigned char verify", - "tdef": "typedef", - "description": " Options for indexer configuration", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_indexer_progress_cb", - "name": "progress_cb", - "comments": " progress_cb function to call with progress information " - }, - { - "type": "void *", - "name": "progress_cb_payload", - "comments": " progress_cb_payload payload for the progress callback " - }, - { - "type": "unsigned char", - "name": "verify", - "comments": " Do connectivity checks for the received pack " - } - ], - "used": { - "returns": [], - "needs": [ - "git_indexer_new", - "git_indexer_options_init" - ] - } - } - ], - [ - "git_indexer_progress", - { - "decl": [ - "unsigned int total_objects", - "unsigned int indexed_objects", - "unsigned int received_objects", - "unsigned int local_objects", - "unsigned int total_deltas", - "unsigned int indexed_deltas", - "size_t received_bytes" - ], - "type": "struct", - "value": "git_indexer_progress", - "file": "git2/indexer.h", - "line": 24, - "lineto": 48, - "block": "unsigned int total_objects\nunsigned int indexed_objects\nunsigned int received_objects\nunsigned int local_objects\nunsigned int total_deltas\nunsigned int indexed_deltas\nsize_t received_bytes", - "tdef": "typedef", - "description": " This structure is used to provide callers information about the\n progress of indexing a packfile, either directly or part of a\n fetch or clone that downloads a packfile.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "total_objects", - "comments": " number of objects in the packfile being indexed " - }, - { - "type": "unsigned int", - "name": "indexed_objects", - "comments": " received objects that have been hashed " - }, - { - "type": "unsigned int", - "name": "received_objects", - "comments": " received_objects: objects which have been downloaded " - }, - { - "type": "unsigned int", - "name": "local_objects", - "comments": " locally-available objects that have been injected in order\n to fix a thin pack" - }, - { - "type": "unsigned int", - "name": "total_deltas", - "comments": " number of deltas in the packfile being indexed " - }, - { - "type": "unsigned int", - "name": "indexed_deltas", - "comments": " received deltas that have been indexed " - }, - { - "type": "size_t", - "name": "received_bytes", - "comments": " size of the packfile received up to now " - } - ], - "used": { - "returns": [ - "git_remote_stats" - ], - "needs": [ - "git_indexer_append", - "git_indexer_commit", - "git_indexer_progress_cb", - "git_odb_write_pack", - "git_packbuilder_write" - ] - } - } - ], - [ - "git_libgit2_opt_t", - { - "decl": [ - "GIT_OPT_GET_MWINDOW_SIZE", - "GIT_OPT_SET_MWINDOW_SIZE", - "GIT_OPT_GET_MWINDOW_MAPPED_LIMIT", - "GIT_OPT_SET_MWINDOW_MAPPED_LIMIT", - "GIT_OPT_GET_SEARCH_PATH", - "GIT_OPT_SET_SEARCH_PATH", - "GIT_OPT_SET_CACHE_OBJECT_LIMIT", - "GIT_OPT_SET_CACHE_MAX_SIZE", - "GIT_OPT_ENABLE_CACHING", - "GIT_OPT_GET_CACHED_MEMORY", - "GIT_OPT_GET_TEMPLATE_PATH", - "GIT_OPT_SET_TEMPLATE_PATH", - "GIT_OPT_SET_SSL_CERT_LOCATIONS", - "GIT_OPT_SET_USER_AGENT", - "GIT_OPT_ENABLE_STRICT_OBJECT_CREATION", - "GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION", - "GIT_OPT_SET_SSL_CIPHERS", - "GIT_OPT_GET_USER_AGENT", - "GIT_OPT_ENABLE_OFS_DELTA", - "GIT_OPT_ENABLE_FSYNC_GITDIR", - "GIT_OPT_GET_WINDOWS_SHAREMODE", - "GIT_OPT_SET_WINDOWS_SHAREMODE", - "GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION", - "GIT_OPT_SET_ALLOCATOR", - "GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY", - "GIT_OPT_GET_PACK_MAX_OBJECTS", - "GIT_OPT_SET_PACK_MAX_OBJECTS", - "GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS", - "GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE", - "GIT_OPT_GET_MWINDOW_FILE_LIMIT", - "GIT_OPT_SET_MWINDOW_FILE_LIMIT", - "GIT_OPT_SET_ODB_PACKED_PRIORITY", - "GIT_OPT_SET_ODB_LOOSE_PRIORITY", - "GIT_OPT_GET_EXTENSIONS", - "GIT_OPT_SET_EXTENSIONS", - "GIT_OPT_GET_OWNER_VALIDATION", - "GIT_OPT_SET_OWNER_VALIDATION" - ], - "type": "enum", - "file": "git2/common.h", - "line": 179, - "lineto": 217, - "block": "GIT_OPT_GET_MWINDOW_SIZE\nGIT_OPT_SET_MWINDOW_SIZE\nGIT_OPT_GET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_SET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_GET_SEARCH_PATH\nGIT_OPT_SET_SEARCH_PATH\nGIT_OPT_SET_CACHE_OBJECT_LIMIT\nGIT_OPT_SET_CACHE_MAX_SIZE\nGIT_OPT_ENABLE_CACHING\nGIT_OPT_GET_CACHED_MEMORY\nGIT_OPT_GET_TEMPLATE_PATH\nGIT_OPT_SET_TEMPLATE_PATH\nGIT_OPT_SET_SSL_CERT_LOCATIONS\nGIT_OPT_SET_USER_AGENT\nGIT_OPT_ENABLE_STRICT_OBJECT_CREATION\nGIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION\nGIT_OPT_SET_SSL_CIPHERS\nGIT_OPT_GET_USER_AGENT\nGIT_OPT_ENABLE_OFS_DELTA\nGIT_OPT_ENABLE_FSYNC_GITDIR\nGIT_OPT_GET_WINDOWS_SHAREMODE\nGIT_OPT_SET_WINDOWS_SHAREMODE\nGIT_OPT_ENABLE_STRICT_HASH_VERIFICATION\nGIT_OPT_SET_ALLOCATOR\nGIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY\nGIT_OPT_GET_PACK_MAX_OBJECTS\nGIT_OPT_SET_PACK_MAX_OBJECTS\nGIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS\nGIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE\nGIT_OPT_GET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_ODB_PACKED_PRIORITY\nGIT_OPT_SET_ODB_LOOSE_PRIORITY\nGIT_OPT_GET_EXTENSIONS\nGIT_OPT_SET_EXTENSIONS\nGIT_OPT_GET_OWNER_VALIDATION\nGIT_OPT_SET_OWNER_VALIDATION", - "tdef": "typedef", - "description": " Global library options", - "comments": "

These are used to select which global option to set or get and are used in git_libgit2_opts().

\n", - "fields": [ - { - "type": "int", - "name": "GIT_OPT_GET_MWINDOW_SIZE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_OPT_SET_MWINDOW_SIZE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_OPT_GET_MWINDOW_MAPPED_LIMIT", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_OPT_SET_MWINDOW_MAPPED_LIMIT", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_OPT_GET_SEARCH_PATH", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_OPT_SET_SEARCH_PATH", - "comments": "", - "value": 5 - }, - { - "type": "int", - "name": "GIT_OPT_SET_CACHE_OBJECT_LIMIT", - "comments": "", - "value": 6 - }, - { - "type": "int", - "name": "GIT_OPT_SET_CACHE_MAX_SIZE", - "comments": "", - "value": 7 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_CACHING", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_OPT_GET_CACHED_MEMORY", - "comments": "", - "value": 9 - }, - { - "type": "int", - "name": "GIT_OPT_GET_TEMPLATE_PATH", - "comments": "", - "value": 10 - }, - { - "type": "int", - "name": "GIT_OPT_SET_TEMPLATE_PATH", - "comments": "", - "value": 11 - }, - { - "type": "int", - "name": "GIT_OPT_SET_SSL_CERT_LOCATIONS", - "comments": "", - "value": 12 - }, - { - "type": "int", - "name": "GIT_OPT_SET_USER_AGENT", - "comments": "", - "value": 13 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_STRICT_OBJECT_CREATION", - "comments": "", - "value": 14 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION", - "comments": "", - "value": 15 - }, - { - "type": "int", - "name": "GIT_OPT_SET_SSL_CIPHERS", - "comments": "", - "value": 16 - }, - { - "type": "int", - "name": "GIT_OPT_GET_USER_AGENT", - "comments": "", - "value": 17 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_OFS_DELTA", - "comments": "", - "value": 18 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_FSYNC_GITDIR", - "comments": "", - "value": 19 - }, - { - "type": "int", - "name": "GIT_OPT_GET_WINDOWS_SHAREMODE", - "comments": "", - "value": 20 - }, - { - "type": "int", - "name": "GIT_OPT_SET_WINDOWS_SHAREMODE", - "comments": "", - "value": 21 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION", - "comments": "", - "value": 22 - }, - { - "type": "int", - "name": "GIT_OPT_SET_ALLOCATOR", - "comments": "", - "value": 23 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY", - "comments": "", - "value": 24 - }, - { - "type": "int", - "name": "GIT_OPT_GET_PACK_MAX_OBJECTS", - "comments": "", - "value": 25 - }, - { - "type": "int", - "name": "GIT_OPT_SET_PACK_MAX_OBJECTS", - "comments": "", - "value": 26 - }, - { - "type": "int", - "name": "GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS", - "comments": "", - "value": 27 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE", - "comments": "", - "value": 28 - }, - { - "type": "int", - "name": "GIT_OPT_GET_MWINDOW_FILE_LIMIT", - "comments": "", - "value": 29 - }, - { - "type": "int", - "name": "GIT_OPT_SET_MWINDOW_FILE_LIMIT", - "comments": "", - "value": 30 - }, - { - "type": "int", - "name": "GIT_OPT_SET_ODB_PACKED_PRIORITY", - "comments": "", - "value": 31 - }, - { - "type": "int", - "name": "GIT_OPT_SET_ODB_LOOSE_PRIORITY", - "comments": "", - "value": 32 - }, - { - "type": "int", - "name": "GIT_OPT_GET_EXTENSIONS", - "comments": "", - "value": 33 - }, - { - "type": "int", - "name": "GIT_OPT_SET_EXTENSIONS", - "comments": "", - "value": 34 - }, - { - "type": "int", - "name": "GIT_OPT_GET_OWNER_VALIDATION", - "comments": "", - "value": 35 - }, - { - "type": "int", - "name": "GIT_OPT_SET_OWNER_VALIDATION", - "comments": "", - "value": 36 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_mailmap", - { - "decl": "git_mailmap", - "type": "struct", - "value": "git_mailmap", - "file": "git2/types.h", - "line": 366, - "lineto": 366, - "tdef": "typedef", - "description": " Representation of .mailmap file state. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_commit_author_with_mailmap", - "git_commit_committer_with_mailmap", - "git_mailmap_add_entry", - "git_mailmap_free", - "git_mailmap_from_buffer", - "git_mailmap_from_repository", - "git_mailmap_new", - "git_mailmap_resolve", - "git_mailmap_resolve_signature" - ] - } - } - ], - [ - "git_merge_analysis_t", - { - "decl": [ - "GIT_MERGE_ANALYSIS_NONE", - "GIT_MERGE_ANALYSIS_NORMAL", - "GIT_MERGE_ANALYSIS_UP_TO_DATE", - "GIT_MERGE_ANALYSIS_FASTFORWARD", - "GIT_MERGE_ANALYSIS_UNBORN" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 316, - "lineto": 345, - "block": "GIT_MERGE_ANALYSIS_NONE\nGIT_MERGE_ANALYSIS_NORMAL\nGIT_MERGE_ANALYSIS_UP_TO_DATE\nGIT_MERGE_ANALYSIS_FASTFORWARD\nGIT_MERGE_ANALYSIS_UNBORN", - "tdef": "typedef", - "description": " The results of `git_merge_analysis` indicate the merge opportunities.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_NONE", - "comments": "

No merge is possible. (Unused.)

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_NORMAL", - "comments": "

A "normal" merge; both HEAD and the given merge input have diverged\n from their common ancestor. The divergent commits must be merged.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_UP_TO_DATE", - "comments": "

All given merge inputs are reachable from HEAD, meaning the\n repository is up-to-date and no merge needs to be performed.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_FASTFORWARD", - "comments": "

The given merge input is a fast-forward from HEAD and no merge\n needs to be performed. Instead, the client can check out the\n given merge input.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_UNBORN", - "comments": "

The HEAD of the current repository is "unborn" and does not point to\n a valid commit. No merge can be performed, but the caller may wish\n to simply set HEAD to the target commit(s).

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_analysis", - "git_merge_analysis_for_ref" - ] - } - } - ], - [ - "git_merge_driver_source", - { - "decl": "git_merge_driver_source", - "type": "struct", - "value": "git_merge_driver_source", - "file": "git2/sys/merge.h", - "line": 41, - "lineto": 41, - "tdef": "typedef", - "description": " A merge driver source represents the file to be merged", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_merge_file_favor_t", - { - "decl": [ - "GIT_MERGE_FILE_FAVOR_NORMAL", - "GIT_MERGE_FILE_FAVOR_OURS", - "GIT_MERGE_FILE_FAVOR_THEIRS", - "GIT_MERGE_FILE_FAVOR_UNION" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 101, - "lineto": 131, - "block": "GIT_MERGE_FILE_FAVOR_NORMAL\nGIT_MERGE_FILE_FAVOR_OURS\nGIT_MERGE_FILE_FAVOR_THEIRS\nGIT_MERGE_FILE_FAVOR_UNION", - "tdef": "typedef", - "description": " Merge file favor options for `git_merge_options` instruct the file-level\n merging functionality how to deal with conflicting regions of the files.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_FILE_FAVOR_NORMAL", - "comments": "

When a region of a file is changed in both branches, a conflict\n will be recorded in the index so that git_checkout can produce\n a merge file with conflict markers in the working directory.\n This is the default.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_FAVOR_OURS", - "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain the "ours" side of any conflicting\n region. The index will not record a conflict.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_FAVOR_THEIRS", - "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain the "theirs" side of any conflicting\n region. The index will not record a conflict.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_FAVOR_UNION", - "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain each unique line from each side,\n which has the result of combining both files. The index will not\n record a conflict.

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_merge_file_flag_t", - { - "decl": [ - "GIT_MERGE_FILE_DEFAULT", - "GIT_MERGE_FILE_STYLE_MERGE", - "GIT_MERGE_FILE_STYLE_DIFF3", - "GIT_MERGE_FILE_SIMPLIFY_ALNUM", - "GIT_MERGE_FILE_IGNORE_WHITESPACE", - "GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE", - "GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL", - "GIT_MERGE_FILE_DIFF_PATIENCE", - "GIT_MERGE_FILE_DIFF_MINIMAL" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 136, - "lineto": 163, - "block": "GIT_MERGE_FILE_DEFAULT\nGIT_MERGE_FILE_STYLE_MERGE\nGIT_MERGE_FILE_STYLE_DIFF3\nGIT_MERGE_FILE_SIMPLIFY_ALNUM\nGIT_MERGE_FILE_IGNORE_WHITESPACE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_EOL\nGIT_MERGE_FILE_DIFF_PATIENCE\nGIT_MERGE_FILE_DIFF_MINIMAL", - "tdef": "typedef", - "description": " File merging flags", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_FILE_DEFAULT", - "comments": "

Defaults

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_STYLE_MERGE", - "comments": "

Create standard conflicted merge files

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_STYLE_DIFF3", - "comments": "

Create diff3-style files

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_SIMPLIFY_ALNUM", - "comments": "

Condense non-alphanumeric regions for simplified diff file

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE", - "comments": "

Ignore all whitespace

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE", - "comments": "

Ignore changes in amount of whitespace

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL", - "comments": "

Ignore whitespace at end of line

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_DIFF_PATIENCE", - "comments": "

Use the "patience diff" algorithm

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_DIFF_MINIMAL", - "comments": "

Take extra time to find minimal diff

\n", - "value": 128 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_merge_file_input", - { - "decl": [ - "unsigned int version", - "const char * ptr", - "size_t size", - "const char * path", - "unsigned int mode" - ], - "type": "struct", - "value": "git_merge_file_input", - "file": "git2/merge.h", - "line": 32, - "lineto": 46, - "block": "unsigned int version\nconst char * ptr\nsize_t size\nconst char * path\nunsigned int mode", - "tdef": "typedef", - "description": " The file inputs to `git_merge_file`. Callers should populate the\n `git_merge_file_input` structure with descriptions of the files in\n each side of the conflict for use in producing the merge file.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "const char *", - "name": "ptr", - "comments": " Pointer to the contents of the file. " - }, - { - "type": "size_t", - "name": "size", - "comments": " Size of the contents pointed to in `ptr`. " - }, - { - "type": "const char *", - "name": "path", - "comments": " File name of the conflicted file, or `NULL` to not merge the path. " - }, - { - "type": "unsigned int", - "name": "mode", - "comments": " File mode of the conflicted file, or `0` to not merge the mode. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_file", - "git_merge_file_input_init" - ] - } - } - ], - [ - "git_merge_file_options", - { - "decl": [ - "unsigned int version", - "const char * ancestor_label", - "const char * our_label", - "const char * their_label", - "git_merge_file_favor_t favor", - "uint32_t flags", - "unsigned short marker_size" - ], - "type": "struct", - "value": "git_merge_file_options", - "file": "git2/merge.h", - "line": 170, - "lineto": 200, - "block": "unsigned int version\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_merge_file_favor_t favor\nuint32_t flags\nunsigned short marker_size", - "tdef": "typedef", - "description": " Options for merging a file", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "const char *", - "name": "ancestor_label", - "comments": " Label for the ancestor file side of the conflict which will be prepended\n to labels in diff3-format merge files." - }, - { - "type": "const char *", - "name": "our_label", - "comments": " Label for our file side of the conflict which will be prepended\n to labels in merge files." - }, - { - "type": "const char *", - "name": "their_label", - "comments": " Label for their file side of the conflict which will be prepended\n to labels in merge files." - }, - { - "type": "git_merge_file_favor_t", - "name": "favor", - "comments": " The file to favor in region conflicts. " - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " see `git_merge_file_flag_t` above " - }, - { - "type": "unsigned short", - "name": "marker_size", - "comments": " The size of conflict markers (eg, \"\n<\n<\n<\n<\n<\n<\n<\n\"). Default is\n GIT_MERGE_CONFLICT_MARKER_SIZE. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_file", - "git_merge_file_from_index", - "git_merge_file_options_init" - ] - } - } - ], - [ - "git_merge_file_result", - { - "decl": [ - "unsigned int automergeable", - "const char * path", - "unsigned int mode", - "const char * ptr", - "size_t len" - ], - "type": "struct", - "value": "git_merge_file_result", - "file": "git2/merge.h", - "line": 220, - "lineto": 241, - "block": "unsigned int automergeable\nconst char * path\nunsigned int mode\nconst char * ptr\nsize_t len", - "tdef": "typedef", - "description": " Information about file-level merging", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "automergeable", - "comments": " True if the output was automerged, false if the output contains\n conflict markers." - }, - { - "type": "const char *", - "name": "path", - "comments": " The path that the resultant merge file should use, or NULL if a\n filename conflict would occur." - }, - { - "type": "unsigned int", - "name": "mode", - "comments": " The mode that the resultant merge file should use. " - }, - { - "type": "const char *", - "name": "ptr", - "comments": " The contents of the merge. " - }, - { - "type": "size_t", - "name": "len", - "comments": " The length of the merge contents. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_file", - "git_merge_file_from_index", - "git_merge_file_result_free" - ] - } - } - ], - [ - "git_merge_flag_t", - { - "decl": [ - "GIT_MERGE_FIND_RENAMES", - "GIT_MERGE_FAIL_ON_CONFLICT", - "GIT_MERGE_SKIP_REUC", - "GIT_MERGE_NO_RECURSIVE" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 68, - "lineto": 95, - "block": "GIT_MERGE_FIND_RENAMES\nGIT_MERGE_FAIL_ON_CONFLICT\nGIT_MERGE_SKIP_REUC\nGIT_MERGE_NO_RECURSIVE", - "tdef": "typedef", - "description": " Flags for `git_merge` options. A combination of these flags can be\n passed in via the `flags` value in the `git_merge_options`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_FIND_RENAMES", - "comments": "

Detect renames that occur between the common ancestor and the "ours"\n side or the common ancestor and the "theirs" side. This will enable\n the ability to merge between a modified and renamed file.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_FAIL_ON_CONFLICT", - "comments": "

If a conflict occurs, exit immediately instead of attempting to\n continue resolving conflicts. The merge operation will fail with\n GIT_EMERGECONFLICT and no index will be returned.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_MERGE_SKIP_REUC", - "comments": "

Do not write the REUC extension on the generated index

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_MERGE_NO_RECURSIVE", - "comments": "

If the commits being merged have multiple merge bases, do not build\n a recursive merge base (by merging the multiple merge bases),\n instead simply use the first base. This flag provides a similar\n merge base to git-merge-resolve.

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_merge_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "unsigned int rename_threshold", - "unsigned int target_limit", - "git_diff_similarity_metric * metric", - "unsigned int recursion_limit", - "const char * default_driver", - "git_merge_file_favor_t file_favor", - "uint32_t file_flags" - ], - "type": "struct", - "value": "git_merge_options", - "file": "git2/merge.h", - "line": 246, - "lineto": 295, - "block": "unsigned int version\nuint32_t flags\nunsigned int rename_threshold\nunsigned int target_limit\ngit_diff_similarity_metric * metric\nunsigned int recursion_limit\nconst char * default_driver\ngit_merge_file_favor_t file_favor\nuint32_t file_flags", - "tdef": "typedef", - "description": " Merging options", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " See `git_merge_flag_t` above " - }, - { - "type": "unsigned int", - "name": "rename_threshold", - "comments": " Similarity to consider a file renamed (default 50). If\n `GIT_MERGE_FIND_RENAMES` is enabled, added files will be compared\n with deleted files to determine their similarity. Files that are\n more similar than the rename threshold (percentage-wise) will be\n treated as a rename." - }, - { - "type": "unsigned int", - "name": "target_limit", - "comments": " Maximum similarity sources to examine for renames (default 200).\n If the number of rename candidates (add / delete pairs) is greater\n than this value, inexact rename detection is aborted.\n\n This setting overrides the `merge.renameLimit` configuration value." - }, - { - "type": "git_diff_similarity_metric *", - "name": "metric", - "comments": " Pluggable similarity metric; pass NULL to use internal metric " - }, - { - "type": "unsigned int", - "name": "recursion_limit", - "comments": " Maximum number of times to merge common ancestors to build a\n virtual merge base when faced with criss-cross merges. When this\n limit is reached, the next ancestor will simply be used instead of\n attempting to merge it. The default is unlimited." - }, - { - "type": "const char *", - "name": "default_driver", - "comments": " Default merge driver to be used when both sides of a merge have\n changed. The default is the `text` driver." - }, - { - "type": "git_merge_file_favor_t", - "name": "file_favor", - "comments": " Flags for handling conflicting content, to be used with the standard\n (`text`) merge driver." - }, - { - "type": "uint32_t", - "name": "file_flags", - "comments": " see `git_merge_file_flag_t` above " - } - ], - "used": { - "returns": [], - "needs": [ - "git_cherrypick_commit", - "git_merge", - "git_merge_commits", - "git_merge_options_init", - "git_merge_trees", - "git_revert_commit" - ] - } - } - ], - [ - "git_merge_preference_t", - { - "decl": [ - "GIT_MERGE_PREFERENCE_NONE", - "GIT_MERGE_PREFERENCE_NO_FASTFORWARD", - "GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 350, - "lineto": 368, - "block": "GIT_MERGE_PREFERENCE_NONE\nGIT_MERGE_PREFERENCE_NO_FASTFORWARD\nGIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", - "tdef": "typedef", - "description": " The user's stated preference for merges.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_PREFERENCE_NONE", - "comments": "

No configuration was found that suggests a preferred behavior for\n merge.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_MERGE_PREFERENCE_NO_FASTFORWARD", - "comments": "

There is a merge.ff=false configuration setting, suggesting that\n the user does not want to allow a fast-forward merge.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", - "comments": "

There is a merge.ff=only configuration setting, suggesting that\n the user only wants fast-forward merges.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_analysis", - "git_merge_analysis_for_ref" - ] - } - } - ], - [ - "git_message_trailer", - { - "decl": [ - "const char * key", - "const char * value" - ], - "type": "struct", - "value": "git_message_trailer", - "file": "git2/message.h", - "line": 43, - "lineto": 46, - "block": "const char * key\nconst char * value", - "tdef": "typedef", - "description": " Represents a single git message trailer.", - "comments": "", - "fields": [ - { - "type": "const char *", - "name": "key", - "comments": "" - }, - { - "type": "const char *", - "name": "value", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_message_trailer_array_free", - "git_message_trailers" - ] - } - } - ], - [ - "git_message_trailer_array", - { - "decl": [ - "git_message_trailer * trailers", - "size_t count", - "char * _trailer_block" - ], - "type": "struct", - "value": "git_message_trailer_array", - "file": "git2/message.h", - "line": 54, - "lineto": 60, - "block": "git_message_trailer * trailers\nsize_t count\nchar * _trailer_block", - "tdef": "typedef", - "description": " Represents an array of git message trailers.", - "comments": "

Struct members under the private comment are private, subject to change and should not be used by callers.

\n", - "fields": [ - { - "type": "git_message_trailer *", - "name": "trailers", - "comments": "" - }, - { - "type": "size_t", - "name": "count", - "comments": "" - }, - { - "type": "char *", - "name": "_trailer_block", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_message_trailer_array_free", - "git_message_trailers" - ] - } - } - ], - [ - "git_midx_writer", - { - "decl": "git_midx_writer", - "type": "struct", - "value": "git_midx_writer", - "file": "git2/types.h", - "line": 100, - "lineto": 100, - "tdef": "typedef", - "description": " a writer for multi-pack-index files. ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_note", - { - "decl": "git_note", - "type": "struct", - "value": "git_note", - "file": "git2/types.h", - "line": 169, - "lineto": 169, - "tdef": "typedef", - "description": " Representation of a git note ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_note_author", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_committer", - "git_note_foreach", - "git_note_free", - "git_note_id", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_message", - "git_note_next", - "git_note_read" - ] - } - } - ], - [ - "git_note_iterator", - { - "decl": "git_note_iterator", - "type": "struct", - "value": "git_note_iterator", - "file": "git2/notes.h", - "line": 35, - "lineto": 35, - "tdef": "typedef", - "description": " note iterator", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_note_commit_iterator_new", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_next" - ] - } - } - ], - [ - "git_object", - { - "decl": "git_object", - "type": "struct", - "value": "git_object", - "file": "git2/types.h", - "line": 124, - "lineto": 124, - "tdef": "typedef", - "description": " Representation of a generic object in a repository ", - "comments": "", - "used": { - "returns": [ - "git_blob_rawsize", - "git_object_string2type", - "git_object_type", - "git_odb_object_type", - "git_tag_target_type", - "git_tree_entry_type" - ], - "needs": [ - "git_checkout_tree", - "git_describe_commit", - "git_object__size", - "git_object_dup", - "git_object_free", - "git_object_id", - "git_object_lookup", - "git_object_lookup_bypath", - "git_object_lookup_prefix", - "git_object_owner", - "git_object_peel", - "git_object_short_id", - "git_object_type", - "git_object_type2string", - "git_object_typeisloose", - "git_odb_hash", - "git_odb_hashfile", - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_read_header", - "git_odb_write", - "git_reference_peel", - "git_repository_hashfile", - "git_reset", - "git_reset_default", - "git_revparse_ext", - "git_revparse_single", - "git_tag_annotation_create", - "git_tag_create", - "git_tag_create_lightweight", - "git_tag_peel", - "git_tag_target", - "git_tree_entry_to_object" - ] - } - } - ], - [ - "git_object_t", - { - "decl": [ - "GIT_OBJECT_ANY", - "GIT_OBJECT_INVALID", - "GIT_OBJECT_COMMIT", - "GIT_OBJECT_TREE", - "GIT_OBJECT_BLOB", - "GIT_OBJECT_TAG", - "GIT_OBJECT_OFS_DELTA", - "GIT_OBJECT_REF_DELTA" - ], - "type": "enum", - "file": "git2/types.h", - "line": 73, - "lineto": 82, - "block": "GIT_OBJECT_ANY\nGIT_OBJECT_INVALID\nGIT_OBJECT_COMMIT\nGIT_OBJECT_TREE\nGIT_OBJECT_BLOB\nGIT_OBJECT_TAG\nGIT_OBJECT_OFS_DELTA\nGIT_OBJECT_REF_DELTA", - "tdef": "typedef", - "description": " Basic type (loose or packed) of any Git object. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_OBJECT_ANY", - "comments": "

Object can be any of the following

\n", - "value": -2 - }, - { - "type": "int", - "name": "GIT_OBJECT_INVALID", - "comments": "

Object is invalid.

\n", - "value": -1 - }, - { - "type": "int", - "name": "GIT_OBJECT_COMMIT", - "comments": "

A commit object.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_OBJECT_TREE", - "comments": "

A tree (directory listing) object.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_OBJECT_BLOB", - "comments": "

A file revision object.

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_OBJECT_TAG", - "comments": "

An annotated tag object.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_OBJECT_OFS_DELTA", - "comments": "

A delta, base is given by an offset.

\n", - "value": 6 - }, - { - "type": "int", - "name": "GIT_OBJECT_REF_DELTA", - "comments": "

A delta, base is given by object id.

\n", - "value": 7 - } - ], - "used": { - "returns": [ - "git_object_string2type", - "git_object_type", - "git_odb_object_type", - "git_tag_target_type", - "git_tree_entry_type" - ], - "needs": [ - "git_object__size", - "git_object_lookup", - "git_object_lookup_bypath", - "git_object_lookup_prefix", - "git_object_peel", - "git_object_type2string", - "git_object_typeisloose", - "git_odb_hash", - "git_odb_hashfile", - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_read_header", - "git_odb_write", - "git_reference_peel", - "git_repository_hashfile" - ] - } - } - ], - [ - "git_odb", - { - "decl": "git_odb", - "type": "struct", - "value": "git_odb", - "file": "git2/types.h", - "line": 85, - "lineto": 85, - "tdef": "typedef", - "description": " An open object database handle. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_indexer_new", - "git_odb_add_alternate", - "git_odb_add_backend", - "git_odb_add_disk_alternate", - "git_odb_backend_loose", - "git_odb_backend_one_pack", - "git_odb_backend_pack", - "git_odb_exists", - "git_odb_exists_prefix", - "git_odb_expand_ids", - "git_odb_foreach", - "git_odb_free", - "git_odb_get_backend", - "git_odb_new", - "git_odb_num_backends", - "git_odb_object_data", - "git_odb_object_dup", - "git_odb_object_free", - "git_odb_object_id", - "git_odb_object_size", - "git_odb_object_type", - "git_odb_open", - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_read", - "git_odb_read_header", - "git_odb_read_prefix", - "git_odb_refresh", - "git_odb_set_commit_graph", - "git_odb_stream_finalize_write", - "git_odb_stream_free", - "git_odb_stream_read", - "git_odb_stream_write", - "git_odb_write", - "git_odb_write_multi_pack_index", - "git_odb_write_pack", - "git_repository_odb", - "git_repository_wrap_odb" - ] - } - } - ], - [ - "git_odb_backend", - { - "decl": "git_odb_backend", - "type": "struct", - "value": "git_odb_backend", - "file": "git2/types.h", - "line": 88, - "lineto": 88, - "tdef": "typedef", - "description": " A custom backend in an ODB ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_odb_add_alternate", - "git_odb_add_backend", - "git_odb_backend_loose", - "git_odb_backend_one_pack", - "git_odb_backend_pack", - "git_odb_get_backend" - ] - } - } - ], - [ - "git_odb_expand_id", - { - "decl": [ - "git_oid id", - "unsigned short length", - "git_object_t type" - ], - "type": "struct", - "value": "git_odb_expand_id", - "file": "git2/odb.h", - "line": 176, - "lineto": 191, - "block": "git_oid id\nunsigned short length\ngit_object_t type", - "tdef": "typedef", - "description": " The information about object IDs to query in `git_odb_expand_ids`,\n which will be populated upon return.", - "comments": "", - "fields": [ - { - "type": "git_oid", - "name": "id", - "comments": " The object ID to expand " - }, - { - "type": "unsigned short", - "name": "length", - "comments": " The length of the object ID (in nibbles, or packets of 4 bits; the\n number of hex characters)" - }, - { - "type": "git_object_t", - "name": "type", - "comments": " The (optional) type of the object to search for; leave as `0` or set\n to `GIT_OBJECT_ANY` to query for any object matching the ID." - } - ], - "used": { - "returns": [], - "needs": [ - "git_odb_expand_ids" - ] - } - } - ], - [ - "git_odb_object", - { - "decl": "git_odb_object", - "type": "struct", - "value": "git_odb_object", - "file": "git2/types.h", - "line": 91, - "lineto": 91, - "tdef": "typedef", - "description": " An object read from the ODB ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_odb_object_data", - "git_odb_object_dup", - "git_odb_object_free", - "git_odb_object_id", - "git_odb_object_size", - "git_odb_object_type", - "git_odb_read", - "git_odb_read_prefix" - ] - } - } - ], - [ - "git_odb_stream", - { - "decl": "git_odb_stream", - "type": "struct", - "value": "git_odb_stream", - "file": "git2/types.h", - "line": 94, - "lineto": 94, - "block": "git_odb_backend * backend\nunsigned int mode\nvoid * hash_ctx\ngit_object_size_t declared_size\ngit_object_size_t received_bytes\nint (*)(git_odb_stream *, char *, size_t) read\nint (*)(git_odb_stream *, const char *, size_t) write\nint (*)(git_odb_stream *, const git_oid *) finalize_write\nvoid (*)(git_odb_stream *) free", - "tdef": "typedef", - "description": " A stream to read/write from the ODB ", - "comments": "", - "fields": [ - { - "type": "git_odb_backend *", - "name": "backend", - "comments": "" - }, - { - "type": "unsigned int", - "name": "mode", - "comments": "" - }, - { - "type": "void *", - "name": "hash_ctx", - "comments": "" - }, - { - "type": "git_object_size_t", - "name": "declared_size", - "comments": "" - }, - { - "type": "git_object_size_t", - "name": "received_bytes", - "comments": "" - }, - { - "type": "int (*)(git_odb_stream *, char *, size_t)", - "name": "read", - "comments": "" - }, - { - "type": "int (*)(git_odb_stream *, const char *, size_t)", - "name": "write", - "comments": "" - }, - { - "type": "int (*)(git_odb_stream *, const git_oid *)", - "name": "finalize_write", - "comments": "" - }, - { - "type": "void (*)(git_odb_stream *)", - "name": "free", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_stream_finalize_write", - "git_odb_stream_free", - "git_odb_stream_read", - "git_odb_stream_write" - ] - } - } - ], - [ - "git_odb_stream_t", - { - "decl": [ - "GIT_STREAM_RDONLY", - "GIT_STREAM_WRONLY", - "GIT_STREAM_RW" - ], - "type": "enum", - "file": "git2/odb_backend.h", - "line": 71, - "lineto": 75, - "block": "GIT_STREAM_RDONLY\nGIT_STREAM_WRONLY\nGIT_STREAM_RW", - "tdef": "typedef", - "description": " Streaming mode ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STREAM_RDONLY", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STREAM_WRONLY", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STREAM_RW", - "comments": "", - "value": 6 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_odb_writepack", - { - "decl": "git_odb_writepack", - "type": "struct", - "value": "git_odb_writepack", - "file": "git2/types.h", - "line": 97, - "lineto": 97, - "block": "git_odb_backend * backend\nint (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *) append\nint (*)(git_odb_writepack *, git_indexer_progress *) commit\nvoid (*)(git_odb_writepack *) free", - "tdef": "typedef", - "description": " A stream to write a packfile to the ODB ", - "comments": "", - "fields": [ - { - "type": "git_odb_backend *", - "name": "backend", - "comments": "" - }, - { - "type": "int (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *)", - "name": "append", - "comments": "" - }, - { - "type": "int (*)(git_odb_writepack *, git_indexer_progress *)", - "name": "commit", - "comments": "" - }, - { - "type": "void (*)(git_odb_writepack *)", - "name": "free", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_odb_write_pack" - ] - } - } - ], - [ - "git_oid", - { - "decl": [ - "unsigned char [20] id" - ], - "type": "struct", - "value": "git_oid", - "file": "git2/oid.h", - "line": 33, - "lineto": 36, - "block": "unsigned char [20] id", - "tdef": "typedef", - "description": " Unique identity of any object (commit, tree, blob, tag). ", - "comments": "", - "fields": [ - { - "type": "unsigned char [20]", - "name": "id", - "comments": " raw binary formatted id " - } - ], - "used": { - "returns": [ - "git_annotated_commit_id", - "git_blob_id", - "git_commit_id", - "git_commit_parent_id", - "git_commit_tree_id", - "git_index_checksum", - "git_indexer_hash", - "git_note_id", - "git_object_id", - "git_odb_object_id", - "git_oid_shorten_new", - "git_packbuilder_hash", - "git_rebase_onto_id", - "git_rebase_orig_head_id", - "git_reference_target", - "git_reference_target_peel", - "git_reflog_entry_id_new", - "git_reflog_entry_id_old", - "git_submodule_head_id", - "git_submodule_index_id", - "git_submodule_wd_id", - "git_tag_id", - "git_tag_target_id", - "git_tree_entry_id", - "git_tree_id" - ], - "needs": [ - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_lookup", - "git_blob_create_from_buffer", - "git_blob_create_from_disk", - "git_blob_create_from_stream_commit", - "git_blob_create_from_workdir", - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_commit_amend", - "git_commit_create", - "git_commit_create_cb", - "git_commit_create_v", - "git_commit_create_with_signature", - "git_commit_extract_signature", - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_diff_patchid", - "git_graph_ahead_behind", - "git_graph_descendant_of", - "git_graph_reachable_from_any", - "git_index_write_tree", - "git_index_write_tree_to", - "git_merge_base", - "git_merge_base_many", - "git_merge_base_octopus", - "git_merge_bases", - "git_merge_bases_many", - "git_note_commit_create", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_create", - "git_note_foreach_cb", - "git_note_next", - "git_note_read", - "git_note_remove", - "git_object_lookup", - "git_object_lookup_prefix", - "git_odb_exists", - "git_odb_exists_prefix", - "git_odb_foreach_cb", - "git_odb_hash", - "git_odb_hashfile", - "git_odb_open_rstream", - "git_odb_read", - "git_odb_read_header", - "git_odb_read_prefix", - "git_odb_stream_finalize_write", - "git_odb_write", - "git_oid_cmp", - "git_oid_cpy", - "git_oid_equal", - "git_oid_fmt", - "git_oid_fromraw", - "git_oid_fromstr", - "git_oid_fromstrn", - "git_oid_fromstrp", - "git_oid_is_zero", - "git_oid_iszero", - "git_oid_ncmp", - "git_oid_nfmt", - "git_oid_pathfmt", - "git_oid_shorten_add", - "git_oid_shorten_free", - "git_oid_strcmp", - "git_oid_streq", - "git_oid_tostr", - "git_oid_tostr_s", - "git_oidarray_dispose", - "git_oidarray_free", - "git_packbuilder_insert", - "git_packbuilder_insert_commit", - "git_packbuilder_insert_recur", - "git_packbuilder_insert_tree", - "git_rebase_commit", - "git_reference_create", - "git_reference_create_matching", - "git_reference_name_to_id", - "git_reference_set_target", - "git_reflog_append", - "git_repository_fetchhead_foreach_cb", - "git_repository_hashfile", - "git_repository_mergehead_foreach_cb", - "git_repository_set_head_detached", - "git_revwalk_hide", - "git_revwalk_hide_cb", - "git_revwalk_next", - "git_revwalk_push", - "git_stash_cb", - "git_stash_save", - "git_tag_annotation_create", - "git_tag_create", - "git_tag_create_from_buffer", - "git_tag_create_lightweight", - "git_tag_foreach_cb", - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_transaction_set_target", - "git_tree_create_updated", - "git_tree_entry_byid", - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_treebuilder_insert", - "git_treebuilder_write", - "git_treebuilder_write_with_buffer" - ] - } - } - ], - [ - "git_oid_shorten", - { - "decl": "git_oid_shorten", - "type": "struct", - "value": "git_oid_shorten", - "file": "git2/oid.h", - "line": 220, - "lineto": 220, - "tdef": "typedef", - "description": " OID Shortener object", - "comments": "", - "used": { - "returns": [ - "git_oid_shorten_new" - ], - "needs": [ - "git_oid_shorten_add", - "git_oid_shorten_free" - ] - } - } - ], - [ - "git_oidarray", - { - "decl": [ - "git_oid * ids", - "size_t count" - ], - "type": "struct", - "value": "git_oidarray", - "file": "git2/oidarray.h", - "line": 16, - "lineto": 19, - "block": "git_oid * ids\nsize_t count", - "tdef": "typedef", - "description": " Array of object ids ", - "comments": "", - "fields": [ - { - "type": "git_oid *", - "name": "ids", - "comments": "" - }, - { - "type": "size_t", - "name": "count", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_bases", - "git_merge_bases_many", - "git_oidarray_dispose", - "git_oidarray_free" - ] - } - } - ], - [ - "git_packbuilder", - { - "decl": "git_packbuilder", - "type": "struct", - "value": "git_packbuilder", - "file": "git2/types.h", - "line": 172, - "lineto": 172, - "tdef": "typedef", - "description": " Representation of a git packbuilder ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_packbuilder_foreach", - "git_packbuilder_free", - "git_packbuilder_hash", - "git_packbuilder_insert", - "git_packbuilder_insert_commit", - "git_packbuilder_insert_recur", - "git_packbuilder_insert_tree", - "git_packbuilder_insert_walk", - "git_packbuilder_new", - "git_packbuilder_object_count", - "git_packbuilder_set_callbacks", - "git_packbuilder_set_threads", - "git_packbuilder_write", - "git_packbuilder_write_buf", - "git_packbuilder_written" - ] - } - } - ], - [ - "git_packbuilder_stage_t", - { - "decl": [ - "GIT_PACKBUILDER_ADDING_OBJECTS", - "GIT_PACKBUILDER_DELTAFICATION" - ], - "type": "enum", - "file": "git2/pack.h", - "line": 52, - "lineto": 55, - "block": "GIT_PACKBUILDER_ADDING_OBJECTS\nGIT_PACKBUILDER_DELTAFICATION", - "tdef": "typedef", - "description": " Stages that are reported by the packbuilder progress callback.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_PACKBUILDER_ADDING_OBJECTS", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_PACKBUILDER_DELTAFICATION", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_patch", - { - "decl": "git_patch", - "type": "struct", - "value": "git_patch", - "file": "git2/patch.h", - "line": 29, - "lineto": 29, - "tdef": "typedef", - "description": " The diff patch is used to store all the text diffs for a delta.", - "comments": "

You can easily loop over the content of patches and get information about them.

\n", - "used": { - "returns": [], - "needs": [ - "git_patch_free", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs", - "git_patch_from_buffers", - "git_patch_from_diff", - "git_patch_get_delta", - "git_patch_get_hunk", - "git_patch_get_line_in_hunk", - "git_patch_line_stats", - "git_patch_num_hunks", - "git_patch_num_lines_in_hunk", - "git_patch_owner", - "git_patch_print", - "git_patch_size", - "git_patch_to_buf" - ] - } - } - ], - [ - "git_path_fs", - { - "decl": [ - "GIT_PATH_FS_GENERIC", - "GIT_PATH_FS_NTFS", - "GIT_PATH_FS_HFS" - ], - "type": "enum", - "file": "git2/sys/path.h", - "line": 34, - "lineto": 41, - "block": "GIT_PATH_FS_GENERIC\nGIT_PATH_FS_NTFS\nGIT_PATH_FS_HFS", - "tdef": "typedef", - "description": " The kinds of checks to perform according to which filesystem we are trying to\n protect.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_PATH_FS_GENERIC", - "comments": "

Do both NTFS- and HFS-specific checks

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_PATH_FS_NTFS", - "comments": "

Do NTFS-specific checks only

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_PATH_FS_HFS", - "comments": "

Do HFS-specific checks only

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_pathspec", - { - "decl": "git_pathspec", - "type": "struct", - "value": "git_pathspec", - "file": "git2/pathspec.h", - "line": 20, - "lineto": 20, - "tdef": "typedef", - "description": " Compiled pathspec", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_pathspec_free", - "git_pathspec_match_diff", - "git_pathspec_match_index", - "git_pathspec_match_list_diff_entry", - "git_pathspec_match_list_entry", - "git_pathspec_match_list_entrycount", - "git_pathspec_match_list_failed_entry", - "git_pathspec_match_list_failed_entrycount", - "git_pathspec_match_list_free", - "git_pathspec_match_tree", - "git_pathspec_match_workdir", - "git_pathspec_matches_path", - "git_pathspec_new" - ] - } - } - ], - [ - "git_pathspec_flag_t", - { - "decl": [ - "GIT_PATHSPEC_DEFAULT", - "GIT_PATHSPEC_IGNORE_CASE", - "GIT_PATHSPEC_USE_CASE", - "GIT_PATHSPEC_NO_GLOB", - "GIT_PATHSPEC_NO_MATCH_ERROR", - "GIT_PATHSPEC_FIND_FAILURES", - "GIT_PATHSPEC_FAILURES_ONLY" - ], - "type": "enum", - "file": "git2/pathspec.h", - "line": 30, - "lineto": 73, - "block": "GIT_PATHSPEC_DEFAULT\nGIT_PATHSPEC_IGNORE_CASE\nGIT_PATHSPEC_USE_CASE\nGIT_PATHSPEC_NO_GLOB\nGIT_PATHSPEC_NO_MATCH_ERROR\nGIT_PATHSPEC_FIND_FAILURES\nGIT_PATHSPEC_FAILURES_ONLY", - "tdef": "typedef", - "description": " Options controlling how pathspec match should be executed", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_PATHSPEC_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_IGNORE_CASE", - "comments": "

GIT_PATHSPEC_IGNORE_CASE forces match to ignore case; otherwise\n match will use native case sensitivity of platform filesystem

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_USE_CASE", - "comments": "

GIT_PATHSPEC_USE_CASE forces case sensitive match; otherwise\n match will use native case sensitivity of platform filesystem

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_NO_GLOB", - "comments": "

GIT_PATHSPEC_NO_GLOB disables glob patterns and just uses simple\n string comparison for matching

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_NO_MATCH_ERROR", - "comments": "

GIT_PATHSPEC_NO_MATCH_ERROR means the match functions return error\n code GIT_ENOTFOUND if no matches are found; otherwise no matches is\n still success (return 0) but git_pathspec_match_list_entrycount\n will indicate 0 matches.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_FIND_FAILURES", - "comments": "

GIT_PATHSPEC_FIND_FAILURES means that the git_pathspec_match_list\n should track which patterns matched which files so that at the end of\n the match we can identify patterns that did not match any files.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_FAILURES_ONLY", - "comments": "

GIT_PATHSPEC_FAILURES_ONLY means that the git_pathspec_match_list\n does not need to keep the actual matching filenames. Use this to\n just test if there were any matches at all or in combination with\n GIT_PATHSPEC_FIND_FAILURES to validate a pathspec.

\n", - "value": 32 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_pathspec_match_list", - { - "decl": "git_pathspec_match_list", - "type": "struct", - "value": "git_pathspec_match_list", - "file": "git2/pathspec.h", - "line": 25, - "lineto": 25, - "tdef": "typedef", - "description": " List of filenames matching a pathspec", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_pathspec_match_diff", - "git_pathspec_match_index", - "git_pathspec_match_list_diff_entry", - "git_pathspec_match_list_entry", - "git_pathspec_match_list_entrycount", - "git_pathspec_match_list_failed_entry", - "git_pathspec_match_list_failed_entrycount", - "git_pathspec_match_list_free", - "git_pathspec_match_tree", - "git_pathspec_match_workdir" - ] - } - } - ], - [ - "git_proxy_options", - { - "decl": [ - "unsigned int version", - "git_proxy_t type", - "const char * url", - "git_credential_acquire_cb credentials", - "git_transport_certificate_check_cb certificate_check", - "void * payload" - ], - "type": "struct", - "value": "git_proxy_options", - "file": "git2/proxy.h", - "line": 44, - "lineto": 79, - "block": "unsigned int version\ngit_proxy_t type\nconst char * url\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\nvoid * payload", - "tdef": "typedef", - "description": " Options for connecting through a proxy", - "comments": "

Note that not all types may be supported, depending on the platform and compilation options.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", + "files": [ + { + "file": "git2/annotated_commit.h", + "functions": [ + "git_annotated_commit_from_ref", + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_lookup", + "git_annotated_commit_from_revspec", + "git_annotated_commit_id", + "git_annotated_commit_ref", + "git_annotated_commit_free" + ], + "meta": {}, + "lines": 121 + }, + { + "file": "git2/apply.h", + "functions": [ + "git_apply_delta_cb", + "git_apply_hunk_cb", + "git_apply_options_init", + "git_apply_to_tree", + "git_apply" + ], + "meta": {}, + "lines": 161 + }, + { + "file": "git2/attr.h", + "functions": [ + "git_attr_value", + "git_attr_get", + "git_attr_get_ext", + "git_attr_get_many", + "git_attr_get_many_ext", + "git_attr_foreach_cb", + "git_attr_foreach", + "git_attr_foreach_ext", + "git_attr_cache_flush", + "git_attr_add_macro" + ], + "meta": {}, + "lines": 365 + }, + { + "file": "git2/blame.h", + "functions": [ + "git_blame_options_init", + "git_blame_get_hunk_count", + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline", + "git_blame_file", + "git_blame_buffer", + "git_blame_free" + ], + "meta": {}, + "lines": 280 + }, + { + "file": "git2/blob.h", + "functions": [ + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_blob_free", + "git_blob_id", + "git_blob_owner", + "git_blob_rawcontent", + "git_blob_rawsize", + "git_blob_filter_options_init", + "git_blob_filter", + "git_blob_create_from_workdir", + "git_blob_create_from_disk", + "git_blob_create_from_stream", + "git_blob_create_from_stream_commit", + "git_blob_create_from_buffer", + "git_blob_is_binary", + "git_blob_data_is_binary", + "git_blob_dup" + ], + "meta": {}, + "lines": 307 + }, + { + "file": "git2/branch.h", + "functions": [ + "git_branch_create", + "git_branch_create_from_annotated", + "git_branch_delete", + "git_branch_iterator_new", + "git_branch_next", + "git_branch_iterator_free", + "git_branch_move", + "git_branch_lookup", + "git_branch_name", + "git_branch_upstream", + "git_branch_set_upstream", + "git_branch_upstream_name", + "git_branch_is_head", + "git_branch_is_checked_out", + "git_branch_remote_name", + "git_branch_upstream_remote", + "git_branch_upstream_merge", + "git_branch_name_is_valid" + ], + "meta": {}, + "lines": 332 + }, + { + "file": "git2/buffer.h", + "functions": [ + "git_buf_dispose" + ], + "meta": {}, + "lines": 68 + }, + { + "file": "git2/cert.h", + "functions": [ + "git_transport_certificate_check_cb" + ], + "meta": {}, + "lines": 168 + }, + { + "file": "git2/checkout.h", + "functions": [ + "git_checkout_notify_cb", + "git_checkout_progress_cb", + "git_checkout_perfdata_cb", + "git_checkout_options_init", + "git_checkout_head", + "git_checkout_index", + "git_checkout_tree" + ], + "meta": {}, + "lines": 413 + }, + { + "file": "git2/cherrypick.h", + "functions": [ + "git_cherrypick_options_init", + "git_cherrypick_commit", + "git_cherrypick" + ], + "meta": {}, + "lines": 86 + }, + { + "file": "git2/clone.h", + "functions": [ + "git_remote_create_cb", + "git_repository_create_cb", + "git_clone_options_init", + "git_clone" + ], + "meta": {}, + "lines": 205 + }, + { + "file": "git2/commit.h", + "functions": [ + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_commit_free", + "git_commit_id", + "git_commit_owner", + "git_commit_message_encoding", + "git_commit_message", + "git_commit_message_raw", + "git_commit_summary", + "git_commit_body", + "git_commit_time", + "git_commit_time_offset", + "git_commit_committer", + "git_commit_author", + "git_commit_committer_with_mailmap", + "git_commit_author_with_mailmap", + "git_commit_raw_header", + "git_commit_tree", + "git_commit_tree_id", + "git_commit_parentcount", + "git_commit_parent", + "git_commit_parent_id", + "git_commit_nth_gen_ancestor", + "git_commit_header_field", + "git_commit_extract_signature", + "git_commit_create", + "git_commit_create_v", + "git_commit_amend", + "git_commit_create_buffer", + "git_commit_create_with_signature", + "git_commit_dup", + "git_commit_create_cb" + ], + "meta": {}, + "lines": 542 + }, + { + "file": "git2/common.h", + "functions": [ + "git_libgit2_version", + "git_libgit2_prerelease", + "git_libgit2_features", + "git_libgit2_opts" + ], + "meta": {}, + "lines": 512 + }, + { + "file": "git2/config.h", + "functions": [ + "git_config_entry_free", + "git_config_foreach_cb", + "git_config_find_global", + "git_config_find_xdg", + "git_config_find_system", + "git_config_find_programdata", + "git_config_open_default", + "git_config_new", + "git_config_add_file_ondisk", + "git_config_open_ondisk", + "git_config_open_level", + "git_config_open_global", + "git_config_snapshot", + "git_config_free", + "git_config_get_entry", + "git_config_get_int32", + "git_config_get_int64", + "git_config_get_bool", + "git_config_get_path", + "git_config_get_string", + "git_config_get_string_buf", + "git_config_get_multivar_foreach", + "git_config_multivar_iterator_new", + "git_config_next", + "git_config_iterator_free", + "git_config_set_int32", + "git_config_set_int64", + "git_config_set_bool", + "git_config_set_string", + "git_config_set_multivar", + "git_config_delete_entry", + "git_config_delete_multivar", + "git_config_foreach", + "git_config_iterator_new", + "git_config_iterator_glob_new", + "git_config_foreach_match", + "git_config_get_mapped", + "git_config_lookup_map_value", + "git_config_parse_bool", + "git_config_parse_int32", + "git_config_parse_int64", + "git_config_parse_path", + "git_config_backend_foreach_match", + "git_config_lock" + ], + "meta": {}, + "lines": 778 + }, + { + "file": "git2/credential.h", + "functions": [ + "git_credential_acquire_cb", + "git_credential_free", + "git_credential_has_username", + "git_credential_get_username", + "git_credential_userpass_plaintext_new", + "git_credential_default_new", + "git_credential_username_new", + "git_credential_ssh_key_new", + "git_credential_ssh_key_memory_new", + "git_credential_ssh_interactive_new", + "git_credential_ssh_key_from_agent", + "git_credential_ssh_custom_new" + ], + "meta": {}, + "lines": 311 + }, + { + "file": "git2/credential_helpers.h", + "functions": [ + "git_credential_userpass" + ], + "meta": {}, + "lines": 49 + }, + { + "file": "git2/deprecated.h", + "functions": [ + "git_blob_filtered_content", + "git_filter_list_stream_data", + "git_filter_list_apply_to_data", + "git_treebuilder_write_with_buffer", + "git_buf_grow", + "git_buf_set", + "git_buf_is_binary", + "git_buf_contains_nul", + "git_buf_free", + "git_commit_signing_cb", + "git_diff_format_email", + "git_diff_commit_as_email", + "git_diff_format_email_options_init", + "giterr_last", + "giterr_clear", + "giterr_set_str", + "giterr_set_oom", + "git_object__size", + "git_remote_is_valid_name", + "git_reference_is_valid_name", + "git_oidarray_free", + "git_headlist_cb", + "git_strarray_copy", + "git_strarray_free", + "git_blame_init_options" + ], + "meta": {}, + "lines": 905 + }, + { + "file": "git2/describe.h", + "functions": [ + "git_describe_options_init", + "git_describe_format_options_init", + "git_describe_commit", + "git_describe_workdir", + "git_describe_format", + "git_describe_result_free" + ], + "meta": {}, + "lines": 189 + }, + { + "file": "git2/diff.h", + "functions": [ + "git_diff_notify_cb", + "git_diff_progress_cb", + "git_diff_options_init", + "git_diff_file_cb", + "git_diff_binary_cb", + "git_diff_hunk_cb", + "git_diff_line_cb", + "git_diff_find_options_init", + "git_diff_free", + "git_diff_tree_to_tree", + "git_diff_tree_to_index", + "git_diff_index_to_workdir", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_diff_index_to_index", + "git_diff_merge", + "git_diff_find_similar", + "git_diff_num_deltas", + "git_diff_num_deltas_of_type", + "git_diff_get_delta", + "git_diff_is_sorted_icase", + "git_diff_foreach", + "git_diff_status_char", + "git_diff_print", + "git_diff_to_buf", + "git_diff_blobs", + "git_diff_blob_to_buffer", + "git_diff_buffers", + "git_diff_from_buffer", + "git_diff_get_stats", + "git_diff_stats_files_changed", + "git_diff_stats_insertions", + "git_diff_stats_deletions", + "git_diff_stats_to_buf", + "git_diff_stats_free", + "git_diff_patchid_options_init", + "git_diff_patchid" + ], + "meta": {}, + "lines": 1471 + }, + { + "file": "git2/email.h", + "functions": [], + "meta": {}, + "lines": 38 + }, + { + "file": "git2/errors.h", + "functions": [ + "git_error_last", + "git_error_clear", + "git_error_set", + "git_error_set_str", + "git_error_set_oom" + ], + "meta": {}, + "lines": 177 + }, + { + "file": "git2/filter.h", + "functions": [ + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_contains", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_file", + "git_filter_list_apply_to_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_file", + "git_filter_list_stream_blob", + "git_filter_list_free" + ], + "meta": {}, + "lines": 269 + }, + { + "file": "git2/global.h", + "functions": [ + "git_libgit2_init", + "git_libgit2_shutdown" + ], + "meta": {}, + "lines": 39 + }, + { + "file": "git2/graph.h", + "functions": [ + "git_graph_ahead_behind", + "git_graph_descendant_of", + "git_graph_reachable_from_any" + ], + "meta": {}, + "lines": 73 + }, + { + "file": "git2/ignore.h", + "functions": [ + "git_ignore_add_rule", + "git_ignore_clear_internal_rules", + "git_ignore_path_is_ignored" + ], + "meta": {}, + "lines": 74 + }, + { + "file": "git2/index.h", + "functions": [ + "git_index_matched_path_cb", + "git_index_free", + "git_index_owner", + "git_index_caps", + "git_index_set_caps", + "git_index_version", + "git_index_set_version", + "git_index_read", + "git_index_write", + "git_index_path", + "git_index_checksum", + "git_index_read_tree", + "git_index_write_tree", + "git_index_write_tree_to", + "git_index_entrycount", + "git_index_clear", + "git_index_get_byindex", + "git_index_get_bypath", + "git_index_remove", + "git_index_remove_directory", + "git_index_add", + "git_index_entry_stage", + "git_index_entry_is_conflict", + "git_index_iterator_new", + "git_index_iterator_next", + "git_index_iterator_free", + "git_index_add_bypath", + "git_index_add_from_buffer", + "git_index_remove_bypath", + "git_index_add_all", + "git_index_remove_all", + "git_index_update_all", + "git_index_find", + "git_index_find_prefix", + "git_index_conflict_add", + "git_index_conflict_get", + "git_index_conflict_remove", + "git_index_conflict_cleanup", + "git_index_has_conflicts", + "git_index_conflict_iterator_new", + "git_index_conflict_next", + "git_index_conflict_iterator_free" + ], + "meta": {}, + "lines": 844 + }, + { + "file": "git2/indexer.h", + "functions": [ + "git_indexer_progress_cb", + "git_indexer_options_init", + "git_indexer_new", + "git_indexer_append", + "git_indexer_commit", + "git_indexer_hash", + "git_indexer_name", + "git_indexer_free" + ], + "meta": {}, + "lines": 191 + }, + { + "file": "git2/mailmap.h", + "functions": [ + "git_mailmap_new", + "git_mailmap_free", + "git_mailmap_add_entry", + "git_mailmap_from_buffer", + "git_mailmap_from_repository", + "git_mailmap_resolve", + "git_mailmap_resolve_signature" + ], + "meta": {}, + "lines": 111 + }, + { + "file": "git2/merge.h", + "functions": [ + "git_merge_file_input_init", + "git_merge_file_options_init", + "git_merge_options_init", + "git_merge_analysis", + "git_merge_analysis_for_ref", + "git_merge_base", + "git_merge_bases", + "git_merge_base_many", + "git_merge_bases_many", + "git_merge_base_octopus", + "git_merge_file", + "git_merge_file_from_index", + "git_merge_file_result_free", + "git_merge_trees", + "git_merge_commits", + "git_merge" + ], + "meta": {}, + "lines": 622 + }, + { + "file": "git2/message.h", + "functions": [ + "git_message_prettify", + "git_message_trailers", + "git_message_trailer_array_free" + ], + "meta": {}, + "lines": 81 + }, + { + "file": "git2/net.h", + "functions": [], + "meta": {}, + "lines": 50 + }, + { + "file": "git2/notes.h", + "functions": [ + "git_note_foreach_cb", + "git_note_iterator_new", + "git_note_commit_iterator_new", + "git_note_iterator_free", + "git_note_next", + "git_note_read", + "git_note_commit_read", + "git_note_author", + "git_note_committer", + "git_note_message", + "git_note_id", + "git_note_create", + "git_note_commit_create", + "git_note_remove", + "git_note_commit_remove", + "git_note_free", + "git_note_default_ref", + "git_note_foreach" + ], + "meta": {}, + "lines": 302 + }, + { + "file": "git2/object.h", + "functions": [ + "git_object_lookup", + "git_object_lookup_prefix", + "git_object_lookup_bypath", + "git_object_id", + "git_object_short_id", + "git_object_type", + "git_object_owner", + "git_object_free", + "git_object_type2string", + "git_object_string2type", + "git_object_typeisloose", + "git_object_peel", + "git_object_dup", + "git_object_rawcontent_is_valid" + ], + "meta": {}, + "lines": 273 + }, + { + "file": "git2/odb.h", + "functions": [ + "git_odb_foreach_cb", + "git_odb_add_disk_alternate", + "git_odb_free", + "git_odb_read", + "git_odb_read_prefix", + "git_odb_read_header", + "git_odb_exists", + "git_odb_exists_ext", + "git_odb_exists_prefix", + "git_odb_expand_ids", + "git_odb_refresh", + "git_odb_foreach", + "git_odb_write", + "git_odb_open_wstream", + "git_odb_stream_write", + "git_odb_stream_finalize_write", + "git_odb_stream_read", + "git_odb_stream_free", + "git_odb_open_rstream", + "git_odb_write_pack", + "git_odb_write_multi_pack_index", + "git_odb_object_dup", + "git_odb_object_free", + "git_odb_object_id", + "git_odb_object_data", + "git_odb_object_size", + "git_odb_object_type", + "git_odb_add_backend", + "git_odb_add_alternate", + "git_odb_num_backends", + "git_odb_get_backend", + "git_odb_set_commit_graph" + ], + "meta": {}, + "lines": 650 + }, + { + "file": "git2/odb_backend.h", + "functions": [], + "meta": {}, + "lines": 219 + }, + { + "file": "git2/oid.h", + "functions": [ + "git_oid_fmt", + "git_oid_nfmt", + "git_oid_pathfmt", + "git_oid_tostr_s", + "git_oid_tostr", + "git_oid_cpy", + "git_oid_cmp", + "git_oid_equal", + "git_oid_ncmp", + "git_oid_streq", + "git_oid_strcmp", + "git_oid_is_zero", + "git_oid_shorten_new", + "git_oid_shorten_add", + "git_oid_shorten_free" + ], + "meta": {}, + "lines": 369 + }, + { + "file": "git2/oidarray.h", + "functions": [ + "git_oidarray_dispose" + ], + "meta": {}, + "lines": 31 + }, + { + "file": "git2/pack.h", + "functions": [ + "git_packbuilder_new", + "git_packbuilder_set_threads", + "git_packbuilder_insert", + "git_packbuilder_insert_tree", + "git_packbuilder_insert_commit", + "git_packbuilder_insert_walk", + "git_packbuilder_insert_recur", + "git_packbuilder_write_buf", + "git_packbuilder_write", + "git_packbuilder_hash", + "git_packbuilder_name", + "git_packbuilder_foreach_cb", + "git_packbuilder_foreach", + "git_packbuilder_object_count", + "git_packbuilder_written", + "git_packbuilder_progress", + "git_packbuilder_set_callbacks", + "git_packbuilder_free" + ], + "meta": {}, + "lines": 263 + }, + { + "file": "git2/patch.h", + "functions": [ + "git_patch_owner", + "git_patch_from_diff", + "git_patch_from_blobs", + "git_patch_from_blob_and_buffer", + "git_patch_from_buffers", + "git_patch_free", + "git_patch_get_delta", + "git_patch_num_hunks", + "git_patch_line_stats", + "git_patch_get_hunk", + "git_patch_num_lines_in_hunk", + "git_patch_get_line_in_hunk", + "git_patch_size", + "git_patch_print", + "git_patch_to_buf" + ], + "meta": {}, + "lines": 284 + }, + { + "file": "git2/pathspec.h", + "functions": [ + "git_pathspec_new", + "git_pathspec_free", + "git_pathspec_matches_path", + "git_pathspec_match_workdir", + "git_pathspec_match_index", + "git_pathspec_match_tree", + "git_pathspec_match_diff", + "git_pathspec_match_list_free", + "git_pathspec_match_list_entrycount", + "git_pathspec_match_list_entry", + "git_pathspec_match_list_diff_entry", + "git_pathspec_match_list_failed_entrycount", + "git_pathspec_match_list_failed_entry" + ], + "meta": {}, + "lines": 277 + }, + { + "file": "git2/proxy.h", + "functions": [ + "git_proxy_options_init" + ], + "meta": {}, + "lines": 94 + }, + { + "file": "git2/rebase.h", + "functions": [ + "git_rebase_options_init", + "git_rebase_init", + "git_rebase_open", + "git_rebase_orig_head_name", + "git_rebase_orig_head_id", + "git_rebase_onto_name", + "git_rebase_onto_id", + "git_rebase_operation_entrycount", + "git_rebase_operation_current", + "git_rebase_operation_byindex", + "git_rebase_next", + "git_rebase_inmemory_index", + "git_rebase_commit", + "git_rebase_abort", + "git_rebase_finish", + "git_rebase_free" + ], + "meta": {}, + "lines": 395 + }, + { + "file": "git2/refdb.h", + "functions": [ + "git_refdb_new", + "git_refdb_open", + "git_refdb_compress", + "git_refdb_free" + ], + "meta": {}, + "lines": 66 + }, + { + "file": "git2/reflog.h", + "functions": [ + "git_reflog_read", + "git_reflog_write", + "git_reflog_append", + "git_reflog_rename", + "git_reflog_delete", + "git_reflog_entrycount", + "git_reflog_entry_byindex", + "git_reflog_drop", + "git_reflog_entry_id_old", + "git_reflog_entry_id_new", + "git_reflog_entry_committer", + "git_reflog_entry_message", + "git_reflog_free" + ], + "meta": {}, + "lines": 166 + }, + { + "file": "git2/refs.h", + "functions": [ + "git_reference_lookup", + "git_reference_name_to_id", + "git_reference_dwim", + "git_reference_symbolic_create_matching", + "git_reference_symbolic_create", + "git_reference_create", + "git_reference_create_matching", + "git_reference_target", + "git_reference_target_peel", + "git_reference_symbolic_target", + "git_reference_type", + "git_reference_name", + "git_reference_resolve", + "git_reference_owner", + "git_reference_symbolic_set_target", + "git_reference_set_target", + "git_reference_rename", + "git_reference_delete", + "git_reference_remove", + "git_reference_list", + "git_reference_foreach_cb", + "git_reference_foreach_name_cb", + "git_reference_foreach", + "git_reference_foreach_name", + "git_reference_dup", + "git_reference_free", + "git_reference_cmp", + "git_reference_iterator_new", + "git_reference_iterator_glob_new", + "git_reference_next", + "git_reference_next_name", + "git_reference_iterator_free", + "git_reference_foreach_glob", + "git_reference_has_log", + "git_reference_ensure_log", + "git_reference_is_branch", + "git_reference_is_remote", + "git_reference_is_tag", + "git_reference_is_note", + "git_reference_normalize_name", + "git_reference_peel", + "git_reference_name_is_valid", + "git_reference_shorthand" + ], + "meta": {}, + "lines": 767 + }, + { + "file": "git2/refspec.h", + "functions": [ + "git_refspec_parse", + "git_refspec_free", + "git_refspec_src", + "git_refspec_dst", + "git_refspec_string", + "git_refspec_force", + "git_refspec_direction", + "git_refspec_src_matches", + "git_refspec_dst_matches", + "git_refspec_transform", + "git_refspec_rtransform" + ], + "meta": {}, + "lines": 117 + }, + { + "file": "git2/remote.h", + "functions": [ + "git_remote_create", + "git_remote_create_options_init", + "git_remote_create_with_opts", + "git_remote_create_with_fetchspec", + "git_remote_create_anonymous", + "git_remote_create_detached", + "git_remote_lookup", + "git_remote_dup", + "git_remote_owner", + "git_remote_name", + "git_remote_url", + "git_remote_pushurl", + "git_remote_set_url", + "git_remote_set_pushurl", + "git_remote_set_instance_url", + "git_remote_set_instance_pushurl", + "git_remote_add_fetch", + "git_remote_get_fetch_refspecs", + "git_remote_add_push", + "git_remote_get_push_refspecs", + "git_remote_refspec_count", + "git_remote_get_refspec", + "git_remote_ls", + "git_remote_connected", + "git_remote_stop", + "git_remote_disconnect", + "git_remote_free", + "git_remote_list", + "git_push_transfer_progress_cb", + "git_push_negotiation", + "git_push_update_reference_cb", + "git_url_resolve_cb", + "git_remote_ready_cb", + "git_remote_init_callbacks", + "git_fetch_options_init", + "git_push_options_init", + "git_remote_connect_options_init", + "git_remote_connect", + "git_remote_connect_ext", + "git_remote_download", + "git_remote_upload", + "git_remote_update_tips", + "git_remote_fetch", + "git_remote_prune", + "git_remote_push", + "git_remote_stats", + "git_remote_autotag", + "git_remote_set_autotag", + "git_remote_prune_refs", + "git_remote_rename", + "git_remote_name_is_valid", + "git_remote_delete", + "git_remote_default_branch" + ], + "meta": {}, + "lines": 1169 + }, + { + "file": "git2/repository.h", + "functions": [ + "git_repository_open", + "git_repository_open_from_worktree", + "git_repository_discover", + "git_repository_open_ext", + "git_repository_open_bare", + "git_repository_free", + "git_repository_init", + "git_repository_init_options_init", + "git_repository_init_ext", + "git_repository_head", + "git_repository_head_for_worktree", + "git_repository_head_detached", + "git_repository_head_detached_for_worktree", + "git_repository_head_unborn", + "git_repository_is_empty", + "git_repository_item_path", + "git_repository_path", + "git_repository_workdir", + "git_repository_commondir", + "git_repository_set_workdir", + "git_repository_is_bare", + "git_repository_is_worktree", + "git_repository_config", + "git_repository_config_snapshot", + "git_repository_odb", + "git_repository_refdb", + "git_repository_index", + "git_repository_message", + "git_repository_message_remove", + "git_repository_state_cleanup", + "git_repository_fetchhead_foreach_cb", + "git_repository_fetchhead_foreach", + "git_repository_mergehead_foreach_cb", + "git_repository_mergehead_foreach", + "git_repository_hashfile", + "git_repository_set_head", + "git_repository_set_head_detached", + "git_repository_set_head_detached_from_annotated", + "git_repository_detach_head", + "git_repository_state", + "git_repository_set_namespace", + "git_repository_get_namespace", + "git_repository_is_shallow", + "git_repository_ident", + "git_repository_set_ident", + "git_repository_oid_type" + ], + "meta": {}, + "lines": 979 + }, + { + "file": "git2/reset.h", + "functions": [ + "git_reset", + "git_reset_from_annotated", + "git_reset_default" + ], + "meta": {}, + "lines": 107 + }, + { + "file": "git2/revert.h", + "functions": [ + "git_revert_options_init", + "git_revert_commit", + "git_revert" + ], + "meta": {}, + "lines": 86 + }, + { + "file": "git2/revparse.h", + "functions": [ + "git_revparse_single", + "git_revparse_ext", + "git_revparse" + ], + "meta": {}, + "lines": 108 + }, + { + "file": "git2/revwalk.h", + "functions": [ + "git_revwalk_new", + "git_revwalk_reset", + "git_revwalk_push", + "git_revwalk_push_glob", + "git_revwalk_push_head", + "git_revwalk_hide", + "git_revwalk_hide_glob", + "git_revwalk_hide_head", + "git_revwalk_push_ref", + "git_revwalk_hide_ref", + "git_revwalk_next", + "git_revwalk_sorting", + "git_revwalk_push_range", + "git_revwalk_simplify_first_parent", + "git_revwalk_free", + "git_revwalk_repository", + "git_revwalk_hide_cb", + "git_revwalk_add_hide_cb" + ], + "meta": {}, + "lines": 298 + }, + { + "file": "git2/signature.h", + "functions": [ + "git_signature_new", + "git_signature_now", + "git_signature_default", + "git_signature_from_buffer", + "git_signature_dup", + "git_signature_free" + ], + "meta": {}, + "lines": 99 + }, + { + "file": "git2/stash.h", + "functions": [ + "git_stash_save", + "git_stash_save_options_init", + "git_stash_save_with_opts", + "git_stash_apply_progress_cb", + "git_stash_apply_options_init", + "git_stash_apply", + "git_stash_cb", + "git_stash_foreach", + "git_stash_drop", + "git_stash_pop" + ], + "meta": {}, + "lines": 310 + }, + { + "file": "git2/status.h", + "functions": [ + "git_status_cb", + "git_status_options_init", + "git_status_foreach", + "git_status_foreach_ext", + "git_status_file", + "git_status_list_new", + "git_status_list_entrycount", + "git_status_byindex", + "git_status_list_free", + "git_status_should_ignore" + ], + "meta": {}, + "lines": 448 + }, + { + "file": "git2/strarray.h", + "functions": [ + "git_strarray_dispose" + ], + "meta": {}, + "lines": 37 + }, + { + "file": "git2/submodule.h", + "functions": [ + "git_submodule_cb", + "git_submodule_update_options_init", + "git_submodule_update", + "git_submodule_lookup", + "git_submodule_dup", + "git_submodule_free", + "git_submodule_foreach", + "git_submodule_add_setup", + "git_submodule_clone", + "git_submodule_add_finalize", + "git_submodule_add_to_index", + "git_submodule_owner", + "git_submodule_name", + "git_submodule_path", + "git_submodule_url", + "git_submodule_resolve_url", + "git_submodule_branch", + "git_submodule_set_branch", + "git_submodule_set_url", + "git_submodule_index_id", + "git_submodule_head_id", + "git_submodule_wd_id", + "git_submodule_ignore", + "git_submodule_set_ignore", + "git_submodule_update_strategy", + "git_submodule_set_update", + "git_submodule_fetch_recurse_submodules", + "git_submodule_set_fetch_recurse_submodules", + "git_submodule_init", + "git_submodule_repo_init", + "git_submodule_sync", + "git_submodule_open", + "git_submodule_reload", + "git_submodule_status", + "git_submodule_location" + ], + "meta": {}, + "lines": 664 + }, + { + "file": "git2/sys/commit_graph.h", + "functions": [], + "meta": {}, + "lines": 108 + }, + { + "file": "git2/sys/filter.h", + "functions": [], + "meta": {}, + "lines": 95 + }, + { + "file": "git2/sys/hashsig.h", + "functions": [], + "meta": {}, + "lines": 45 + }, + { + "file": "git2/sys/merge.h", + "functions": [], + "meta": {}, + "lines": 41 + }, + { + "file": "git2/sys/path.h", + "functions": [], + "meta": {}, + "lines": 41 + }, + { + "file": "git2/sys/stream.h", + "functions": [], + "meta": {}, + "lines": 97 + }, + { + "file": "git2/sys/transport.h", + "functions": [], + "meta": {}, + "lines": 318 + }, + { + "file": "git2/tag.h", + "functions": [ + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_tag_free", + "git_tag_id", + "git_tag_owner", + "git_tag_target", + "git_tag_target_id", + "git_tag_target_type", + "git_tag_name", + "git_tag_tagger", + "git_tag_message", + "git_tag_create", + "git_tag_annotation_create", + "git_tag_create_from_buffer", + "git_tag_create_lightweight", + "git_tag_delete", + "git_tag_list", + "git_tag_list_match", + "git_tag_foreach_cb", + "git_tag_foreach", + "git_tag_peel", + "git_tag_dup", + "git_tag_name_is_valid" + ], + "meta": {}, + "lines": 379 + }, + { + "file": "git2/trace.h", + "functions": [ + "git_trace_cb", + "git_trace_set" + ], + "meta": {}, + "lines": 63 + }, + { + "file": "git2/transaction.h", + "functions": [ + "git_transaction_new", + "git_transaction_lock_ref", + "git_transaction_set_target", + "git_transaction_set_symbolic_target", + "git_transaction_set_reflog", + "git_transaction_remove", + "git_transaction_commit", + "git_transaction_free" + ], + "meta": {}, + "lines": 117 + }, + { + "file": "git2/transport.h", + "functions": [ + "git_transport_message_cb", + "git_transport_cb" + ], + "meta": {}, + "lines": 37 + }, + { + "file": "git2/tree.h", + "functions": [ + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_tree_free", + "git_tree_id", + "git_tree_owner", + "git_tree_entrycount", + "git_tree_entry_byname", + "git_tree_entry_byindex", + "git_tree_entry_byid", + "git_tree_entry_bypath", + "git_tree_entry_dup", + "git_tree_entry_free", + "git_tree_entry_name", + "git_tree_entry_id", + "git_tree_entry_type", + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw", + "git_tree_entry_cmp", + "git_tree_entry_to_object", + "git_treebuilder_new", + "git_treebuilder_clear", + "git_treebuilder_entrycount", + "git_treebuilder_free", + "git_treebuilder_get", + "git_treebuilder_insert", + "git_treebuilder_remove", + "git_treebuilder_filter_cb", + "git_treebuilder_filter", + "git_treebuilder_write", + "git_treewalk_cb", + "git_tree_walk", + "git_tree_dup", + "git_tree_create_updated" + ], + "meta": {}, + "lines": 470 + }, + { + "file": "git2/types.h", + "functions": [], + "meta": {}, + "lines": 366 + }, + { + "file": "git2/worktree.h", + "functions": [ + "git_worktree_list", + "git_worktree_lookup", + "git_worktree_open_from_repository", + "git_worktree_free", + "git_worktree_validate", + "git_worktree_add_options_init", + "git_worktree_add", + "git_worktree_lock", + "git_worktree_unlock", + "git_worktree_is_locked", + "git_worktree_name", + "git_worktree_path", + "git_worktree_prune_options_init", + "git_worktree_is_prunable", + "git_worktree_prune" + ], + "meta": {}, + "lines": 264 + } + ], + "functions": { + "git_annotated_commit_from_ref": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 33, + "lineto": 36, + "args": [ + { + "name": "out", + "type": "git_annotated_commit **", + "comment": "pointer to store the git_annotated_commit result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given reference" + }, + { + "name": "ref", + "type": "const git_reference *", + "comment": "reference to use to lookup the git_annotated_commit" + } + ], + "argline": "git_annotated_commit **out, git_repository *repo, const git_reference *ref", + "sig": "git_annotated_commit **::git_repository *::const git_reference *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Creates a git_annotated_commit from the given reference.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", + "comments": "", + "group": "annotated", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_annotated_commit_from_ref-1" + ] + } + }, + "git_annotated_commit_from_fetchhead": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 50, + "lineto": 55, + "args": [ + { + "name": "out", + "type": "git_annotated_commit **", + "comment": "pointer to store the git_annotated_commit result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given commit" + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "name of the (remote) branch" + }, + { + "name": "remote_url", + "type": "const char *", + "comment": "url of the remote" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the commit object id of the remote branch" + } + ], + "argline": "git_annotated_commit **out, git_repository *repo, const char *branch_name, const char *remote_url, const git_oid *id", + "sig": "git_annotated_commit **::git_repository *::const char *::const char *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Creates a git_annotated_commit from the given fetch head data.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", + "comments": "", + "group": "annotated" + }, + "git_annotated_commit_lookup": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 75, + "lineto": 78, + "args": [ + { + "name": "out", + "type": "git_annotated_commit **", + "comment": "pointer to store the git_annotated_commit result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given commit" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the commit object id to lookup" + } + ], + "argline": "git_annotated_commit **out, git_repository *repo, const git_oid *id", + "sig": "git_annotated_commit **::git_repository *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Creates a git_annotated_commit from the given commit id.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", + "comments": "

An annotated commit contains information about how it was looked up, which may be useful for functions like merge or rebase to provide context to the operation. For example, conflict files will include the name of the source or target branches being merged. It is therefore preferable to use the most specific function (eg git_annotated_commit_from_ref) instead of this one when that data is known.

\n", + "group": "annotated" + }, + "git_annotated_commit_from_revspec": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 92, + "lineto": 95, + "args": [ + { + "name": "out", + "type": "git_annotated_commit **", + "comment": "pointer to store the git_annotated_commit result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given commit" + }, + { + "name": "revspec", + "type": "const char *", + "comment": "the extended sha syntax string to use to lookup the commit" + } + ], + "argline": "git_annotated_commit **out, git_repository *repo, const char *revspec", + "sig": "git_annotated_commit **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Creates a git_annotated_commit from a revision string.

\n", + "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", + "group": "annotated" + }, + "git_annotated_commit_id": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 103, + "lineto": 104, + "args": [ + { + "name": "commit", + "type": "const git_annotated_commit *", + "comment": "the given annotated commit" + } + ], + "argline": "const git_annotated_commit *commit", + "sig": "const git_annotated_commit *", + "return": { + "type": "const git_oid *", + "comment": " commit id" + }, + "description": "

Gets the commit ID that the given git_annotated_commit refers to.

\n", + "comments": "", + "group": "annotated", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_annotated_commit_id-2" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_annotated_commit_id-1", + "ex/v1.7.2/merge.html#git_annotated_commit_id-2", + "ex/v1.7.2/merge.html#git_annotated_commit_id-3" + ] + } + }, + "git_annotated_commit_ref": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 112, + "lineto": 113, + "args": [ + { + "name": "commit", + "type": "const git_annotated_commit *", + "comment": "the given annotated commit" + } + ], + "argline": "const git_annotated_commit *commit", + "sig": "const git_annotated_commit *", + "return": { + "type": "const char *", + "comment": " ref name." + }, + "description": "

Get the refname that the given git_annotated_commit refers to.

\n", + "comments": "", + "group": "annotated", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_annotated_commit_ref-3", + "ex/v1.7.2/checkout.html#git_annotated_commit_ref-4", + "ex/v1.7.2/checkout.html#git_annotated_commit_ref-5" + ] + } + }, + "git_annotated_commit_free": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 120, + "lineto": 121, + "args": [ + { + "name": "commit", + "type": "git_annotated_commit *", + "comment": "annotated commit to free" + } + ], + "argline": "git_annotated_commit *commit", + "sig": "git_annotated_commit *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Frees a git_annotated_commit.

\n", + "comments": "", + "group": "annotated", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_annotated_commit_free-6" + ] + } + }, + "git_apply_options_init": { + "type": "function", + "file": "git2/apply.h", + "line": 106, + "lineto": 106, + "args": [ + { + "name": "opts", + "type": "git_apply_options *", + "comment": "The `git_apply_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_APPLY_OPTIONS_VERSION`" + } + ], + "argline": "git_apply_options *opts, unsigned int version", + "sig": "git_apply_options *::unsigned int", + "return": { + "type": "int", + "comment": " 0 on success or -1 on failure." + }, + "description": "

Initialize git_apply_options structure

\n", + "comments": "

Initialize a git_apply_options with default values. Equivalent to creating an instance with GIT_APPLY_OPTIONS_INIT.

\n", + "group": "apply" + }, + "git_apply_to_tree": { + "type": "function", + "file": "git2/apply.h", + "line": 119, + "lineto": 124, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "the postimage of the application" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to apply" + }, + { + "name": "preimage", + "type": "git_tree *", + "comment": "the tree to apply the diff to" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "the diff to apply" + }, + { + "name": "options", + "type": "const git_apply_options *", + "comment": "the options for the apply (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, git_tree *preimage, git_diff *diff, const git_apply_options *options", + "sig": "git_index **::git_repository *::git_tree *::git_diff *::const git_apply_options *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Apply a git_diff to a git_tree, and return the resulting image\n as an index.

\n", + "comments": "", + "group": "apply" + }, + "git_apply": { + "type": "function", + "file": "git2/apply.h", + "line": 157, + "lineto": 161, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to apply to" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "the diff to apply" + }, + { + "name": "location", + "type": "git_apply_location_t", + "comment": "the location to apply (workdir, index or both)" + }, + { + "name": "options", + "type": "const git_apply_options *", + "comment": "the options for the apply (or null for defaults)" + } + ], + "argline": "git_repository *repo, git_diff *diff, git_apply_location_t location, const git_apply_options *options", + "sig": "git_repository *::git_diff *::git_apply_location_t::const git_apply_options *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Apply a git_diff to the given repository, making changes directly\n in the working directory, the index, or both.

\n", + "comments": "", + "group": "apply" + }, + "git_attr_value": { + "type": "function", + "file": "git2/attr.h", + "line": 102, + "lineto": 102, + "args": [ + { + "name": "attr", + "type": "const char *", + "comment": "The attribute" + } + ], + "argline": "const char *attr", + "sig": "const char *", + "return": { + "type": "git_attr_value_t", + "comment": " the value type for the attribute" + }, + "description": "

Return the value type for a given attribute.

\n", + "comments": "

This can be either TRUE, FALSE, UNSPECIFIED (if the attribute was not set at all), or VALUE, if the attribute was set to an actual string.

\n\n

If the attribute has a VALUE string, it can be accessed normally as a NULL-terminated C string.

\n", + "group": "attr" + }, + "git_attr_get": { + "type": "function", + "file": "git2/attr.h", + "line": 182, + "lineto": 187, + "args": [ + { + "name": "value_out", + "type": "const char **", + "comment": "Output of the value of the attribute. Use the GIT_ATTR_...\n macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just\n use the string value for attributes set to a value. You\n should NOT modify or free this value." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "A combination of GIT_ATTR_CHECK... flags." + }, + { + "name": "path", + "type": "const char *", + "comment": "The path to check for attributes. Relative paths are\n interpreted relative to the repo root. The file does\n not have to exist, but if it does not, then it will be\n treated as a plain file (not a directory)." + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the attribute to look up." + } + ], + "argline": "const char **value_out, git_repository *repo, uint32_t flags, const char *path, const char *name", + "sig": "const char **::git_repository *::uint32_t::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Look up the value of one git attribute for path.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_get_ext": { + "type": "function", + "file": "git2/attr.h", + "line": 205, + "lineto": 210, + "args": [ + { + "name": "value_out", + "type": "const char **", + "comment": "Output of the value of the attribute. Use the GIT_ATTR_...\n macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just\n use the string value for attributes set to a value. You\n should NOT modify or free this value." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "opts", + "type": "git_attr_options *", + "comment": "The `git_attr_options` to use when querying these attributes." + }, + { + "name": "path", + "type": "const char *", + "comment": "The path to check for attributes. Relative paths are\n interpreted relative to the repo root. The file does\n not have to exist, but if it does not, then it will be\n treated as a plain file (not a directory)." + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the attribute to look up." + } + ], + "argline": "const char **value_out, git_repository *repo, git_attr_options *opts, const char *path, const char *name", + "sig": "const char **::git_repository *::git_attr_options *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Look up the value of one git attribute for path with extended options.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_get_many": { + "type": "function", + "file": "git2/attr.h", + "line": 242, + "lineto": 248, + "args": [ + { + "name": "values_out", + "type": "const char **", + "comment": "An array of num_attr entries that will have string\n pointers written into it for the values of the attributes.\n You should not modify or free the values that are written\n into this array (although of course, you should free the\n array itself if you allocated it)." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "A combination of GIT_ATTR_CHECK... flags." + }, + { + "name": "path", + "type": "const char *", + "comment": "The path inside the repo to check attributes. This\n does not have to exist, but if it does not, then\n it will be treated as a plain file (i.e. not a directory)." + }, + { + "name": "num_attr", + "type": "size_t", + "comment": "The number of attributes being looked up" + }, + { + "name": "names", + "type": "const char **", + "comment": "An array of num_attr strings containing attribute names." + } + ], + "argline": "const char **values_out, git_repository *repo, uint32_t flags, const char *path, size_t num_attr, const char **names", + "sig": "const char **::git_repository *::uint32_t::const char *::size_t::const char **", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Look up a list of git attributes for path.

\n", + "comments": "

Use this if you have a known list of attributes that you want to look up in a single call. This is somewhat more efficient than calling git_attr_get() multiple times.

\n\n

For example, you might write:

\n\n
 const char *attrs[] = { "crlf", "diff", "foo" };     const char **values[3];     git_attr_get_many(values, repo, 0, "my/fun/file.c", 3, attrs);\n
\n\n

Then you could loop through the 3 values to get the settings for the three attributes you asked about.

\n", + "group": "attr" + }, + "git_attr_get_many_ext": { + "type": "function", + "file": "git2/attr.h", + "line": 267, + "lineto": 273, + "args": [ + { + "name": "values_out", + "type": "const char **", + "comment": "An array of num_attr entries that will have string\n pointers written into it for the values of the attributes.\n You should not modify or free the values that are written\n into this array (although of course, you should free the\n array itself if you allocated it)." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "opts", + "type": "git_attr_options *", + "comment": "The `git_attr_options` to use when querying these attributes." + }, + { + "name": "path", + "type": "const char *", + "comment": "The path inside the repo to check attributes. This\n does not have to exist, but if it does not, then\n it will be treated as a plain file (i.e. not a directory)." + }, + { + "name": "num_attr", + "type": "size_t", + "comment": "The number of attributes being looked up" + }, + { + "name": "names", + "type": "const char **", + "comment": "An array of num_attr strings containing attribute names." + } + ], + "argline": "const char **values_out, git_repository *repo, git_attr_options *opts, const char *path, size_t num_attr, const char **names", + "sig": "const char **::git_repository *::git_attr_options *::const char *::size_t::const char **", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Look up a list of git attributes for path with extended options.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_foreach": { + "type": "function", + "file": "git2/attr.h", + "line": 306, + "lineto": 311, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "A combination of GIT_ATTR_CHECK... flags." + }, + { + "name": "path", + "type": "const char *", + "comment": "Path inside the repo to check attributes. This does not have\n to exist, but if it does not, then it will be treated as a\n plain file (i.e. not a directory)." + }, + { + "name": "callback", + "type": "git_attr_foreach_cb", + "comment": "Function to invoke on each attribute name and value.\n See git_attr_foreach_cb." + }, + { + "name": "payload", + "type": "void *", + "comment": "Passed on as extra parameter to callback function." + } + ], + "argline": "git_repository *repo, uint32_t flags, const char *path, git_attr_foreach_cb callback, void *payload", + "sig": "git_repository *::uint32_t::const char *::git_attr_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Loop over all the git attributes for a path.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_foreach_ext": { + "type": "function", + "file": "git2/attr.h", + "line": 326, + "lineto": 331, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "opts", + "type": "git_attr_options *", + "comment": "The `git_attr_options` to use when querying these attributes." + }, + { + "name": "path", + "type": "const char *", + "comment": "Path inside the repo to check attributes. This does not have\n to exist, but if it does not, then it will be treated as a\n plain file (i.e. not a directory)." + }, + { + "name": "callback", + "type": "git_attr_foreach_cb", + "comment": "Function to invoke on each attribute name and value.\n See git_attr_foreach_cb." + }, + { + "name": "payload", + "type": "void *", + "comment": "Passed on as extra parameter to callback function." + } + ], + "argline": "git_repository *repo, git_attr_options *opts, const char *path, git_attr_foreach_cb callback, void *payload", + "sig": "git_repository *::git_attr_options *::const char *::git_attr_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Loop over all the git attributes for a path with extended options.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_cache_flush": { + "type": "function", + "file": "git2/attr.h", + "line": 344, + "lineto": 345, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the gitattributes cache" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Flush the gitattributes cache.

\n", + "comments": "

Call this if you have reason to believe that the attributes files on disk no longer match the cached contents of memory. This will cause the attributes files to be reloaded the next time that an attribute access function is called.

\n", + "group": "attr" + }, + "git_attr_add_macro": { + "type": "function", + "file": "git2/attr.h", + "line": 362, + "lineto": 365, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to add the macro in." + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the macro." + }, + { + "name": "values", + "type": "const char *", + "comment": "The value for the macro." + } + ], + "argline": "git_repository *repo, const char *name, const char *values", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Add a macro definition.

\n", + "comments": "

Macros will automatically be loaded from the top level .gitattributes file of the repository (plus the built-in "binary" macro). This function allows you to add others. For example, to add the default macro, you would call:

\n\n
 git_attr_add_macro(repo, "binary", "-diff -crlf");\n
\n", + "group": "attr" + }, + "git_blame_options_init": { + "type": "function", + "file": "git2/blame.h", + "line": 138, + "lineto": 140, + "args": [ + { + "name": "opts", + "type": "git_blame_options *", + "comment": "The `git_blame_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_BLAME_OPTIONS_VERSION`." + } + ], + "argline": "git_blame_options *opts, unsigned int version", + "sig": "git_blame_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_blame_options structure

\n", + "comments": "

Initializes a git_blame_options with default values. Equivalent to creating an instance with GIT_BLAME_OPTIONS_INIT.

\n", + "group": "blame" + }, + "git_blame_get_hunk_count": { + "type": "function", + "file": "git2/blame.h", + "line": 210, + "lineto": 210, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "The blame structure to query." + } + ], + "argline": "git_blame *blame", + "sig": "git_blame *", + "return": { + "type": "uint32_t", + "comment": " The number of hunks." + }, + "description": "

Gets the number of hunks that exist in the blame structure.

\n", + "comments": "", + "group": "blame" + }, + "git_blame_get_hunk_byindex": { + "type": "function", + "file": "git2/blame.h", + "line": 219, + "lineto": 221, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to query" + }, + { + "name": "index", + "type": "uint32_t", + "comment": "index of the hunk to retrieve" + } + ], + "argline": "git_blame *blame, uint32_t index", + "sig": "git_blame *::uint32_t", + "return": { + "type": "const git_blame_hunk *", + "comment": " the hunk at the given index, or NULL on error" + }, + "description": "

Gets the blame hunk at the given index.

\n", + "comments": "", + "group": "blame" + }, + "git_blame_get_hunk_byline": { + "type": "function", + "file": "git2/blame.h", + "line": 230, + "lineto": 232, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to query" + }, + { + "name": "lineno", + "type": "size_t", + "comment": "the (1-based) line number to find a hunk for" + } + ], + "argline": "git_blame *blame, size_t lineno", + "sig": "git_blame *::size_t", + "return": { + "type": "const git_blame_hunk *", + "comment": " the hunk that contains the given line, or NULL on error" + }, + "description": "

Gets the hunk that relates to the given line number in the newest commit.

\n", + "comments": "", + "group": "blame", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_blame_get_hunk_byline-1" + ] + } + }, + "git_blame_file": { + "type": "function", + "file": "git2/blame.h", + "line": 245, + "lineto": 249, + "args": [ + { + "name": "out", + "type": "git_blame **", + "comment": "pointer that will receive the blame object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository whose history is to be walked" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to file to consider" + }, + { + "name": "options", + "type": "git_blame_options *", + "comment": "options for the blame operation. If NULL, this is treated as\n though GIT_BLAME_OPTIONS_INIT were passed." + } + ], + "argline": "git_blame **out, git_repository *repo, const char *path, git_blame_options *options", + "sig": "git_blame **::git_repository *::const char *::git_blame_options *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error.)" + }, + "description": "

Get the blame for a single file.

\n", + "comments": "", + "group": "blame", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_blame_file-2" + ] + } + }, + "git_blame_buffer": { + "type": "function", + "file": "git2/blame.h", + "line": 269, + "lineto": 273, + "args": [ + { + "name": "out", + "type": "git_blame **", + "comment": "pointer that will receive the resulting blame data" + }, + { + "name": "reference", + "type": "git_blame *", + "comment": "cached blame from the history of the file (usually the output\n from git_blame_file)" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "the (possibly) modified contents of the file" + }, + { + "name": "buffer_len", + "type": "size_t", + "comment": "number of valid bytes in the buffer" + } + ], + "argline": "git_blame **out, git_blame *reference, const char *buffer, size_t buffer_len", + "sig": "git_blame **::git_blame *::const char *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error)" + }, + "description": "

Get blame data for a file that has been modified in memory. The reference\n parameter is a pre-calculated blame for the in-odb history of the file. This\n means that once a file blame is completed (which can be expensive), updating\n the buffer blame is very fast.

\n", + "comments": "

Lines that differ between the buffer and the committed version are marked as having a zero OID for their final_commit_id.

\n", + "group": "blame" + }, + "git_blame_free": { + "type": "function", + "file": "git2/blame.h", + "line": 280, + "lineto": 280, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to free" + } + ], + "argline": "git_blame *blame", + "sig": "git_blame *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free memory allocated by git_blame_file or git_blame_buffer.

\n", + "comments": "", + "group": "blame", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_blame_free-3" + ] + } + }, + "git_blob_lookup": { + "type": "function", + "file": "git2/blob.h", + "line": 33, + "lineto": 33, + "args": [ + { + "name": "blob", + "type": "git_blob **", + "comment": "pointer to the looked up blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the blob." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the blob to locate." + } + ], + "argline": "git_blob **blob, git_repository *repo, const git_oid *id", + "sig": "git_blob **::git_repository *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a blob object from a repository.

\n", + "comments": "", + "group": "blob", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_blob_lookup-4" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_blob_lookup-1" + ] + } + }, + "git_blob_lookup_prefix": { + "type": "function", + "file": "git2/blob.h", + "line": 47, + "lineto": 47, + "args": [ + { + "name": "blob", + "type": "git_blob **", + "comment": "pointer to the looked up blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the blob." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the blob to locate." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + } + ], + "argline": "git_blob **blob, git_repository *repo, const git_oid *id, size_t len", + "sig": "git_blob **::git_repository *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a blob object from a repository,\n given a prefix of its identifier (short id).

\n", + "comments": "", + "group": "blob" + }, + "git_blob_free": { + "type": "function", + "file": "git2/blob.h", + "line": 60, + "lineto": 60, + "args": [ + { + "name": "blob", + "type": "git_blob *", + "comment": "the blob to close" + } + ], + "argline": "git_blob *blob", + "sig": "git_blob *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Close an open blob

\n", + "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a blob. Failure to do so will cause a memory leak.

\n", + "group": "blob", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_blob_free-5" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_blob_free-2" + ] + } + }, + "git_blob_id": { + "type": "function", + "file": "git2/blob.h", + "line": 68, + "lineto": 68, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "a previously loaded blob." + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "const git_oid *", + "comment": " SHA1 hash for this blob." + }, + "description": "

Get the id of a blob.

\n", + "comments": "", + "group": "blob" + }, + "git_blob_owner": { + "type": "function", + "file": "git2/blob.h", + "line": 76, + "lineto": 76, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "A previously loaded blob." + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "git_repository *", + "comment": " Repository that contains this blob." + }, + "description": "

Get the repository that contains the blob.

\n", + "comments": "", + "group": "blob" + }, + "git_blob_rawcontent": { + "type": "function", + "file": "git2/blob.h", + "line": 89, + "lineto": 89, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "pointer to the blob" + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "const void *", + "comment": " the pointer, or NULL on error" + }, + "description": "

Get a read-only buffer with the raw content of a blob.

\n", + "comments": "

A pointer to the raw content of a blob is returned; this pointer is owned internally by the object and shall not be free'd. The pointer may be invalidated at a later time.

\n", + "group": "blob", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_blob_rawcontent-6" + ], + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_blob_rawcontent-1" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_blob_rawcontent-3" + ] + } + }, + "git_blob_rawsize": { + "type": "function", + "file": "git2/blob.h", + "line": 97, + "lineto": 97, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "pointer to the blob" + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "git_object_size_t", + "comment": " size on bytes" + }, + "description": "

Get the size in bytes of the contents of a blob

\n", + "comments": "", + "group": "blob", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_blob_rawsize-7" + ], + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_blob_rawsize-2" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_blob_rawsize-4", + "ex/v1.7.2/general.html#git_blob_rawsize-5" + ] + } + }, + "git_blob_filter_options_init": { + "type": "function", + "file": "git2/blob.h", + "line": 164, + "lineto": 164, + "args": [ + { + "name": "opts", + "type": "git_blob_filter_options *", + "comment": "The `git_blob_filter_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_BLOB_FILTER_OPTIONS_VERSION`." + } + ], + "argline": "git_blob_filter_options *opts, unsigned int version", + "sig": "git_blob_filter_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_blob_filter_options structure

\n", + "comments": "

Initializes a git_blob_filter_options with default values. Equivalent to creating an instance with GIT_BLOB_FILTER_OPTIONS_INIT.

\n", + "group": "blob" + }, + "git_blob_filter": { + "type": "function", + "file": "git2/blob.h", + "line": 188, + "lineto": 192, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The git_buf to be filled in" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "Pointer to the blob" + }, + { + "name": "as_path", + "type": "const char *", + "comment": "Path used for file attribute lookups, etc." + }, + { + "name": "opts", + "type": "git_blob_filter_options *", + "comment": "Options to use for filtering the blob" + } + ], + "argline": "git_buf *out, git_blob *blob, const char *as_path, git_blob_filter_options *opts", + "sig": "git_buf *::git_blob *::const char *::git_blob_filter_options *", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Get a buffer with the filtered content of a blob.

\n", + "comments": "

This applies filters as if the blob was being checked out to the working directory under the specified filename. This may apply CRLF filtering or other types of changes depending on the file attributes set for the blob and the content detected in it.

\n\n

The output is written into a git_buf which the caller must free when done (via git_buf_dispose).

\n\n

If no filters need to be applied, then the out buffer will just be populated with a pointer to the raw content of the blob. In that case, be careful to not free the blob until done with the buffer or copy it into memory you own.

\n", + "group": "blob" + }, + "git_blob_create_from_workdir": { + "type": "function", + "file": "git2/blob.h", + "line": 205, + "lineto": 205, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "return the id of the written blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the blob will be written.\n\tthis repository cannot be bare" + }, + { + "name": "relative_path", + "type": "const char *", + "comment": "file from which the blob will be created,\n\trelative to the repository's working dir" + } + ], + "argline": "git_oid *id, git_repository *repo, const char *relative_path", + "sig": "git_oid *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Read a file from the working folder of a repository\n and write it to the Object Database as a loose blob

\n", + "comments": "", + "group": "blob" + }, + "git_blob_create_from_disk": { + "type": "function", + "file": "git2/blob.h", + "line": 217, + "lineto": 217, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "return the id of the written blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the blob will be written.\n\tthis repository can be bare or not" + }, + { + "name": "path", + "type": "const char *", + "comment": "file from which the blob will be created" + } + ], + "argline": "git_oid *id, git_repository *repo, const char *path", + "sig": "git_oid *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Read a file from the filesystem and write its content\n to the Object Database as a loose blob

\n", + "comments": "", + "group": "blob" + }, + "git_blob_create_from_stream": { + "type": "function", + "file": "git2/blob.h", + "line": 244, + "lineto": 247, + "args": [ + { + "name": "out", + "type": "git_writestream **", + "comment": "the stream into which to write" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where the blob will be written.\n This repository can be bare or not." + }, + { + "name": "hintpath", + "type": "const char *", + "comment": "If not NULL, will be used to select data filters\n to apply onto the content of the blob to be created." + } + ], + "argline": "git_writestream **out, git_repository *repo, const char *hintpath", + "sig": "git_writestream **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or error code" + }, + "description": "

Create a stream to write a new blob into the object db

\n", + "comments": "

This function may need to buffer the data on disk and will in general not be the right choice if you know the size of the data to write. If you have data in memory, use git_blob_create_from_buffer(). If you do not, but know the size of the contents (and don't want/need to perform filtering), use git_odb_open_wstream().

\n\n

Don't close this stream yourself but pass it to git_blob_create_from_stream_commit() to commit the write to the object db and get the object id.

\n\n

If the hintpath parameter is filled, it will be used to determine what git filters should be applied to the object before it is written to the object database.

\n", + "group": "blob" + }, + "git_blob_create_from_stream_commit": { + "type": "function", + "file": "git2/blob.h", + "line": 258, + "lineto": 260, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the id of the new blob" + }, + { + "name": "stream", + "type": "git_writestream *", + "comment": "the stream to close" + } + ], + "argline": "git_oid *out, git_writestream *stream", + "sig": "git_oid *::git_writestream *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Close the stream and write the blob to the object db

\n", + "comments": "

The stream will be closed and freed.

\n", + "group": "blob" + }, + "git_blob_create_from_buffer": { + "type": "function", + "file": "git2/blob.h", + "line": 271, + "lineto": 272, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "return the id of the written blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the blob will be written" + }, + { + "name": "buffer", + "type": "const void *", + "comment": "data to be written into the blob" + }, + { + "name": "len", + "type": "size_t", + "comment": "length of the data" + } + ], + "argline": "git_oid *id, git_repository *repo, const void *buffer, size_t len", + "sig": "git_oid *::git_repository *::const void *::size_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Write an in-memory buffer to the ODB as a blob

\n", + "comments": "", + "group": "blob" + }, + "git_blob_is_binary": { + "type": "function", + "file": "git2/blob.h", + "line": 285, + "lineto": 285, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "The blob which content should be analyzed" + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "int", + "comment": " 1 if the content of the blob is detected\n as binary; 0 otherwise." + }, + "description": "

Determine if the blob content is most certainly binary or not.

\n", + "comments": "

The heuristic used to guess if a file is binary is taken from core git: Searching for NUL bytes and looking for a reasonable ratio of printable to non-printable characters among the first 8000 bytes.

\n", + "group": "blob" + }, + "git_blob_data_is_binary": { + "type": "function", + "file": "git2/blob.h", + "line": 297, + "lineto": 297, + "args": [ + { + "name": "data", + "type": "const char *", + "comment": "The blob data which content should be analyzed" + }, + { + "name": "len", + "type": "size_t", + "comment": "The length of the data" + } + ], + "argline": "const char *data, size_t len", + "sig": "const char *::size_t", + "return": { + "type": "int", + "comment": " 1 if the content of the blob is detected\n as binary; 0 otherwise." + }, + "description": "

Determine if the given content is most certainly binary or not;\n this is the same mechanism used by git_blob_is_binary but only\n looking at raw data.

\n", + "comments": "", + "group": "blob" + }, + "git_blob_dup": { + "type": "function", + "file": "git2/blob.h", + "line": 307, + "lineto": 307, + "args": [ + { + "name": "out", + "type": "git_blob **", + "comment": "Pointer to store the copy of the object" + }, + { + "name": "source", + "type": "git_blob *", + "comment": "Original object to copy" + } + ], + "argline": "git_blob **out, git_blob *source", + "sig": "git_blob **::git_blob *", + "return": { + "type": "int", + "comment": " 0." + }, + "description": "

Create an in-memory copy of a blob. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "blob" + }, + "git_branch_create": { + "type": "function", + "file": "git2/branch.h", + "line": 52, + "lineto": 57, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer where to store the underlying reference." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to create the branch in." + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "Name for the branch; this name is\n validated for consistency. It should also not conflict with\n an already existing branch name." + }, + { + "name": "target", + "type": "const git_commit *", + "comment": "Commit to which this branch should point. This object\n must belong to the given `repo`." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing branch." + } + ], + "argline": "git_reference **out, git_repository *repo, const char *branch_name, const git_commit *target, int force", + "sig": "git_reference **::git_repository *::const char *::const git_commit *::int", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC or an error code.\n A proper reference is written in the refs/heads namespace\n pointing to the provided target commit." + }, + "description": "

Create a new branch pointing at a target commit

\n", + "comments": "

A new direct reference will be created pointing to this target commit. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The returned reference must be freed by the user.

\n\n

The branch name will be checked for validity. See git_tag_create() for rules about valid names.

\n", + "group": "branch" + }, + "git_branch_create_from_annotated": { + "type": "function", + "file": "git2/branch.h", + "line": 70, + "lineto": 75, + "args": [ + { + "name": "ref_out", + "type": "git_reference **", + "comment": null + }, + { + "name": "repository", + "type": "git_repository *", + "comment": null + }, + { + "name": "branch_name", + "type": "const char *", + "comment": null + }, + { + "name": "commit", + "type": "const git_annotated_commit *", + "comment": null + }, + { + "name": "force", + "type": "int", + "comment": null + } + ], + "argline": "git_reference **ref_out, git_repository *repository, const char *branch_name, const git_annotated_commit *commit, int force", + "sig": "git_reference **::git_repository *::const char *::const git_annotated_commit *::int", + "return": { + "type": "int", + "comment": null + }, + "description": "

Create a new branch pointing at a target commit

\n", + "comments": "

This behaves like git_branch_create() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_branch_create().

\n", + "group": "branch", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_branch_create_from_annotated-7" + ] + } + }, + "git_branch_delete": { + "type": "function", + "file": "git2/branch.h", + "line": 87, + "lineto": 87, + "args": [ + { + "name": "branch", + "type": "git_reference *", + "comment": "A valid reference representing a branch" + } + ], + "argline": "git_reference *branch", + "sig": "git_reference *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code." + }, + "description": "

Delete an existing branch reference.

\n", + "comments": "

Note that if the deletion succeeds, the reference object will not be valid anymore, and should be freed immediately by the user using git_reference_free().

\n", + "group": "branch" + }, + "git_branch_iterator_new": { + "type": "function", + "file": "git2/branch.h", + "line": 103, + "lineto": 106, + "args": [ + { + "name": "out", + "type": "git_branch_iterator **", + "comment": "the iterator" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the branches." + }, + { + "name": "list_flags", + "type": "git_branch_t", + "comment": "Filtering flags for the branch\n listing. Valid values are GIT_BRANCH_LOCAL, GIT_BRANCH_REMOTE\n or GIT_BRANCH_ALL." + } + ], + "argline": "git_branch_iterator **out, git_repository *repo, git_branch_t list_flags", + "sig": "git_branch_iterator **::git_repository *::git_branch_t", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Create an iterator which loops over the requested branches.

\n", + "comments": "", + "group": "branch" + }, + "git_branch_next": { + "type": "function", + "file": "git2/branch.h", + "line": 116, + "lineto": 116, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "the reference" + }, + { + "name": "out_type", + "type": "git_branch_t *", + "comment": "the type of branch (local or remote-tracking)" + }, + { + "name": "iter", + "type": "git_branch_iterator *", + "comment": "the branch iterator" + } + ], + "argline": "git_reference **out, git_branch_t *out_type, git_branch_iterator *iter", + "sig": "git_reference **::git_branch_t *::git_branch_iterator *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ITEROVER if there are no more branches or an error code." + }, + "description": "

Retrieve the next branch from the iterator

\n", + "comments": "", + "group": "branch" + }, + "git_branch_iterator_free": { + "type": "function", + "file": "git2/branch.h", + "line": 123, + "lineto": 123, + "args": [ + { + "name": "iter", + "type": "git_branch_iterator *", + "comment": "the iterator to free" + } + ], + "argline": "git_branch_iterator *iter", + "sig": "git_branch_iterator *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a branch iterator

\n", + "comments": "", + "group": "branch" + }, + "git_branch_move": { + "type": "function", + "file": "git2/branch.h", + "line": 146, + "lineto": 150, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "New reference object for the updated name." + }, + { + "name": "branch", + "type": "git_reference *", + "comment": "Current underlying reference of the branch." + }, + { + "name": "new_branch_name", + "type": "const char *", + "comment": "Target name of the branch once the move\n is performed; this name is validated for consistency." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing branch." + } + ], + "argline": "git_reference **out, git_reference *branch, const char *new_branch_name, int force", + "sig": "git_reference **::git_reference *::const char *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code." + }, + "description": "

Move/rename an existing local branch reference.

\n", + "comments": "

The new branch name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

Note that if the move succeeds, the old reference object will not be valid anymore, and should be freed immediately by the user using git_reference_free().

\n", + "group": "branch" + }, + "git_branch_lookup": { + "type": "function", + "file": "git2/branch.h", + "line": 170, + "lineto": 174, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer to the looked-up branch reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to look up the branch" + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "Name of the branch to be looked-up;\n this name is validated for consistency." + }, + { + "name": "branch_type", + "type": "git_branch_t", + "comment": "Type of the considered branch. This should\n be valued with either GIT_BRANCH_LOCAL or GIT_BRANCH_REMOTE." + } + ], + "argline": "git_reference **out, git_repository *repo, const char *branch_name, git_branch_t branch_type", + "sig": "git_reference **::git_repository *::const char *::git_branch_t", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND when no matching branch\n exists, GIT_EINVALIDSPEC, otherwise an error code." + }, + "description": "

Lookup a branch by its name in a repository.

\n", + "comments": "

The generated reference must be freed by the user. The branch name will be checked for validity.

\n", + "group": "branch" + }, + "git_branch_name": { + "type": "function", + "file": "git2/branch.h", + "line": 191, + "lineto": 193, + "args": [ + { + "name": "out", + "type": "const char **", + "comment": "Pointer to the abbreviated reference name.\n Owned by ref, do not free." + }, + { + "name": "ref", + "type": "const git_reference *", + "comment": "A reference object, ideally pointing to a branch" + } + ], + "argline": "const char **out, const git_reference *ref", + "sig": "const char **::const git_reference *", + "return": { + "type": "int", + "comment": " 0 on success; GIT_EINVALID if the reference isn't either a local or\n remote branch, otherwise an error code." + }, + "description": "

Get the branch name

\n", + "comments": "

Given a reference object, this will check that it really is a branch (ie. it lives under "refs/heads/" or "refs/remotes/"), and return the branch part of it.

\n", + "group": "branch", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_branch_name-4" + ] + } + }, + "git_branch_upstream": { + "type": "function", + "file": "git2/branch.h", + "line": 209, + "lineto": 211, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer where to store the retrieved reference." + }, + { + "name": "branch", + "type": "const git_reference *", + "comment": "Current underlying reference of the branch." + } + ], + "argline": "git_reference **out, const git_reference *branch", + "sig": "git_reference **::const git_reference *", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND when no remote tracking\n reference exists, otherwise an error code." + }, + "description": "

Get the upstream of a branch

\n", + "comments": "

Given a reference, this will return a new reference object corresponding to its remote tracking branch. The reference must be a local branch.

\n", + "group": "branch" + }, + "git_branch_set_upstream": { + "type": "function", + "file": "git2/branch.h", + "line": 228, + "lineto": 230, + "args": [ + { + "name": "branch", + "type": "git_reference *", + "comment": "the branch to configure" + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "remote-tracking or local branch to set as upstream." + } + ], + "argline": "git_reference *branch, const char *branch_name", + "sig": "git_reference *::const char *", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name`\n or an error code" + }, + "description": "

Set a branch's upstream branch

\n", + "comments": "

This will update the configuration to set the branch named branch_name as the upstream of branch. Pass a NULL name to unset the upstream information.

\n", + "group": "branch" + }, + "git_branch_upstream_name": { + "type": "function", + "file": "git2/branch.h", + "line": 246, + "lineto": 249, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer into which the name will be written." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the branches live." + }, + { + "name": "refname", + "type": "const char *", + "comment": "reference name of the local branch." + } + ], + "argline": "git_buf *out, git_repository *repo, const char *refname", + "sig": "git_buf *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND when no remote tracking reference exists,\n or an error code." + }, + "description": "

Get the upstream name of a branch

\n", + "comments": "

Given a local branch, this will return its remote-tracking branch information, as a full reference name, ie. "feature/nice" would become "refs/remote/origin/feature/nice", depending on that branch's configuration.

\n", + "group": "branch" + }, + "git_branch_is_head": { + "type": "function", + "file": "git2/branch.h", + "line": 259, + "lineto": 260, + "args": [ + { + "name": "branch", + "type": "const git_reference *", + "comment": "A reference to a local branch." + } + ], + "argline": "const git_reference *branch", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 if HEAD points at the branch, 0 if it isn't, or a negative value\n \t\t as an error code." + }, + "description": "

Determine if HEAD points to the given branch

\n", + "comments": "", + "group": "branch" + }, + "git_branch_is_checked_out": { + "type": "function", + "file": "git2/branch.h", + "line": 272, + "lineto": 273, + "args": [ + { + "name": "branch", + "type": "const git_reference *", + "comment": "A reference to a local branch." + } + ], + "argline": "const git_reference *branch", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 if branch is checked out, 0 if it isn't, an error code otherwise." + }, + "description": "

Determine if any HEAD points to the current branch

\n", + "comments": "

This will iterate over all known linked repositories (usually in the form of worktrees) and report whether any HEAD is pointing at the current branch.

\n", + "group": "branch" + }, + "git_branch_remote_name": { + "type": "function", + "file": "git2/branch.h", + "line": 291, + "lineto": 294, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The buffer into which the name will be written." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository where the branch lives." + }, + { + "name": "refname", + "type": "const char *", + "comment": "complete name of the remote tracking branch." + } + ], + "argline": "git_buf *out, git_repository *repo, const char *refname", + "sig": "git_buf *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND when no matching remote was found,\n GIT_EAMBIGUOUS when the branch maps to several remotes,\n otherwise an error code." + }, + "description": "

Find the remote name of a remote-tracking branch

\n", + "comments": "

This will return the name of the remote whose fetch refspec is matching the given branch. E.g. given a branch "refs/remotes/test/master", it will extract the "test" part. If refspecs from multiple remotes match, the function will return GIT_EAMBIGUOUS.

\n", + "group": "branch" + }, + "git_branch_upstream_remote": { + "type": "function", + "file": "git2/branch.h", + "line": 307, + "lineto": 307, + "args": [ + { + "name": "buf", + "type": "git_buf *", + "comment": "the buffer into which to write the name" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to look" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the full name of the branch" + } + ], + "argline": "git_buf *buf, git_repository *repo, const char *refname", + "sig": "git_buf *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Retrieve the upstream remote of a local branch

\n", + "comments": "

This will return the currently configured "branch.*.remote" for a given branch. This branch must be local.

\n", + "group": "branch" + }, + "git_branch_upstream_merge": { + "type": "function", + "file": "git2/branch.h", + "line": 320, + "lineto": 320, + "args": [ + { + "name": "buf", + "type": "git_buf *", + "comment": "the buffer into which to write the name" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to look" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the full name of the branch" + } + ], + "argline": "git_buf *buf, git_repository *repo, const char *refname", + "sig": "git_buf *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Retrieve the upstream merge of a local branch

\n", + "comments": "

This will return the currently configured "branch.*.merge" for a given branch. This branch must be local.

\n", + "group": "branch" + }, + "git_branch_name_is_valid": { + "type": "function", + "file": "git2/branch.h", + "line": 332, + "lineto": 332, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "output pointer to set with validity of given branch name" + }, + { + "name": "name", + "type": "const char *", + "comment": "a branch name to test" + } + ], + "argline": "int *valid, const char *name", + "sig": "int *::const char *", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Determine whether a branch name is valid, meaning that (when prefixed\n with refs/heads/) that it is a valid reference name, and that any\n additional branch name restrictions are imposed (eg, it cannot start\n with a -).

\n", + "comments": "", + "group": "branch" + }, + "git_buf_dispose": { + "type": "function", + "file": "git2/buffer.h", + "line": 68, + "lineto": 68, + "args": [ + { + "name": "buffer", + "type": "git_buf *", + "comment": "The buffer to deallocate" + } + ], + "argline": "git_buf *buffer", + "sig": "git_buf *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the memory referred to by the git_buf.

\n", + "comments": "

Note that this does not free the git_buf itself, just the memory pointed to by buffer->ptr.

\n", + "group": "buf", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_buf_dispose-1", + "ex/v1.7.2/diff.html#git_buf_dispose-2" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_buf_dispose-1" + ] + } + }, + "git_checkout_options_init": { + "type": "function", + "file": "git2/checkout.h", + "line": 360, + "lineto": 362, + "args": [ + { + "name": "opts", + "type": "git_checkout_options *", + "comment": "The `git_checkout_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_CHECKOUT_OPTIONS_VERSION`." + } + ], + "argline": "git_checkout_options *opts, unsigned int version", + "sig": "git_checkout_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_checkout_options structure

\n", + "comments": "

Initializes a git_checkout_options with default values. Equivalent to creating an instance with GIT_CHECKOUT_OPTIONS_INIT.

\n", + "group": "checkout" + }, + "git_checkout_head": { + "type": "function", + "file": "git2/checkout.h", + "line": 381, + "lineto": 383, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository to check out (must be non-bare)" + }, + { + "name": "opts", + "type": "const git_checkout_options *", + "comment": "specifies checkout options (may be NULL)" + } + ], + "argline": "git_repository *repo, const git_checkout_options *opts", + "sig": "git_repository *::const git_checkout_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNBORNBRANCH if HEAD points to a non\n existing branch, non-zero value returned by `notify_cb`, or\n other error code \n<\n 0 (use git_error_last for error details)" + }, + "description": "

Updates files in the index and the working tree to match the content of\n the commit pointed at by HEAD.

\n", + "comments": "

Note that this is not the correct mechanism used to switch branches; do not change your HEAD and then call this method, that would leave you with checkout conflicts since your working directory would then appear to be dirty. Instead, checkout the target of the branch and then update HEAD using git_repository_set_head to point to the branch you checked out.

\n", + "group": "checkout" + }, + "git_checkout_index": { + "type": "function", + "file": "git2/checkout.h", + "line": 394, + "lineto": 397, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository into which to check out (must be non-bare)" + }, + { + "name": "index", + "type": "git_index *", + "comment": "index to be checked out (or NULL to use repository index)" + }, + { + "name": "opts", + "type": "const git_checkout_options *", + "comment": "specifies checkout options (may be NULL)" + } + ], + "argline": "git_repository *repo, git_index *index, const git_checkout_options *opts", + "sig": "git_repository *::git_index *::const git_checkout_options *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero return value from `notify_cb`, or error\n code \n<\n 0 (use git_error_last for error details)" + }, + "description": "

Updates files in the working tree to match the content of the index.

\n", + "comments": "", + "group": "checkout" + }, + "git_checkout_tree": { + "type": "function", + "file": "git2/checkout.h", + "line": 410, + "lineto": 413, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository to check out (must be non-bare)" + }, + { + "name": "treeish", + "type": "const git_object *", + "comment": "a commit, tag or tree which content will be used to update\n the working directory (or NULL to use HEAD)" + }, + { + "name": "opts", + "type": "const git_checkout_options *", + "comment": "specifies checkout options (may be NULL)" + } + ], + "argline": "git_repository *repo, const git_object *treeish, const git_checkout_options *opts", + "sig": "git_repository *::const git_object *::const git_checkout_options *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero return value from `notify_cb`, or error\n code \n<\n 0 (use git_error_last for error details)" + }, + "description": "

Updates files in the index and working tree to match the content of the\n tree pointed at by the treeish.

\n", + "comments": "", + "group": "checkout", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_checkout_tree-8" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_checkout_tree-5" + ] + } + }, + "git_cherrypick_options_init": { + "type": "function", + "file": "git2/cherrypick.h", + "line": 49, + "lineto": 51, + "args": [ + { + "name": "opts", + "type": "git_cherrypick_options *", + "comment": "The `git_cherrypick_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_CHERRYPICK_OPTIONS_VERSION`." + } + ], + "argline": "git_cherrypick_options *opts, unsigned int version", + "sig": "git_cherrypick_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_cherrypick_options structure

\n", + "comments": "

Initializes a git_cherrypick_options with default values. Equivalent to creating an instance with GIT_CHERRYPICK_OPTIONS_INIT.

\n", + "group": "cherrypick" + }, + "git_cherrypick_commit": { + "type": "function", + "file": "git2/cherrypick.h", + "line": 67, + "lineto": 73, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "pointer to store the index result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository that contains the given commits" + }, + { + "name": "cherrypick_commit", + "type": "git_commit *", + "comment": "the commit to cherry-pick" + }, + { + "name": "our_commit", + "type": "git_commit *", + "comment": "the commit to cherry-pick against (eg, HEAD)" + }, + { + "name": "mainline", + "type": "unsigned int", + "comment": "the parent of the `cherrypick_commit`, if it is a merge" + }, + { + "name": "merge_options", + "type": "const git_merge_options *", + "comment": "the merge options (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, git_commit *cherrypick_commit, git_commit *our_commit, unsigned int mainline, const git_merge_options *merge_options", + "sig": "git_index **::git_repository *::git_commit *::git_commit *::unsigned int::const git_merge_options *", + "return": { + "type": "int", + "comment": " zero on success, -1 on failure." + }, + "description": "

Cherry-picks the given commit against the given "our" commit, producing an\n index that reflects the result of the cherry-pick.

\n", + "comments": "

The returned index must be freed explicitly with git_index_free.

\n", + "group": "cherrypick" + }, + "git_cherrypick": { + "type": "function", + "file": "git2/cherrypick.h", + "line": 83, + "lineto": 86, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to cherry-pick" + }, + { + "name": "commit", + "type": "git_commit *", + "comment": "the commit to cherry-pick" + }, + { + "name": "cherrypick_options", + "type": "const git_cherrypick_options *", + "comment": "the cherry-pick options (or null for defaults)" + } + ], + "argline": "git_repository *repo, git_commit *commit, const git_cherrypick_options *cherrypick_options", + "sig": "git_repository *::git_commit *::const git_cherrypick_options *", + "return": { + "type": "int", + "comment": " zero on success, -1 on failure." + }, + "description": "

Cherry-pick the given commit, producing changes in the index and working directory.

\n", + "comments": "", + "group": "cherrypick" + }, + "git_clone_options_init": { + "type": "function", + "file": "git2/clone.h", + "line": 181, + "lineto": 183, + "args": [ + { + "name": "opts", + "type": "git_clone_options *", + "comment": "The `git_clone_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_CLONE_OPTIONS_VERSION`." + } + ], + "argline": "git_clone_options *opts, unsigned int version", + "sig": "git_clone_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_clone_options structure

\n", + "comments": "

Initializes a git_clone_options with default values. Equivalent to creating an instance with GIT_CLONE_OPTIONS_INIT.

\n", + "group": "clone" + }, + "git_clone": { + "type": "function", + "file": "git2/clone.h", + "line": 201, + "lineto": 205, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "pointer that will receive the resulting repository object" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote repository to clone" + }, + { + "name": "local_path", + "type": "const char *", + "comment": "local directory to clone to" + }, + { + "name": "options", + "type": "const git_clone_options *", + "comment": "configuration options for the clone. If NULL, the\n function works as though GIT_OPTIONS_INIT were passed." + } + ], + "argline": "git_repository **out, const char *url, const char *local_path, const git_clone_options *options", + "sig": "git_repository **::const char *::const char *::const git_clone_options *", + "return": { + "type": "int", + "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)" + }, + "description": "

Clone a remote repository.

\n", + "comments": "

By default this creates its repository and initial remote to match git's defaults. You can use the options in the callback to customize how these are created.

\n", + "group": "clone" + }, + "git_commit_lookup": { + "type": "function", + "file": "git2/commit.h", + "line": 36, + "lineto": 37, + "args": [ + { + "name": "commit", + "type": "git_commit **", + "comment": "pointer to the looked up commit" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the commit." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the commit to locate. If the object is\n\t\tan annotated tag it will be peeled back to the commit." + } + ], + "argline": "git_commit **commit, git_repository *repo, const git_oid *id", + "sig": "git_commit **::git_repository *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a commit object from a repository.

\n", + "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", + "group": "commit", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_commit_lookup-9" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_commit_lookup-6", + "ex/v1.7.2/general.html#git_commit_lookup-7", + "ex/v1.7.2/general.html#git_commit_lookup-8" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_lookup-1" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_commit_lookup-6" + ] + } + }, + "git_commit_lookup_prefix": { + "type": "function", + "file": "git2/commit.h", + "line": 55, + "lineto": 56, + "args": [ + { + "name": "commit", + "type": "git_commit **", + "comment": "pointer to the looked up commit" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the commit." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the commit to locate. If the object is\n\t\tan annotated tag it will be peeled back to the commit." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + } + ], + "argline": "git_commit **commit, git_repository *repo, const git_oid *id, size_t len", + "sig": "git_commit **::git_repository *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a commit object from a repository, given a prefix of its\n identifier (short id).

\n", + "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", + "group": "commit" + }, + "git_commit_free": { + "type": "function", + "file": "git2/commit.h", + "line": 70, + "lineto": 70, + "args": [ + { + "name": "commit", + "type": "git_commit *", + "comment": "the commit to close" + } + ], + "argline": "git_commit *commit", + "sig": "git_commit *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Close an open commit

\n", + "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a commit. Failure to do so will cause a memory leak.

\n", + "group": "commit", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_commit_free-10" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_commit_free-9", + "ex/v1.7.2/general.html#git_commit_free-10", + "ex/v1.7.2/general.html#git_commit_free-11", + "ex/v1.7.2/general.html#git_commit_free-12", + "ex/v1.7.2/general.html#git_commit_free-13" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_free-2", + "ex/v1.7.2/log.html#git_commit_free-3", + "ex/v1.7.2/log.html#git_commit_free-4", + "ex/v1.7.2/log.html#git_commit_free-5" + ] + } + }, + "git_commit_id": { + "type": "function", + "file": "git2/commit.h", + "line": 78, + "lineto": 78, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const git_oid *", + "comment": " object identity for the commit." + }, + "description": "

Get the id of a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_commit_id-14" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_id-6" + ] + } + }, + "git_commit_owner": { + "type": "function", + "file": "git2/commit.h", + "line": 86, + "lineto": 86, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "A previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "git_repository *", + "comment": " Repository that contains this commit." + }, + "description": "

Get the repository that contains the commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_commit_owner-7", + "ex/v1.7.2/log.html#git_commit_owner-8" + ] + } + }, + "git_commit_message_encoding": { + "type": "function", + "file": "git2/commit.h", + "line": 98, + "lineto": 98, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const char *", + "comment": " NULL, or the encoding" + }, + "description": "

Get the encoding for the message of a commit,\n as a string representing a standard encoding name.

\n", + "comments": "

The encoding may be NULL if the encoding header in the commit is missing; in that case UTF-8 is assumed.

\n", + "group": "commit" + }, + "git_commit_message": { + "type": "function", + "file": "git2/commit.h", + "line": 109, + "lineto": 109, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const char *", + "comment": " the message of a commit" + }, + "description": "

Get the full message of a commit.

\n", + "comments": "

The returned message will be slightly prettified by removing any potential leading newlines.

\n", + "group": "commit", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_commit_message-3", + "ex/v1.7.2/cat-file.html#git_commit_message-4" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_commit_message-15", + "ex/v1.7.2/general.html#git_commit_message-16", + "ex/v1.7.2/general.html#git_commit_message-17" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_message-9", + "ex/v1.7.2/log.html#git_commit_message-10", + "ex/v1.7.2/log.html#git_commit_message-11" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_commit_message-2" + ] + } + }, + "git_commit_message_raw": { + "type": "function", + "file": "git2/commit.h", + "line": 117, + "lineto": 117, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const char *", + "comment": " the raw message of a commit" + }, + "description": "

Get the full raw message of a commit.

\n", + "comments": "", + "group": "commit" + }, + "git_commit_summary": { + "type": "function", + "file": "git2/commit.h", + "line": 128, + "lineto": 128, + "args": [ + { + "name": "commit", + "type": "git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "git_commit *commit", + "sig": "git_commit *", + "return": { + "type": "const char *", + "comment": " the summary of a commit or NULL on error" + }, + "description": "

Get the short "summary" of the git commit message.

\n", + "comments": "

The returned message is the summary of the commit, comprising the first paragraph of the message with whitespace trimmed and squashed.

\n", + "group": "commit" + }, + "git_commit_body": { + "type": "function", + "file": "git2/commit.h", + "line": 141, + "lineto": 141, + "args": [ + { + "name": "commit", + "type": "git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "git_commit *commit", + "sig": "git_commit *", + "return": { + "type": "const char *", + "comment": " the body of a commit or NULL when no the message only\n consists of a summary" + }, + "description": "

Get the long "body" of the git commit message.

\n", + "comments": "

The returned message is the body of the commit, comprising everything but the first paragraph of the message. Leading and trailing whitespaces are trimmed.

\n", + "group": "commit" + }, + "git_commit_time": { + "type": "function", + "file": "git2/commit.h", + "line": 149, + "lineto": 149, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "git_time_t", + "comment": " the time of a commit" + }, + "description": "

Get the commit time (i.e. committer time) of a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_commit_time-18", + "ex/v1.7.2/general.html#git_commit_time-19" + ] + } + }, + "git_commit_time_offset": { + "type": "function", + "file": "git2/commit.h", + "line": 157, + "lineto": 157, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "int", + "comment": " positive or negative timezone offset, in minutes from UTC" + }, + "description": "

Get the commit timezone offset (i.e. committer's preferred timezone) of a commit.

\n", + "comments": "", + "group": "commit" + }, + "git_commit_committer": { + "type": "function", + "file": "git2/commit.h", + "line": 165, + "lineto": 165, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const git_signature *", + "comment": " the committer of a commit" + }, + "description": "

Get the committer of a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_commit_committer-5" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_commit_committer-20" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_committer-12" + ] + } + }, + "git_commit_author": { + "type": "function", + "file": "git2/commit.h", + "line": 173, + "lineto": 173, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const git_signature *", + "comment": " the author of a commit" + }, + "description": "

Get the author of a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_commit_author-6" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_commit_author-21", + "ex/v1.7.2/general.html#git_commit_author-22" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_author-13", + "ex/v1.7.2/log.html#git_commit_author-14" + ] + } + }, + "git_commit_committer_with_mailmap": { + "type": "function", + "file": "git2/commit.h", + "line": 186, + "lineto": 187, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "a pointer to store the resolved signature." + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "mailmap", + "type": "const git_mailmap *", + "comment": "the mailmap to resolve with. (may be NULL)" + } + ], + "argline": "git_signature **out, const git_commit *commit, const git_mailmap *mailmap", + "sig": "git_signature **::const git_commit *::const git_mailmap *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the committer of a commit, using the mailmap to map names and email\n addresses to canonical real names and email addresses.

\n", + "comments": "

Call git_signature_free to free the signature.

\n", + "group": "commit" + }, + "git_commit_author_with_mailmap": { + "type": "function", + "file": "git2/commit.h", + "line": 200, + "lineto": 201, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "a pointer to store the resolved signature." + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "mailmap", + "type": "const git_mailmap *", + "comment": "the mailmap to resolve with. (may be NULL)" + } + ], + "argline": "git_signature **out, const git_commit *commit, const git_mailmap *mailmap", + "sig": "git_signature **::const git_commit *::const git_mailmap *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the author of a commit, using the mailmap to map names and email\n addresses to canonical real names and email addresses.

\n", + "comments": "

Call git_signature_free to free the signature.

\n", + "group": "commit" + }, + "git_commit_raw_header": { + "type": "function", + "file": "git2/commit.h", + "line": 209, + "lineto": 209, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit" + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const char *", + "comment": " the header text of the commit" + }, + "description": "

Get the full raw text of the commit header.

\n", + "comments": "", + "group": "commit" + }, + "git_commit_tree": { + "type": "function", + "file": "git2/commit.h", + "line": 218, + "lineto": 218, + "args": [ + { + "name": "tree_out", + "type": "git_tree **", + "comment": "pointer where to store the tree object" + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "git_tree **tree_out, const git_commit *commit", + "sig": "git_tree **::const git_commit *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the tree pointed to by a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_commit_tree-15", + "ex/v1.7.2/log.html#git_commit_tree-16", + "ex/v1.7.2/log.html#git_commit_tree-17", + "ex/v1.7.2/log.html#git_commit_tree-18", + "ex/v1.7.2/log.html#git_commit_tree-19" + ] + } + }, + "git_commit_tree_id": { + "type": "function", + "file": "git2/commit.h", + "line": 228, + "lineto": 228, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const git_oid *", + "comment": " the id of tree pointed to by commit." + }, + "description": "

Get the id of the tree pointed to by a commit. This differs from\n git_commit_tree in that no attempts are made to fetch an object\n from the ODB.

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_commit_tree_id-7" + ] + } + }, + "git_commit_parentcount": { + "type": "function", + "file": "git2/commit.h", + "line": 236, + "lineto": 236, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "unsigned int", + "comment": " integer of count of parents" + }, + "description": "

Get the number of parents of this commit

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_commit_parentcount-8" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_commit_parentcount-23" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_parentcount-20", + "ex/v1.7.2/log.html#git_commit_parentcount-21" + ] + } + }, + "git_commit_parent": { + "type": "function", + "file": "git2/commit.h", + "line": 246, + "lineto": 249, + "args": [ + { + "name": "out", + "type": "git_commit **", + "comment": "Pointer where to store the parent commit" + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "n", + "type": "unsigned int", + "comment": "the position of the parent (from 0 to `parentcount`)" + } + ], + "argline": "git_commit **out, const git_commit *commit, unsigned int n", + "sig": "git_commit **::const git_commit *::unsigned int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the specified parent of the commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_commit_parent-24" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_parent-22", + "ex/v1.7.2/log.html#git_commit_parent-23" + ] + } + }, + "git_commit_parent_id": { + "type": "function", + "file": "git2/commit.h", + "line": 260, + "lineto": 262, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "n", + "type": "unsigned int", + "comment": "the position of the parent (from 0 to `parentcount`)" + } + ], + "argline": "const git_commit *commit, unsigned int n", + "sig": "const git_commit *::unsigned int", + "return": { + "type": "const git_oid *", + "comment": " the id of the parent, NULL on error." + }, + "description": "

Get the oid of a specified parent for a commit. This is different from\n git_commit_parent, which will attempt to load the parent commit from\n the ODB.

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_commit_parent_id-9" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_commit_parent_id-24" + ] + } + }, + "git_commit_nth_gen_ancestor": { + "type": "function", + "file": "git2/commit.h", + "line": 278, + "lineto": 281, + "args": [ + { + "name": "ancestor", + "type": "git_commit **", + "comment": "Pointer where to store the ancestor commit" + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "n", + "type": "unsigned int", + "comment": "the requested generation" + } + ], + "argline": "git_commit **ancestor, const git_commit *commit, unsigned int n", + "sig": "git_commit **::const git_commit *::unsigned int", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND if no matching ancestor exists\n or an error code" + }, + "description": "

Get the commit object that is the \n<n

\n\n
\n

th generation ancestor\n of the named commit object, following only the first parents.\n The returned commit has to be freed by the caller.

\n
\n", + "comments": "

Passing 0 as the generation number returns another instance of the base commit itself.

\n", + "group": "commit" + }, + "git_commit_header_field": { + "type": "function", + "file": "git2/commit.h", + "line": 293, + "lineto": 293, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer to fill; existing content will be\n overwritten" + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "the commit to look in" + }, + { + "name": "field", + "type": "const char *", + "comment": "the header field to return" + } + ], + "argline": "git_buf *out, const git_commit *commit, const char *field", + "sig": "git_buf *::const git_commit *::const char *", + "return": { + "type": "int", + "comment": " 0 on succeess, GIT_ENOTFOUND if the field does not exist,\n or an error code" + }, + "description": "

Get an arbitrary header field

\n", + "comments": "", + "group": "commit" + }, + "git_commit_extract_signature": { + "type": "function", + "file": "git2/commit.h", + "line": 313, + "lineto": 313, + "args": [ + { + "name": "signature", + "type": "git_buf *", + "comment": "the signature block; existing content will be\n overwritten" + }, + { + "name": "signed_data", + "type": "git_buf *", + "comment": "signed data; this is the commit contents minus the signature block;\n existing content will be overwritten" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which the commit exists" + }, + { + "name": "commit_id", + "type": "git_oid *", + "comment": "the commit from which to extract the data" + }, + { + "name": "field", + "type": "const char *", + "comment": "the name of the header field containing the signature\n block; pass `NULL` to extract the default 'gpgsig'" + } + ], + "argline": "git_buf *signature, git_buf *signed_data, git_repository *repo, git_oid *commit_id, const char *field", + "sig": "git_buf *::git_buf *::git_repository *::git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if the id is not for a commit\n or the commit does not have a signature." + }, + "description": "

Extract the signature from a commit

\n", + "comments": "

If the id is not for a commit, the error class will be GIT_ERROR_INVALID. If the commit does not have a signature, the error class will be GIT_ERROR_OBJECT.

\n", + "group": "commit" + }, + "git_commit_create": { + "type": "function", + "file": "git2/commit.h", + "line": 359, + "lineto": 369, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "Pointer in which to store the OID of the newly created commit" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the commit" + }, + { + "name": "update_ref", + "type": "const char *", + "comment": "If not NULL, name of the reference that\n\twill be updated to point to this commit. If the reference\n\tis not direct, it will be resolved to a direct reference.\n\tUse \"HEAD\" to update the HEAD of the current branch and\n\tmake it point to this commit. If the reference doesn't\n\texist yet, it will be created. If it does exist, the first\n\tparent must be the tip of this branch." + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "Signature with author and author time of commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "Signature with committer and * commit time of commit" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this commit" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." + }, + { + "name": "parent_count", + "type": "size_t", + "comment": "Number of parents for this commit" + }, + { + "name": "parents", + "type": "const git_commit *[]", + "comment": "Array of `parent_count` pointers to `git_commit`\n objects that will be used as the parents for this commit. This\n array may be NULL if `parent_count` is 0 (root commit). All the\n given commits must be owned by the `repo`." + } + ], + "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents", + "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]", + "return": { + "type": "int", + "comment": " 0 or an error code\n\tThe created commit will be written to the Object Database and\n\tthe given reference will be updated to point to it" + }, + "description": "

Create new commit in the repository from a list of git_object pointers

\n", + "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n", + "group": "commit", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_commit_create-7" + ] + } + }, + "git_commit_create_v": { + "type": "function", + "file": "git2/commit.h", + "line": 385, + "lineto": 395, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": null + }, + { + "name": "repo", + "type": "git_repository *", + "comment": null + }, + { + "name": "update_ref", + "type": "const char *", + "comment": null + }, + { + "name": "author", + "type": "const git_signature *", + "comment": null + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": null + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": null + }, + { + "name": "message", + "type": "const char *", + "comment": null + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": null + }, + { + "name": "parent_count", + "type": "size_t", + "comment": null + } + ], + "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count", + "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t", + "return": { + "type": "int", + "comment": null + }, + "description": "

Create new commit in the repository using a variable argument list.

\n", + "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n\n

The parents for the commit are specified as a variable list of pointers to const git_commit *. Note that this is a convenience method which may not be safe to export for certain languages or compilers

\n\n

All other parameters remain the same as git_commit_create().

\n", + "group": "commit", + "examples": { + "commit.c": [ + "ex/v1.7.2/commit.html#git_commit_create_v-1" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_commit_create_v-25" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_commit_create_v-1" + ] + } + }, + "git_commit_amend": { + "type": "function", + "file": "git2/commit.h", + "line": 418, + "lineto": 426, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": null + }, + { + "name": "commit_to_amend", + "type": "const git_commit *", + "comment": null + }, + { + "name": "update_ref", + "type": "const char *", + "comment": null + }, + { + "name": "author", + "type": "const git_signature *", + "comment": null + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": null + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": null + }, + { + "name": "message", + "type": "const char *", + "comment": null + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": null + } + ], + "argline": "git_oid *id, const git_commit *commit_to_amend, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree", + "sig": "git_oid *::const git_commit *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Amend an existing commit by replacing only non-NULL values.

\n", + "comments": "

This creates a new commit that is exactly the same as the old commit, except that any non-NULL values will be updated. The new commit has the same parents as the old commit.

\n\n

The update_ref value works as in the regular git_commit_create(), updating the ref to point to the newly rewritten commit. If you want to amend a commit that is not currently the tip of the branch and then rewrite the following commits to reach a ref, pass this as NULL and update the rest of the commit chain and ref separately.

\n\n

Unlike git_commit_create(), the author, committer, message, message_encoding, and tree parameters can be NULL in which case this will use the values from the original commit_to_amend.

\n\n

All parameters have the same meanings as in git_commit_create().

\n", + "group": "commit" + }, + "git_commit_create_buffer": { + "type": "function", + "file": "git2/commit.h", + "line": 463, + "lineto": 472, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer into which to write the commit object content" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where the referenced tree and parents live" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "Signature with author and author time of commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "Signature with committer and * commit time of commit" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this commit" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." + }, + { + "name": "parent_count", + "type": "size_t", + "comment": "Number of parents for this commit" + }, + { + "name": "parents", + "type": "const git_commit *[]", + "comment": "Array of `parent_count` pointers to `git_commit`\n objects that will be used as the parents for this commit. This\n array may be NULL if `parent_count` is 0 (root commit). All the\n given commits must be owned by the `repo`." + } + ], + "argline": "git_buf *out, git_repository *repo, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents", + "sig": "git_buf *::git_repository *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a commit and write it into a buffer

\n", + "comments": "

Create a commit as with git_commit_create() but instead of writing it to the objectdb, write the contents of the object into a buffer.

\n", + "group": "commit" + }, + "git_commit_create_with_signature": { + "type": "function", + "file": "git2/commit.h", + "line": 490, + "lineto": 495, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the resulting commit id" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to create the commit in." + }, + { + "name": "commit_content", + "type": "const char *", + "comment": "the content of the unsigned commit object" + }, + { + "name": "signature", + "type": "const char *", + "comment": "the signature to add to the commit. Leave `NULL`\n to create a commit without adding a signature field." + }, + { + "name": "signature_field", + "type": "const char *", + "comment": "which header field should contain this\n signature. Leave `NULL` for the default of \"gpgsig\"" + } + ], + "argline": "git_oid *out, git_repository *repo, const char *commit_content, const char *signature, const char *signature_field", + "sig": "git_oid *::git_repository *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a commit object from the given buffer and signature

\n", + "comments": "

Given the unsigned commit object's contents, its signature and the header field in which to store the signature, attach the signature to the commit and write it into the given repository.

\n", + "group": "commit" + }, + "git_commit_dup": { + "type": "function", + "file": "git2/commit.h", + "line": 505, + "lineto": 505, + "args": [ + { + "name": "out", + "type": "git_commit **", + "comment": "Pointer to store the copy of the commit" + }, + { + "name": "source", + "type": "git_commit *", + "comment": "Original commit to copy" + } + ], + "argline": "git_commit **out, git_commit *source", + "sig": "git_commit **::git_commit *", + "return": { + "type": "int", + "comment": " 0" + }, + "description": "

Create an in-memory copy of a commit. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "commit" + }, + "git_libgit2_version": { + "type": "function", + "file": "git2/common.h", + "line": 117, + "lineto": 117, + "args": [ + { + "name": "major", + "type": "int *", + "comment": "Store the major version number" + }, + { + "name": "minor", + "type": "int *", + "comment": "Store the minor version number" + }, + { + "name": "rev", + "type": "int *", + "comment": "Store the revision (patch) number" + } + ], + "argline": "int *major, int *minor, int *rev", + "sig": "int *::int *::int *", + "return": { + "type": "int", + "comment": " 0 on success or an error code on failure" + }, + "description": "

Return the version of the libgit2 library\n being currently used.

\n", + "comments": "", + "group": "libgit2" + }, + "git_libgit2_prerelease": { + "type": "function", + "file": "git2/common.h", + "line": 128, + "lineto": 128, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "const char *", + "comment": " the name of the prerelease state or NULL" + }, + "description": "

Return the prerelease state of the libgit2 library currently being\n used. For nightly builds during active development, this will be\n "alpha". Releases may have a "beta" or release candidate ("rc1",\n "rc2", etc) prerelease. For a final release, this function returns\n NULL.

\n", + "comments": "", + "group": "libgit2" + }, + "git_libgit2_features": { + "type": "function", + "file": "git2/common.h", + "line": 180, + "lineto": 180, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "int", + "comment": " A combination of GIT_FEATURE_* values." + }, + "description": "

Query compile time options for libgit2.

\n", + "comments": "
    \n
  • GIT_FEATURE_THREADS Libgit2 was compiled with thread support. Note that thread support is still to be seen as a 'work in progress' - basic object lookups are believed to be threadsafe, but other operations may not be.

  • \n
  • GIT_FEATURE_HTTPS Libgit2 supports the https:// protocol. This requires the openssl library to be found when compiling libgit2.

  • \n
  • GIT_FEATURE_SSH Libgit2 supports the SSH protocol for network operations. This requires the libssh2 library to be found when compiling libgit2

  • \n
  • GIT_FEATURE_NSEC Libgit2 supports the sub-second resolution in file modification times.

  • \n
\n", + "group": "libgit2" + }, + "git_libgit2_opts": { + "type": "function", + "file": "git2/common.h", + "line": 512, + "lineto": 512, + "args": [ + { + "name": "option", + "type": "int", + "comment": "Option key" + } + ], + "argline": "int option", + "sig": "int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Set or query a library global option

\n", + "comments": "

Available options:

\n\n
* opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *):\n\n    > Get the maximum mmap window size\n\n* opts(GIT_OPT_SET_MWINDOW_SIZE, size_t):\n\n    > Set the maximum mmap window size\n\n* opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *):\n\n    > Get the maximum memory that will be mapped in total by the library\n\n* opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t):\n\n    > Set the maximum amount of memory that can be mapped at any time       > by the library\n\n* opts(GIT_OPT_GET_MWINDOW_FILE_LIMIT, size_t *):\n\n    > Get the maximum number of files that will be mapped at any time by the        > library\n\n* opts(GIT_OPT_SET_MWINDOW_FILE_LIMIT, size_t):\n\n    > Set the maximum number of files that can be mapped at any time        > by the library. The default (0) is unlimited.\n\n* opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf)\n\n    > Get the search path for a given level of config data.  "level" must       > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`,       > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`.        > The search path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path)\n\n    > Set the search path for a level of config data.  The search path      > applied to shared attributes and ignore files, too.       >       > - `path` lists directories delimited by GIT_PATH_LIST_SEPARATOR.      >   Pass NULL to reset to the default (generally based on environment       >   variables).  Use magic path `$PATH` to include the old value        >   of the path (if you want to prepend or append, for instance).       >       > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`,      >   `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or       >   `GIT_CONFIG_LEVEL_PROGRAMDATA`.\n\n* opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_object_t type, size_t size)\n\n    > Set the maximum data size for the given type of object to be      > considered eligible for caching in memory.  Setting to value to       > zero means that that type of object will not be cached.       > Defaults to 0 for GIT_OBJECT_BLOB (i.e. won't cache blobs) and 4k     > for GIT_OBJECT_COMMIT, GIT_OBJECT_TREE, and GIT_OBJECT_TAG.\n\n* opts(GIT_OPT_SET_CACHE_MAX_SIZE, ssize_t max_storage_bytes)\n\n    > Set the maximum total data size that will be cached in memory     > across all repositories before libgit2 starts evicting objects        > from the cache.  This is a soft limit, in that the library might      > briefly exceed it, but will start aggressively evicting objects       > from cache when that happens.  The default cache size is 256MB.\n\n* opts(GIT_OPT_ENABLE_CACHING, int enabled)\n\n    > Enable or disable caching completely.     >       > Because caches are repository-specific, disabling the cache       > cannot immediately clear all cached objects, but each cache will      > be cleared on the next attempt to update anything in it.\n\n* opts(GIT_OPT_GET_CACHED_MEMORY, ssize_t *current, ssize_t *allowed)\n\n    > Get the current bytes in cache and the maximum that would be      > allowed in the cache.\n\n* opts(GIT_OPT_GET_TEMPLATE_PATH, git_buf *out)\n\n    > Get the default template path.        > The path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_TEMPLATE_PATH, const char *path)\n\n    > Set the default template path.        >       > - `path` directory of template.\n\n* opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, const char *file, const char *path)\n\n    > Set the SSL certificate-authority locations.      >       > - `file` is the location of a file containing several     >   certificates concatenated together.     > - `path` is the location of a directory holding several       >   certificates, one per file.     >       > Either parameter may be `NULL`, but not both.\n\n* opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)\n\n    > Set the value of the User-Agent header.  This value will be       > appended to "git/1.0", for compatibility with other git clients.      >       > - `user_agent` is the value that will be delivered as the     >   User-Agent header on HTTP requests.\n\n* opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value)\n\n    > Set the share mode used when opening files on Windows.        > For more information, see the documentation for CreateFile.       > The default is: FILE_SHARE_READ | FILE_SHARE_WRITE.  This is      > ignored and unused on non-Windows platforms.\n\n* opts(GIT_OPT_GET_WINDOWS_SHAREMODE, unsigned long *value)\n\n    > Get the share mode used when opening files on Windows.\n\n* opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled)\n\n    > Enable strict input validation when creating new objects      > to ensure that all inputs to the new objects are valid.  For      > example, when this is enabled, the parent(s) and tree inputs      > will be validated when creating a new commit.  This defaults      > to enabled.\n\n* opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, int enabled)\n\n    > Validate the target of a symbolic ref when creating it.  For      > example, `foobar` is not a valid ref, therefore `foobar` is       > not a valid target for a symbolic ref by default, whereas     > `refs/heads/foobar` is.  Disabling this bypasses validation       > so that an arbitrary strings such as `foobar` can be used     > for a symbolic ref target.  This defaults to enabled.\n\n* opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers)\n\n    > Set the SSL ciphers use for HTTPS connections.        >       > - `ciphers` is the list of ciphers that are eanbled.\n\n* opts(GIT_OPT_GET_USER_AGENT, git_buf *out)\n\n    > Get the value of the User-Agent header.       > The User-Agent is written to the `out` buffer.\n\n* opts(GIT_OPT_ENABLE_OFS_DELTA, int enabled)\n\n    > Enable or disable the use of "offset deltas" when creating packfiles,     > and the negotiation of them when talking to a remote server.      > Offset deltas store a delta base location as an offset into the       > packfile from the current location, which provides a shorter encoding     > and thus smaller resultant packfiles.     > Packfiles containing offset deltas can still be read.     > This defaults to enabled.\n\n* opts(GIT_OPT_ENABLE_FSYNC_GITDIR, int enabled)\n\n    > Enable synchronized writes of files in the gitdir using `fsync`       > (or the platform equivalent) to ensure that new object data       > is written to permanent storage, not simply cached.  This     > defaults to disabled.\n\n opts(GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION, int enabled)\n\n    > Enable strict verification of object hashsums when reading        > objects from disk. This may impact performance due to an      > additional checksum calculation on each object. This defaults     > to enabled.\n\n opts(GIT_OPT_SET_ALLOCATOR, git_allocator *allocator)\n\n    > Set the memory allocator to a different memory allocator. This        > allocator will then be used to make all memory allocations for        > libgit2 operations.  If the given `allocator` is NULL, then the       > system default will be restored.\n\n opts(GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, int enabled)\n\n    > Ensure that there are no unsaved changes in the index before      > beginning any operation that reloads the index from disk (eg,     > checkout).  If there are unsaved changes, the instruction will        > fail.  (Using the FORCE flag to checkout will still overwrite     > these changes.)\n\n opts(GIT_OPT_GET_PACK_MAX_OBJECTS, size_t *out)\n\n    > Get the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote. This can be      > used to limit maximum memory usage when fetching from an untrusted        > remote.\n\n opts(GIT_OPT_SET_PACK_MAX_OBJECTS, size_t objects)\n\n    > Set the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote.\n\n opts(GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS, int enabled)       > This will cause .keep file existence checks to be skipped when        > accessing packfiles, which can help performance with remote filesystems.\n\n opts(GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE, int enabled)     > When connecting to a server using NTLM or Negotiate       > authentication, use expect/continue when POSTing data.        > This option is not available on Windows.\n
\n\n

opts(GIT_OPT_SET_ODB_PACKED_PRIORITY, int priority) > Override the default priority of the packed ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_SET_ODB_LOOSE_PRIORITY, int priority) > Override the default priority of the loose ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out) > Returns the list of git extensions that are supported. This > is the list of built-in extensions supported by libgit2 and > custom extensions that have been added with > GIT_OPT_SET_EXTENSIONS. Extensions that have been negated > will not be returned. The returned list should be released > with git_strarray_dispose.

\n\n

opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len) > Set that the given git extensions are supported by the caller. > Extensions supported by libgit2 may be negated by prefixing > them with a !. For example: setting extensions to > { "!noop", "newext" } indicates that the caller does not want > to support repositories with the noop extension but does want > to support repositories with the newext extension.

\n\n

opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) > Gets the owner validation setting for repository > directories.

\n\n

opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) > Set that repository directories should be owned by the current > user. The default is to validate ownership.

\n\n

opts(GIT_OPT_GET_HOMEDIR, git_buf *out) > Gets the current user's home directory, as it will be used > for file lookups. The path is written to the out buffer.

\n\n

opts(GIT_OPT_SET_HOMEDIR, const char *path) > Sets the directory used as the current user's home directory, > for file lookups. > > - path directory of home directory.

\n\n

opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) to attempt connections to > a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) to attempt connections to > a remote server. This is supported only for HTTP(S) connections > and is not supported by SSH. Set to 0 to use the system default. > Note that this may not be able to be configured longer than the > system default, typically 75 seconds.

\n\n

opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) for reading from and writing > to a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) for reading from and writing > to a remote server. This is supported only for HTTP(S) > connections and is not supported by SSH. Set to 0 to use the > system default.

\n", + "group": "libgit2" + }, + "git_config_entry_free": { + "type": "function", + "file": "git2/config.h", + "line": 78, + "lineto": 78, + "args": [ + { + "name": "entry", + "type": "git_config_entry *", + "comment": "The entry to free." + } + ], + "argline": "git_config_entry *entry", + "sig": "git_config_entry *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a config entry

\n", + "comments": "", + "group": "config", + "examples": { + "config.c": [ + "ex/v1.7.2/config.html#git_config_entry_free-1", + "ex/v1.7.2/config.html#git_config_entry_free-2" + ] + } + }, + "git_config_find_global": { + "type": "function", + "file": "git2/config.h", + "line": 130, + "lineto": 130, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Pointer to a user-allocated git_buf in which to store the path" + } + ], + "argline": "git_buf *out", + "sig": "git_buf *", + "return": { + "type": "int", + "comment": " 0 if a global configuration file has been found. Its path will be stored in `out`." + }, + "description": "

Locate the path to the global configuration file

\n", + "comments": "

The user or global configuration file is usually located in $HOME/.gitconfig.

\n\n

This method will try to guess the full path to that file, if the file exists. The returned path may be used on any git_config call to load the global configuration file.

\n\n

This method will not guess the path to the xdg compatible config file (.config/git/config).

\n", + "group": "config" + }, + "git_config_find_xdg": { + "type": "function", + "file": "git2/config.h", + "line": 147, + "lineto": 147, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Pointer to a user-allocated git_buf in which to store the path" + } + ], + "argline": "git_buf *out", + "sig": "git_buf *", + "return": { + "type": "int", + "comment": " 0 if a xdg compatible configuration file has been\n\tfound. Its path will be stored in `out`." + }, + "description": "

Locate the path to the global xdg compatible configuration file

\n", + "comments": "

The xdg compatible configuration file is usually located in $HOME/.config/git/config.

\n\n

This method will try to guess the full path to that file, if the file exists. The returned path may be used on any git_config call to load the xdg compatible configuration file.

\n", + "group": "config" + }, + "git_config_find_system": { + "type": "function", + "file": "git2/config.h", + "line": 159, + "lineto": 159, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Pointer to a user-allocated git_buf in which to store the path" + } + ], + "argline": "git_buf *out", + "sig": "git_buf *", + "return": { + "type": "int", + "comment": " 0 if a system configuration file has been\n\tfound. Its path will be stored in `out`." + }, + "description": "

Locate the path to the system configuration file

\n", + "comments": "

If /etc/gitconfig doesn't exist, it will look for %PROGRAMFILES%.

\n", + "group": "config" + }, + "git_config_find_programdata": { + "type": "function", + "file": "git2/config.h", + "line": 170, + "lineto": 170, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Pointer to a user-allocated git_buf in which to store the path" + } + ], + "argline": "git_buf *out", + "sig": "git_buf *", + "return": { + "type": "int", + "comment": " 0 if a ProgramData configuration file has been\n\tfound. Its path will be stored in `out`." + }, + "description": "

Locate the path to the configuration file in ProgramData

\n", + "comments": "

Look for the file in %PROGRAMDATA% used by portable git.

\n", + "group": "config" + }, + "git_config_open_default": { + "type": "function", + "file": "git2/config.h", + "line": 182, + "lineto": 182, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "Pointer to store the config instance" + } + ], + "argline": "git_config **out", + "sig": "git_config **", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Open the global, XDG and system configuration files

\n", + "comments": "

Utility wrapper that finds the global, XDG and system configuration files and opens them into a single prioritized config object that can be used when accessing default config data outside a repository.

\n", + "group": "config" + }, + "git_config_new": { + "type": "function", + "file": "git2/config.h", + "line": 193, + "lineto": 193, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "pointer to the new configuration" + } + ], + "argline": "git_config **out", + "sig": "git_config **", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Allocate a new configuration object

\n", + "comments": "

This object is empty, so you have to add a file to it before you can do anything with it.

\n", + "group": "config" + }, + "git_config_add_file_ondisk": { + "type": "function", + "file": "git2/config.h", + "line": 222, + "lineto": 227, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration to add the file to" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to the configuration file to add" + }, + { + "name": "level", + "type": "git_config_level_t", + "comment": "the priority level of the backend" + }, + { + "name": "repo", + "type": "const git_repository *", + "comment": "optional repository to allow parsing of\n conditional includes" + }, + { + "name": "force", + "type": "int", + "comment": "replace config file at the given priority level" + } + ], + "argline": "git_config *cfg, const char *path, git_config_level_t level, const git_repository *repo, int force", + "sig": "git_config *::const char *::git_config_level_t::const git_repository *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS when adding more than one file\n for a given priority level (and force_replace set to 0),\n GIT_ENOTFOUND when the file doesn't exist or error code" + }, + "description": "

Add an on-disk config file instance to an existing config

\n", + "comments": "

The on-disk file pointed at by path will be opened and parsed; it's expected to be a native Git config file following the default Git config syntax (see man git-config).

\n\n

If the file does not exist, the file will still be added and it will be created the first time we write to it.

\n\n

Note that the configuration object will free the file automatically.

\n\n

Further queries on this config object will access each of the config file instances in order (instances with a higher priority level will be accessed first).

\n", + "group": "config" + }, + "git_config_open_ondisk": { + "type": "function", + "file": "git2/config.h", + "line": 241, + "lineto": 241, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "The configuration instance to create" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to the on-disk file to open" + } + ], + "argline": "git_config **out, const char *path", + "sig": "git_config **::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Create a new config instance containing a single on-disk file

\n", + "comments": "

This method is a simple utility wrapper for the following sequence of calls: - git_config_new - git_config_add_file_ondisk

\n", + "group": "config", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_config_open_ondisk-26" + ] + } + }, + "git_config_open_level": { + "type": "function", + "file": "git2/config.h", + "line": 259, + "lineto": 262, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "The configuration instance to create" + }, + { + "name": "parent", + "type": "const git_config *", + "comment": "Multi-level config to search for the given level" + }, + { + "name": "level", + "type": "git_config_level_t", + "comment": "Configuration level to search for" + } + ], + "argline": "git_config **out, const git_config *parent, git_config_level_t level", + "sig": "git_config **::const git_config *::git_config_level_t", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the passed level cannot be found in the\n multi-level parent config, or an error code" + }, + "description": "

Build a single-level focused config object from a multi-level one.

\n", + "comments": "

The returned config object can be used to perform get/set/delete operations on a single specific level.

\n\n

Getting several times the same level from the same parent multi-level config will return different config instances, but containing the same config_file instance.

\n", + "group": "config" + }, + "git_config_open_global": { + "type": "function", + "file": "git2/config.h", + "line": 277, + "lineto": 277, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "pointer in which to store the config object" + }, + { + "name": "config", + "type": "git_config *", + "comment": "the config object in which to look" + } + ], + "argline": "git_config **out, git_config *config", + "sig": "git_config **::git_config *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Open the global/XDG configuration file according to git's rules

\n", + "comments": "

Git allows you to store your global configuration at $HOME/.gitconfig or $XDG_CONFIG_HOME/git/config. For backwards compatibility, the XDG file shouldn't be used unless the use has created it explicitly. With this function you'll open the correct one to write to.

\n", + "group": "config" + }, + "git_config_snapshot": { + "type": "function", + "file": "git2/config.h", + "line": 293, + "lineto": 293, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "pointer in which to store the snapshot config object" + }, + { + "name": "config", + "type": "git_config *", + "comment": "configuration to snapshot" + } + ], + "argline": "git_config **out, git_config *config", + "sig": "git_config **::git_config *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a snapshot of the configuration

\n", + "comments": "

Create a snapshot of the current state of a configuration, which allows you to look into a consistent view of the configuration for looking up complex values (e.g. a remote, submodule).

\n\n

The string returned when querying such a config object is valid until it is freed.

\n", + "group": "config" + }, + "git_config_free": { + "type": "function", + "file": "git2/config.h", + "line": 300, + "lineto": 300, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration to free" + } + ], + "argline": "git_config *cfg", + "sig": "git_config *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the configuration and its associated memory and files

\n", + "comments": "", + "group": "config", + "examples": { + "config.c": [ + "ex/v1.7.2/config.html#git_config_free-3" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_config_free-27", + "ex/v1.7.2/general.html#git_config_free-28" + ] + } + }, + "git_config_get_entry": { + "type": "function", + "file": "git2/config.h", + "line": 312, + "lineto": 315, + "args": [ + { + "name": "out", + "type": "git_config_entry **", + "comment": "pointer to the variable git_config_entry" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "git_config_entry **out, const git_config *cfg, const char *name", + "sig": "git_config_entry **::const git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the git_config_entry of a config variable.

\n", + "comments": "

Free the git_config_entry after use with git_config_entry_free().

\n", + "group": "config", + "examples": { + "config.c": [ + "ex/v1.7.2/config.html#git_config_get_entry-4" + ] + } + }, + "git_config_get_int32": { + "type": "function", + "file": "git2/config.h", + "line": 329, + "lineto": 329, + "args": [ + { + "name": "out", + "type": "int32_t *", + "comment": "pointer to the variable where the value should be stored" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "int32_t *out, const git_config *cfg, const char *name", + "sig": "int32_t *::const git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the value of an integer config variable.

\n", + "comments": "

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_config_get_int32-29", + "ex/v1.7.2/general.html#git_config_get_int32-30" + ] + } + }, + "git_config_get_int64": { + "type": "function", + "file": "git2/config.h", + "line": 343, + "lineto": 343, + "args": [ + { + "name": "out", + "type": "int64_t *", + "comment": "pointer to the variable where the value should be stored" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "int64_t *out, const git_config *cfg, const char *name", + "sig": "int64_t *::const git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the value of a long integer config variable.

\n", + "comments": "

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config" + }, + "git_config_get_bool": { + "type": "function", + "file": "git2/config.h", + "line": 360, + "lineto": 360, + "args": [ + { + "name": "out", + "type": "int *", + "comment": "pointer to the variable where the value should be stored" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "int *out, const git_config *cfg, const char *name", + "sig": "int *::const git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the value of a boolean config variable.

\n", + "comments": "

This function uses the usual C convention of 0 being false and anything else true.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config" + }, + "git_config_get_path": { + "type": "function", + "file": "git2/config.h", + "line": 378, + "lineto": 378, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer in which to store the result" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "git_buf *out, const git_config *cfg, const char *name", + "sig": "git_buf *::const git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the value of a path config variable.

\n", + "comments": "

A leading '~' will be expanded to the global search path (which defaults to the user's home directory but can be overridden via git_libgit2_opts().

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config" + }, + "git_config_get_string": { + "type": "function", + "file": "git2/config.h", + "line": 396, + "lineto": 396, + "args": [ + { + "name": "out", + "type": "const char **", + "comment": "pointer to the string" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "const char **out, const git_config *cfg, const char *name", + "sig": "const char **::const git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the value of a string config variable.

\n", + "comments": "

This function can only be used on snapshot config objects. The string is owned by the config and should not be freed by the user. The pointer will be valid until the config is freed.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_config_get_string-31", + "ex/v1.7.2/general.html#git_config_get_string-32" + ] + } + }, + "git_config_get_string_buf": { + "type": "function", + "file": "git2/config.h", + "line": 412, + "lineto": 412, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer in which to store the string" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "git_buf *out, const git_config *cfg, const char *name", + "sig": "git_buf *::const git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the value of a string config variable.

\n", + "comments": "

The value of the config will be copied into the buffer.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config" + }, + "git_config_get_multivar_foreach": { + "type": "function", + "file": "git2/config.h", + "line": 431, + "lineto": 431, + "args": [ + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to filter which variables we're\n interested in. Use NULL to indicate all" + }, + { + "name": "callback", + "type": "git_config_foreach_cb", + "comment": "the function to be called on each value of the variable" + }, + { + "name": "payload", + "type": "void *", + "comment": "opaque pointer to pass to the callback" + } + ], + "argline": "const git_config *cfg, const char *name, const char *regexp, git_config_foreach_cb callback, void *payload", + "sig": "const git_config *::const char *::const char *::git_config_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Get each value of a multivar in a foreach callback

\n", + "comments": "

The callback will be called on each variable found

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", + "group": "config" + }, + "git_config_multivar_iterator_new": { + "type": "function", + "file": "git2/config.h", + "line": 447, + "lineto": 447, + "args": [ + { + "name": "out", + "type": "git_config_iterator **", + "comment": "pointer to store the iterator" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to filter which variables we're\n interested in. Use NULL to indicate all" + } + ], + "argline": "git_config_iterator **out, const git_config *cfg, const char *name, const char *regexp", + "sig": "git_config_iterator **::const git_config *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Get each value of a multivar

\n", + "comments": "

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", + "group": "config" + }, + "git_config_next": { + "type": "function", + "file": "git2/config.h", + "line": 459, + "lineto": 459, + "args": [ + { + "name": "entry", + "type": "git_config_entry **", + "comment": "pointer to store the entry" + }, + { + "name": "iter", + "type": "git_config_iterator *", + "comment": "the iterator" + } + ], + "argline": "git_config_entry **entry, git_config_iterator *iter", + "sig": "git_config_entry **::git_config_iterator *", + "return": { + "type": "int", + "comment": " 0 or an error code. GIT_ITEROVER if the iteration has completed" + }, + "description": "

Return the current entry and advance the iterator

\n", + "comments": "

The pointers returned by this function are valid until the next call to git_config_next or until the iterator is freed.

\n", + "group": "config" + }, + "git_config_iterator_free": { + "type": "function", + "file": "git2/config.h", + "line": 466, + "lineto": 466, + "args": [ + { + "name": "iter", + "type": "git_config_iterator *", + "comment": "the iterator to free" + } + ], + "argline": "git_config_iterator *iter", + "sig": "git_config_iterator *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a config iterator

\n", + "comments": "", + "group": "config" + }, + "git_config_set_int32": { + "type": "function", + "file": "git2/config.h", + "line": 477, + "lineto": 477, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "value", + "type": "int32_t", + "comment": "Integer value for the variable" + } + ], + "argline": "git_config *cfg, const char *name, int32_t value", + "sig": "git_config *::const char *::int32_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Set the value of an integer config variable in the config file\n with the highest level (usually the local one).

\n", + "comments": "", + "group": "config" + }, + "git_config_set_int64": { + "type": "function", + "file": "git2/config.h", + "line": 488, + "lineto": 488, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "value", + "type": "int64_t", + "comment": "Long integer value for the variable" + } + ], + "argline": "git_config *cfg, const char *name, int64_t value", + "sig": "git_config *::const char *::int64_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Set the value of a long integer config variable in the config file\n with the highest level (usually the local one).

\n", + "comments": "", + "group": "config" + }, + "git_config_set_bool": { + "type": "function", + "file": "git2/config.h", + "line": 499, + "lineto": 499, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "value", + "type": "int", + "comment": "the value to store" + } + ], + "argline": "git_config *cfg, const char *name, int value", + "sig": "git_config *::const char *::int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Set the value of a boolean config variable in the config file\n with the highest level (usually the local one).

\n", + "comments": "", + "group": "config" + }, + "git_config_set_string": { + "type": "function", + "file": "git2/config.h", + "line": 513, + "lineto": 513, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "value", + "type": "const char *", + "comment": "the string to store." + } + ], + "argline": "git_config *cfg, const char *name, const char *value", + "sig": "git_config *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Set the value of a string config variable in the config file\n with the highest level (usually the local one).

\n", + "comments": "

A copy of the string is made and the user is free to use it afterwards.

\n", + "group": "config", + "examples": { + "config.c": [ + "ex/v1.7.2/config.html#git_config_set_string-5" + ] + } + }, + "git_config_set_multivar": { + "type": "function", + "file": "git2/config.h", + "line": 526, + "lineto": 526, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "a regular expression to indicate which values to replace" + }, + { + "name": "value", + "type": "const char *", + "comment": "the new value." + } + ], + "argline": "git_config *cfg, const char *name, const char *regexp, const char *value", + "sig": "git_config *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Set a multivar in the local config file.

\n", + "comments": "

The regular expression is applied case-sensitively on the value.

\n", + "group": "config" + }, + "git_config_delete_entry": { + "type": "function", + "file": "git2/config.h", + "line": 536, + "lineto": 536, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable to delete" + } + ], + "argline": "git_config *cfg, const char *name", + "sig": "git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Delete a config variable from the config file\n with the highest level (usually the local one).

\n", + "comments": "", + "group": "config" + }, + "git_config_delete_multivar": { + "type": "function", + "file": "git2/config.h", + "line": 549, + "lineto": 549, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variables" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "a regular expression to indicate which values to delete" + } + ], + "argline": "git_config *cfg, const char *name, const char *regexp", + "sig": "git_config *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Deletes one or several entries from a multivar in the local config file.

\n", + "comments": "

The regular expression is applied case-sensitively on the value.

\n", + "group": "config" + }, + "git_config_foreach": { + "type": "function", + "file": "git2/config.h", + "line": 567, + "lineto": 570, + "args": [ + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to get the variables from" + }, + { + "name": "callback", + "type": "git_config_foreach_cb", + "comment": "the function to call on each variable" + }, + { + "name": "payload", + "type": "void *", + "comment": "the data to pass to the callback" + } + ], + "argline": "const git_config *cfg, git_config_foreach_cb callback, void *payload", + "sig": "const git_config *::git_config_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Perform an operation on each config variable.

\n", + "comments": "

The callback receives the normalized name and value of each variable in the config backend, and the data pointer passed to this function. If the callback returns a non-zero value, the function stops iterating and returns that value to the caller.

\n\n

The pointers passed to the callback are only valid as long as the iteration is ongoing.

\n", + "group": "config" + }, + "git_config_iterator_new": { + "type": "function", + "file": "git2/config.h", + "line": 582, + "lineto": 582, + "args": [ + { + "name": "out", + "type": "git_config_iterator **", + "comment": "pointer to store the iterator" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to get the variables from" + } + ], + "argline": "git_config_iterator **out, const git_config *cfg", + "sig": "git_config_iterator **::const git_config *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Iterate over all the config variables

\n", + "comments": "

Use git_config_next to advance the iteration and git_config_iterator_free when done.

\n", + "group": "config" + }, + "git_config_iterator_glob_new": { + "type": "function", + "file": "git2/config.h", + "line": 599, + "lineto": 599, + "args": [ + { + "name": "out", + "type": "git_config_iterator **", + "comment": "pointer to store the iterator" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to ge the variables from" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to match the names" + } + ], + "argline": "git_config_iterator **out, const git_config *cfg, const char *regexp", + "sig": "git_config_iterator **::const git_config *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Iterate over all the config variables whose name matches a pattern

\n", + "comments": "

Use git_config_next to advance the iteration and git_config_iterator_free when done.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", + "group": "config" + }, + "git_config_foreach_match": { + "type": "function", + "file": "git2/config.h", + "line": 621, + "lineto": 625, + "args": [ + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to get the variables from" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to match against config names" + }, + { + "name": "callback", + "type": "git_config_foreach_cb", + "comment": "the function to call on each variable" + }, + { + "name": "payload", + "type": "void *", + "comment": "the data to pass to the callback" + } + ], + "argline": "const git_config *cfg, const char *regexp, git_config_foreach_cb callback, void *payload", + "sig": "const git_config *::const char *::git_config_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 or the return value of the callback which didn't return 0" + }, + "description": "

Perform an operation on each config variable matching a regular expression.

\n", + "comments": "

This behaves like git_config_foreach with an additional filter of a regular expression that filters which config keys are passed to the callback.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the case-insensitive parts are lower-case.

\n", + "group": "config" + }, + "git_config_get_mapped": { + "type": "function", + "file": "git2/config.h", + "line": 661, + "lineto": 666, + "args": [ + { + "name": "out", + "type": "int *", + "comment": "place to store the result of the mapping" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "config file to get the variables from" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the config variable to lookup" + }, + { + "name": "maps", + "type": "const git_configmap *", + "comment": "array of `git_configmap` objects specifying the possible mappings" + }, + { + "name": "map_n", + "type": "size_t", + "comment": "number of mapping objects in `maps`" + } + ], + "argline": "int *out, const git_config *cfg, const char *name, const git_configmap *maps, size_t map_n", + "sig": "int *::const git_config *::const char *::const git_configmap *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Query the value of a config variable and return it mapped to\n an integer constant.

\n", + "comments": "

This is a helper method to easily map different possible values to a variable to integer constants that easily identify them.

\n\n

A mapping array looks as follows:

\n\n
git_configmap autocrlf_mapping[] = {        {GIT_CVAR_FALSE, NULL, GIT_AUTO_CRLF_FALSE},        {GIT_CVAR_TRUE, NULL, GIT_AUTO_CRLF_TRUE},      {GIT_CVAR_STRING, "input", GIT_AUTO_CRLF_INPUT},        {GIT_CVAR_STRING, "default", GIT_AUTO_CRLF_DEFAULT}};\n
\n\n

On any "false" value for the variable (e.g. "false", "FALSE", "no"), the mapping will store GIT_AUTO_CRLF_FALSE in the out parameter.

\n\n

The same thing applies for any "true" value such as "true", "yes" or "1", storing the GIT_AUTO_CRLF_TRUE variable.

\n\n

Otherwise, if the value matches the string "input" (with case insensitive comparison), the given constant will be stored in out, and likewise for "default".

\n\n

If not a single match can be made to store in out, an error code will be returned.

\n", + "group": "config" + }, + "git_config_lookup_map_value": { + "type": "function", + "file": "git2/config.h", + "line": 677, + "lineto": 681, + "args": [ + { + "name": "out", + "type": "int *", + "comment": "place to store the result of the parsing" + }, + { + "name": "maps", + "type": "const git_configmap *", + "comment": "array of `git_configmap` objects specifying the possible mappings" + }, + { + "name": "map_n", + "type": "size_t", + "comment": "number of mapping objects in `maps`" + }, + { + "name": "value", + "type": "const char *", + "comment": "value to parse" + } + ], + "argline": "int *out, const git_configmap *maps, size_t map_n, const char *value", + "sig": "int *::const git_configmap *::size_t::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Maps a string value to an integer constant

\n", + "comments": "", + "group": "config" + }, + "git_config_parse_bool": { + "type": "function", + "file": "git2/config.h", + "line": 694, + "lineto": 694, + "args": [ + { + "name": "out", + "type": "int *", + "comment": "place to store the result of the parsing" + }, + { + "name": "value", + "type": "const char *", + "comment": "value to parse" + } + ], + "argline": "int *out, const char *value", + "sig": "int *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Parse a string value as a bool.

\n", + "comments": "

Valid values for true are: 'true', 'yes', 'on', 1 or any number different from 0 Valid values for false are: 'false', 'no', 'off', 0

\n", + "group": "config" + }, + "git_config_parse_int32": { + "type": "function", + "file": "git2/config.h", + "line": 707, + "lineto": 707, + "args": [ + { + "name": "out", + "type": "int32_t *", + "comment": "place to store the result of the parsing" + }, + { + "name": "value", + "type": "const char *", + "comment": "value to parse" + } + ], + "argline": "int32_t *out, const char *value", + "sig": "int32_t *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Parse a string value as an int32.

\n", + "comments": "

An optional value suffix of 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output.

\n", + "group": "config" + }, + "git_config_parse_int64": { + "type": "function", + "file": "git2/config.h", + "line": 720, + "lineto": 720, + "args": [ + { + "name": "out", + "type": "int64_t *", + "comment": "place to store the result of the parsing" + }, + { + "name": "value", + "type": "const char *", + "comment": "value to parse" + } + ], + "argline": "int64_t *out, const char *value", + "sig": "int64_t *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Parse a string value as an int64.

\n", + "comments": "

An optional value suffix of 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output.

\n", + "group": "config" + }, + "git_config_parse_path": { + "type": "function", + "file": "git2/config.h", + "line": 736, + "lineto": 736, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "placae to store the result of parsing" + }, + { + "name": "value", + "type": "const char *", + "comment": "the path to evaluate" + } + ], + "argline": "git_buf *out, const char *value", + "sig": "git_buf *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Parse a string value as a path.

\n", + "comments": "

A leading '~' will be expanded to the global search path (which defaults to the user's home directory but can be overridden via git_libgit2_opts().

\n\n

If the value does not begin with a tilde, the input will be returned.

\n", + "group": "config" + }, + "git_config_backend_foreach_match": { + "type": "function", + "file": "git2/config.h", + "line": 755, + "lineto": 759, + "args": [ + { + "name": "backend", + "type": "git_config_backend *", + "comment": "where to get the variables from" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to match against config names (can be NULL)" + }, + { + "name": "callback", + "type": "git_config_foreach_cb", + "comment": "the function to call on each variable" + }, + { + "name": "payload", + "type": "void *", + "comment": "the data to pass to the callback" + } + ], + "argline": "git_config_backend *backend, const char *regexp, git_config_foreach_cb callback, void *payload", + "sig": "git_config_backend *::const char *::git_config_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Perform an operation on each config variable in a given config backend,\n matching a regular expression.

\n", + "comments": "

This behaves like git_config_foreach_match except that only config entries from the given backend entry are enumerated.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", + "group": "config" + }, + "git_config_lock": { + "type": "function", + "file": "git2/config.h", + "line": 778, + "lineto": 778, + "args": [ + { + "name": "tx", + "type": "git_transaction **", + "comment": "the resulting transaction, use this to commit or undo the\n changes" + }, + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration in which to lock" + } + ], + "argline": "git_transaction **tx, git_config *cfg", + "sig": "git_transaction **::git_config *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lock the backend with the highest priority

\n", + "comments": "

Locking disallows anybody else from writing to that backend. Any updates made after locking will not be visible to a reader until the file is unlocked.

\n\n

You can apply the changes by calling git_transaction_commit() before freeing the transaction. Either of these actions will unlock the config.

\n", + "group": "config" + }, + "git_credential_free": { + "type": "function", + "file": "git2/credential.h", + "line": 146, + "lineto": 146, + "args": [ + { + "name": "cred", + "type": "git_credential *", + "comment": "the object to free" + } + ], + "argline": "git_credential *cred", + "sig": "git_credential *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a credential.

\n", + "comments": "

This is only necessary if you own the object; that is, if you are a transport.

\n", + "group": "credential" + }, + "git_credential_has_username": { + "type": "function", + "file": "git2/credential.h", + "line": 154, + "lineto": 154, + "args": [ + { + "name": "cred", + "type": "git_credential *", + "comment": "object to check" + } + ], + "argline": "git_credential *cred", + "sig": "git_credential *", + "return": { + "type": "int", + "comment": " 1 if the credential object has non-NULL username, 0 otherwise" + }, + "description": "

Check whether a credential object contains username information.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_get_username": { + "type": "function", + "file": "git2/credential.h", + "line": 162, + "lineto": 162, + "args": [ + { + "name": "cred", + "type": "git_credential *", + "comment": "object to check" + } + ], + "argline": "git_credential *cred", + "sig": "git_credential *", + "return": { + "type": "const char *", + "comment": " the credential username, or NULL if not applicable" + }, + "description": "

Return the username associated with a credential object.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_userpass_plaintext_new": { + "type": "function", + "file": "git2/credential.h", + "line": 173, + "lineto": 176, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "The username of the credential." + }, + { + "name": "password", + "type": "const char *", + "comment": "The password of the credential." + } + ], + "argline": "git_credential **out, const char *username, const char *password", + "sig": "git_credential **::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a new plain-text username and password credential object.\n The supplied credential parameter will be internally duplicated.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_default_new": { + "type": "function", + "file": "git2/credential.h", + "line": 185, + "lineto": 185, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + } + ], + "argline": "git_credential **out", + "sig": "git_credential **", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a "default" credential usable for Negotiate mechanisms like NTLM\n or Kerberos authentication.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_username_new": { + "type": "function", + "file": "git2/credential.h", + "line": 197, + "lineto": 197, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "The username to authenticate with" + } + ], + "argline": "git_credential **out, const char *username", + "sig": "git_credential **::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a credential to specify a username.

\n", + "comments": "

This is used with ssh authentication to query for the username if none is specified in the url.

\n", + "group": "credential" + }, + "git_credential_ssh_key_new": { + "type": "function", + "file": "git2/credential.h", + "line": 210, + "lineto": 215, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "username to use to authenticate" + }, + { + "name": "publickey", + "type": "const char *", + "comment": "The path to the public key of the credential." + }, + { + "name": "privatekey", + "type": "const char *", + "comment": "The path to the private key of the credential." + }, + { + "name": "passphrase", + "type": "const char *", + "comment": "The passphrase of the credential." + } + ], + "argline": "git_credential **out, const char *username, const char *publickey, const char *privatekey, const char *passphrase", + "sig": "git_credential **::const char *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a new passphrase-protected ssh key credential object.\n The supplied credential parameter will be internally duplicated.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_ssh_key_memory_new": { + "type": "function", + "file": "git2/credential.h", + "line": 227, + "lineto": 232, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "username to use to authenticate." + }, + { + "name": "publickey", + "type": "const char *", + "comment": "The public key of the credential." + }, + { + "name": "privatekey", + "type": "const char *", + "comment": "The private key of the credential." + }, + { + "name": "passphrase", + "type": "const char *", + "comment": "The passphrase of the credential." + } + ], + "argline": "git_credential **out, const char *username, const char *publickey, const char *privatekey, const char *passphrase", + "sig": "git_credential **::const char *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a new ssh key credential object reading the keys from memory.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_ssh_interactive_new": { + "type": "function", + "file": "git2/credential.h", + "line": 263, + "lineto": 267, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "Username to use to authenticate." + }, + { + "name": "prompt_callback", + "type": "git_credential_ssh_interactive_cb", + "comment": "The callback method used for prompts." + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback." + } + ], + "argline": "git_credential **out, const char *username, git_credential_ssh_interactive_cb prompt_callback, void *payload", + "sig": "git_credential **::const char *::git_credential_ssh_interactive_cb::void *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure." + }, + "description": "

Create a new ssh keyboard-interactive based credential object.\n The supplied credential parameter will be internally duplicated.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_ssh_key_from_agent": { + "type": "function", + "file": "git2/credential.h", + "line": 277, + "lineto": 279, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "username to use to authenticate" + } + ], + "argline": "git_credential **out, const char *username", + "sig": "git_credential **::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a new ssh key credential object used for querying an ssh-agent.\n The supplied credential parameter will be internally duplicated.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_ssh_custom_new": { + "type": "function", + "file": "git2/credential.h", + "line": 305, + "lineto": 311, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "username to use to authenticate" + }, + { + "name": "publickey", + "type": "const char *", + "comment": "The bytes of the public key." + }, + { + "name": "publickey_len", + "type": "size_t", + "comment": "The length of the public key in bytes." + }, + { + "name": "sign_callback", + "type": "git_credential_sign_cb", + "comment": "The callback method to sign the data during the challenge." + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback." + } + ], + "argline": "git_credential **out, const char *username, const char *publickey, size_t publickey_len, git_credential_sign_cb sign_callback, void *payload", + "sig": "git_credential **::const char *::const char *::size_t::git_credential_sign_cb::void *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create an ssh key credential with a custom signing function.

\n", + "comments": "

This lets you use your own function to sign the challenge.

\n\n

This function and its credential type is provided for completeness and wraps libssh2_userauth_publickey(), which is undocumented.

\n\n

The supplied credential parameter will be internally duplicated.

\n", + "group": "credential" + }, + "git_credential_userpass": { + "type": "function", + "file": "git2/credential_helpers.h", + "line": 44, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "url", + "type": "const char *", + "comment": "The resource for which we are demanding a credential." + }, + { + "name": "user_from_url", + "type": "const char *", + "comment": "The username that was embedded in a \"user\n@\nhost\"\n remote url, or NULL if not included." + }, + { + "name": "allowed_types", + "type": "unsigned int", + "comment": "A bitmask stating which credential types are OK to return." + }, + { + "name": "payload", + "type": "void *", + "comment": "The payload provided when specifying this callback. (This is\n interpreted as a `git_credential_userpass_payload*`.)" + } + ], + "argline": "git_credential **out, const char *url, const char *user_from_url, unsigned int allowed_types, void *payload", + "sig": "git_credential **::const char *::const char *::unsigned int::void *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Stock callback usable as a git_credential_acquire_cb. This calls\n git_cred_userpass_plaintext_new unless the protocol has not specified\n GIT_CREDENTIAL_USERPASS_PLAINTEXT as an allowed type.

\n", + "comments": "", + "group": "credential" + }, + "git_blob_filtered_content": { + "type": "function", + "file": "git2/deprecated.h", + "line": 115, + "lineto": 119, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": null + }, + { + "name": "blob", + "type": "git_blob *", + "comment": null + }, + { + "name": "as_path", + "type": "const char *", + "comment": null + }, + { + "name": "check_for_binary_data", + "type": "int", + "comment": null + } + ], + "argline": "git_buf *out, git_blob *blob, const char *as_path, int check_for_binary_data", + "sig": "git_buf *::git_blob *::const char *::int", + "return": { + "type": "int", + "comment": null + }, + "description": "

Deprecated in favor of git_blob_filter.

\n", + "comments": "", + "group": "blob" + }, + "git_filter_list_stream_data": { + "type": "function", + "file": "git2/deprecated.h", + "line": 139, + "lineto": 142, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": null + }, + { + "name": "data", + "type": "git_buf *", + "comment": null + }, + { + "name": "target", + "type": "git_writestream *", + "comment": null + } + ], + "argline": "git_filter_list *filters, git_buf *data, git_writestream *target", + "sig": "git_filter_list *::git_buf *::git_writestream *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Deprecated in favor of git_filter_list_stream_buffer.

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_apply_to_data": { + "type": "function", + "file": "git2/deprecated.h", + "line": 149, + "lineto": 152, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": null + }, + { + "name": "filters", + "type": "git_filter_list *", + "comment": null + }, + { + "name": "in", + "type": "git_buf *", + "comment": null + } + ], + "argline": "git_buf *out, git_filter_list *filters, git_buf *in", + "sig": "git_buf *::git_filter_list *::git_buf *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Deprecated in favor of git_filter_list_apply_to_buffer.

\n", + "comments": "", + "group": "filter" + }, + "git_treebuilder_write_with_buffer": { + "type": "function", + "file": "git2/deprecated.h", + "line": 178, + "lineto": 179, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": null + }, + { + "name": "bld", + "type": "git_treebuilder *", + "comment": null + }, + { + "name": "tree", + "type": "git_buf *", + "comment": null + } + ], + "argline": "git_oid *oid, git_treebuilder *bld, git_buf *tree", + "sig": "git_oid *::git_treebuilder *::git_buf *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Write the contents of the tree builder as a tree object.\n This is an alias of git_treebuilder_write and is preserved\n for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "treebuilder" + }, + "git_buf_grow": { + "type": "function", + "file": "git2/deprecated.h", + "line": 220, + "lineto": 220, + "args": [ + { + "name": "buffer", + "type": "git_buf *", + "comment": "The buffer to be resized; may or may not be allocated yet" + }, + { + "name": "target_size", + "type": "size_t", + "comment": "The desired available size" + } + ], + "argline": "git_buf *buffer, size_t target_size", + "sig": "git_buf *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, -1 on allocation failure" + }, + "description": "

Resize the buffer allocation to make more space.

\n", + "comments": "

This will attempt to grow the buffer to accommodate the target size.

\n\n

If the buffer refers to memory that was not allocated by libgit2 (i.e. the asize field is zero), then ptr will be replaced with a newly allocated block of data. Be careful so that memory allocated by the caller is not lost. As a special variant, if you pass target_size as 0 and the memory is not allocated by libgit2, this will allocate a new buffer of size size and copy the external data into it.

\n\n

Currently, this will never shrink a buffer, only expand it.

\n\n

If the allocation fails, this will return an error and the buffer will be marked as invalid for future operations, invaliding the contents.

\n", + "group": "buf" + }, + "git_buf_set": { + "type": "function", + "file": "git2/deprecated.h", + "line": 230, + "lineto": 231, + "args": [ + { + "name": "buffer", + "type": "git_buf *", + "comment": "The buffer to set" + }, + { + "name": "data", + "type": "const void *", + "comment": "The data to copy into the buffer" + }, + { + "name": "datalen", + "type": "size_t", + "comment": "The length of the data to copy into the buffer" + } + ], + "argline": "git_buf *buffer, const void *data, size_t datalen", + "sig": "git_buf *::const void *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, -1 on allocation failure" + }, + "description": "

Set buffer to a copy of some raw data.

\n", + "comments": "", + "group": "buf" + }, + "git_buf_is_binary": { + "type": "function", + "file": "git2/deprecated.h", + "line": 239, + "lineto": 239, + "args": [ + { + "name": "buf", + "type": "const git_buf *", + "comment": "Buffer to check" + } + ], + "argline": "const git_buf *buf", + "sig": "const git_buf *", + "return": { + "type": "int", + "comment": " 1 if buffer looks like non-text data" + }, + "description": "

Check quickly if buffer looks like it contains binary data

\n", + "comments": "", + "group": "buf" + }, + "git_buf_contains_nul": { + "type": "function", + "file": "git2/deprecated.h", + "line": 247, + "lineto": 247, + "args": [ + { + "name": "buf", + "type": "const git_buf *", + "comment": "Buffer to check" + } + ], + "argline": "const git_buf *buf", + "sig": "const git_buf *", + "return": { + "type": "int", + "comment": " 1 if buffer contains a NUL byte" + }, + "description": "

Check quickly if buffer contains a NUL byte

\n", + "comments": "", + "group": "buf" + }, + "git_buf_free": { + "type": "function", + "file": "git2/deprecated.h", + "line": 259, + "lineto": 259, + "args": [ + { + "name": "buffer", + "type": "git_buf *", + "comment": null + } + ], + "argline": "git_buf *buffer", + "sig": "git_buf *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the memory referred to by the git_buf. This is an alias of\n git_buf_dispose and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "buf" + }, + "git_diff_format_email": { + "type": "function", + "file": "git2/deprecated.h", + "line": 357, + "lineto": 360, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": null + }, + { + "name": "diff", + "type": "git_diff *", + "comment": null + }, + { + "name": "opts", + "type": "const git_diff_format_email_options *", + "comment": null + } + ], + "argline": "git_buf *out, git_diff *diff, const git_diff_format_email_options *opts", + "sig": "git_buf *::git_diff *::const git_diff_format_email_options *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Create an e-mail ready patch from a diff.

\n", + "comments": "", + "group": "diff" + }, + "git_diff_commit_as_email": { + "type": "function", + "file": "git2/deprecated.h", + "line": 368, + "lineto": 375, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": null + }, + { + "name": "repo", + "type": "git_repository *", + "comment": null + }, + { + "name": "commit", + "type": "git_commit *", + "comment": null + }, + { + "name": "patch_no", + "type": "size_t", + "comment": null + }, + { + "name": "total_patches", + "type": "size_t", + "comment": null + }, + { + "name": "flags", + "type": "uint32_t", + "comment": null + }, + { + "name": "diff_opts", + "type": "const git_diff_options *", + "comment": null + } + ], + "argline": "git_buf *out, git_repository *repo, git_commit *commit, size_t patch_no, size_t total_patches, uint32_t flags, const git_diff_options *diff_opts", + "sig": "git_buf *::git_repository *::git_commit *::size_t::size_t::uint32_t::const git_diff_options *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Create an e-mail ready patch for a commit.

\n", + "comments": "", + "group": "diff" + }, + "git_diff_format_email_options_init": { + "type": "function", + "file": "git2/deprecated.h", + "line": 387, + "lineto": 389, + "args": [ + { + "name": "opts", + "type": "git_diff_format_email_options *", + "comment": "The `git_blame_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION`." + } + ], + "argline": "git_diff_format_email_options *opts, unsigned int version", + "sig": "git_diff_format_email_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_diff_format_email_options structure

\n", + "comments": "

Initializes a git_diff_format_email_options with default values. Equivalent to creating an instance with GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT.

\n", + "group": "diff" + }, + "giterr_last": { + "type": "function", + "file": "git2/deprecated.h", + "line": 452, + "lineto": 452, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "const git_error *", + "comment": null + }, + "description": "

Return the last git_error object that was generated for the\n current thread. This is an alias of git_error_last and is\n preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "giterr" + }, + "giterr_clear": { + "type": "function", + "file": "git2/deprecated.h", + "line": 464, + "lineto": 464, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "void", + "comment": null + }, + "description": "

Clear the last error. This is an alias of git_error_last and is\n preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "giterr" + }, + "giterr_set_str": { + "type": "function", + "file": "git2/deprecated.h", + "line": 476, + "lineto": 476, + "args": [ + { + "name": "error_class", + "type": "int", + "comment": null + }, + { + "name": "string", + "type": "const char *", + "comment": null + } + ], + "argline": "int error_class, const char *string", + "sig": "int::const char *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Sets the error message to the given string. This is an alias of\n git_error_set_str and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "giterr" + }, + "giterr_set_oom": { + "type": "function", + "file": "git2/deprecated.h", + "line": 488, + "lineto": 488, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "void", + "comment": null + }, + "description": "

Indicates that an out-of-memory situation occurred. This is an alias\n of git_error_set_oom and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "giterr" + }, + "git_object__size": { + "type": "function", + "file": "git2/deprecated.h", + "line": 578, + "lineto": 578, + "args": [ + { + "name": "type", + "type": "git_object_t", + "comment": "object type to get its size" + } + ], + "argline": "git_object_t type", + "sig": "git_object_t", + "return": { + "type": "size_t", + "comment": " size in bytes of the object" + }, + "description": "

Get the size in bytes for the structure which\n acts as an in-memory representation of any given\n object type.

\n", + "comments": "

For all the core types, this would the equivalent of calling sizeof(git_commit) if the core types were not opaque on the external API.

\n", + "group": "object" + }, + "git_remote_is_valid_name": { + "type": "function", + "file": "git2/deprecated.h", + "line": 599, + "lineto": 599, + "args": [ + { + "name": "remote_name", + "type": "const char *", + "comment": "name to be checked." + } + ], + "argline": "const char *remote_name", + "sig": "const char *", + "return": { + "type": "int", + "comment": " 1 if the reference name is acceptable; 0 if it isn't" + }, + "description": "

Ensure the remote name is well-formed.

\n", + "comments": "", + "group": "remote" + }, + "git_reference_is_valid_name": { + "type": "function", + "file": "git2/deprecated.h", + "line": 643, + "lineto": 643, + "args": [ + { + "name": "refname", + "type": "const char *", + "comment": "name to be checked." + } + ], + "argline": "const char *refname", + "sig": "const char *", + "return": { + "type": "int", + "comment": " 1 if the reference name is acceptable; 0 if it isn't" + }, + "description": "

Ensure the reference name is well-formed.

\n", + "comments": "

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n", + "group": "reference" + }, + "git_oidarray_free": { + "type": "function", + "file": "git2/deprecated.h", + "line": 810, + "lineto": 810, + "args": [ + { + "name": "array", + "type": "git_oidarray *", + "comment": null + } + ], + "argline": "git_oidarray *array", + "sig": "git_oidarray *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the memory referred to by the git_oidarray. This is an alias of\n git_oidarray_dispose and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "oidarray" + }, + "git_strarray_copy": { + "type": "function", + "file": "git2/deprecated.h", + "line": 879, + "lineto": 879, + "args": [ + { + "name": "tgt", + "type": "git_strarray *", + "comment": "target" + }, + { + "name": "src", + "type": "const git_strarray *", + "comment": "source" + } + ], + "argline": "git_strarray *tgt, const git_strarray *src", + "sig": "git_strarray *::const git_strarray *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n 0 on allocation failure" + }, + "description": "

Copy a string array object from source to target.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "strarray" + }, + "git_strarray_free": { + "type": "function", + "file": "git2/deprecated.h", + "line": 891, + "lineto": 891, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": null + } + ], + "argline": "git_strarray *array", + "sig": "git_strarray *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the memory referred to by the git_strarray. This is an alias of\n git_strarray_dispose and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "strarray" + }, + "git_blame_init_options": { + "type": "function", + "file": "git2/deprecated.h", + "line": 905, + "lineto": 905, + "args": [ + { + "name": "opts", + "type": "git_blame_options *", + "comment": null + }, + { + "name": "version", + "type": "unsigned int", + "comment": null + } + ], + "argline": "git_blame_options *opts, unsigned int version", + "sig": "git_blame_options *::unsigned int", + "return": { + "type": "int", + "comment": null + }, + "description": "", + "comments": "

These functions are retained for backward compatibility. The newer versions of these functions should be preferred in all new code.

\n\n

There is no plan to remove these backward compatibility functions at this time.

\n\n

@{

\n", + "group": "blame" + }, + "git_describe_options_init": { + "type": "function", + "file": "git2/describe.h", + "line": 82, + "lineto": 82, + "args": [ + { + "name": "opts", + "type": "git_describe_options *", + "comment": "The `git_describe_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DESCRIBE_OPTIONS_VERSION`." + } + ], + "argline": "git_describe_options *opts, unsigned int version", + "sig": "git_describe_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_describe_options structure

\n", + "comments": "

Initializes a git_describe_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_OPTIONS_INIT.

\n", + "group": "describe", + "examples": { + "describe.c": [ + "ex/v1.7.2/describe.html#git_describe_options_init-1" + ] + } + }, + "git_describe_format_options_init": { + "type": "function", + "file": "git2/describe.h", + "line": 129, + "lineto": 129, + "args": [ + { + "name": "opts", + "type": "git_describe_format_options *", + "comment": "The `git_describe_format_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DESCRIBE_FORMAT_OPTIONS_VERSION`." + } + ], + "argline": "git_describe_format_options *opts, unsigned int version", + "sig": "git_describe_format_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_describe_format_options structure

\n", + "comments": "

Initializes a git_describe_format_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_FORMAT_OPTIONS_INIT.

\n", + "group": "describe", + "examples": { + "describe.c": [ + "ex/v1.7.2/describe.html#git_describe_format_options_init-2" + ] + } + }, + "git_describe_commit": { + "type": "function", + "file": "git2/describe.h", + "line": 147, + "lineto": 150, + "args": [ + { + "name": "result", + "type": "git_describe_result **", + "comment": "pointer to store the result. You must free this once\n you're done with it." + }, + { + "name": "committish", + "type": "git_object *", + "comment": "a committish to describe" + }, + { + "name": "opts", + "type": "git_describe_options *", + "comment": "the lookup options (or NULL for defaults)" + } + ], + "argline": "git_describe_result **result, git_object *committish, git_describe_options *opts", + "sig": "git_describe_result **::git_object *::git_describe_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Describe a commit

\n", + "comments": "

Perform the describe operation on the given committish object.

\n", + "group": "describe", + "examples": { + "describe.c": [ + "ex/v1.7.2/describe.html#git_describe_commit-3" + ] + } + }, + "git_describe_workdir": { + "type": "function", + "file": "git2/describe.h", + "line": 165, + "lineto": 168, + "args": [ + { + "name": "out", + "type": "git_describe_result **", + "comment": "pointer to store the result. You must free this once\n you're done with it." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the describe" + }, + { + "name": "opts", + "type": "git_describe_options *", + "comment": "the lookup options (or NULL for defaults)" + } + ], + "argline": "git_describe_result **out, git_repository *repo, git_describe_options *opts", + "sig": "git_describe_result **::git_repository *::git_describe_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Describe a commit

\n", + "comments": "

Perform the describe operation on the current commit and the worktree. After performing describe on HEAD, a status is run and the description is considered to be dirty if there are.

\n", + "group": "describe", + "examples": { + "describe.c": [ + "ex/v1.7.2/describe.html#git_describe_workdir-4" + ] + } + }, + "git_describe_format": { + "type": "function", + "file": "git2/describe.h", + "line": 179, + "lineto": 182, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The buffer to store the result" + }, + { + "name": "result", + "type": "const git_describe_result *", + "comment": "the result from `git_describe_commit()` or\n `git_describe_workdir()`." + }, + { + "name": "opts", + "type": "const git_describe_format_options *", + "comment": "the formatting options (or NULL for defaults)" + } + ], + "argline": "git_buf *out, const git_describe_result *result, const git_describe_format_options *opts", + "sig": "git_buf *::const git_describe_result *::const git_describe_format_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Print the describe result to a buffer

\n", + "comments": "", + "group": "describe", + "examples": { + "describe.c": [ + "ex/v1.7.2/describe.html#git_describe_format-5" + ] + } + }, + "git_describe_result_free": { + "type": "function", + "file": "git2/describe.h", + "line": 189, + "lineto": 189, + "args": [ + { + "name": "result", + "type": "git_describe_result *", + "comment": "The result to free." + } + ], + "argline": "git_describe_result *result", + "sig": "git_describe_result *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the describe result.

\n", + "comments": "", + "group": "describe" + }, + "git_diff_options_init": { + "type": "function", + "file": "git2/diff.h", + "line": 485, + "lineto": 487, + "args": [ + { + "name": "opts", + "type": "git_diff_options *", + "comment": "The `git_diff_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DIFF_OPTIONS_VERSION`." + } + ], + "argline": "git_diff_options *opts, unsigned int version", + "sig": "git_diff_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_diff_options structure

\n", + "comments": "

Initializes a git_diff_options with default values. Equivalent to creating an instance with GIT_DIFF_OPTIONS_INIT.

\n", + "group": "diff" + }, + "git_diff_find_options_init": { + "type": "function", + "file": "git2/diff.h", + "line": 818, + "lineto": 820, + "args": [ + { + "name": "opts", + "type": "git_diff_find_options *", + "comment": "The `git_diff_find_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DIFF_FIND_OPTIONS_VERSION`." + } + ], + "argline": "git_diff_find_options *opts, unsigned int version", + "sig": "git_diff_find_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_diff_find_options structure

\n", + "comments": "

Initializes a git_diff_find_options with default values. Equivalent to creating an instance with GIT_DIFF_FIND_OPTIONS_INIT.

\n", + "group": "diff" + }, + "git_diff_free": { + "type": "function", + "file": "git2/diff.h", + "line": 834, + "lineto": 834, + "args": [ + { + "name": "diff", + "type": "git_diff *", + "comment": "The previously created diff; cannot be used after free." + } + ], + "argline": "git_diff *diff", + "sig": "git_diff *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Deallocate a diff.

\n", + "comments": "", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_free-3" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_diff_free-25", + "ex/v1.7.2/log.html#git_diff_free-26" + ] + } + }, + "git_diff_tree_to_tree": { + "type": "function", + "file": "git2/diff.h", + "line": 853, + "lineto": 858, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "Output pointer to a git_diff pointer to be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the trees." + }, + { + "name": "old_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff from, or NULL for empty tree." + }, + { + "name": "new_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff to, or NULL for empty tree." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, git_tree *new_tree, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_tree *::git_tree *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Create a diff with the difference between two tree objects.

\n", + "comments": "

This is equivalent to git diff <old-tree> <new-tree>

\n\n

The first tree will be used for the "old_file" side of the delta and the second tree will be used for the "new_file" side of the delta. You can pass NULL to indicate an empty tree, although it is an error to pass NULL for both the old_tree and new_tree.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_tree_to_tree-4" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_diff_tree_to_tree-27", + "ex/v1.7.2/log.html#git_diff_tree_to_tree-28" + ] + } + }, + "git_diff_tree_to_index": { + "type": "function", + "file": "git2/diff.h", + "line": 880, + "lineto": 885, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "Output pointer to a git_diff pointer to be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the tree and index." + }, + { + "name": "old_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff from, or NULL for empty tree." + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to diff with; repo index used if NULL." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, git_index *index, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_tree *::git_index *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Create a diff between a tree and repository index.

\n", + "comments": "

This is equivalent to git diff --cached <treeish> or if you pass the HEAD tree, then like git diff --cached.

\n\n

The tree you pass will be used for the "old_file" side of the delta, and the index will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_tree_to_index-5" + ] + } + }, + "git_diff_index_to_workdir": { + "type": "function", + "file": "git2/diff.h", + "line": 908, + "lineto": 912, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "Output pointer to a git_diff pointer to be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository." + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to diff from; repo index used if NULL." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_index *index, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_index *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Create a diff between the repository index and the workdir directory.

\n", + "comments": "

This matches the git diff command. See the note below on git_diff_tree_to_workdir for a discussion of the difference between git diff and git diff HEAD and how to emulate a git diff <treeish> using libgit2.

\n\n

The index will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_index_to_workdir-6" + ] + } + }, + "git_diff_tree_to_workdir": { + "type": "function", + "file": "git2/diff.h", + "line": 938, + "lineto": 942, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "A pointer to a git_diff pointer that will be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the tree." + }, + { + "name": "old_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff from, or NULL for empty tree." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_tree *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Create a diff between a tree and the working directory.

\n", + "comments": "

The tree you provide will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side.

\n\n

This is not the same as git diff <treeish> or git diff-index <treeish>. Those commands use information from the index, whereas this function strictly returns the differences between the tree and the files in the working directory, regardless of the state of the index. Use git_diff_tree_to_workdir_with_index to emulate those commands.

\n\n

To see difference between this and git_diff_tree_to_workdir_with_index, consider the example of a staged file deletion where the file has then been put back into the working dir and further modified. The tree-to-workdir diff for that file is 'modified', but git diff would show status 'deleted' since there is a staged delete.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_tree_to_workdir-7" + ] + } + }, + "git_diff_tree_to_workdir_with_index": { + "type": "function", + "file": "git2/diff.h", + "line": 958, + "lineto": 962, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "A pointer to a git_diff pointer that will be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the tree." + }, + { + "name": "old_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff from, or NULL for empty tree." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_tree *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Create a diff between a tree and the working directory using index data\n to account for staged deletes, tracked files, etc.

\n", + "comments": "

This emulates git diff <tree> by diffing the tree to the index and the index to the working directory and blending the results into a single diff that includes staged deleted, etc.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_tree_to_workdir_with_index-8" + ] + } + }, + "git_diff_index_to_index": { + "type": "function", + "file": "git2/diff.h", + "line": 977, + "lineto": 982, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "Output pointer to a git_diff pointer to be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the indexes." + }, + { + "name": "old_index", + "type": "git_index *", + "comment": "A git_index object to diff from." + }, + { + "name": "new_index", + "type": "git_index *", + "comment": "A git_index object to diff to." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_index *old_index, git_index *new_index, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_index *::git_index *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Create a diff with the difference between two index objects.

\n", + "comments": "

The first index will be used for the "old_file" side of the delta and the second index will be used for the "new_file" side of the delta.

\n", + "group": "diff" + }, + "git_diff_merge": { + "type": "function", + "file": "git2/diff.h", + "line": 998, + "lineto": 1000, + "args": [ + { + "name": "onto", + "type": "git_diff *", + "comment": "Diff to merge into." + }, + { + "name": "from", + "type": "const git_diff *", + "comment": "Diff to merge." + } + ], + "argline": "git_diff *onto, const git_diff *from", + "sig": "git_diff *::const git_diff *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Merge one diff into another.

\n", + "comments": "

This merges items from the "from" list into the "onto" list. The resulting diff will have all items that appear in either list. If an item appears in both lists, then it will be "merged" to appear as if the old version was from the "onto" list and the new version is from the "from" list (with the exception that if the item has a pending DELETE in the middle, then it will show as deleted).

\n", + "group": "diff" + }, + "git_diff_find_similar": { + "type": "function", + "file": "git2/diff.h", + "line": 1014, + "lineto": 1016, + "args": [ + { + "name": "diff", + "type": "git_diff *", + "comment": "diff to run detection algorithms on" + }, + { + "name": "options", + "type": "const git_diff_find_options *", + "comment": "Control how detection should be run, NULL for defaults" + } + ], + "argline": "git_diff *diff, const git_diff_find_options *options", + "sig": "git_diff *::const git_diff_find_options *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on failure" + }, + "description": "

Transform a diff marking file renames, copies, etc.

\n", + "comments": "

This modifies a diff in place, replacing old entries that look like renames or copies with new entries reflecting those changes. This also will, if requested, break modified files into add/remove pairs if the amount of change is above a threshold.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_find_similar-9" + ] + } + }, + "git_diff_num_deltas": { + "type": "function", + "file": "git2/diff.h", + "line": 1034, + "lineto": 1034, + "args": [ + { + "name": "diff", + "type": "const git_diff *", + "comment": "A git_diff generated by one of the above functions" + } + ], + "argline": "const git_diff *diff", + "sig": "const git_diff *", + "return": { + "type": "size_t", + "comment": " Count of number of deltas in the list" + }, + "description": "

Query how many diff records are there in a diff.

\n", + "comments": "", + "group": "diff", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_diff_num_deltas-29" + ] + } + }, + "git_diff_num_deltas_of_type": { + "type": "function", + "file": "git2/diff.h", + "line": 1047, + "lineto": 1048, + "args": [ + { + "name": "diff", + "type": "const git_diff *", + "comment": "A git_diff generated by one of the above functions" + }, + { + "name": "type", + "type": "git_delta_t", + "comment": "A git_delta_t value to filter the count" + } + ], + "argline": "const git_diff *diff, git_delta_t type", + "sig": "const git_diff *::git_delta_t", + "return": { + "type": "size_t", + "comment": " Count of number of deltas matching delta_t type" + }, + "description": "

Query how many diff deltas are there in a diff filtered by type.

\n", + "comments": "

This works just like git_diff_num_deltas() with an extra parameter that is a git_delta_t and returns just the count of how many deltas match that particular type.

\n", + "group": "diff" + }, + "git_diff_get_delta": { + "type": "function", + "file": "git2/diff.h", + "line": 1067, + "lineto": 1068, + "args": [ + { + "name": "diff", + "type": "const git_diff *", + "comment": "Diff list object" + }, + { + "name": "idx", + "type": "size_t", + "comment": "Index into diff list" + } + ], + "argline": "const git_diff *diff, size_t idx", + "sig": "const git_diff *::size_t", + "return": { + "type": "const git_diff_delta *", + "comment": " Pointer to git_diff_delta (or NULL if `idx` out of range)" + }, + "description": "

Return the diff delta for an entry in the diff list.

\n", + "comments": "

The git_diff_delta pointer points to internal data and you do not have to release it when you are done with it. It will go away when the * git_diff (or any associated git_patch) goes away.

\n\n

Note that the flags on the delta related to whether it has binary content or not may not be set if there are no attributes set for the file and there has been no reason to load the file data at this point. For now, if you need those flags to be up to date, your only option is to either use git_diff_foreach or create a git_patch.

\n", + "group": "diff" + }, + "git_diff_is_sorted_icase": { + "type": "function", + "file": "git2/diff.h", + "line": 1076, + "lineto": 1076, + "args": [ + { + "name": "diff", + "type": "const git_diff *", + "comment": "diff to check" + } + ], + "argline": "const git_diff *diff", + "sig": "const git_diff *", + "return": { + "type": "int", + "comment": " 0 if case sensitive, 1 if case is ignored" + }, + "description": "

Check if deltas are sorted case sensitively or insensitively.

\n", + "comments": "", + "group": "diff" + }, + "git_diff_foreach": { + "type": "function", + "file": "git2/diff.h", + "line": 1104, + "lineto": 1110, + "args": [ + { + "name": "diff", + "type": "git_diff *", + "comment": "A git_diff generated by one of the above functions." + }, + { + "name": "file_cb", + "type": "git_diff_file_cb", + "comment": "Callback function to make per file in the diff." + }, + { + "name": "binary_cb", + "type": "git_diff_binary_cb", + "comment": "Optional callback to make for binary files." + }, + { + "name": "hunk_cb", + "type": "git_diff_hunk_cb", + "comment": "Optional callback to make per hunk of text diff. This\n callback is called to describe a range of lines in the\n diff. It will not be issued for binary files." + }, + { + "name": "line_cb", + "type": "git_diff_line_cb", + "comment": "Optional callback to make per line of diff text. This\n same callback will be made for context lines, added, and\n removed lines, and even for a deleted trailing newline." + }, + { + "name": "payload", + "type": "void *", + "comment": "Reference pointer that will be passed to your callbacks." + } + ], + "argline": "git_diff *diff, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", + "sig": "git_diff *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Loop over all deltas in a diff issuing callbacks.

\n", + "comments": "

This will iterate through all of the files described in a diff. You should provide a file callback to learn about each file.

\n\n

The "hunk" and "line" callbacks are optional, and the text diff of the files will only be calculated if they are not NULL. Of course, these callbacks will not be invoked for binary files on the diff or for files whose only changed is a file mode change.

\n\n

Returning a non-zero value from any of the callbacks will terminate the iteration and return the value to the user.

\n", + "group": "diff" + }, + "git_diff_status_char": { + "type": "function", + "file": "git2/diff.h", + "line": 1123, + "lineto": 1123, + "args": [ + { + "name": "status", + "type": "git_delta_t", + "comment": "The git_delta_t value to look up" + } + ], + "argline": "git_delta_t status", + "sig": "git_delta_t", + "return": { + "type": "char", + "comment": " The single character label for that code" + }, + "description": "

Look up the single character abbreviation for a delta status code.

\n", + "comments": "

When you run git diff --name-status it uses single letter codes in the output such as 'A' for added, 'D' for deleted, 'M' for modified, etc. This function converts a git_delta_t value into these letters for your own purposes. GIT_DELTA_UNTRACKED will return a space (i.e. ' ').

\n", + "group": "diff" + }, + "git_diff_print": { + "type": "function", + "file": "git2/diff.h", + "line": 1149, + "lineto": 1153, + "args": [ + { + "name": "diff", + "type": "git_diff *", + "comment": "A git_diff generated by one of the above functions." + }, + { + "name": "format", + "type": "git_diff_format_t", + "comment": "A git_diff_format_t value to pick the text format." + }, + { + "name": "print_cb", + "type": "git_diff_line_cb", + "comment": "Callback to make per line of diff text." + }, + { + "name": "payload", + "type": "void *", + "comment": "Reference pointer that will be passed to your callback." + } + ], + "argline": "git_diff *diff, git_diff_format_t format, git_diff_line_cb print_cb, void *payload", + "sig": "git_diff *::git_diff_format_t::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Iterate over a diff generating formatted text output.

\n", + "comments": "

Returning a non-zero value from the callbacks will terminate the iteration and return the non-zero value to the caller.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_print-10" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_diff_print-30" + ] + } + }, + "git_diff_to_buf": { + "type": "function", + "file": "git2/diff.h", + "line": 1165, + "lineto": 1168, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "A pointer to a user-allocated git_buf that will\n contain the diff text" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "A git_diff generated by one of the above functions." + }, + { + "name": "format", + "type": "git_diff_format_t", + "comment": "A git_diff_format_t value to pick the text format." + } + ], + "argline": "git_buf *out, git_diff *diff, git_diff_format_t format", + "sig": "git_buf *::git_diff *::git_diff_format_t", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Produce the complete formatted text output from a diff into a\n buffer.

\n", + "comments": "", + "group": "diff" + }, + "git_diff_blobs": { + "type": "function", + "file": "git2/diff.h", + "line": 1204, + "lineto": 1214, + "args": [ + { + "name": "old_blob", + "type": "const git_blob *", + "comment": "Blob for old side of diff, or NULL for empty blob" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old blob as if it had this filename; can be NULL" + }, + { + "name": "new_blob", + "type": "const git_blob *", + "comment": "Blob for new side of diff, or NULL for empty blob" + }, + { + "name": "new_as_path", + "type": "const char *", + "comment": "Treat new blob as if it had this filename; can be NULL" + }, + { + "name": "options", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + }, + { + "name": "file_cb", + "type": "git_diff_file_cb", + "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" + }, + { + "name": "binary_cb", + "type": "git_diff_binary_cb", + "comment": "Callback for binary files; can be NULL" + }, + { + "name": "hunk_cb", + "type": "git_diff_hunk_cb", + "comment": "Callback for each hunk in diff; can be NULL" + }, + { + "name": "line_cb", + "type": "git_diff_line_cb", + "comment": "Callback for each line in diff; can be NULL" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to each callback function" + } + ], + "argline": "const git_blob *old_blob, const char *old_as_path, const git_blob *new_blob, const char *new_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", + "sig": "const git_blob *::const char *::const git_blob *::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Directly run a diff on two blobs.

\n", + "comments": "

Compared to a file, a blob lacks some contextual information. As such, the git_diff_file given to the callback will have some fake data; i.e. mode will be 0 and path will be NULL.

\n\n

NULL is allowed for either old_blob or new_blob and will be treated as an empty blob, with the oid set to NULL in the git_diff_file data. Passing NULL for both blobs is a noop; no callbacks will be made at all.

\n\n

We do run a binary content check on the blob content and if either blob looks like binary data, the git_diff_delta binary attribute will be set to 1 and no call to the hunk_cb nor line_cb will be made (unless you pass GIT_DIFF_FORCE_TEXT of course).

\n", + "group": "diff" + }, + "git_diff_blob_to_buffer": { + "type": "function", + "file": "git2/diff.h", + "line": 1241, + "lineto": 1252, + "args": [ + { + "name": "old_blob", + "type": "const git_blob *", + "comment": "Blob for old side of diff, or NULL for empty blob" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old blob as if it had this filename; can be NULL" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "Raw data for new side of diff, or NULL for empty" + }, + { + "name": "buffer_len", + "type": "size_t", + "comment": "Length of raw data for new side of diff" + }, + { + "name": "buffer_as_path", + "type": "const char *", + "comment": "Treat buffer as if it had this filename; can be NULL" + }, + { + "name": "options", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + }, + { + "name": "file_cb", + "type": "git_diff_file_cb", + "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" + }, + { + "name": "binary_cb", + "type": "git_diff_binary_cb", + "comment": "Callback for binary files; can be NULL" + }, + { + "name": "hunk_cb", + "type": "git_diff_hunk_cb", + "comment": "Callback for each hunk in diff; can be NULL" + }, + { + "name": "line_cb", + "type": "git_diff_line_cb", + "comment": "Callback for each line in diff; can be NULL" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to each callback function" + } + ], + "argline": "const git_blob *old_blob, const char *old_as_path, const char *buffer, size_t buffer_len, const char *buffer_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", + "sig": "const git_blob *::const char *::const char *::size_t::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Directly run a diff between a blob and a buffer.

\n", + "comments": "

As with git_diff_blobs, comparing a blob and buffer lacks some context, so the git_diff_file parameters to the callbacks will be faked a la the rules for git_diff_blobs().

\n\n

Passing NULL for old_blob will be treated as an empty blob (i.e. the file_cb will be invoked with GIT_DELTA_ADDED and the diff will be the entire content of the buffer added). Passing NULL to the buffer will do the reverse, with GIT_DELTA_REMOVED and blob content removed.

\n", + "group": "diff" + }, + "git_diff_buffers": { + "type": "function", + "file": "git2/diff.h", + "line": 1275, + "lineto": 1287, + "args": [ + { + "name": "old_buffer", + "type": "const void *", + "comment": "Raw data for old side of diff, or NULL for empty" + }, + { + "name": "old_len", + "type": "size_t", + "comment": "Length of the raw data for old side of the diff" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old buffer as if it had this filename; can be NULL" + }, + { + "name": "new_buffer", + "type": "const void *", + "comment": "Raw data for new side of diff, or NULL for empty" + }, + { + "name": "new_len", + "type": "size_t", + "comment": "Length of raw data for new side of diff" + }, + { + "name": "new_as_path", + "type": "const char *", + "comment": "Treat buffer as if it had this filename; can be NULL" + }, + { + "name": "options", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + }, + { + "name": "file_cb", + "type": "git_diff_file_cb", + "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" + }, + { + "name": "binary_cb", + "type": "git_diff_binary_cb", + "comment": "Callback for binary files; can be NULL" + }, + { + "name": "hunk_cb", + "type": "git_diff_hunk_cb", + "comment": "Callback for each hunk in diff; can be NULL" + }, + { + "name": "line_cb", + "type": "git_diff_line_cb", + "comment": "Callback for each line in diff; can be NULL" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to each callback function" + } + ], + "argline": "const void *old_buffer, size_t old_len, const char *old_as_path, const void *new_buffer, size_t new_len, const char *new_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", + "sig": "const void *::size_t::const char *::const void *::size_t::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Directly run a diff between two buffers.

\n", + "comments": "

Even more than with git_diff_blobs, comparing two buffer lacks context, so the git_diff_file parameters to the callbacks will be faked a la the rules for git_diff_blobs().

\n", + "group": "diff" + }, + "git_diff_from_buffer": { + "type": "function", + "file": "git2/diff.h", + "line": 1327, + "lineto": 1334, + "args": [ + { + "name": "out", + "type": "git_diff **", + "comment": "A pointer to a git_diff pointer that will be allocated." + }, + { + "name": "content", + "type": "const char *", + "comment": "The contents of a patch file" + }, + { + "name": "content_len", + "type": "size_t", + "comment": "The length of the patch file contents" + } + ], + "argline": "git_diff **out, const char *content, size_t content_len", + "sig": "git_diff **::const char *::size_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Read the contents of a git patch file into a git_diff object.

\n", + "comments": "

The diff object produced is similar to the one that would be produced if you actually produced it computationally by comparing two trees, however there may be subtle differences. For example, a patch file likely contains abbreviated object IDs, so the object IDs in a git_diff_delta produced by this function will also be abbreviated.

\n\n

This function will only read patch files created by a git implementation, it will not read unified diffs produced by the diff program, nor any other types of patch files.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_from_buffer-11", + "ex/v1.7.2/diff.html#git_diff_from_buffer-12" + ] + } + }, + "git_diff_get_stats": { + "type": "function", + "file": "git2/diff.h", + "line": 1370, + "lineto": 1372, + "args": [ + { + "name": "out", + "type": "git_diff_stats **", + "comment": "Structure containing the diff statistics." + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "A git_diff generated by one of the above functions." + } + ], + "argline": "git_diff_stats **out, git_diff *diff", + "sig": "git_diff_stats **::git_diff *", + "return": { + "type": "int", + "comment": " 0 on success; non-zero on error" + }, + "description": "

Accumulate diff statistics for all patches.

\n", + "comments": "", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_get_stats-13" + ] + } + }, + "git_diff_stats_files_changed": { + "type": "function", + "file": "git2/diff.h", + "line": 1380, + "lineto": 1381, + "args": [ + { + "name": "stats", + "type": "const git_diff_stats *", + "comment": "A `git_diff_stats` generated by one of the above functions." + } + ], + "argline": "const git_diff_stats *stats", + "sig": "const git_diff_stats *", + "return": { + "type": "size_t", + "comment": " total number of files changed in the diff" + }, + "description": "

Get the total number of files changed in a diff

\n", + "comments": "", + "group": "diff" + }, + "git_diff_stats_insertions": { + "type": "function", + "file": "git2/diff.h", + "line": 1389, + "lineto": 1390, + "args": [ + { + "name": "stats", + "type": "const git_diff_stats *", + "comment": "A `git_diff_stats` generated by one of the above functions." + } + ], + "argline": "const git_diff_stats *stats", + "sig": "const git_diff_stats *", + "return": { + "type": "size_t", + "comment": " total number of insertions in the diff" + }, + "description": "

Get the total number of insertions in a diff

\n", + "comments": "", + "group": "diff" + }, + "git_diff_stats_deletions": { + "type": "function", + "file": "git2/diff.h", + "line": 1398, + "lineto": 1399, + "args": [ + { + "name": "stats", + "type": "const git_diff_stats *", + "comment": "A `git_diff_stats` generated by one of the above functions." + } + ], + "argline": "const git_diff_stats *stats", + "sig": "const git_diff_stats *", + "return": { + "type": "size_t", + "comment": " total number of deletions in the diff" + }, + "description": "

Get the total number of deletions in a diff

\n", + "comments": "", + "group": "diff" + }, + "git_diff_stats_to_buf": { + "type": "function", + "file": "git2/diff.h", + "line": 1410, + "lineto": 1414, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer to store the formatted diff statistics in." + }, + { + "name": "stats", + "type": "const git_diff_stats *", + "comment": "A `git_diff_stats` generated by one of the above functions." + }, + { + "name": "format", + "type": "git_diff_stats_format_t", + "comment": "Formatting option." + }, + { + "name": "width", + "type": "size_t", + "comment": "Target width for output (only affects GIT_DIFF_STATS_FULL)" + } + ], + "argline": "git_buf *out, const git_diff_stats *stats, git_diff_stats_format_t format, size_t width", + "sig": "git_buf *::const git_diff_stats *::git_diff_stats_format_t::size_t", + "return": { + "type": "int", + "comment": " 0 on success; non-zero on error" + }, + "description": "

Print diff statistics to a git_buf.

\n", + "comments": "", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_stats_to_buf-14" + ] + } + }, + "git_diff_stats_free": { + "type": "function", + "file": "git2/diff.h", + "line": 1422, + "lineto": 1422, + "args": [ + { + "name": "stats", + "type": "git_diff_stats *", + "comment": "The previously created statistics object;\n cannot be used after free." + } + ], + "argline": "git_diff_stats *stats", + "sig": "git_diff_stats *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Deallocate a git_diff_stats.

\n", + "comments": "", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_diff_stats_free-15" + ] + } + }, + "git_diff_patchid_options_init": { + "type": "function", + "file": "git2/diff.h", + "line": 1448, + "lineto": 1450, + "args": [ + { + "name": "opts", + "type": "git_diff_patchid_options *", + "comment": "The `git_diff_patchid_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DIFF_PATCHID_OPTIONS_VERSION`." + } + ], + "argline": "git_diff_patchid_options *opts, unsigned int version", + "sig": "git_diff_patchid_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_diff_patchid_options structure

\n", + "comments": "

Initializes a git_diff_patchid_options with default values. Equivalent to creating an instance with GIT_DIFF_PATCHID_OPTIONS_INIT.

\n", + "group": "diff" + }, + "git_diff_patchid": { + "type": "function", + "file": "git2/diff.h", + "line": 1471, + "lineto": 1471, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer where the calculated patch ID should be stored" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "The diff to calculate the ID for" + }, + { + "name": "opts", + "type": "git_diff_patchid_options *", + "comment": "Options for how to calculate the patch ID. This is\n intended for future changes, as currently no options are\n available." + } + ], + "argline": "git_oid *out, git_diff *diff, git_diff_patchid_options *opts", + "sig": "git_oid *::git_diff *::git_diff_patchid_options *", + "return": { + "type": "int", + "comment": " 0 on success, an error code otherwise." + }, + "description": "

Calculate the patch ID for the given patch.

\n", + "comments": "

Calculate a stable patch ID for the given patch by summing the hash of the file diffs, ignoring whitespace and line numbers. This can be used to derive whether two diffs are the same with a high probability.

\n\n

Currently, this function only calculates stable patch IDs, as defined in git-patch-id(1), and should in fact generate the same IDs as the upstream git project does.

\n", + "group": "diff" + }, + "git_error_last": { + "type": "function", + "file": "git2/errors.h", + "line": 128, + "lineto": 128, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "const git_error *", + "comment": " A git_error object." + }, + "description": "

Return the last git_error object that was generated for the\n current thread.

\n", + "comments": "

The default behaviour of this function is to return NULL if no previous error has occurred. However, libgit2's error strings are not cleared aggressively, so a prior (unrelated) error may be returned. This can be avoided by only calling this function if the prior call to a libgit2 API returned an error.

\n", + "group": "error", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_error_last-11", + "ex/v1.7.2/checkout.html#git_error_last-12", + "ex/v1.7.2/checkout.html#git_error_last-13", + "ex/v1.7.2/checkout.html#git_error_last-14" + ], + "commit.c": [ + "ex/v1.7.2/commit.html#git_error_last-2" + ], + "config.c": [ + "ex/v1.7.2/config.html#git_error_last-6", + "ex/v1.7.2/config.html#git_error_last-7", + "ex/v1.7.2/config.html#git_error_last-8" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_error_last-33" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_error_last-8", + "ex/v1.7.2/merge.html#git_error_last-9" + ] + } + }, + "git_error_clear": { + "type": "function", + "file": "git2/errors.h", + "line": 133, + "lineto": 133, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "void", + "comment": null + }, + "description": "

Clear the last library error that occurred for this thread.

\n", + "comments": "", + "group": "error" + }, + "git_error_set": { + "type": "function", + "file": "git2/errors.h", + "line": 153, + "lineto": 154, + "args": [ + { + "name": "error_class", + "type": "int", + "comment": "One of the `git_error_t` enum above describing the\n general subsystem that is responsible for the error." + }, + { + "name": "fmt", + "type": "const char *", + "comment": "The `printf`-style format string; subsequent arguments must\n be the arguments for the format string." + } + ], + "argline": "int error_class, const char *fmt", + "sig": "int::const char *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Set the error message string for this thread, using printf-style\n formatting.

\n", + "comments": "

This function is public so that custom ODB backends and the like can relay an error message through libgit2. Most regular users of libgit2 will never need to call this function -- actually, calling it in most circumstances (for example, calling from within a callback function) will just end up having the value overwritten by libgit2 internals.

\n\n

This error message is stored in thread-local storage and only applies to the particular thread that this libgit2 call is made from.

\n", + "group": "error" + }, + "git_error_set_str": { + "type": "function", + "file": "git2/errors.h", + "line": 166, + "lineto": 166, + "args": [ + { + "name": "error_class", + "type": "int", + "comment": "One of the `git_error_t` enum above describing the\n general subsystem that is responsible for the error." + }, + { + "name": "string", + "type": "const char *", + "comment": "The error message to keep" + } + ], + "argline": "int error_class, const char *string", + "sig": "int::const char *", + "return": { + "type": "int", + "comment": " 0 on success or -1 on failure" + }, + "description": "

Set the error message string for this thread. This function is like\n git_error_set but takes a static string instead of a printf-style\n format.

\n", + "comments": "", + "group": "error" + }, + "git_error_set_oom": { + "type": "function", + "file": "git2/errors.h", + "line": 177, + "lineto": 177, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "void", + "comment": null + }, + "description": "

Set the error message to a special value for memory allocation failure.

\n", + "comments": "

The normal git_error_set_str() function attempts to strdup() the string that is passed in. This is not a good idea when the error in question is a memory allocation failure. That circumstance has a special setter function that sets the error string to a known and statically allocated internal value.

\n", + "group": "error" + }, + "git_filter_list_load": { + "type": "function", + "file": "git2/filter.h", + "line": 129, + "lineto": 135, + "args": [ + { + "name": "filters", + "type": "git_filter_list **", + "comment": "Output newly created git_filter_list (or NULL)" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository object that contains `path`" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "The blob to which the filter will be applied (if known)" + }, + { + "name": "path", + "type": "const char *", + "comment": "Relative path of the file to be filtered" + }, + { + "name": "mode", + "type": "git_filter_mode_t", + "comment": "Filtering direction (WT->ODB or ODB->WT)" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of `git_filter_flag_t` flags" + } + ], + "argline": "git_filter_list **filters, git_repository *repo, git_blob *blob, const char *path, git_filter_mode_t mode, uint32_t flags", + "sig": "git_filter_list **::git_repository *::git_blob *::const char *::git_filter_mode_t::uint32_t", + "return": { + "type": "int", + "comment": " 0 on success (which could still return NULL if no filters are\n needed for the requested file), \n<\n0 on error" + }, + "description": "

Load the filter list for a given path.

\n", + "comments": "

This will return 0 (success) but set the output git_filter_list to NULL if no filters are requested for the given file.

\n", + "group": "filter" + }, + "git_filter_list_load_ext": { + "type": "function", + "file": "git2/filter.h", + "line": 152, + "lineto": 158, + "args": [ + { + "name": "filters", + "type": "git_filter_list **", + "comment": "Output newly created git_filter_list (or NULL)" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository object that contains `path`" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "The blob to which the filter will be applied (if known)" + }, + { + "name": "path", + "type": "const char *", + "comment": "Relative path of the file to be filtered" + }, + { + "name": "mode", + "type": "git_filter_mode_t", + "comment": "Filtering direction (WT->ODB or ODB->WT)" + }, + { + "name": "opts", + "type": "git_filter_options *", + "comment": "The `git_filter_options` to use when loading filters" + } + ], + "argline": "git_filter_list **filters, git_repository *repo, git_blob *blob, const char *path, git_filter_mode_t mode, git_filter_options *opts", + "sig": "git_filter_list **::git_repository *::git_blob *::const char *::git_filter_mode_t::git_filter_options *", + "return": { + "type": "int", + "comment": " 0 on success (which could still return NULL if no filters are\n needed for the requested file), \n<\n0 on error" + }, + "description": "

Load the filter list for a given path.

\n", + "comments": "

This will return 0 (success) but set the output git_filter_list to NULL if no filters are requested for the given file.

\n", + "group": "filter" + }, + "git_filter_list_contains": { + "type": "function", + "file": "git2/filter.h", + "line": 172, + "lineto": 174, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "A loaded git_filter_list (or NULL)" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the filter to query" + } + ], + "argline": "git_filter_list *filters, const char *name", + "sig": "git_filter_list *::const char *", + "return": { + "type": "int", + "comment": " 1 if the filter is in the list, 0 otherwise" + }, + "description": "

Query the filter list to see if a given filter (by name) will run.\n The built-in filters "crlf" and "ident" can be queried, otherwise this\n is the name of the filter specified by the filter attribute.

\n", + "comments": "

This will return 0 if the given filter is not in the list, or 1 if the filter will be applied.

\n", + "group": "filter" + }, + "git_filter_list_apply_to_buffer": { + "type": "function", + "file": "git2/filter.h", + "line": 185, + "lineto": 189, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Buffer to store the result of the filtering" + }, + { + "name": "filters", + "type": "git_filter_list *", + "comment": "A loaded git_filter_list (or NULL)" + }, + { + "name": "in", + "type": "const char *", + "comment": "Buffer containing the data to filter" + }, + { + "name": "in_len", + "type": "size_t", + "comment": "The length of the input buffer" + } + ], + "argline": "git_buf *out, git_filter_list *filters, const char *in, size_t in_len", + "sig": "git_buf *::git_filter_list *::const char *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, an error code otherwise" + }, + "description": "

Apply filter list to a data buffer.

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_apply_to_file": { + "type": "function", + "file": "git2/filter.h", + "line": 201, + "lineto": 205, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer into which to store the filtered file" + }, + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the filtering" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path of the file to filter, a relative path will be\n taken as relative to the workdir" + } + ], + "argline": "git_buf *out, git_filter_list *filters, git_repository *repo, const char *path", + "sig": "git_buf *::git_filter_list *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Apply a filter list to the contents of a file on disk

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_apply_to_blob": { + "type": "function", + "file": "git2/filter.h", + "line": 215, + "lineto": 218, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer into which to store the filtered file" + }, + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "the blob to filter" + } + ], + "argline": "git_buf *out, git_filter_list *filters, git_blob *blob", + "sig": "git_buf *::git_filter_list *::git_blob *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Apply a filter list to the contents of a blob

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_stream_buffer": { + "type": "function", + "file": "git2/filter.h", + "line": 229, + "lineto": 233, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "the buffer to filter" + }, + { + "name": "len", + "type": "size_t", + "comment": "the size of the buffer" + }, + { + "name": "target", + "type": "git_writestream *", + "comment": "the stream into which the data will be written" + } + ], + "argline": "git_filter_list *filters, const char *buffer, size_t len, git_writestream *target", + "sig": "git_filter_list *::const char *::size_t::git_writestream *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Apply a filter list to an arbitrary buffer as a stream

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_stream_file": { + "type": "function", + "file": "git2/filter.h", + "line": 245, + "lineto": 249, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the filtering" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path of the file to filter, a relative path will be\n taken as relative to the workdir" + }, + { + "name": "target", + "type": "git_writestream *", + "comment": "the stream into which the data will be written" + } + ], + "argline": "git_filter_list *filters, git_repository *repo, const char *path, git_writestream *target", + "sig": "git_filter_list *::git_repository *::const char *::git_writestream *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Apply a filter list to a file as a stream

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_stream_blob": { + "type": "function", + "file": "git2/filter.h", + "line": 259, + "lineto": 262, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "the blob to filter" + }, + { + "name": "target", + "type": "git_writestream *", + "comment": "the stream into which the data will be written" + } + ], + "argline": "git_filter_list *filters, git_blob *blob, git_writestream *target", + "sig": "git_filter_list *::git_blob *::git_writestream *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Apply a filter list to a blob as a stream

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_free": { + "type": "function", + "file": "git2/filter.h", + "line": 269, + "lineto": 269, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "A git_filter_list created by `git_filter_list_load`" + } + ], + "argline": "git_filter_list *filters", + "sig": "git_filter_list *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a git_filter_list

\n", + "comments": "", + "group": "filter" + }, + "git_libgit2_init": { + "type": "function", + "file": "git2/global.h", + "line": 26, + "lineto": 26, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "int", + "comment": " the number of initializations of the library, or an error code." + }, + "description": "

Init the global state

\n", + "comments": "

This function must be called before any other libgit2 function in order to set up global state and threading.

\n\n

This function may be called multiple times - it will return the number of times the initialization has been called (including this one) that have not subsequently been shutdown.

\n", + "group": "libgit2", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_libgit2_init-34" + ] + } + }, + "git_libgit2_shutdown": { + "type": "function", + "file": "git2/global.h", + "line": 39, + "lineto": 39, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "int", + "comment": " the number of remaining initializations of the library, or an\n error code." + }, + "description": "

Shutdown the global state

\n", + "comments": "

Clean up the global state and threading context after calling it as many times as git_libgit2_init() was called - it will return the number of remainining initializations that have not been shutdown (after this one).

\n", + "group": "libgit2" + }, + "git_graph_ahead_behind": { + "type": "function", + "file": "git2/graph.h", + "line": 38, + "lineto": 38, + "args": [ + { + "name": "ahead", + "type": "size_t *", + "comment": "number of unique from commits in `upstream`" + }, + { + "name": "behind", + "type": "size_t *", + "comment": "number of unique from commits in `local`" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "local", + "type": "const git_oid *", + "comment": "the commit for local" + }, + { + "name": "upstream", + "type": "const git_oid *", + "comment": "the commit for upstream" + } + ], + "argline": "size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream", + "sig": "size_t *::size_t *::git_repository *::const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Count the number of unique commits between two commit objects

\n", + "comments": "

There is no need for branches containing the commits to have any upstream relationship, but it helps to think of one as a branch and the other as its upstream, the ahead and behind values will be what git would report for the branches.

\n", + "group": "graph" + }, + "git_graph_descendant_of": { + "type": "function", + "file": "git2/graph.h", + "line": 53, + "lineto": 56, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "commit", + "type": "const git_oid *", + "comment": "a previously loaded commit" + }, + { + "name": "ancestor", + "type": "const git_oid *", + "comment": "a potential ancestor commit" + } + ], + "argline": "git_repository *repo, const git_oid *commit, const git_oid *ancestor", + "sig": "git_repository *::const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " 1 if the given commit is a descendant of the potential ancestor,\n 0 if not, error code otherwise." + }, + "description": "

Determine if a commit is the descendant of another commit.

\n", + "comments": "

Note that a commit is not considered a descendant of itself, in contrast to git merge-base --is-ancestor.

\n", + "group": "graph" + }, + "git_graph_reachable_from_any": { + "type": "function", + "file": "git2/graph.h", + "line": 69, + "lineto": 73, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "commit", + "type": "const git_oid *", + "comment": "a previously loaded commit" + }, + { + "name": "descendant_array", + "type": "const git_oid []", + "comment": "oids of the commits" + }, + { + "name": "length", + "type": "size_t", + "comment": "the number of commits in the provided `descendant_array`" + } + ], + "argline": "git_repository *repo, const git_oid *commit, const git_oid [] descendant_array, size_t length", + "sig": "git_repository *::const git_oid *::const git_oid []::size_t", + "return": { + "type": "int", + "comment": " 1 if the given commit is an ancestor of any of the given potential\n descendants, 0 if not, error code otherwise." + }, + "description": "

Determine if a commit is reachable from any of a list of commits by\n following parent edges.

\n", + "comments": "", + "group": "graph" + }, + "git_ignore_add_rule": { + "type": "function", + "file": "git2/ignore.h", + "line": 37, + "lineto": 39, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to add ignore rules to." + }, + { + "name": "rules", + "type": "const char *", + "comment": "Text of rules, the contents to add on a .gitignore file.\n It is okay to have multiple rules in the text; if so,\n each rule should be terminated with a newline." + } + ], + "argline": "git_repository *repo, const char *rules", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success" + }, + "description": "

Add ignore rules for a repository.

\n", + "comments": "

Excludesfile rules (i.e. .gitignore rules) are generally read from .gitignore files in the repository tree or from a shared system file only if a "core.excludesfile" config value is set. The library also keeps a set of per-repository internal ignores that can be configured in-memory and will not persist. This function allows you to add to that internal rules list.

\n\n

Example usage:

\n\n
 error = git_ignore_add_rule(myrepo, "*.c/ with space");\n
\n\n

This would add three rules to the ignores.

\n", + "group": "ignore" + }, + "git_ignore_clear_internal_rules": { + "type": "function", + "file": "git2/ignore.h", + "line": 52, + "lineto": 53, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to remove ignore rules from." + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 0 on success" + }, + "description": "

Clear ignore rules that were explicitly added.

\n", + "comments": "

Resets to the default internal ignore rules. This will not turn off rules in .gitignore files that actually exist in the filesystem.

\n\n

The default internal ignores ignore ".", ".." and ".git" entries.

\n", + "group": "ignore" + }, + "git_ignore_path_is_ignored": { + "type": "function", + "file": "git2/ignore.h", + "line": 71, + "lineto": 74, + "args": [ + { + "name": "ignored", + "type": "int *", + "comment": "boolean returning 0 if the file is not ignored, 1 if it is" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "a repository object" + }, + { + "name": "path", + "type": "const char *", + "comment": "the file to check ignores for, relative to the repo's workdir." + } + ], + "argline": "int *ignored, git_repository *repo, const char *path", + "sig": "int *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 if ignore rules could be processed for the file (regardless\n of whether it exists or not), or an error \n<\n 0 if they could not." + }, + "description": "

Test if the ignore rules apply to a given path.

\n", + "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git check-ignore --no-index" on the given file, would it be shown or not?

\n", + "group": "ignore" + }, + "git_index_free": { + "type": "function", + "file": "git2/index.h", + "line": 216, + "lineto": 216, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free an existing index object.

\n", + "comments": "", + "group": "index", + "examples": { + "add.c": [ + "ex/v1.7.2/add.html#git_index_free-1" + ], + "commit.c": [ + "ex/v1.7.2/commit.html#git_index_free-3" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_index_free-35" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_index_free-2" + ], + "ls-files.c": [ + "ex/v1.7.2/ls-files.html#git_index_free-1" + ] + } + }, + "git_index_owner": { + "type": "function", + "file": "git2/index.h", + "line": 224, + "lineto": 224, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "The index" + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "git_repository *", + "comment": " A pointer to the repository" + }, + "description": "

Get the repository this index relates to

\n", + "comments": "", + "group": "index" + }, + "git_index_caps": { + "type": "function", + "file": "git2/index.h", + "line": 232, + "lineto": 232, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "An existing index object" + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "int", + "comment": " A combination of GIT_INDEX_CAPABILITY values" + }, + "description": "

Read index capabilities flags.

\n", + "comments": "", + "group": "index" + }, + "git_index_set_caps": { + "type": "function", + "file": "git2/index.h", + "line": 245, + "lineto": 245, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + }, + { + "name": "caps", + "type": "int", + "comment": "A combination of GIT_INDEX_CAPABILITY values" + } + ], + "argline": "git_index *index, int caps", + "sig": "git_index *::int", + "return": { + "type": "int", + "comment": " 0 on success, -1 on failure" + }, + "description": "

Set index capabilities flags.

\n", + "comments": "

If you pass GIT_INDEX_CAPABILITY_FROM_OWNER for the caps, then capabilities will be read from the config of the owner object, looking at core.ignorecase, core.filemode, core.symlinks.

\n", + "group": "index" + }, + "git_index_version": { + "type": "function", + "file": "git2/index.h", + "line": 257, + "lineto": 257, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { + "type": "unsigned int", + "comment": " the index version" + }, + "description": "

Get index on-disk version.

\n", + "comments": "

Valid return values are 2, 3, or 4. If 3 is returned, an index with version 2 may be written instead, if the extension data in version 3 is not necessary.

\n", + "group": "index" + }, + "git_index_set_version": { + "type": "function", + "file": "git2/index.h", + "line": 270, + "lineto": 270, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The new version number" + } + ], + "argline": "git_index *index, unsigned int version", + "sig": "git_index *::unsigned int", + "return": { + "type": "int", + "comment": " 0 on success, -1 on failure" + }, + "description": "

Set index on-disk version.

\n", + "comments": "

Valid values are 2, 3, or 4. If 2 is given, git_index_write may write an index with version 3 instead, if necessary to accurately represent the index.

\n", + "group": "index" + }, + "git_index_read": { + "type": "function", + "file": "git2/index.h", + "line": 289, + "lineto": 289, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "force", + "type": "int", + "comment": "if true, always reload, vs. only read if file has changed" + } + ], + "argline": "git_index *index, int force", + "sig": "git_index *::int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Update the contents of an existing index object in memory by reading\n from the hard disk.

\n", + "comments": "

If force is true, this performs a "hard" read that discards in-memory changes and always reloads the on-disk index data. If there is no on-disk version, the index will be cleared.

\n\n

If force is false, this does a "soft" read that reloads the index data from disk only if it has changed since the last time it was loaded. Purely in-memory index data will be untouched. Be aware: if there are changes on disk, unwritten in-memory changes are discarded.

\n", + "group": "index" + }, + "git_index_write": { + "type": "function", + "file": "git2/index.h", + "line": 298, + "lineto": 298, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Write an existing index object from memory back to disk\n using an atomic file lock.

\n", + "comments": "", + "group": "index", + "examples": { + "add.c": [ + "ex/v1.7.2/add.html#git_index_write-2" + ], + "commit.c": [ + "ex/v1.7.2/commit.html#git_index_write-4" + ] + } + }, + "git_index_path": { + "type": "function", + "file": "git2/index.h", + "line": 306, + "lineto": 306, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "an existing index object" + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "const char *", + "comment": " path to index file or NULL for in-memory index" + }, + "description": "

Get the full path to the index file on disk.

\n", + "comments": "", + "group": "index" + }, + "git_index_checksum": { + "type": "function", + "file": "git2/index.h", + "line": 320, + "lineto": 320, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { + "type": "const git_oid *", + "comment": " a pointer to the checksum of the index" + }, + "description": "

Get the checksum of the index

\n", + "comments": "

This checksum is the SHA-1 hash over the index file (except the last 20 bytes which are the checksum itself). In cases where the index does not exist on-disk, it will be zeroed out.

\n", + "group": "index" + }, + "git_index_read_tree": { + "type": "function", + "file": "git2/index.h", + "line": 332, + "lineto": 332, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "tree to read" + } + ], + "argline": "git_index *index, const git_tree *tree", + "sig": "git_index *::const git_tree *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Read a tree into the index file with stats

\n", + "comments": "

The current index contents will be replaced by the specified tree.

\n", + "group": "index" + }, + "git_index_write_tree": { + "type": "function", + "file": "git2/index.h", + "line": 353, + "lineto": 353, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the written tree" + }, + { + "name": "index", + "type": "git_index *", + "comment": "Index to write" + } + ], + "argline": "git_oid *out, git_index *index", + "sig": "git_oid *::git_index *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNMERGED when the index is not clean\n or an error code" + }, + "description": "

Write the index as a tree

\n", + "comments": "

This method will scan the index and write a representation of its current state back to disk; it recursively creates tree objects for each of the subtrees stored in the index, but only returns the OID of the root tree. This is the OID that can be used e.g. to create a commit.

\n\n

The index instance cannot be bare, and needs to be associated to an existing repository.

\n\n

The index must not contain any file in conflict.

\n", + "group": "index", + "examples": { + "commit.c": [ + "ex/v1.7.2/commit.html#git_index_write_tree-5" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_index_write_tree-3" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_index_write_tree-10" + ] + } + }, + "git_index_write_tree_to": { + "type": "function", + "file": "git2/index.h", + "line": 370, + "lineto": 370, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer where to store OID of the written tree" + }, + { + "name": "index", + "type": "git_index *", + "comment": "Index to write" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to write the tree" + } + ], + "argline": "git_oid *out, git_index *index, git_repository *repo", + "sig": "git_oid *::git_index *::git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNMERGED when the index is not clean\n or an error code" + }, + "description": "

Write the index as a tree to the given repository

\n", + "comments": "

This method will do the same as git_index_write_tree, but letting the user choose the repository where the tree will be written.

\n\n

The index must not contain any file in conflict.

\n", + "group": "index" + }, + "git_index_entrycount": { + "type": "function", + "file": "git2/index.h", + "line": 389, + "lineto": 389, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "an existing index object" + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "size_t", + "comment": " integer of count of current entries" + }, + "description": "

Get the count of entries currently in the index

\n", + "comments": "", + "group": "index", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_index_entrycount-36" + ], + "ls-files.c": [ + "ex/v1.7.2/ls-files.html#git_index_entrycount-2" + ] + } + }, + "git_index_clear": { + "type": "function", + "file": "git2/index.h", + "line": 400, + "lineto": 400, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { + "type": "int", + "comment": " 0 on success, error code \n<\n 0 on failure" + }, + "description": "

Clear the contents (all the entries) of an index object.

\n", + "comments": "

This clears the index object in memory; changes must be explicitly written to disk for them to take effect persistently.

\n", + "group": "index" + }, + "git_index_get_byindex": { + "type": "function", + "file": "git2/index.h", + "line": 413, + "lineto": 414, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "n", + "type": "size_t", + "comment": "the position of the entry" + } + ], + "argline": "git_index *index, size_t n", + "sig": "git_index *::size_t", + "return": { + "type": "const git_index_entry *", + "comment": " a pointer to the entry; NULL if out of bounds" + }, + "description": "

Get a pointer to one of the entries in the index

\n", + "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", + "group": "index", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_index_get_byindex-37" + ], + "ls-files.c": [ + "ex/v1.7.2/ls-files.html#git_index_get_byindex-3" + ] + } + }, + "git_index_get_bypath": { + "type": "function", + "file": "git2/index.h", + "line": 428, + "lineto": 429, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to search" + }, + { + "name": "stage", + "type": "int", + "comment": "stage to search" + } + ], + "argline": "git_index *index, const char *path, int stage", + "sig": "git_index *::const char *::int", + "return": { + "type": "const git_index_entry *", + "comment": " a pointer to the entry; NULL if it was not found" + }, + "description": "

Get a pointer to one of the entries in the index

\n", + "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", + "group": "index", + "examples": { + "ls-files.c": [ + "ex/v1.7.2/ls-files.html#git_index_get_bypath-4" + ] + } + }, + "git_index_remove": { + "type": "function", + "file": "git2/index.h", + "line": 439, + "lineto": 439, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to search" + }, + { + "name": "stage", + "type": "int", + "comment": "stage to search" + } + ], + "argline": "git_index *index, const char *path, int stage", + "sig": "git_index *::const char *::int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Remove an entry from the index

\n", + "comments": "", + "group": "index" + }, + "git_index_remove_directory": { + "type": "function", + "file": "git2/index.h", + "line": 449, + "lineto": 450, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "dir", + "type": "const char *", + "comment": "container directory path" + }, + { + "name": "stage", + "type": "int", + "comment": "stage to search" + } + ], + "argline": "git_index *index, const char *dir, int stage", + "sig": "git_index *::const char *::int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Remove all entries from the index under a given directory

\n", + "comments": "", + "group": "index" + }, + "git_index_add": { + "type": "function", + "file": "git2/index.h", + "line": 466, + "lineto": 466, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "source_entry", + "type": "const git_index_entry *", + "comment": "new entry object" + } + ], + "argline": "git_index *index, const git_index_entry *source_entry", + "sig": "git_index *::const git_index_entry *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add or update an index entry from an in-memory struct

\n", + "comments": "

If a previous index entry exists that has the same path and stage as the given 'source_entry', it will be replaced. Otherwise, the 'source_entry' will be added.

\n\n

A full copy (including the 'path' string) of the given 'source_entry' will be inserted on the index.

\n", + "group": "index" + }, + "git_index_entry_stage": { + "type": "function", + "file": "git2/index.h", + "line": 478, + "lineto": 478, + "args": [ + { + "name": "entry", + "type": "const git_index_entry *", + "comment": "The entry" + } + ], + "argline": "const git_index_entry *entry", + "sig": "const git_index_entry *", + "return": { + "type": "int", + "comment": " the stage number" + }, + "description": "

Return the stage number from a git index entry

\n", + "comments": "

This entry is calculated from the entry's flag attribute like this:

\n\n
(entry->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT\n
\n", + "group": "index" + }, + "git_index_entry_is_conflict": { + "type": "function", + "file": "git2/index.h", + "line": 487, + "lineto": 487, + "args": [ + { + "name": "entry", + "type": "const git_index_entry *", + "comment": "The entry" + } + ], + "argline": "const git_index_entry *entry", + "sig": "const git_index_entry *", + "return": { + "type": "int", + "comment": " 1 if the entry is a conflict entry, 0 otherwise" + }, + "description": "

Return whether the given index entry is a conflict (has a high stage\n entry). This is simply shorthand for git_index_entry_stage > 0.

\n", + "comments": "", + "group": "index" + }, + "git_index_iterator_new": { + "type": "function", + "file": "git2/index.h", + "line": 508, + "lineto": 510, + "args": [ + { + "name": "iterator_out", + "type": "git_index_iterator **", + "comment": "The newly created iterator" + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to iterate" + } + ], + "argline": "git_index_iterator **iterator_out, git_index *index", + "sig": "git_index_iterator **::git_index *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Create an iterator that will return every entry contained in the\n index at the time of creation. Entries are returned in order,\n sorted by path. This iterator is backed by a snapshot that allows\n callers to modify the index while iterating without affecting the\n iterator.

\n", + "comments": "", + "group": "index" + }, + "git_index_iterator_next": { + "type": "function", + "file": "git2/index.h", + "line": 519, + "lineto": 521, + "args": [ + { + "name": "out", + "type": "const git_index_entry **", + "comment": "Pointer to store the index entry in" + }, + { + "name": "iterator", + "type": "git_index_iterator *", + "comment": "The iterator" + } + ], + "argline": "const git_index_entry **out, git_index_iterator *iterator", + "sig": "const git_index_entry **::git_index_iterator *", + "return": { + "type": "int", + "comment": " 0, GIT_ITEROVER on iteration completion or an error code" + }, + "description": "

Return the next index entry in-order from the iterator.

\n", + "comments": "", + "group": "index" + }, + "git_index_iterator_free": { + "type": "function", + "file": "git2/index.h", + "line": 528, + "lineto": 528, + "args": [ + { + "name": "iterator", + "type": "git_index_iterator *", + "comment": "The iterator to free" + } + ], + "argline": "git_index_iterator *iterator", + "sig": "git_index_iterator *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the index iterator

\n", + "comments": "", + "group": "index" + }, + "git_index_add_bypath": { + "type": "function", + "file": "git2/index.h", + "line": 559, + "lineto": 559, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "filename to add" + } + ], + "argline": "git_index *index, const char *path", + "sig": "git_index *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add or update an index entry from a file on disk

\n", + "comments": "

The file path must be relative to the repository's working folder and must be readable.

\n\n

This method will fail in bare index instances.

\n\n

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", + "group": "index" + }, + "git_index_add_from_buffer": { + "type": "function", + "file": "git2/index.h", + "line": 587, + "lineto": 590, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "entry", + "type": "const git_index_entry *", + "comment": "filename to add" + }, + { + "name": "buffer", + "type": "const void *", + "comment": "data to be written into the blob" + }, + { + "name": "len", + "type": "size_t", + "comment": "length of the data" + } + ], + "argline": "git_index *index, const git_index_entry *entry, const void *buffer, size_t len", + "sig": "git_index *::const git_index_entry *::const void *::size_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add or update an index entry from a buffer in memory

\n", + "comments": "

This method will create a blob in the repository that owns the index and then add the index entry to the index. The path of the entry represents the position of the blob relative to the repository's root folder.

\n\n

If a previous index entry exists that has the same path as the given 'entry', it will be replaced. Otherwise, the 'entry' will be added.

\n\n

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", + "group": "index" + }, + "git_index_remove_bypath": { + "type": "function", + "file": "git2/index.h", + "line": 606, + "lineto": 606, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "filename to remove" + } + ], + "argline": "git_index *index, const char *path", + "sig": "git_index *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Remove an index entry corresponding to a file on disk

\n", + "comments": "

The file path must be relative to the repository's working folder. It may exist.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", + "group": "index" + }, + "git_index_add_all": { + "type": "function", + "file": "git2/index.h", + "line": 654, + "lineto": 659, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "pathspec", + "type": "const git_strarray *", + "comment": "array of path patterns" + }, + { + "name": "flags", + "type": "unsigned int", + "comment": "combination of git_index_add_option_t flags" + }, + { + "name": "callback", + "type": "git_index_matched_path_cb", + "comment": "notification callback for each added/updated path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." + }, + { + "name": "payload", + "type": "void *", + "comment": "payload passed through to callback function" + } + ], + "argline": "git_index *index, const git_strarray *pathspec, unsigned int flags, git_index_matched_path_cb callback, void *payload", + "sig": "git_index *::const git_strarray *::unsigned int::git_index_matched_path_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, negative callback return value, or error code" + }, + "description": "

Add or update index entries matching files in the working directory.

\n", + "comments": "

This method will fail in bare index instances.

\n\n

The pathspec is a list of file names or shell glob patterns that will be matched against files in the repository's working directory. Each file that matches will be added to the index (either updating an existing entry or adding a new entry). You can disable glob expansion and force exact matching with the GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH flag.

\n\n

Files that are ignored will be skipped (unlike git_index_add_bypath). If a file is already tracked in the index, then it will be updated even if it is ignored. Pass the GIT_INDEX_ADD_FORCE flag to skip the checking of ignore rules.

\n\n

To emulate git add -A and generate an error if the pathspec contains the exact path of an ignored file (when not using FORCE), add the GIT_INDEX_ADD_CHECK_PATHSPEC flag. This checks that each entry in the pathspec that is an exact match to a filename on disk is either not ignored or already in the index. If this check fails, the function will return GIT_EINVALIDSPEC.

\n\n

To emulate git add -A with the "dry-run" option, just use a callback function that always returns a positive value. See below for details.

\n\n

If any files are currently the result of a merge conflict, those files will no longer be marked as conflicting. The data about the conflicts will be moved to the "resolve undo" (REUC) section.

\n\n

If you provide a callback function, it will be invoked on each matching item in the working directory immediately before it is added to / updated in the index. Returning zero will add the item to the index, greater than zero will skip the item, and less than zero will abort the scan and return that value to the caller.

\n", + "group": "index", + "examples": { + "add.c": [ + "ex/v1.7.2/add.html#git_index_add_all-3" + ] + } + }, + "git_index_remove_all": { + "type": "function", + "file": "git2/index.h", + "line": 676, + "lineto": 680, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + }, + { + "name": "pathspec", + "type": "const git_strarray *", + "comment": "array of path patterns" + }, + { + "name": "callback", + "type": "git_index_matched_path_cb", + "comment": "notification callback for each removed path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." + }, + { + "name": "payload", + "type": "void *", + "comment": "payload passed through to callback function" + } + ], + "argline": "git_index *index, const git_strarray *pathspec, git_index_matched_path_cb callback, void *payload", + "sig": "git_index *::const git_strarray *::git_index_matched_path_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, negative callback return value, or error code" + }, + "description": "

Remove all matching index entries.

\n", + "comments": "

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is removed. Return 0 to remove the item, > 0 to skip the item, and < 0 to abort the scan.

\n", + "group": "index" + }, + "git_index_update_all": { + "type": "function", + "file": "git2/index.h", + "line": 705, + "lineto": 709, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + }, + { + "name": "pathspec", + "type": "const git_strarray *", + "comment": "array of path patterns" + }, + { + "name": "callback", + "type": "git_index_matched_path_cb", + "comment": "notification callback for each updated path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." + }, + { + "name": "payload", + "type": "void *", + "comment": "payload passed through to callback function" + } + ], + "argline": "git_index *index, const git_strarray *pathspec, git_index_matched_path_cb callback, void *payload", + "sig": "git_index *::const git_strarray *::git_index_matched_path_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, negative callback return value, or error code" + }, + "description": "

Update all index entries to match the working directory

\n", + "comments": "

This method will fail in bare index instances.

\n\n

This scans the existing index entries and synchronizes them with the working directory, deleting them if the corresponding working directory file no longer exists otherwise updating the information (including adding the latest version of file to the ODB if needed).

\n\n

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is updated (either refreshed or removed depending on working directory state). Return 0 to proceed with updating the item, > 0 to skip the item, and < 0 to abort the scan.

\n", + "group": "index", + "examples": { + "add.c": [ + "ex/v1.7.2/add.html#git_index_update_all-4" + ] + } + }, + "git_index_find": { + "type": "function", + "file": "git2/index.h", + "line": 720, + "lineto": 720, + "args": [ + { + "name": "at_pos", + "type": "size_t *", + "comment": "the address to which the position of the index entry is written (optional)" + }, + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to search" + } + ], + "argline": "size_t *at_pos, git_index *index, const char *path", + "sig": "size_t *::git_index *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Find the first position of any entries which point to given\n path in the Git index.

\n", + "comments": "", + "group": "index" + }, + "git_index_find_prefix": { + "type": "function", + "file": "git2/index.h", + "line": 731, + "lineto": 731, + "args": [ + { + "name": "at_pos", + "type": "size_t *", + "comment": "the address to which the position of the index entry is written (optional)" + }, + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "prefix", + "type": "const char *", + "comment": "the prefix to search for" + } + ], + "argline": "size_t *at_pos, git_index *index, const char *prefix", + "sig": "size_t *::git_index *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Find the first position of any entries matching a prefix. To find the first position\n of a path inside a given folder, suffix the prefix with a '/'.

\n", + "comments": "", + "group": "index" + }, + "git_index_conflict_add": { + "type": "function", + "file": "git2/index.h", + "line": 756, + "lineto": 760, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "ancestor_entry", + "type": "const git_index_entry *", + "comment": "the entry data for the ancestor of the conflict" + }, + { + "name": "our_entry", + "type": "const git_index_entry *", + "comment": "the entry data for our side of the merge conflict" + }, + { + "name": "their_entry", + "type": "const git_index_entry *", + "comment": "the entry data for their side of the merge conflict" + } + ], + "argline": "git_index *index, const git_index_entry *ancestor_entry, const git_index_entry *our_entry, const git_index_entry *their_entry", + "sig": "git_index *::const git_index_entry *::const git_index_entry *::const git_index_entry *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add or update index entries to represent a conflict. Any staged\n entries that exist at the given paths will be removed.

\n", + "comments": "

The entries are the entries from the tree included in the merge. Any entry may be null to indicate that that file was not present in the trees during the merge. For example, ancestor_entry may be NULL to indicate that a file was added in both branches and must be resolved.

\n", + "group": "index" + }, + "git_index_conflict_get": { + "type": "function", + "file": "git2/index.h", + "line": 776, + "lineto": 781, + "args": [ + { + "name": "ancestor_out", + "type": "const git_index_entry **", + "comment": "Pointer to store the ancestor entry" + }, + { + "name": "our_out", + "type": "const git_index_entry **", + "comment": "Pointer to store the our entry" + }, + { + "name": "their_out", + "type": "const git_index_entry **", + "comment": "Pointer to store the their entry" + }, + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to search" + } + ], + "argline": "const git_index_entry **ancestor_out, const git_index_entry **our_out, const git_index_entry **their_out, git_index *index, const char *path", + "sig": "const git_index_entry **::const git_index_entry **::const git_index_entry **::git_index *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the index entries that represent a conflict of a single file.

\n", + "comments": "

The entries are not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", + "group": "index" + }, + "git_index_conflict_remove": { + "type": "function", + "file": "git2/index.h", + "line": 790, + "lineto": 790, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to remove conflicts for" + } + ], + "argline": "git_index *index, const char *path", + "sig": "git_index *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Removes the index entries that represent a conflict of a single file.

\n", + "comments": "", + "group": "index" + }, + "git_index_conflict_cleanup": { + "type": "function", + "file": "git2/index.h", + "line": 798, + "lineto": 798, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Remove all conflicts in the index (entries with a stage greater than 0).

\n", + "comments": "", + "group": "index" + }, + "git_index_has_conflicts": { + "type": "function", + "file": "git2/index.h", + "line": 806, + "lineto": 806, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "An existing index object." + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "int", + "comment": " 1 if at least one conflict is found, 0 otherwise." + }, + "description": "

Determine if the index contains entries representing file conflicts.

\n", + "comments": "", + "group": "index", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_index_has_conflicts-11" + ] + } + }, + "git_index_conflict_iterator_new": { + "type": "function", + "file": "git2/index.h", + "line": 817, + "lineto": 819, + "args": [ + { + "name": "iterator_out", + "type": "git_index_conflict_iterator **", + "comment": "The newly created conflict iterator" + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to scan" + } + ], + "argline": "git_index_conflict_iterator **iterator_out, git_index *index", + "sig": "git_index_conflict_iterator **::git_index *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create an iterator for the conflicts in the index.

\n", + "comments": "

The index must not be modified while iterating; the results are undefined.

\n", + "group": "index", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_index_conflict_iterator_new-12" + ] + } + }, + "git_index_conflict_next": { + "type": "function", + "file": "git2/index.h", + "line": 832, + "lineto": 836, + "args": [ + { + "name": "ancestor_out", + "type": "const git_index_entry **", + "comment": "Pointer to store the ancestor side of the conflict" + }, + { + "name": "our_out", + "type": "const git_index_entry **", + "comment": "Pointer to store our side of the conflict" + }, + { + "name": "their_out", + "type": "const git_index_entry **", + "comment": "Pointer to store their side of the conflict" + }, + { + "name": "iterator", + "type": "git_index_conflict_iterator *", + "comment": "The conflict iterator." + } + ], + "argline": "const git_index_entry **ancestor_out, const git_index_entry **our_out, const git_index_entry **their_out, git_index_conflict_iterator *iterator", + "sig": "const git_index_entry **::const git_index_entry **::const git_index_entry **::git_index_conflict_iterator *", + "return": { + "type": "int", + "comment": " 0 (no error), GIT_ITEROVER (iteration is done) or an error code\n (negative value)" + }, + "description": "

Returns the current conflict (ancestor, ours and theirs entry) and\n advance the iterator internally to the next value.

\n", + "comments": "", + "group": "index", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_index_conflict_next-13" + ] + } + }, + "git_index_conflict_iterator_free": { + "type": "function", + "file": "git2/index.h", + "line": 843, + "lineto": 844, + "args": [ + { + "name": "iterator", + "type": "git_index_conflict_iterator *", + "comment": "pointer to the iterator" + } + ], + "argline": "git_index_conflict_iterator *iterator", + "sig": "git_index_conflict_iterator *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Frees a git_index_conflict_iterator.

\n", + "comments": "", + "group": "index", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_index_conflict_iterator_free-14" + ] + } + }, + "git_indexer_options_init": { + "type": "function", + "file": "git2/indexer.h", + "line": 99, + "lineto": 101, + "args": [ + { + "name": "opts", + "type": "git_indexer_options *", + "comment": "the `git_indexer_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "Version of struct; pass `GIT_INDEXER_OPTIONS_VERSION`" + } + ], + "argline": "git_indexer_options *opts, unsigned int version", + "sig": "git_indexer_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initializes a git_indexer_options with default values. Equivalent to\n creating an instance with GIT_INDEXER_OPTIONS_INIT.

\n", + "comments": "", + "group": "indexer" + }, + "git_indexer_new": { + "type": "function", + "file": "git2/indexer.h", + "line": 131, + "lineto": 136, + "args": [ + { + "name": "out", + "type": "git_indexer **", + "comment": "where to store the indexer instance" + }, + { + "name": "path", + "type": "const char *", + "comment": "to the directory where the packfile should be stored" + }, + { + "name": "mode", + "type": "unsigned int", + "comment": "permissions to use creating packfile or 0 for defaults" + }, + { + "name": "odb", + "type": "git_odb *", + "comment": "object database from which to read base objects when\n fixing thin packs. Pass NULL if no thin pack is expected (an error\n will be returned if there are bases missing)" + }, + { + "name": "opts", + "type": "git_indexer_options *", + "comment": "Optional structure containing additional options. See\n `git_indexer_options` above." + } + ], + "argline": "git_indexer **out, const char *path, unsigned int mode, git_odb *odb, git_indexer_options *opts", + "sig": "git_indexer **::const char *::unsigned int::git_odb *::git_indexer_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Create a new indexer instance

\n", + "comments": "", + "group": "indexer" + }, + "git_indexer_append": { + "type": "function", + "file": "git2/indexer.h", + "line": 148, + "lineto": 148, + "args": [ + { + "name": "idx", + "type": "git_indexer *", + "comment": "the indexer" + }, + { + "name": "data", + "type": "const void *", + "comment": "the data to add" + }, + { + "name": "size", + "type": "size_t", + "comment": "the size of the data in bytes" + }, + { + "name": "stats", + "type": "git_indexer_progress *", + "comment": "stat storage" + } + ], + "argline": "git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats", + "sig": "git_indexer *::const void *::size_t::git_indexer_progress *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Add data to the indexer

\n", + "comments": "", + "group": "indexer" + }, + "git_indexer_commit": { + "type": "function", + "file": "git2/indexer.h", + "line": 159, + "lineto": 159, + "args": [ + { + "name": "idx", + "type": "git_indexer *", + "comment": "the indexer" + }, + { + "name": "stats", + "type": "git_indexer_progress *", + "comment": "Stat storage." + } + ], + "argline": "git_indexer *idx, git_indexer_progress *stats", + "sig": "git_indexer *::git_indexer_progress *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Finalize the pack and index

\n", + "comments": "

Resolve any pending deltas and write out the index file

\n", + "group": "indexer" + }, + "git_indexer_hash": { + "type": "function", + "file": "git2/indexer.h", + "line": 172, + "lineto": 172, + "args": [ + { + "name": "idx", + "type": "const git_indexer *", + "comment": "the indexer instance" + } + ], + "argline": "const git_indexer *idx", + "sig": "const git_indexer *", + "return": { + "type": "const git_oid *", + "comment": " the packfile's hash" + }, + "description": "

Get the packfile's hash

\n", + "comments": "

A packfile's name is derived from the sorted hashing of all object names. This is only correct after the index has been finalized.

\n", + "group": "indexer" + }, + "git_indexer_name": { + "type": "function", + "file": "git2/indexer.h", + "line": 184, + "lineto": 184, + "args": [ + { + "name": "idx", + "type": "const git_indexer *", + "comment": "the indexer instance" + } + ], + "argline": "const git_indexer *idx", + "sig": "const git_indexer *", + "return": { + "type": "const char *", + "comment": " a NUL terminated string for the packfile name" + }, + "description": "

Get the unique name for the resulting packfile.

\n", + "comments": "

The packfile's name is derived from the packfile's content. This is only correct after the index has been finalized.

\n", + "group": "indexer" + }, + "git_indexer_free": { + "type": "function", + "file": "git2/indexer.h", + "line": 191, + "lineto": 191, + "args": [ + { + "name": "idx", + "type": "git_indexer *", + "comment": "the indexer to free" + } + ], + "argline": "git_indexer *idx", + "sig": "git_indexer *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the indexer and its resources

\n", + "comments": "", + "group": "indexer" + }, + "git_mailmap_new": { + "type": "function", + "file": "git2/mailmap.h", + "line": 32, + "lineto": 32, + "args": [ + { + "name": "out", + "type": "git_mailmap **", + "comment": "pointer to store the new mailmap" + } + ], + "argline": "git_mailmap **out", + "sig": "git_mailmap **", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Allocate a new mailmap object.

\n", + "comments": "

This object is empty, so you'll have to add a mailmap file before you can do anything with it. The mailmap must be freed with 'git_mailmap_free'.

\n", + "group": "mailmap" + }, + "git_mailmap_free": { + "type": "function", + "file": "git2/mailmap.h", + "line": 39, + "lineto": 39, + "args": [ + { + "name": "mm", + "type": "git_mailmap *", + "comment": "the mailmap to free" + } + ], + "argline": "git_mailmap *mm", + "sig": "git_mailmap *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the mailmap and its associated memory.

\n", + "comments": "", + "group": "mailmap" + }, + "git_mailmap_add_entry": { + "type": "function", + "file": "git2/mailmap.h", + "line": 52, + "lineto": 54, + "args": [ + { + "name": "mm", + "type": "git_mailmap *", + "comment": "mailmap to add the entry to" + }, + { + "name": "real_name", + "type": "const char *", + "comment": "the real name to use, or NULL" + }, + { + "name": "real_email", + "type": "const char *", + "comment": "the real email to use, or NULL" + }, + { + "name": "replace_name", + "type": "const char *", + "comment": "the name to replace, or NULL" + }, + { + "name": "replace_email", + "type": "const char *", + "comment": "the email to replace" + } + ], + "argline": "git_mailmap *mm, const char *real_name, const char *real_email, const char *replace_name, const char *replace_email", + "sig": "git_mailmap *::const char *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Add a single entry to the given mailmap object. If the entry already exists,\n it will be replaced with the new entry.

\n", + "comments": "", + "group": "mailmap" + }, + "git_mailmap_from_buffer": { + "type": "function", + "file": "git2/mailmap.h", + "line": 64, + "lineto": 65, + "args": [ + { + "name": "out", + "type": "git_mailmap **", + "comment": "pointer to store the new mailmap" + }, + { + "name": "buf", + "type": "const char *", + "comment": "buffer to parse the mailmap from" + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the input buffer" + } + ], + "argline": "git_mailmap **out, const char *buf, size_t len", + "sig": "git_mailmap **::const char *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Create a new mailmap instance containing a single mailmap file

\n", + "comments": "", + "group": "mailmap" + }, + "git_mailmap_from_repository": { + "type": "function", + "file": "git2/mailmap.h", + "line": 81, + "lineto": 82, + "args": [ + { + "name": "out", + "type": "git_mailmap **", + "comment": "pointer to store the new mailmap" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository to load mailmap information from" + } + ], + "argline": "git_mailmap **out, git_repository *repo", + "sig": "git_mailmap **::git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Create a new mailmap instance from a repository, loading mailmap files based\n on the repository's configuration.

\n", + "comments": "

Mailmaps are loaded in the following order: 1. '.mailmap' in the root of the repository's working directory, if present. 2. The blob object identified by the 'mailmap.blob' config entry, if set. [NOTE: 'mailmap.blob' defaults to 'HEAD:.mailmap' in bare repositories] 3. The path in the 'mailmap.file' config entry, if set.

\n", + "group": "mailmap" + }, + "git_mailmap_resolve": { + "type": "function", + "file": "git2/mailmap.h", + "line": 96, + "lineto": 98, + "args": [ + { + "name": "real_name", + "type": "const char **", + "comment": "pointer to store the real name" + }, + { + "name": "real_email", + "type": "const char **", + "comment": "pointer to store the real email" + }, + { + "name": "mm", + "type": "const git_mailmap *", + "comment": "the mailmap to perform a lookup with (may be NULL)" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name to look up" + }, + { + "name": "email", + "type": "const char *", + "comment": "the email to look up" + } + ], + "argline": "const char **real_name, const char **real_email, const git_mailmap *mm, const char *name, const char *email", + "sig": "const char **::const char **::const git_mailmap *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Resolve a name and email to the corresponding real name and email.

\n", + "comments": "

The lifetime of the strings are tied to mm, name, and email parameters.

\n", + "group": "mailmap" + }, + "git_mailmap_resolve_signature": { + "type": "function", + "file": "git2/mailmap.h", + "line": 110, + "lineto": 111, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature" + }, + { + "name": "mm", + "type": "const git_mailmap *", + "comment": "mailmap to resolve with" + }, + { + "name": "sig", + "type": "const git_signature *", + "comment": "signature to resolve" + } + ], + "argline": "git_signature **out, const git_mailmap *mm, const git_signature *sig", + "sig": "git_signature **::const git_mailmap *::const git_signature *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Resolve a signature to use real names and emails with a mailmap.

\n", + "comments": "

Call git_signature_free() to free the data.

\n", + "group": "mailmap" + }, + "git_merge_file_input_init": { + "type": "function", + "file": "git2/merge.h", + "line": 60, + "lineto": 62, + "args": [ + { + "name": "opts", + "type": "git_merge_file_input *", + "comment": "the `git_merge_file_input` instance to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "the version of the struct; you should pass\n `GIT_MERGE_FILE_INPUT_VERSION` here." + } + ], + "argline": "git_merge_file_input *opts, unsigned int version", + "sig": "git_merge_file_input *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initializes a git_merge_file_input with default values. Equivalent to\n creating an instance with GIT_MERGE_FILE_INPUT_INIT.

\n", + "comments": "", + "group": "merge" + }, + "git_merge_file_options_init": { + "type": "function", + "file": "git2/merge.h", + "line": 233, + "lineto": 233, + "args": [ + { + "name": "opts", + "type": "git_merge_file_options *", + "comment": "The `git_merge_file_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_MERGE_FILE_OPTIONS_VERSION`." + } + ], + "argline": "git_merge_file_options *opts, unsigned int version", + "sig": "git_merge_file_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_merge_file_options structure

\n", + "comments": "

Initializes a git_merge_file_options with default values. Equivalent to creating an instance with GIT_MERGE_FILE_OPTIONS_INIT.

\n", + "group": "merge" + }, + "git_merge_options_init": { + "type": "function", + "file": "git2/merge.h", + "line": 329, + "lineto": 329, + "args": [ + { + "name": "opts", + "type": "git_merge_options *", + "comment": "The `git_merge_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_MERGE_OPTIONS_VERSION`." + } + ], + "argline": "git_merge_options *opts, unsigned int version", + "sig": "git_merge_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_merge_options structure

\n", + "comments": "

Initializes a git_merge_options with default values. Equivalent to creating an instance with GIT_MERGE_OPTIONS_INIT.

\n", + "group": "merge" + }, + "git_merge_analysis": { + "type": "function", + "file": "git2/merge.h", + "line": 399, + "lineto": 404, + "args": [ + { + "name": "analysis_out", + "type": "git_merge_analysis_t *", + "comment": "analysis enumeration that the result is written into" + }, + { + "name": "preference_out", + "type": "git_merge_preference_t *", + "comment": "One of the `git_merge_preference_t` flag." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to merge" + }, + { + "name": "their_heads", + "type": "const git_annotated_commit **", + "comment": "the heads to merge into" + }, + { + "name": "their_heads_len", + "type": "size_t", + "comment": "the number of heads to merge" + } + ], + "argline": "git_merge_analysis_t *analysis_out, git_merge_preference_t *preference_out, git_repository *repo, const git_annotated_commit **their_heads, size_t their_heads_len", + "sig": "git_merge_analysis_t *::git_merge_preference_t *::git_repository *::const git_annotated_commit **::size_t", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into the HEAD of the repository.

\n", + "comments": "", + "group": "merge", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_merge_analysis-15" + ] + } + }, + "git_merge_analysis_for_ref": { + "type": "function", + "file": "git2/merge.h", + "line": 418, + "lineto": 424, + "args": [ + { + "name": "analysis_out", + "type": "git_merge_analysis_t *", + "comment": "analysis enumeration that the result is written into" + }, + { + "name": "preference_out", + "type": "git_merge_preference_t *", + "comment": "One of the `git_merge_preference_t` flag." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to merge" + }, + { + "name": "our_ref", + "type": "git_reference *", + "comment": "the reference to perform the analysis from" + }, + { + "name": "their_heads", + "type": "const git_annotated_commit **", + "comment": "the heads to merge into" + }, + { + "name": "their_heads_len", + "type": "size_t", + "comment": "the number of heads to merge" + } + ], + "argline": "git_merge_analysis_t *analysis_out, git_merge_preference_t *preference_out, git_repository *repo, git_reference *our_ref, const git_annotated_commit **their_heads, size_t their_heads_len", + "sig": "git_merge_analysis_t *::git_merge_preference_t *::git_repository *::git_reference *::const git_annotated_commit **::size_t", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into a reference.

\n", + "comments": "", + "group": "merge" + }, + "git_merge_base": { + "type": "function", + "file": "git2/merge.h", + "line": 435, + "lineto": 439, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the OID of a merge base between 'one' and 'two'" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "one", + "type": "const git_oid *", + "comment": "one of the commits" + }, + { + "name": "two", + "type": "const git_oid *", + "comment": "the other commit" + } + ], + "argline": "git_oid *out, git_repository *repo, const git_oid *one, const git_oid *two", + "sig": "git_oid *::git_repository *::const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if not found or error code" + }, + "description": "

Find a merge base between two commits

\n", + "comments": "", + "group": "merge", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_merge_base-31" + ], + "rev-parse.c": [ + "ex/v1.7.2/rev-parse.html#git_merge_base-1" + ] + } + }, + "git_merge_bases": { + "type": "function", + "file": "git2/merge.h", + "line": 450, + "lineto": 454, + "args": [ + { + "name": "out", + "type": "git_oidarray *", + "comment": "array in which to store the resulting ids" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "one", + "type": "const git_oid *", + "comment": "one of the commits" + }, + { + "name": "two", + "type": "const git_oid *", + "comment": "the other commit" + } + ], + "argline": "git_oidarray *out, git_repository *repo, const git_oid *one, const git_oid *two", + "sig": "git_oidarray *::git_repository *::const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if not found or error code" + }, + "description": "

Find merge bases between two commits

\n", + "comments": "", + "group": "merge" + }, + "git_merge_base_many": { + "type": "function", + "file": "git2/merge.h", + "line": 465, + "lineto": 469, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the OID of a merge base considering all the commits" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "length", + "type": "size_t", + "comment": "The number of commits in the provided `input_array`" + }, + { + "name": "input_array", + "type": "const git_oid []", + "comment": "oids of the commits" + } + ], + "argline": "git_oid *out, git_repository *repo, size_t length, const git_oid [] input_array", + "sig": "git_oid *::git_repository *::size_t::const git_oid []", + "return": { + "type": "int", + "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." + }, + "description": "

Find a merge base given a list of commits

\n", + "comments": "", + "group": "merge" + }, + "git_merge_bases_many": { + "type": "function", + "file": "git2/merge.h", + "line": 480, + "lineto": 484, + "args": [ + { + "name": "out", + "type": "git_oidarray *", + "comment": "array in which to store the resulting ids" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "length", + "type": "size_t", + "comment": "The number of commits in the provided `input_array`" + }, + { + "name": "input_array", + "type": "const git_oid []", + "comment": "oids of the commits" + } + ], + "argline": "git_oidarray *out, git_repository *repo, size_t length, const git_oid [] input_array", + "sig": "git_oidarray *::git_repository *::size_t::const git_oid []", + "return": { + "type": "int", + "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." + }, + "description": "

Find all merge bases given a list of commits

\n", + "comments": "", + "group": "merge" + }, + "git_merge_base_octopus": { + "type": "function", + "file": "git2/merge.h", + "line": 495, + "lineto": 499, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the OID of a merge base considering all the commits" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "length", + "type": "size_t", + "comment": "The number of commits in the provided `input_array`" + }, + { + "name": "input_array", + "type": "const git_oid []", + "comment": "oids of the commits" + } + ], + "argline": "git_oid *out, git_repository *repo, size_t length, const git_oid [] input_array", + "sig": "git_oid *::git_repository *::size_t::const git_oid []", + "return": { + "type": "int", + "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." + }, + "description": "

Find a merge base in preparation for an octopus merge

\n", + "comments": "", + "group": "merge" + }, + "git_merge_file": { + "type": "function", + "file": "git2/merge.h", + "line": 517, + "lineto": 522, + "args": [ + { + "name": "out", + "type": "git_merge_file_result *", + "comment": "The git_merge_file_result to be filled in" + }, + { + "name": "ancestor", + "type": "const git_merge_file_input *", + "comment": "The contents of the ancestor file" + }, + { + "name": "ours", + "type": "const git_merge_file_input *", + "comment": "The contents of the file in \"our\" side" + }, + { + "name": "theirs", + "type": "const git_merge_file_input *", + "comment": "The contents of the file in \"their\" side" + }, + { + "name": "opts", + "type": "const git_merge_file_options *", + "comment": "The merge file options or `NULL` for defaults" + } + ], + "argline": "git_merge_file_result *out, const git_merge_file_input *ancestor, const git_merge_file_input *ours, const git_merge_file_input *theirs, const git_merge_file_options *opts", + "sig": "git_merge_file_result *::const git_merge_file_input *::const git_merge_file_input *::const git_merge_file_input *::const git_merge_file_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Merge two files as they exist in the in-memory data structures, using\n the given common ancestor as the baseline, producing a\n git_merge_file_result that reflects the merge result. The\n git_merge_file_result must be freed with git_merge_file_result_free.

\n", + "comments": "

Note that this function does not reference a repository and any configuration must be passed as git_merge_file_options.

\n", + "group": "merge" + }, + "git_merge_file_from_index": { + "type": "function", + "file": "git2/merge.h", + "line": 538, + "lineto": 544, + "args": [ + { + "name": "out", + "type": "git_merge_file_result *", + "comment": "The git_merge_file_result to be filled in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository" + }, + { + "name": "ancestor", + "type": "const git_index_entry *", + "comment": "The index entry for the ancestor file (stage level 1)" + }, + { + "name": "ours", + "type": "const git_index_entry *", + "comment": "The index entry for our file (stage level 2)" + }, + { + "name": "theirs", + "type": "const git_index_entry *", + "comment": "The index entry for their file (stage level 3)" + }, + { + "name": "opts", + "type": "const git_merge_file_options *", + "comment": "The merge file options or NULL" + } + ], + "argline": "git_merge_file_result *out, git_repository *repo, const git_index_entry *ancestor, const git_index_entry *ours, const git_index_entry *theirs, const git_merge_file_options *opts", + "sig": "git_merge_file_result *::git_repository *::const git_index_entry *::const git_index_entry *::const git_index_entry *::const git_merge_file_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Merge two files as they exist in the index, using the given common\n ancestor as the baseline, producing a git_merge_file_result that\n reflects the merge result. The git_merge_file_result must be freed with\n git_merge_file_result_free.

\n", + "comments": "", + "group": "merge" + }, + "git_merge_file_result_free": { + "type": "function", + "file": "git2/merge.h", + "line": 551, + "lineto": 551, + "args": [ + { + "name": "result", + "type": "git_merge_file_result *", + "comment": "The result to free or `NULL`" + } + ], + "argline": "git_merge_file_result *result", + "sig": "git_merge_file_result *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Frees a git_merge_file_result.

\n", + "comments": "", + "group": "merge" + }, + "git_merge_trees": { + "type": "function", + "file": "git2/merge.h", + "line": 569, + "lineto": 575, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "pointer to store the index result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given trees" + }, + { + "name": "ancestor_tree", + "type": "const git_tree *", + "comment": "the common ancestor between the trees (or null if none)" + }, + { + "name": "our_tree", + "type": "const git_tree *", + "comment": "the tree that reflects the destination tree" + }, + { + "name": "their_tree", + "type": "const git_tree *", + "comment": "the tree to merge in to `our_tree`" + }, + { + "name": "opts", + "type": "const git_merge_options *", + "comment": "the merge tree options (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, const git_tree *ancestor_tree, const git_tree *our_tree, const git_tree *their_tree, const git_merge_options *opts", + "sig": "git_index **::git_repository *::const git_tree *::const git_tree *::const git_tree *::const git_merge_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Merge two trees, producing a git_index that reflects the result of\n the merge. The index may be written as-is to the working directory\n or checked out. If the index is to be converted to a tree, the caller\n should resolve any conflicts that arose as part of the merge.

\n", + "comments": "

The returned index must be freed explicitly with git_index_free.

\n", + "group": "merge" + }, + "git_merge_commits": { + "type": "function", + "file": "git2/merge.h", + "line": 592, + "lineto": 597, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "pointer to store the index result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given trees" + }, + { + "name": "our_commit", + "type": "const git_commit *", + "comment": "the commit that reflects the destination tree" + }, + { + "name": "their_commit", + "type": "const git_commit *", + "comment": "the commit to merge in to `our_commit`" + }, + { + "name": "opts", + "type": "const git_merge_options *", + "comment": "the merge tree options (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, const git_commit *our_commit, const git_commit *their_commit, const git_merge_options *opts", + "sig": "git_index **::git_repository *::const git_commit *::const git_commit *::const git_merge_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Merge two commits, producing a git_index that reflects the result of\n the merge. The index may be written as-is to the working directory\n or checked out. If the index is to be converted to a tree, the caller\n should resolve any conflicts that arose as part of the merge.

\n", + "comments": "

The returned index must be freed explicitly with git_index_free.

\n", + "group": "merge" + }, + "git_merge": { + "type": "function", + "file": "git2/merge.h", + "line": 617, + "lineto": 622, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to merge" + }, + { + "name": "their_heads", + "type": "const git_annotated_commit **", + "comment": "the heads to merge into" + }, + { + "name": "their_heads_len", + "type": "size_t", + "comment": "the number of heads to merge" + }, + { + "name": "merge_opts", + "type": "const git_merge_options *", + "comment": "merge options" + }, + { + "name": "checkout_opts", + "type": "const git_checkout_options *", + "comment": "checkout options" + } + ], + "argline": "git_repository *repo, const git_annotated_commit **their_heads, size_t their_heads_len, const git_merge_options *merge_opts, const git_checkout_options *checkout_opts", + "sig": "git_repository *::const git_annotated_commit **::size_t::const git_merge_options *::const git_checkout_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Merges the given commit(s) into HEAD, writing the results into the working\n directory. Any changes are staged for commit and any conflicts are written\n to the index. Callers should inspect the repository's index after this\n completes, resolve any conflicts and prepare a commit.

\n", + "comments": "

For compatibility with git, the repository is put into a merging state. Once the commit is done (or if the user wishes to abort), you should clear this state by calling git_repository_state_cleanup().

\n", + "group": "merge", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_merge-16" + ] + } + }, + "git_message_prettify": { + "type": "function", + "file": "git2/message.h", + "line": 38, + "lineto": 38, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The user-allocated git_buf which will be filled with the\n cleaned up message." + }, + { + "name": "message", + "type": "const char *", + "comment": "The message to be prettified." + }, + { + "name": "strip_comments", + "type": "int", + "comment": "Non-zero to remove comment lines, 0 to leave them in." + }, + { + "name": "comment_char", + "type": "char", + "comment": "Comment character. Lines starting with this character\n are considered to be comments and removed if `strip_comments` is non-zero." + } + ], + "argline": "git_buf *out, const char *message, int strip_comments, char comment_char", + "sig": "git_buf *::const char *::int::char", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Clean up excess whitespace and make sure there is a trailing newline in the message.

\n", + "comments": "

Optionally, it can remove lines which start with the comment character.

\n", + "group": "message" + }, + "git_message_trailers": { + "type": "function", + "file": "git2/message.h", + "line": 73, + "lineto": 73, + "args": [ + { + "name": "arr", + "type": "git_message_trailer_array *", + "comment": "A pre-allocated git_message_trailer_array struct to be filled in\n with any trailers found during parsing." + }, + { + "name": "message", + "type": "const char *", + "comment": "The message to be parsed" + } + ], + "argline": "git_message_trailer_array *arr, const char *message", + "sig": "git_message_trailer_array *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or non-zero on error." + }, + "description": "

Parse trailers out of a message, filling the array pointed to by +arr+.

\n", + "comments": "

Trailers are key/value pairs in the last paragraph of a message, not including any patches or conflicts that may be present.

\n", + "group": "message" + }, + "git_message_trailer_array_free": { + "type": "function", + "file": "git2/message.h", + "line": 81, + "lineto": 81, + "args": [ + { + "name": "arr", + "type": "git_message_trailer_array *", + "comment": "The trailer to free." + } + ], + "argline": "git_message_trailer_array *arr", + "sig": "git_message_trailer_array *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Clean's up any allocated memory in the git_message_trailer_array filled by\n a call to git_message_trailers.

\n", + "comments": "", + "group": "message" + }, + "git_note_iterator_new": { + "type": "function", + "file": "git2/notes.h", + "line": 49, + "lineto": 52, + "args": [ + { + "name": "out", + "type": "git_note_iterator **", + "comment": "pointer to the iterator" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to look up the note" + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" + } + ], + "argline": "git_note_iterator **out, git_repository *repo, const char *notes_ref", + "sig": "git_note_iterator **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Creates a new iterator for notes

\n", + "comments": "

The iterator must be freed manually by the user.

\n", + "group": "note" + }, + "git_note_commit_iterator_new": { + "type": "function", + "file": "git2/notes.h", + "line": 64, + "lineto": 66, + "args": [ + { + "name": "out", + "type": "git_note_iterator **", + "comment": "pointer to the iterator" + }, + { + "name": "notes_commit", + "type": "git_commit *", + "comment": "a pointer to the notes commit object" + } + ], + "argline": "git_note_iterator **out, git_commit *notes_commit", + "sig": "git_note_iterator **::git_commit *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Creates a new iterator for notes from a commit

\n", + "comments": "

The iterator must be freed manually by the user.

\n", + "group": "note" + }, + "git_note_iterator_free": { + "type": "function", + "file": "git2/notes.h", + "line": 73, + "lineto": 73, + "args": [ + { + "name": "it", + "type": "git_note_iterator *", + "comment": "pointer to the iterator" + } + ], + "argline": "git_note_iterator *it", + "sig": "git_note_iterator *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Frees an git_note_iterator

\n", + "comments": "", + "group": "note" + }, + "git_note_next": { + "type": "function", + "file": "git2/notes.h", + "line": 86, + "lineto": 89, + "args": [ + { + "name": "note_id", + "type": "git_oid *", + "comment": "id of blob containing the message" + }, + { + "name": "annotated_id", + "type": "git_oid *", + "comment": "id of the git object being annotated" + }, + { + "name": "it", + "type": "git_note_iterator *", + "comment": "pointer to the iterator" + } + ], + "argline": "git_oid *note_id, git_oid *annotated_id, git_note_iterator *it", + "sig": "git_oid *::git_oid *::git_note_iterator *", + "return": { + "type": "int", + "comment": " 0 (no error), GIT_ITEROVER (iteration is done) or an error code\n (negative value)" + }, + "description": "

Return the current item (note_id and annotated_id) and advance the iterator\n internally to the next value

\n", + "comments": "", + "group": "note" + }, + "git_note_read": { + "type": "function", + "file": "git2/notes.h", + "line": 105, + "lineto": 109, + "args": [ + { + "name": "out", + "type": "git_note **", + "comment": "pointer to the read note; NULL in case of error" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to look up the note" + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to read the note from" + } + ], + "argline": "git_note **out, git_repository *repo, const char *notes_ref, const git_oid *oid", + "sig": "git_note **::git_repository *::const char *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Read the note for an object

\n", + "comments": "

The note must be freed manually by the user.

\n", + "group": "note" + }, + "git_note_commit_read": { + "type": "function", + "file": "git2/notes.h", + "line": 124, + "lineto": 128, + "args": [ + { + "name": "out", + "type": "git_note **", + "comment": "pointer to the read note; NULL in case of error" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to look up the note" + }, + { + "name": "notes_commit", + "type": "git_commit *", + "comment": "a pointer to the notes commit object" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to read the note from" + } + ], + "argline": "git_note **out, git_repository *repo, git_commit *notes_commit, const git_oid *oid", + "sig": "git_note **::git_repository *::git_commit *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Read the note for an object from a note commit

\n", + "comments": "

The note must be freed manually by the user.

\n", + "group": "note" + }, + "git_note_author": { + "type": "function", + "file": "git2/notes.h", + "line": 136, + "lineto": 136, + "args": [ + { + "name": "note", + "type": "const git_note *", + "comment": "the note" + } + ], + "argline": "const git_note *note", + "sig": "const git_note *", + "return": { + "type": "const git_signature *", + "comment": " the author" + }, + "description": "

Get the note author

\n", + "comments": "", + "group": "note" + }, + "git_note_committer": { + "type": "function", + "file": "git2/notes.h", + "line": 144, + "lineto": 144, + "args": [ + { + "name": "note", + "type": "const git_note *", + "comment": "the note" + } + ], + "argline": "const git_note *note", + "sig": "const git_note *", + "return": { + "type": "const git_signature *", + "comment": " the committer" + }, + "description": "

Get the note committer

\n", + "comments": "", + "group": "note" + }, + "git_note_message": { + "type": "function", + "file": "git2/notes.h", + "line": 153, + "lineto": 153, + "args": [ + { + "name": "note", + "type": "const git_note *", + "comment": "the note" + } + ], + "argline": "const git_note *note", + "sig": "const git_note *", + "return": { + "type": "const char *", + "comment": " the note message" + }, + "description": "

Get the note message

\n", + "comments": "", + "group": "note" + }, + "git_note_id": { + "type": "function", + "file": "git2/notes.h", + "line": 162, + "lineto": 162, + "args": [ + { + "name": "note", + "type": "const git_note *", + "comment": "the note" + } + ], + "argline": "const git_note *note", + "sig": "const git_note *", + "return": { + "type": "const git_oid *", + "comment": " the note object's id" + }, + "description": "

Get the note object's id

\n", + "comments": "", + "group": "note" + }, + "git_note_create": { + "type": "function", + "file": "git2/notes.h", + "line": 179, + "lineto": 187, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "pointer to store the OID (optional); NULL in case of error" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to store the note" + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "signature of the notes commit author" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "signature of the notes commit committer" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to decorate" + }, + { + "name": "note", + "type": "const char *", + "comment": "Content of the note to add for object oid" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing note" + } + ], + "argline": "git_oid *out, git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int force", + "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *::const char *::int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add a note for an object

\n", + "comments": "", + "group": "note" + }, + "git_note_commit_create": { + "type": "function", + "file": "git2/notes.h", + "line": 209, + "lineto": 218, + "args": [ + { + "name": "notes_commit_out", + "type": "git_oid *", + "comment": "pointer to store the commit (optional);\n\t\t\t\t\tNULL in case of error" + }, + { + "name": "notes_blob_out", + "type": "git_oid *", + "comment": "a point to the id of a note blob (optional)" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the note will live" + }, + { + "name": "parent", + "type": "git_commit *", + "comment": "Pointer to parent note\n\t\t\t\t\tor NULL if this shall start a new notes tree" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "signature of the notes commit author" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "signature of the notes commit committer" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to decorate" + }, + { + "name": "note", + "type": "const char *", + "comment": "Content of the note to add for object oid" + }, + { + "name": "allow_note_overwrite", + "type": "int", + "comment": "Overwrite existing note" + } + ], + "argline": "git_oid *notes_commit_out, git_oid *notes_blob_out, git_repository *repo, git_commit *parent, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int allow_note_overwrite", + "sig": "git_oid *::git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *::const char *::int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add a note for an object from a commit

\n", + "comments": "

This function will create a notes commit for a given object, the commit is a dangling commit, no reference is created.

\n", + "group": "note" + }, + "git_note_remove": { + "type": "function", + "file": "git2/notes.h", + "line": 232, + "lineto": 237, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the note lives" + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "signature of the notes commit author" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "signature of the notes commit committer" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to remove the note from" + } + ], + "argline": "git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid", + "sig": "git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Remove the note for an object

\n", + "comments": "", + "group": "note" + }, + "git_note_commit_remove": { + "type": "function", + "file": "git2/notes.h", + "line": 257, + "lineto": 263, + "args": [ + { + "name": "notes_commit_out", + "type": "git_oid *", + "comment": "pointer to store the new notes commit (optional);\n\t\t\t\t\tNULL in case of error.\n\t\t\t\t\tWhen removing a note a new tree containing all notes\n\t\t\t\t\tsans the note to be removed is created and a new commit\n\t\t\t\t\tpointing to that tree is also created.\n\t\t\t\t\tIn the case where the resulting tree is an empty tree\n\t\t\t\t\ta new commit pointing to this empty tree will be returned." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the note lives" + }, + { + "name": "notes_commit", + "type": "git_commit *", + "comment": "a pointer to the notes commit object" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "signature of the notes commit author" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "signature of the notes commit committer" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to remove the note from" + } + ], + "argline": "git_oid *notes_commit_out, git_repository *repo, git_commit *notes_commit, const git_signature *author, const git_signature *committer, const git_oid *oid", + "sig": "git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Remove the note for an object

\n", + "comments": "", + "group": "note" + }, + "git_note_free": { + "type": "function", + "file": "git2/notes.h", + "line": 270, + "lineto": 270, + "args": [ + { + "name": "note", + "type": "git_note *", + "comment": "git_note object" + } + ], + "argline": "git_note *note", + "sig": "git_note *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a git_note object

\n", + "comments": "", + "group": "note" + }, + "git_note_default_ref": { + "type": "function", + "file": "git2/notes.h", + "line": 280, + "lineto": 280, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer in which to store the name of the default notes reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The Git repository" + } + ], + "argline": "git_buf *out, git_repository *repo", + "sig": "git_buf *::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the default notes reference for a repository

\n", + "comments": "", + "group": "note" + }, + "git_note_foreach": { + "type": "function", + "file": "git2/notes.h", + "line": 298, + "lineto": 302, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the notes." + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "Reference to read from (optional); defaults to\n \"refs/notes/commits\"." + }, + { + "name": "note_cb", + "type": "git_note_foreach_cb", + "comment": "Callback to invoke per found annotation. Return non-zero\n to stop looping." + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra parameter to callback function." + } + ], + "argline": "git_repository *repo, const char *notes_ref, git_note_foreach_cb note_cb, void *payload", + "sig": "git_repository *::const char *::git_note_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Loop over all the notes within a specified namespace\n and issue a callback for each one.

\n", + "comments": "", + "group": "note" + }, + "git_object_lookup": { + "type": "function", + "file": "git2/object.h", + "line": 44, + "lineto": 48, + "args": [ + { + "name": "object", + "type": "git_object **", + "comment": "pointer to the looked-up object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to look up the object" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the unique identifier for the object" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "the type of the object" + } + ], + "argline": "git_object **object, git_repository *repo, const git_oid *id, git_object_t type", + "sig": "git_object **::git_repository *::const git_oid *::git_object_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a reference to one of the objects in a repository.

\n", + "comments": "

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", + "group": "object", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_object_lookup-32" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_object_lookup-17" + ] + } + }, + "git_object_lookup_prefix": { + "type": "function", + "file": "git2/object.h", + "line": 77, + "lineto": 82, + "args": [ + { + "name": "object_out", + "type": "git_object **", + "comment": "pointer where to store the looked-up object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to look up the object" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "a short identifier for the object" + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "the type of the object" + } + ], + "argline": "git_object **object_out, git_repository *repo, const git_oid *id, size_t len, git_object_t type", + "sig": "git_object **::git_repository *::const git_oid *::size_t::git_object_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a reference to one of the objects in a repository,\n given a prefix of its identifier (short id).

\n", + "comments": "

The object obtained will be so that its identifier matches the first 'len' hexadecimal characters (packets of 4 bits) of the given 'id'. 'len' must be at least GIT_OID_MINPREFIXLEN, and long enough to identify a unique object matching the prefix; otherwise the method will fail.

\n\n

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", + "group": "object" + }, + "git_object_lookup_bypath": { + "type": "function", + "file": "git2/object.h", + "line": 95, + "lineto": 99, + "args": [ + { + "name": "out", + "type": "git_object **", + "comment": "buffer that receives a pointer to the object (which must be freed\n by the caller)" + }, + { + "name": "treeish", + "type": "const git_object *", + "comment": "root object that can be peeled to a tree" + }, + { + "name": "path", + "type": "const char *", + "comment": "relative path from the root object to the desired object" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "type of object desired" + } + ], + "argline": "git_object **out, const git_object *treeish, const char *path, git_object_t type", + "sig": "git_object **::const git_object *::const char *::git_object_t", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Lookup an object that represents a tree entry.

\n", + "comments": "", + "group": "object" + }, + "git_object_id": { + "type": "function", + "file": "git2/object.h", + "line": 107, + "lineto": 107, + "args": [ + { + "name": "obj", + "type": "const git_object *", + "comment": "the repository object" + } + ], + "argline": "const git_object *obj", + "sig": "const git_object *", + "return": { + "type": "const git_oid *", + "comment": " the SHA1 id" + }, + "description": "

Get the id (SHA1) of a repository object

\n", + "comments": "", + "group": "object", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_object_id-8", + "ex/v1.7.2/blame.html#git_object_id-9", + "ex/v1.7.2/blame.html#git_object_id-10", + "ex/v1.7.2/blame.html#git_object_id-11" + ], + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_object_id-10", + "ex/v1.7.2/cat-file.html#git_object_id-11" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_object_id-33", + "ex/v1.7.2/log.html#git_object_id-34", + "ex/v1.7.2/log.html#git_object_id-35", + "ex/v1.7.2/log.html#git_object_id-36" + ], + "rev-parse.c": [ + "ex/v1.7.2/rev-parse.html#git_object_id-2", + "ex/v1.7.2/rev-parse.html#git_object_id-3", + "ex/v1.7.2/rev-parse.html#git_object_id-4", + "ex/v1.7.2/rev-parse.html#git_object_id-5", + "ex/v1.7.2/rev-parse.html#git_object_id-6" + ] + } + }, + "git_object_short_id": { + "type": "function", + "file": "git2/object.h", + "line": 121, + "lineto": 121, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Buffer to write string into" + }, + { + "name": "obj", + "type": "const git_object *", + "comment": "The object to get an ID for" + } + ], + "argline": "git_buf *out, const git_object *obj", + "sig": "git_buf *::const git_object *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 for error" + }, + "description": "

Get a short abbreviated OID string for the object

\n", + "comments": "

This starts at the "core.abbrev" length (default 7 characters) and iteratively extends to a longer string if that length is ambiguous. The result will be unambiguous (at least until new objects are added to the repository).

\n", + "group": "object", + "examples": { + "tag.c": [ + "ex/v1.7.2/tag.html#git_object_short_id-3" + ] + } + }, + "git_object_type": { + "type": "function", + "file": "git2/object.h", + "line": 129, + "lineto": 129, + "args": [ + { + "name": "obj", + "type": "const git_object *", + "comment": "the repository object" + } + ], + "argline": "const git_object *obj", + "sig": "const git_object *", + "return": { + "type": "git_object_t", + "comment": " the object's type" + }, + "description": "

Get the object type of an object

\n", + "comments": "", + "group": "object", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_object_type-12", + "ex/v1.7.2/cat-file.html#git_object_type-13", + "ex/v1.7.2/cat-file.html#git_object_type-14" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_object_type-4" + ] + } + }, + "git_object_owner": { + "type": "function", + "file": "git2/object.h", + "line": 143, + "lineto": 143, + "args": [ + { + "name": "obj", + "type": "const git_object *", + "comment": "the object" + } + ], + "argline": "const git_object *obj", + "sig": "const git_object *", + "return": { + "type": "git_repository *", + "comment": " the repository who owns this object" + }, + "description": "

Get the repository that owns this object

\n", + "comments": "

Freeing or calling git_repository_close on the returned pointer will invalidate the actual object.

\n\n

Any other operation may be run on the repository without affecting the object.

\n", + "group": "object" + }, + "git_object_free": { + "type": "function", + "file": "git2/object.h", + "line": 160, + "lineto": 160, + "args": [ + { + "name": "object", + "type": "git_object *", + "comment": "the object to close" + } + ], + "argline": "git_object *object", + "sig": "git_object *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Close an open object

\n", + "comments": "

This method instructs the library to close an existing object; note that git_objects are owned and cached by the repository so the object may or may not be freed after this library call, depending on how aggressive is the caching mechanism used by the repository.

\n\n

IMPORTANT: It is necessary to call this method when you stop using an object. Failure to do so will cause a memory leak.

\n", + "group": "object", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_object_free-12", + "ex/v1.7.2/blame.html#git_object_free-13", + "ex/v1.7.2/blame.html#git_object_free-14", + "ex/v1.7.2/blame.html#git_object_free-15" + ], + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_object_free-15" + ], + "commit.c": [ + "ex/v1.7.2/commit.html#git_object_free-6" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_object_free-38" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_object_free-37" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_object_free-18" + ], + "rev-parse.c": [ + "ex/v1.7.2/rev-parse.html#git_object_free-7", + "ex/v1.7.2/rev-parse.html#git_object_free-8", + "ex/v1.7.2/rev-parse.html#git_object_free-9" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_object_free-5", + "ex/v1.7.2/tag.html#git_object_free-6", + "ex/v1.7.2/tag.html#git_object_free-7", + "ex/v1.7.2/tag.html#git_object_free-8" + ] + } + }, + "git_object_type2string": { + "type": "function", + "file": "git2/object.h", + "line": 171, + "lineto": 171, + "args": [ + { + "name": "type", + "type": "git_object_t", + "comment": "object type to convert." + } + ], + "argline": "git_object_t type", + "sig": "git_object_t", + "return": { + "type": "const char *", + "comment": " the corresponding string representation." + }, + "description": "

Convert an object type to its string representation.

\n", + "comments": "

The result is a pointer to a string in static memory and should not be free()'ed.

\n", + "group": "object", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_object_type2string-16", + "ex/v1.7.2/cat-file.html#git_object_type2string-17", + "ex/v1.7.2/cat-file.html#git_object_type2string-18", + "ex/v1.7.2/cat-file.html#git_object_type2string-19" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_object_type2string-39", + "ex/v1.7.2/general.html#git_object_type2string-40" + ] + } + }, + "git_object_string2type": { + "type": "function", + "file": "git2/object.h", + "line": 179, + "lineto": 179, + "args": [ + { + "name": "str", + "type": "const char *", + "comment": "the string to convert." + } + ], + "argline": "const char *str", + "sig": "const char *", + "return": { + "type": "git_object_t", + "comment": " the corresponding git_object_t." + }, + "description": "

Convert a string object type representation to it's git_object_t.

\n", + "comments": "", + "group": "object" + }, + "git_object_typeisloose": { + "type": "function", + "file": "git2/object.h", + "line": 188, + "lineto": 188, + "args": [ + { + "name": "type", + "type": "git_object_t", + "comment": "object type to test." + } + ], + "argline": "git_object_t type", + "sig": "git_object_t", + "return": { + "type": "int", + "comment": " true if the type represents a valid loose object type,\n false otherwise." + }, + "description": "

Determine if the given git_object_t is a valid loose object type.

\n", + "comments": "", + "group": "object" + }, + "git_object_peel": { + "type": "function", + "file": "git2/object.h", + "line": 213, + "lineto": 216, + "args": [ + { + "name": "peeled", + "type": "git_object **", + "comment": "Pointer to the peeled git_object" + }, + { + "name": "object", + "type": "const git_object *", + "comment": "The object to be processed" + }, + { + "name": "target_type", + "type": "git_object_t", + "comment": "The type of the requested object (a GIT_OBJECT_ value)" + } + ], + "argline": "git_object **peeled, const git_object *object, git_object_t target_type", + "sig": "git_object **::const git_object *::git_object_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC, GIT_EPEEL, or an error code" + }, + "description": "

Recursively peel an object until an object of the specified type is met.

\n", + "comments": "

If the query cannot be satisfied due to the object model, GIT_EINVALIDSPEC will be returned (e.g. trying to peel a blob to a tree).

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until the type changes. A tag will be peeled until the referenced object is no longer a tag, and a commit will be peeled to a tree. Any other object type will return GIT_EINVALIDSPEC.

\n\n

If peeling a tag we discover an object which cannot be peeled to the target type due to the object model, GIT_EPEEL will be returned.

\n\n

You must free the returned object.

\n", + "group": "object" + }, + "git_object_dup": { + "type": "function", + "file": "git2/object.h", + "line": 226, + "lineto": 226, + "args": [ + { + "name": "dest", + "type": "git_object **", + "comment": "Pointer to store the copy of the object" + }, + { + "name": "source", + "type": "git_object *", + "comment": "Original object to copy" + } + ], + "argline": "git_object **dest, git_object *source", + "sig": "git_object **::git_object *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create an in-memory copy of a Git object. The copy must be\n explicitly free'd or it will leak.

\n", + "comments": "", + "group": "object" + }, + "git_object_rawcontent_is_valid": { + "type": "function", + "file": "git2/object.h", + "line": 269, + "lineto": 273, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "Output pointer to set with validity of the object content" + }, + { + "name": "buf", + "type": "const char *", + "comment": "The contents to validate" + }, + { + "name": "len", + "type": "size_t", + "comment": "The length of the buffer" + }, + { + "name": "object_type", + "type": "git_object_t", + "comment": "The type of the object in the buffer" + } + ], + "argline": "int *valid, const char *buf, size_t len, git_object_t object_type", + "sig": "int *::const char *::size_t::git_object_t", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Analyzes a buffer of raw object content and determines its validity.\n Tree, commit, and tag objects will be parsed and ensured that they\n are valid, parseable content. (Blobs are always valid by definition.)\n An error message will be set with an informative message if the object\n is not valid.

\n", + "comments": "", + "group": "object" + }, + "git_odb_add_disk_alternate": { + "type": "function", + "file": "git2/odb.h", + "line": 118, + "lineto": 118, + "args": [ + { + "name": "odb", + "type": "git_odb *", + "comment": "database to add the backend to" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to the objects folder for the alternate" + } + ], + "argline": "git_odb *odb, const char *path", + "sig": "git_odb *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Add an on-disk alternate to an existing Object DB.

\n", + "comments": "

Note that the added path must point to an objects, not to a full repository, to use it as an alternate store.

\n\n

Alternate backends are always checked for objects after all the main backends have been exhausted.

\n\n

Writing is disabled on alternate backends.

\n", + "group": "odb" + }, + "git_odb_free": { + "type": "function", + "file": "git2/odb.h", + "line": 125, + "lineto": 125, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "database pointer to close. If NULL no action is taken." + } + ], + "argline": "git_odb *db", + "sig": "git_odb *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Close an open object database.

\n", + "comments": "", + "group": "odb", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_odb_free-20" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_odb_free-41" + ] + } + }, + "git_odb_read": { + "type": "function", + "file": "git2/odb.h", + "line": 143, + "lineto": 143, + "args": [ + { + "name": "out", + "type": "git_odb_object **", + "comment": "pointer where to store the read object" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "database to search for the object in." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the object to read." + } + ], + "argline": "git_odb_object **out, git_odb *db, const git_oid *id", + "sig": "git_odb_object **::git_odb *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is\n not in the database." + }, + "description": "

Read an object from the database.

\n", + "comments": "

This method queries all available ODB backends trying to read the given OID.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", + "group": "odb", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_odb_read-21" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_odb_read-42" + ] + } + }, + "git_odb_read_prefix": { + "type": "function", + "file": "git2/odb.h", + "line": 171, + "lineto": 171, + "args": [ + { + "name": "out", + "type": "git_odb_object **", + "comment": "pointer where to store the read object" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "database to search for the object in." + }, + { + "name": "short_id", + "type": "const git_oid *", + "comment": "a prefix of the id of the object to read." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the prefix" + } + ], + "argline": "git_odb_object **out, git_odb *db, const git_oid *short_id, size_t len", + "sig": "git_odb_object **::git_odb *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is not in the\n database. GIT_EAMBIGUOUS if the prefix is ambiguous\n (several objects match the prefix)" + }, + "description": "

Read an object from the database, given a prefix\n of its identifier.

\n", + "comments": "

This method queries all available ODB backends trying to match the 'len' first hexadecimal characters of the 'short_id'. The remaining (GIT_OID_SHA1_HEXSIZE-len)*4 bits of 'short_id' must be 0s. 'len' must be at least GIT_OID_MINPREFIXLEN, and the prefix must be long enough to identify a unique object in all the backends; the method will fail otherwise.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", + "group": "odb" + }, + "git_odb_read_header": { + "type": "function", + "file": "git2/odb.h", + "line": 190, + "lineto": 190, + "args": [ + { + "name": "len_out", + "type": "size_t *", + "comment": "pointer where to store the length" + }, + { + "name": "type_out", + "type": "git_object_t *", + "comment": "pointer where to store the type" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "database to search for the object in." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the object to read." + } + ], + "argline": "size_t *len_out, git_object_t *type_out, git_odb *db, const git_oid *id", + "sig": "size_t *::git_object_t *::git_odb *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is not\n in the database." + }, + "description": "

Read the header of an object from the database, without\n reading its full contents.

\n", + "comments": "

The header includes the length and the type of an object.

\n\n

Note that most backends do not support reading only the header of an object, so the whole object will be read and then the header will be returned.

\n", + "group": "odb" + }, + "git_odb_exists": { + "type": "function", + "file": "git2/odb.h", + "line": 199, + "lineto": 199, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "database to be searched for the given object." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the object to search for." + } + ], + "argline": "git_odb *db, const git_oid *id", + "sig": "git_odb *::const git_oid *", + "return": { + "type": "int", + "comment": " 1 if the object was found, 0 otherwise" + }, + "description": "

Determine if the given object can be found in the object database.

\n", + "comments": "", + "group": "odb" + }, + "git_odb_exists_ext": { + "type": "function", + "file": "git2/odb.h", + "line": 210, + "lineto": 210, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "database to be searched for the given object." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the object to search for." + }, + { + "name": "flags", + "type": "unsigned int", + "comment": "flags affecting the lookup (see `git_odb_lookup_flags_t`)" + } + ], + "argline": "git_odb *db, const git_oid *id, unsigned int flags", + "sig": "git_odb *::const git_oid *::unsigned int", + "return": { + "type": "int", + "comment": " 1 if the object was found, 0 otherwise" + }, + "description": "

Determine if the given object can be found in the object database, with\n extended options.

\n", + "comments": "", + "group": "odb" + }, + "git_odb_exists_prefix": { + "type": "function", + "file": "git2/odb.h", + "line": 223, + "lineto": 224, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "The full OID of the found object if just one is found." + }, + { + "name": "db", + "type": "git_odb *", + "comment": "The database to be searched for the given object." + }, + { + "name": "short_id", + "type": "const git_oid *", + "comment": "A prefix of the id of the object to read." + }, + { + "name": "len", + "type": "size_t", + "comment": "The length of the prefix." + } + ], + "argline": "git_oid *out, git_odb *db, const git_oid *short_id, size_t len", + "sig": "git_oid *::git_odb *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 if found, GIT_ENOTFOUND if not found, GIT_EAMBIGUOUS if multiple\n matches were found, other value \n<\n 0 if there was a read error." + }, + "description": "

Determine if an object can be found in the object database by an\n abbreviated object ID.

\n", + "comments": "", + "group": "odb" + }, + "git_odb_expand_ids": { + "type": "function", + "file": "git2/odb.h", + "line": 266, + "lineto": 269, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "The database to be searched for the given objects." + }, + { + "name": "ids", + "type": "git_odb_expand_id *", + "comment": "An array of short object IDs to search for" + }, + { + "name": "count", + "type": "size_t", + "comment": "The length of the `ids` array" + } + ], + "argline": "git_odb *db, git_odb_expand_id *ids, size_t count", + "sig": "git_odb *::git_odb_expand_id *::size_t", + "return": { + "type": "int", + "comment": " 0 on success or an error code on failure" + }, + "description": "

Determine if one or more objects can be found in the object database\n by their abbreviated object ID and type.

\n", + "comments": "

The given array will be updated in place: for each abbreviated ID that is unique in the database, and of the given type (if specified), the full object ID, object ID length (GIT_OID_SHA1_HEXSIZE) and type will be written back to the array. For IDs that are not found (or are ambiguous), the array entry will be zeroed.

\n\n

Note that since this function operates on multiple objects, the underlying database will not be asked to be reloaded if an object is not found (which is unlike other object database operations.)

\n", + "group": "odb" + }, + "git_odb_refresh": { + "type": "function", + "file": "git2/odb.h", + "line": 289, + "lineto": 289, + "args": [ + { + "name": "db", + "type": "struct git_odb *", + "comment": "database to refresh" + } + ], + "argline": "struct git_odb *db", + "sig": "struct git_odb *", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Refresh the object database to load newly added files.

\n", + "comments": "

If the object databases have changed on disk while the library is running, this function will force a reload of the underlying indexes.

\n\n

Use this function when you're confident that an external application has tampered with the ODB.

\n\n

NOTE that it is not necessary to call this function at all. The library will automatically attempt to refresh the ODB when a lookup fails, to see if the looked up object exists on disk but hasn't been loaded yet.

\n", + "group": "odb" + }, + "git_odb_foreach": { + "type": "function", + "file": "git2/odb.h", + "line": 304, + "lineto": 304, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "database to use" + }, + { + "name": "cb", + "type": "git_odb_foreach_cb", + "comment": "the callback to call for each object" + }, + { + "name": "payload", + "type": "void *", + "comment": "data to pass to the callback" + } + ], + "argline": "git_odb *db, git_odb_foreach_cb cb, void *payload", + "sig": "git_odb *::git_odb_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

List all objects available in the database

\n", + "comments": "

The callback will be called for each object available in the database. Note that the objects are likely to be returned in the index order, which would make accessing the objects in that order inefficient. Return a non-zero value from the callback to stop looping.

\n", + "group": "odb" + }, + "git_odb_write": { + "type": "function", + "file": "git2/odb.h", + "line": 324, + "lineto": 324, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "pointer to store the OID result of the write" + }, + { + "name": "odb", + "type": "git_odb *", + "comment": "object database where to store the object" + }, + { + "name": "data", + "type": "const void *", + "comment": "buffer with the data to store" + }, + { + "name": "len", + "type": "size_t", + "comment": "size of the buffer" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "type of the data to store" + } + ], + "argline": "git_oid *out, git_odb *odb, const void *data, size_t len, git_object_t type", + "sig": "git_oid *::git_odb *::const void *::size_t::git_object_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Write an object directly into the ODB

\n", + "comments": "

This method writes a full object straight into the ODB. For most cases, it is preferred to write objects through a write stream, which is both faster and less memory intensive, specially for big objects.

\n\n

This method is provided for compatibility with custom backends which are not able to support streaming writes

\n", + "group": "odb", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_odb_write-43" + ] + } + }, + "git_odb_open_wstream": { + "type": "function", + "file": "git2/odb.h", + "line": 347, + "lineto": 347, + "args": [ + { + "name": "out", + "type": "git_odb_stream **", + "comment": "pointer where to store the stream" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "object database where the stream will write" + }, + { + "name": "size", + "type": "git_object_size_t", + "comment": "final size of the object that will be written" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "type of the object that will be written" + } + ], + "argline": "git_odb_stream **out, git_odb *db, git_object_size_t size, git_object_t type", + "sig": "git_odb_stream **::git_odb *::git_object_size_t::git_object_t", + "return": { + "type": "int", + "comment": " 0 if the stream was created; error code otherwise" + }, + "description": "

Open a stream to write an object into the ODB

\n", + "comments": "

The type and final length of the object must be specified when opening the stream.

\n\n

The returned stream will be of type GIT_STREAM_WRONLY, and it won't be effective until git_odb_stream_finalize_write is called and returns without an error

\n\n

The stream must always be freed when done with git_odb_stream_free or will leak memory.

\n", + "group": "odb" + }, + "git_odb_stream_write": { + "type": "function", + "file": "git2/odb.h", + "line": 360, + "lineto": 360, + "args": [ + { + "name": "stream", + "type": "git_odb_stream *", + "comment": "the stream" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "the data to write" + }, + { + "name": "len", + "type": "size_t", + "comment": "the buffer's length" + } + ], + "argline": "git_odb_stream *stream, const char *buffer, size_t len", + "sig": "git_odb_stream *::const char *::size_t", + "return": { + "type": "int", + "comment": " 0 if the write succeeded, error code otherwise" + }, + "description": "

Write to an odb stream

\n", + "comments": "

This method will fail if the total number of received bytes exceeds the size declared with git_odb_open_wstream()

\n", + "group": "odb" + }, + "git_odb_stream_finalize_write": { + "type": "function", + "file": "git2/odb.h", + "line": 375, + "lineto": 375, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "pointer to store the resulting object's id" + }, + { + "name": "stream", + "type": "git_odb_stream *", + "comment": "the stream" + } + ], + "argline": "git_oid *out, git_odb_stream *stream", + "sig": "git_oid *::git_odb_stream *", + "return": { + "type": "int", + "comment": " 0 on success, an error code otherwise" + }, + "description": "

Finish writing to an odb stream

\n", + "comments": "

The object will take its final name and will be available to the odb.

\n\n

This method will fail if the total number of received bytes differs from the size declared with git_odb_open_wstream()

\n", + "group": "odb" + }, + "git_odb_stream_read": { + "type": "function", + "file": "git2/odb.h", + "line": 387, + "lineto": 387, + "args": [ + { + "name": "stream", + "type": "git_odb_stream *", + "comment": "the stream" + }, + { + "name": "buffer", + "type": "char *", + "comment": "a user-allocated buffer to store the data in." + }, + { + "name": "len", + "type": "size_t", + "comment": "the buffer's length" + } + ], + "argline": "git_odb_stream *stream, char *buffer, size_t len", + "sig": "git_odb_stream *::char *::size_t", + "return": { + "type": "int", + "comment": " 0 if the read succeeded, error code otherwise" + }, + "description": "

Read from an odb stream

\n", + "comments": "

Most backends don't implement streaming reads

\n", + "group": "odb" + }, + "git_odb_stream_free": { + "type": "function", + "file": "git2/odb.h", + "line": 394, + "lineto": 394, + "args": [ + { + "name": "stream", + "type": "git_odb_stream *", + "comment": "the stream to free" + } + ], + "argline": "git_odb_stream *stream", + "sig": "git_odb_stream *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free an odb stream

\n", + "comments": "", + "group": "odb" + }, + "git_odb_open_rstream": { + "type": "function", + "file": "git2/odb.h", + "line": 422, + "lineto": 427, + "args": [ + { + "name": "out", + "type": "git_odb_stream **", + "comment": "pointer where to store the stream" + }, + { + "name": "len", + "type": "size_t *", + "comment": "pointer where to store the length of the object" + }, + { + "name": "type", + "type": "git_object_t *", + "comment": "pointer where to store the type of the object" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "object database where the stream will read from" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "oid of the object the stream will read from" + } + ], + "argline": "git_odb_stream **out, size_t *len, git_object_t *type, git_odb *db, const git_oid *oid", + "sig": "git_odb_stream **::size_t *::git_object_t *::git_odb *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 if the stream was created, error code otherwise" + }, + "description": "

Open a stream to read an object from the ODB

\n", + "comments": "

Note that most backends do not support streaming reads because they store their objects as compressed/delta'ed blobs.

\n\n

It's recommended to use git_odb_read instead, which is assured to work on all backends.

\n\n

The returned stream will be of type GIT_STREAM_RDONLY and will have the following methods:

\n\n
    - stream->read: read `n` bytes from the stream      - stream->free: free the stream\n
\n\n

The stream must always be free'd or will leak memory.

\n", + "group": "odb" + }, + "git_odb_write_pack": { + "type": "function", + "file": "git2/odb.h", + "line": 448, + "lineto": 452, + "args": [ + { + "name": "out", + "type": "git_odb_writepack **", + "comment": "pointer to the writepack functions" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "object database where the stream will read from" + }, + { + "name": "progress_cb", + "type": "git_indexer_progress_cb", + "comment": "function to call with progress information.\n Be aware that this is called inline with network and indexing operations,\n so performance may be affected." + }, + { + "name": "progress_payload", + "type": "void *", + "comment": "payload for the progress callback" + } + ], + "argline": "git_odb_writepack **out, git_odb *db, git_indexer_progress_cb progress_cb, void *progress_payload", + "sig": "git_odb_writepack **::git_odb *::git_indexer_progress_cb::void *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Open a stream for writing a pack file to the ODB.

\n", + "comments": "

If the ODB layer understands pack files, then the given packfile will likely be streamed directly to disk (and a corresponding index created). If the ODB layer does not understand pack files, the objects will be stored in whatever format the ODB layer uses.

\n", + "group": "odb" + }, + "git_odb_write_multi_pack_index": { + "type": "function", + "file": "git2/odb.h", + "line": 466, + "lineto": 467, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "object database where the `multi-pack-index` file will be written." + } + ], + "argline": "git_odb *db", + "sig": "git_odb *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Write a multi-pack-index file from all the .pack files in the ODB.

\n", + "comments": "

If the ODB layer understands pack files, then this will create a file called multi-pack-index next to the .pack and .idx files, which will contain an index of all objects stored in .pack files. This will allow for O(log n) lookup for n objects (regardless of how many packfiles there exist).

\n", + "group": "odb" + }, + "git_odb_object_dup": { + "type": "function", + "file": "git2/odb.h", + "line": 529, + "lineto": 529, + "args": [ + { + "name": "dest", + "type": "git_odb_object **", + "comment": "pointer where to store the copy" + }, + { + "name": "source", + "type": "git_odb_object *", + "comment": "object to copy" + } + ], + "argline": "git_odb_object **dest, git_odb_object *source", + "sig": "git_odb_object **::git_odb_object *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a copy of an odb_object

\n", + "comments": "

The returned copy must be manually freed with git_odb_object_free. Note that because of an implementation detail, the returned copy will be the same pointer as source: the object is internally refcounted, so the copy still needs to be freed twice.

\n", + "group": "odb" + }, + "git_odb_object_free": { + "type": "function", + "file": "git2/odb.h", + "line": 539, + "lineto": 539, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "object to close" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Close an ODB object

\n", + "comments": "

This method must always be called once a git_odb_object is no longer needed, otherwise memory will leak.

\n", + "group": "odb", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_odb_object_free-22" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_odb_object_free-44" + ] + } + }, + "git_odb_object_id": { + "type": "function", + "file": "git2/odb.h", + "line": 549, + "lineto": 549, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "the object" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { + "type": "const git_oid *", + "comment": " a pointer to the OID" + }, + "description": "

Return the OID of an ODB object

\n", + "comments": "

This is the OID from which the object was read from

\n", + "group": "odb" + }, + "git_odb_object_data": { + "type": "function", + "file": "git2/odb.h", + "line": 562, + "lineto": 562, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "the object" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { + "type": "const void *", + "comment": " a pointer to the data" + }, + "description": "

Return the data of an ODB object

\n", + "comments": "

This is the uncompressed, raw data as read from the ODB, without the leading header.

\n\n

This pointer is owned by the object and shall not be free'd.

\n", + "group": "odb", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_odb_object_data-45" + ] + } + }, + "git_odb_object_size": { + "type": "function", + "file": "git2/odb.h", + "line": 573, + "lineto": 573, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "the object" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { + "type": "size_t", + "comment": " the size" + }, + "description": "

Return the size of an ODB object

\n", + "comments": "

This is the real size of the data buffer, not the actual size of the object.

\n", + "group": "odb", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_odb_object_size-23" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_odb_object_size-46" + ] + } + }, + "git_odb_object_type": { + "type": "function", + "file": "git2/odb.h", + "line": 581, + "lineto": 581, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "the object" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { + "type": "git_object_t", + "comment": " the type" + }, + "description": "

Return the type of an ODB object

\n", + "comments": "", + "group": "odb", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_odb_object_type-47" + ] + } + }, + "git_odb_add_backend": { + "type": "function", + "file": "git2/odb.h", + "line": 596, + "lineto": 596, + "args": [ + { + "name": "odb", + "type": "git_odb *", + "comment": "database to add the backend to" + }, + { + "name": "backend", + "type": "git_odb_backend *", + "comment": "pointer to a git_odb_backend instance" + }, + { + "name": "priority", + "type": "int", + "comment": "Value for ordering the backends queue" + } + ], + "argline": "git_odb *odb, git_odb_backend *backend, int priority", + "sig": "git_odb *::git_odb_backend *::int", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Add a custom backend to an existing Object DB

\n", + "comments": "

The backends are checked in relative ordering, based on the value of the priority parameter.

\n\n

Read for more information.

\n", + "group": "odb" + }, + "git_odb_add_alternate": { + "type": "function", + "file": "git2/odb.h", + "line": 617, + "lineto": 617, + "args": [ + { + "name": "odb", + "type": "git_odb *", + "comment": "database to add the backend to" + }, + { + "name": "backend", + "type": "git_odb_backend *", + "comment": "pointer to a git_odb_backend instance" + }, + { + "name": "priority", + "type": "int", + "comment": "Value for ordering the backends queue" + } + ], + "argline": "git_odb *odb, git_odb_backend *backend, int priority", + "sig": "git_odb *::git_odb_backend *::int", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Add a custom backend to an existing Object DB; this\n backend will work as an alternate.

\n", + "comments": "

Alternate backends are always checked for objects after all the main backends have been exhausted.

\n\n

The backends are checked in relative ordering, based on the value of the priority parameter.

\n\n

Writing is disabled on alternate backends.

\n\n

Read for more information.

\n", + "group": "odb" + }, + "git_odb_num_backends": { + "type": "function", + "file": "git2/odb.h", + "line": 625, + "lineto": 625, + "args": [ + { + "name": "odb", + "type": "git_odb *", + "comment": "object database" + } + ], + "argline": "git_odb *odb", + "sig": "git_odb *", + "return": { + "type": "size_t", + "comment": " number of backends in the ODB" + }, + "description": "

Get the number of ODB backend objects

\n", + "comments": "", + "group": "odb" + }, + "git_odb_get_backend": { + "type": "function", + "file": "git2/odb.h", + "line": 635, + "lineto": 635, + "args": [ + { + "name": "out", + "type": "git_odb_backend **", + "comment": "output pointer to ODB backend at pos" + }, + { + "name": "odb", + "type": "git_odb *", + "comment": "object database" + }, + { + "name": "pos", + "type": "size_t", + "comment": "index into object database backend list" + } + ], + "argline": "git_odb_backend **out, git_odb *odb, size_t pos", + "sig": "git_odb_backend **::git_odb *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if pos is invalid, other errors \n<\n 0" + }, + "description": "

Lookup an ODB backend object by index

\n", + "comments": "", + "group": "odb" + }, + "git_odb_set_commit_graph": { + "type": "function", + "file": "git2/odb.h", + "line": 650, + "lineto": 650, + "args": [ + { + "name": "odb", + "type": "git_odb *", + "comment": "object database" + }, + { + "name": "cgraph", + "type": "git_commit_graph *", + "comment": "the git commit-graph" + } + ], + "argline": "git_odb *odb, git_commit_graph *cgraph", + "sig": "git_odb *::git_commit_graph *", + "return": { + "type": "int", + "comment": " 0 on success; error code otherwise" + }, + "description": "

Set the git commit-graph for the ODB.

\n", + "comments": "

After a successful call, the ownership of the cgraph parameter will be transferred to libgit2, and the caller should not free it.

\n\n

The commit-graph can also be unset by explicitly passing NULL as the cgraph parameter.

\n", + "group": "odb" + }, + "git_oid_fmt": { + "type": "function", + "file": "git2/oid.h", + "line": 188, + "lineto": 188, + "args": [ + { + "name": "out", + "type": "char *", + "comment": "output hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (40 bytes for SHA1,\n\t\t64 bytes for SHA256). Only the oid digits are written;\n\t\ta '\n\\\n0' terminator must be added by the caller if it is\n\t\trequired." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure to format." + } + ], + "argline": "char *out, const git_oid *id", + "sig": "char *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Format a git_oid into a hex string.

\n", + "comments": "", + "group": "oid", + "examples": { + "fetch.c": [ + "ex/v1.7.2/fetch.html#git_oid_fmt-1", + "ex/v1.7.2/fetch.html#git_oid_fmt-2" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_oid_fmt-48", + "ex/v1.7.2/general.html#git_oid_fmt-49", + "ex/v1.7.2/general.html#git_oid_fmt-50", + "ex/v1.7.2/general.html#git_oid_fmt-51", + "ex/v1.7.2/general.html#git_oid_fmt-52" + ], + "ls-remote.c": [ + "ex/v1.7.2/ls-remote.html#git_oid_fmt-1" + ] + } + }, + "git_oid_nfmt": { + "type": "function", + "file": "git2/oid.h", + "line": 200, + "lineto": 200, + "args": [ + { + "name": "out", + "type": "char *", + "comment": "output hex string; you say how many bytes to write.\n\t\tIf the number of bytes is > GIT_OID_SHA1_HEXSIZE, extra bytes\n\t\twill be zeroed; if not, a '\n\\\n0' terminator is NOT added." + }, + { + "name": "n", + "type": "size_t", + "comment": "number of characters to write into out string" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure to format." + } + ], + "argline": "char *out, size_t n, const git_oid *id", + "sig": "char *::size_t::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Format a git_oid into a partial hex string.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_pathfmt": { + "type": "function", + "file": "git2/oid.h", + "line": 217, + "lineto": 217, + "args": [ + { + "name": "out", + "type": "char *", + "comment": "output hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (41 bytes for SHA1,\n\t\t65 bytes for SHA256). Only the oid digits are written;\n\t\ta '\n\\\n0' terminator must be added by the caller if it\n\t\tis required." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure to format." + } + ], + "argline": "char *out, const git_oid *id", + "sig": "char *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Format a git_oid into a loose-object path string.

\n", + "comments": "

The resulting string is "aa/...", where "aa" is the first two hex digits of the oid and "..." is the remaining 38 digits.

\n", + "group": "oid" + }, + "git_oid_tostr_s": { + "type": "function", + "file": "git2/oid.h", + "line": 230, + "lineto": 230, + "args": [ + { + "name": "oid", + "type": "const git_oid *", + "comment": "The oid structure to format" + } + ], + "argline": "const git_oid *oid", + "sig": "const git_oid *", + "return": { + "type": "char *", + "comment": " the c-string or NULL on failure" + }, + "description": "

Format a git_oid into a statically allocated c-string.

\n", + "comments": "

The c-string is owned by the library and should not be freed by the user. If libgit2 is built with thread support, the string will be stored in TLS (i.e. one buffer per thread) to allow for concurrent calls of the function.

\n", + "group": "oid", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_oid_tostr_s-19", + "ex/v1.7.2/merge.html#git_oid_tostr_s-20" + ] + } + }, + "git_oid_tostr": { + "type": "function", + "file": "git2/oid.h", + "line": 251, + "lineto": 251, + "args": [ + { + "name": "out", + "type": "char *", + "comment": "the buffer into which the oid string is output." + }, + { + "name": "n", + "type": "size_t", + "comment": "the size of the out buffer." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the oid structure to format." + } + ], + "argline": "char *out, size_t n, const git_oid *id", + "sig": "char *::size_t::const git_oid *", + "return": { + "type": "char *", + "comment": " the out buffer pointer, assuming no input parameter\n\t\t\terrors, otherwise a pointer to an empty string." + }, + "description": "

Format a git_oid into a buffer as a hex format c-string.

\n", + "comments": "

If the buffer is smaller than the size of a hex-formatted oid string plus an additional byte (GIT_OID_SHA_HEXSIZE + 1 for SHA1 or GIT_OID_SHA256_HEXSIZE + 1 for SHA256), then the resulting oid c-string will be truncated to n-1 characters (but will still be NUL-byte terminated).

\n\n

If there are any input parameter errors (out == NULL, n == 0, oid == NULL), then a pointer to an empty string is returned, so that the return value can always be printed.

\n", + "group": "oid", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_oid_tostr-16", + "ex/v1.7.2/blame.html#git_oid_tostr-17" + ], + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_oid_tostr-24", + "ex/v1.7.2/cat-file.html#git_oid_tostr-25", + "ex/v1.7.2/cat-file.html#git_oid_tostr-26", + "ex/v1.7.2/cat-file.html#git_oid_tostr-27", + "ex/v1.7.2/cat-file.html#git_oid_tostr-28" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_oid_tostr-38", + "ex/v1.7.2/log.html#git_oid_tostr-39" + ], + "rev-parse.c": [ + "ex/v1.7.2/rev-parse.html#git_oid_tostr-10", + "ex/v1.7.2/rev-parse.html#git_oid_tostr-11", + "ex/v1.7.2/rev-parse.html#git_oid_tostr-12", + "ex/v1.7.2/rev-parse.html#git_oid_tostr-13" + ] + } + }, + "git_oid_cpy": { + "type": "function", + "file": "git2/oid.h", + "line": 260, + "lineto": 260, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "oid structure the result is written into." + }, + { + "name": "src", + "type": "const git_oid *", + "comment": "oid structure to copy from." + } + ], + "argline": "git_oid *out, const git_oid *src", + "sig": "git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Copy an oid from one structure to another.

\n", + "comments": "", + "group": "oid", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_oid_cpy-18", + "ex/v1.7.2/blame.html#git_oid_cpy-19", + "ex/v1.7.2/blame.html#git_oid_cpy-20" + ] + } + }, + "git_oid_cmp": { + "type": "function", + "file": "git2/oid.h", + "line": 269, + "lineto": 269, + "args": [ + { + "name": "a", + "type": "const git_oid *", + "comment": "first oid structure." + }, + { + "name": "b", + "type": "const git_oid *", + "comment": "second oid structure." + } + ], + "argline": "const git_oid *a, const git_oid *b", + "sig": "const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " \n<\n0, 0, >0 if a \n<\n b, a == b, a > b." + }, + "description": "

Compare two oid structures.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_equal": { + "type": "function", + "file": "git2/oid.h", + "line": 278, + "lineto": 278, + "args": [ + { + "name": "a", + "type": "const git_oid *", + "comment": "first oid structure." + }, + { + "name": "b", + "type": "const git_oid *", + "comment": "second oid structure." + } + ], + "argline": "const git_oid *a, const git_oid *b", + "sig": "const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " true if equal, false otherwise" + }, + "description": "

Compare two oid structures for equality

\n", + "comments": "", + "group": "oid" + }, + "git_oid_ncmp": { + "type": "function", + "file": "git2/oid.h", + "line": 289, + "lineto": 289, + "args": [ + { + "name": "a", + "type": "const git_oid *", + "comment": "first oid structure." + }, + { + "name": "b", + "type": "const git_oid *", + "comment": "second oid structure." + }, + { + "name": "len", + "type": "size_t", + "comment": "the number of hex chars to compare" + } + ], + "argline": "const git_oid *a, const git_oid *b, size_t len", + "sig": "const git_oid *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 in case of a match" + }, + "description": "

Compare the first 'len' hexadecimal characters (packets of 4 bits)\n of two oid structures.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_streq": { + "type": "function", + "file": "git2/oid.h", + "line": 298, + "lineto": 298, + "args": [ + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure." + }, + { + "name": "str", + "type": "const char *", + "comment": "input hex string of an object id." + } + ], + "argline": "const git_oid *id, const char *str", + "sig": "const git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 in case of a match, -1 otherwise." + }, + "description": "

Check if an oid equals an hex formatted object id.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_strcmp": { + "type": "function", + "file": "git2/oid.h", + "line": 308, + "lineto": 308, + "args": [ + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure." + }, + { + "name": "str", + "type": "const char *", + "comment": "input hex string of an object id." + } + ], + "argline": "const git_oid *id, const char *str", + "sig": "const git_oid *::const char *", + "return": { + "type": "int", + "comment": " -1 if str is not valid, \n<\n0 if id sorts before str,\n 0 if id matches str, >0 if id sorts after str." + }, + "description": "

Compare an oid to an hex formatted object id.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_is_zero": { + "type": "function", + "file": "git2/oid.h", + "line": 315, + "lineto": 315, + "args": [ + { + "name": "id", + "type": "const git_oid *", + "comment": null + } + ], + "argline": "const git_oid *id", + "sig": "const git_oid *", + "return": { + "type": "int", + "comment": " 1 if all zeros, 0 otherwise." + }, + "description": "

Check is an oid is all zeros.

\n", + "comments": "", + "group": "oid", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_oid_is_zero-21" + ], + "fetch.c": [ + "ex/v1.7.2/fetch.html#git_oid_is_zero-3" + ] + } + }, + "git_oid_shorten_new": { + "type": "function", + "file": "git2/oid.h", + "line": 336, + "lineto": 336, + "args": [ + { + "name": "min_length", + "type": "size_t", + "comment": "The minimal length for all identifiers,\n\t\twhich will be used even if shorter OIDs would still\n\t\tbe unique." + } + ], + "argline": "size_t min_length", + "sig": "size_t", + "return": { + "type": "git_oid_shorten *", + "comment": " a `git_oid_shorten` instance, NULL if OOM" + }, + "description": "

Create a new OID shortener.

\n", + "comments": "

The OID shortener is used to process a list of OIDs in text form and return the shortest length that would uniquely identify all of them.

\n\n

E.g. look at the result of git log --abbrev.

\n", + "group": "oid" + }, + "git_oid_shorten_add": { + "type": "function", + "file": "git2/oid.h", + "line": 362, + "lineto": 362, + "args": [ + { + "name": "os", + "type": "git_oid_shorten *", + "comment": "a `git_oid_shorten` instance" + }, + { + "name": "text_id", + "type": "const char *", + "comment": "an OID in text form" + } + ], + "argline": "git_oid_shorten *os, const char *text_id", + "sig": "git_oid_shorten *::const char *", + "return": { + "type": "int", + "comment": " the minimal length to uniquely identify all OIDs\n\t\tadded so far to the set; or an error code (\n<\n0) if an\n\t\terror occurs." + }, + "description": "

Add a new OID to set of shortened OIDs and calculate\n the minimal length to uniquely identify all the OIDs in\n the set.

\n", + "comments": "

The OID is expected to be a 40-char hexadecimal string. The OID is owned by the user and will not be modified or freed.

\n\n

For performance reasons, there is a hard-limit of how many OIDs can be added to a single set (around ~32000, assuming a mostly randomized distribution), which should be enough for any kind of program, and keeps the algorithm fast and memory-efficient.

\n\n

Attempting to add more than those OIDs will result in a GIT_ERROR_INVALID error

\n", + "group": "oid" + }, + "git_oid_shorten_free": { + "type": "function", + "file": "git2/oid.h", + "line": 369, + "lineto": 369, + "args": [ + { + "name": "os", + "type": "git_oid_shorten *", + "comment": "a `git_oid_shorten` instance" + } + ], + "argline": "git_oid_shorten *os", + "sig": "git_oid_shorten *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free an OID shortener instance

\n", + "comments": "", + "group": "oid" + }, + "git_oidarray_dispose": { + "type": "function", + "file": "git2/oidarray.h", + "line": 31, + "lineto": 31, + "args": [ + { + "name": "array", + "type": "git_oidarray *", + "comment": "git_oidarray from which to free oid data" + } + ], + "argline": "git_oidarray *array", + "sig": "git_oidarray *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the object IDs contained in an oid_array. This method should\n be called on git_oidarray objects that were provided by the\n library. Not doing so will result in a memory leak.

\n", + "comments": "

This does not free the git_oidarray itself, since the library will never allocate that object directly itself.

\n", + "group": "oidarray" + }, + "git_packbuilder_new": { + "type": "function", + "file": "git2/pack.h", + "line": 65, + "lineto": 65, + "args": [ + { + "name": "out", + "type": "git_packbuilder **", + "comment": "The new packbuilder object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository" + } + ], + "argline": "git_packbuilder **out, git_repository *repo", + "sig": "git_packbuilder **::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Initialize a new packbuilder

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_set_threads": { + "type": "function", + "file": "git2/pack.h", + "line": 78, + "lineto": 78, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "n", + "type": "unsigned int", + "comment": "Number of threads to spawn" + } + ], + "argline": "git_packbuilder *pb, unsigned int n", + "sig": "git_packbuilder *::unsigned int", + "return": { + "type": "unsigned int", + "comment": " number of actual threads to be used" + }, + "description": "

Set number of threads to spawn

\n", + "comments": "

By default, libgit2 won't spawn any threads at all; when set to 0, libgit2 will autodetect the number of CPUs.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert": { + "type": "function", + "file": "git2/pack.h", + "line": 92, + "lineto": 92, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The oid of the commit" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name; might be NULL" + } + ], + "argline": "git_packbuilder *pb, const git_oid *id, const char *name", + "sig": "git_packbuilder *::const git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Insert a single object

\n", + "comments": "

For an optimal pack it's mandatory to insert objects in recency order, commits followed by trees and blobs.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert_tree": { + "type": "function", + "file": "git2/pack.h", + "line": 104, + "lineto": 104, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The oid of the root tree" + } + ], + "argline": "git_packbuilder *pb, const git_oid *id", + "sig": "git_packbuilder *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Insert a root tree object

\n", + "comments": "

This will add the tree as well as all referenced trees and blobs.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert_commit": { + "type": "function", + "file": "git2/pack.h", + "line": 116, + "lineto": 116, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The oid of the commit" + } + ], + "argline": "git_packbuilder *pb, const git_oid *id", + "sig": "git_packbuilder *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Insert a commit object

\n", + "comments": "

This will add a commit as well as the completed referenced tree.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert_walk": { + "type": "function", + "file": "git2/pack.h", + "line": 129, + "lineto": 129, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + }, + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the revwalk to use to fill the packbuilder" + } + ], + "argline": "git_packbuilder *pb, git_revwalk *walk", + "sig": "git_packbuilder *::git_revwalk *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Insert objects as given by the walk

\n", + "comments": "

Those commits and all objects they reference will be inserted into the packbuilder.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert_recur": { + "type": "function", + "file": "git2/pack.h", + "line": 141, + "lineto": 141, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the id of the root object to insert" + }, + { + "name": "name", + "type": "const char *", + "comment": "optional name for the object" + } + ], + "argline": "git_packbuilder *pb, const git_oid *id, const char *name", + "sig": "git_packbuilder *::const git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Recursively insert an object and its referenced objects

\n", + "comments": "

Insert the object as well as any object it references.

\n", + "group": "packbuilder" + }, + "git_packbuilder_write_buf": { + "type": "function", + "file": "git2/pack.h", + "line": 153, + "lineto": 153, + "args": [ + { + "name": "buf", + "type": "git_buf *", + "comment": "Buffer where to write the packfile" + }, + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + } + ], + "argline": "git_buf *buf, git_packbuilder *pb", + "sig": "git_buf *::git_packbuilder *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Write the contents of the packfile to an in-memory buffer

\n", + "comments": "

The contents of the buffer will become a valid packfile, even though there will be no attached index

\n", + "group": "packbuilder" + }, + "git_packbuilder_write": { + "type": "function", + "file": "git2/pack.h", + "line": 166, + "lineto": 171, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to the directory where the packfile and index should be stored, or NULL for default location" + }, + { + "name": "mode", + "type": "unsigned int", + "comment": "permissions to use creating a packfile or 0 for defaults" + }, + { + "name": "progress_cb", + "type": "git_indexer_progress_cb", + "comment": "function to call with progress information from the indexer (optional)" + }, + { + "name": "progress_cb_payload", + "type": "void *", + "comment": "payload for the progress callback (optional)" + } + ], + "argline": "git_packbuilder *pb, const char *path, unsigned int mode, git_indexer_progress_cb progress_cb, void *progress_cb_payload", + "sig": "git_packbuilder *::const char *::unsigned int::git_indexer_progress_cb::void *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Write the new pack and corresponding index file to path.

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_hash": { + "type": "function", + "file": "git2/pack.h", + "line": 184, + "lineto": 184, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder object" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { + "type": "const git_oid *", + "comment": " 0 or an error code" + }, + "description": "

Get the packfile's hash

\n", + "comments": "

A packfile's name is derived from the sorted hashing of all object names. This is only correct after the packfile has been written.

\n", + "group": "packbuilder" + }, + "git_packbuilder_name": { + "type": "function", + "file": "git2/pack.h", + "line": 196, + "lineto": 196, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder instance" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { + "type": "const char *", + "comment": " a NUL terminated string for the packfile name" + }, + "description": "

Get the unique name for the resulting packfile.

\n", + "comments": "

The packfile's name is derived from the packfile's content. This is only correct after the packfile has been written.

\n", + "group": "packbuilder" + }, + "git_packbuilder_foreach": { + "type": "function", + "file": "git2/pack.h", + "line": 218, + "lineto": 218, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + }, + { + "name": "cb", + "type": "git_packbuilder_foreach_cb", + "comment": "the callback to call with each packed object's buffer" + }, + { + "name": "payload", + "type": "void *", + "comment": "the callback's data" + } + ], + "argline": "git_packbuilder *pb, git_packbuilder_foreach_cb cb, void *payload", + "sig": "git_packbuilder *::git_packbuilder_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create the new pack and pass each object to the callback

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_object_count": { + "type": "function", + "file": "git2/pack.h", + "line": 226, + "lineto": 226, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { + "type": "size_t", + "comment": " the number of objects in the packfile" + }, + "description": "

Get the total number of objects the packbuilder will write out

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_written": { + "type": "function", + "file": "git2/pack.h", + "line": 234, + "lineto": 234, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { + "type": "size_t", + "comment": " the number of objects which have already been written" + }, + "description": "

Get the number of objects the packbuilder has already written out

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_set_callbacks": { + "type": "function", + "file": "git2/pack.h", + "line": 253, + "lineto": 256, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder object" + }, + { + "name": "progress_cb", + "type": "git_packbuilder_progress", + "comment": "Function to call with progress information during\n pack building. Be aware that this is called inline with pack building\n operations, so performance may be affected." + }, + { + "name": "progress_cb_payload", + "type": "void *", + "comment": "Payload for progress callback." + } + ], + "argline": "git_packbuilder *pb, git_packbuilder_progress progress_cb, void *progress_cb_payload", + "sig": "git_packbuilder *::git_packbuilder_progress::void *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Set the callbacks for a packbuilder

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_free": { + "type": "function", + "file": "git2/pack.h", + "line": 263, + "lineto": 263, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the packbuilder and all associated data

\n", + "comments": "", + "group": "packbuilder" + }, + "git_patch_owner": { + "type": "function", + "file": "git2/patch.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "patch", + "type": "const git_patch *", + "comment": "the patch" + } + ], + "argline": "const git_patch *patch", + "sig": "const git_patch *", + "return": { + "type": "git_repository *", + "comment": " a pointer to the repository" + }, + "description": "

Get the repository associated with this patch. May be NULL.

\n", + "comments": "", + "group": "patch" + }, + "git_patch_from_diff": { + "type": "function", + "file": "git2/patch.h", + "line": 59, + "lineto": 60, + "args": [ + { + "name": "out", + "type": "git_patch **", + "comment": "Output parameter for the delta patch object" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "Diff list object" + }, + { + "name": "idx", + "type": "size_t", + "comment": "Index into diff list" + } + ], + "argline": "git_patch **out, git_diff *diff, size_t idx", + "sig": "git_patch **::git_diff *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, other value \n<\n 0 on error" + }, + "description": "

Return a patch for an entry in the diff list.

\n", + "comments": "

The git_patch is a newly created object contains the text diffs for the delta. You have to call git_patch_free() when you are done with it. You can use the patch object to loop over all the hunks and lines in the diff of the one delta.

\n\n

For an unchanged file or a binary file, no git_patch will be created, the output will be set to NULL, and the binary flag will be set true in the git_diff_delta structure.

\n\n

It is okay to pass NULL for either of the output parameters; if you pass NULL for the git_patch, then the text diff will not be calculated.

\n", + "group": "patch" + }, + "git_patch_from_blobs": { + "type": "function", + "file": "git2/patch.h", + "line": 78, + "lineto": 84, + "args": [ + { + "name": "out", + "type": "git_patch **", + "comment": "The generated patch; NULL on error" + }, + { + "name": "old_blob", + "type": "const git_blob *", + "comment": "Blob for old side of diff, or NULL for empty blob" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old blob as if it had this filename; can be NULL" + }, + { + "name": "new_blob", + "type": "const git_blob *", + "comment": "Blob for new side of diff, or NULL for empty blob" + }, + { + "name": "new_as_path", + "type": "const char *", + "comment": "Treat new blob as if it had this filename; can be NULL" + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + } + ], + "argline": "git_patch **out, const git_blob *old_blob, const char *old_as_path, const git_blob *new_blob, const char *new_as_path, const git_diff_options *opts", + "sig": "git_patch **::const git_blob *::const char *::const git_blob *::const char *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code \n<\n 0" + }, + "description": "

Directly generate a patch from the difference between two blobs.

\n", + "comments": "

This is just like git_diff_blobs() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", + "group": "patch" + }, + "git_patch_from_blob_and_buffer": { + "type": "function", + "file": "git2/patch.h", + "line": 103, + "lineto": 110, + "args": [ + { + "name": "out", + "type": "git_patch **", + "comment": "The generated patch; NULL on error" + }, + { + "name": "old_blob", + "type": "const git_blob *", + "comment": "Blob for old side of diff, or NULL for empty blob" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old blob as if it had this filename; can be NULL" + }, + { + "name": "buffer", + "type": "const void *", + "comment": "Raw data for new side of diff, or NULL for empty" + }, + { + "name": "buffer_len", + "type": "size_t", + "comment": "Length of raw data for new side of diff" + }, + { + "name": "buffer_as_path", + "type": "const char *", + "comment": "Treat buffer as if it had this filename; can be NULL" + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + } + ], + "argline": "git_patch **out, const git_blob *old_blob, const char *old_as_path, const void *buffer, size_t buffer_len, const char *buffer_as_path, const git_diff_options *opts", + "sig": "git_patch **::const git_blob *::const char *::const void *::size_t::const char *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code \n<\n 0" + }, + "description": "

Directly generate a patch from the difference between a blob and a buffer.

\n", + "comments": "

This is just like git_diff_blob_to_buffer() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", + "group": "patch" + }, + "git_patch_from_buffers": { + "type": "function", + "file": "git2/patch.h", + "line": 130, + "lineto": 138, + "args": [ + { + "name": "out", + "type": "git_patch **", + "comment": "The generated patch; NULL on error" + }, + { + "name": "old_buffer", + "type": "const void *", + "comment": "Raw data for old side of diff, or NULL for empty" + }, + { + "name": "old_len", + "type": "size_t", + "comment": "Length of the raw data for old side of the diff" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old buffer as if it had this filename; can be NULL" + }, + { + "name": "new_buffer", + "type": "const void *", + "comment": "Raw data for new side of diff, or NULL for empty" + }, + { + "name": "new_len", + "type": "size_t", + "comment": "Length of raw data for new side of diff" + }, + { + "name": "new_as_path", + "type": "const char *", + "comment": "Treat buffer as if it had this filename; can be NULL" + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + } + ], + "argline": "git_patch **out, const void *old_buffer, size_t old_len, const char *old_as_path, const void *new_buffer, size_t new_len, const char *new_as_path, const git_diff_options *opts", + "sig": "git_patch **::const void *::size_t::const char *::const void *::size_t::const char *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code \n<\n 0" + }, + "description": "

Directly generate a patch from the difference between two buffers.

\n", + "comments": "

This is just like git_diff_buffers() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", + "group": "patch", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_patch_from_buffers-16" + ] + } + }, + "git_patch_free": { + "type": "function", + "file": "git2/patch.h", + "line": 145, + "lineto": 145, + "args": [ + { + "name": "patch", + "type": "git_patch *", + "comment": "The patch to free." + } + ], + "argline": "git_patch *patch", + "sig": "git_patch *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a git_patch object.

\n", + "comments": "", + "group": "patch", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_patch_free-17" + ] + } + }, + "git_patch_get_delta": { + "type": "function", + "file": "git2/patch.h", + "line": 154, + "lineto": 154, + "args": [ + { + "name": "patch", + "type": "const git_patch *", + "comment": "The patch in which to get the delta." + } + ], + "argline": "const git_patch *patch", + "sig": "const git_patch *", + "return": { + "type": "const git_diff_delta *", + "comment": " The delta associated with the patch." + }, + "description": "

Get the delta associated with a patch. This delta points to internal\n data and you do not have to release it when you are done with it.

\n", + "comments": "", + "group": "patch" + }, + "git_patch_num_hunks": { + "type": "function", + "file": "git2/patch.h", + "line": 162, + "lineto": 162, + "args": [ + { + "name": "patch", + "type": "const git_patch *", + "comment": "The patch in which to get the number of hunks." + } + ], + "argline": "const git_patch *patch", + "sig": "const git_patch *", + "return": { + "type": "size_t", + "comment": " The number of hunks of the patch." + }, + "description": "

Get the number of hunks in a patch

\n", + "comments": "", + "group": "patch" + }, + "git_patch_line_stats": { + "type": "function", + "file": "git2/patch.h", + "line": 180, + "lineto": 184, + "args": [ + { + "name": "total_context", + "type": "size_t *", + "comment": "Count of context lines in output, can be NULL." + }, + { + "name": "total_additions", + "type": "size_t *", + "comment": "Count of addition lines in output, can be NULL." + }, + { + "name": "total_deletions", + "type": "size_t *", + "comment": "Count of deletion lines in output, can be NULL." + }, + { + "name": "patch", + "type": "const git_patch *", + "comment": "The git_patch object" + } + ], + "argline": "size_t *total_context, size_t *total_additions, size_t *total_deletions, const git_patch *patch", + "sig": "size_t *::size_t *::size_t *::const git_patch *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on error" + }, + "description": "

Get line counts of each type in a patch.

\n", + "comments": "

This helps imitate a diff --numstat type of output. For that purpose, you only need the total_additions and total_deletions values, but we include the total_context line count in case you want the total number of lines of diff output that will be generated.

\n\n

All outputs are optional. Pass NULL if you don't need a particular count.

\n", + "group": "patch" + }, + "git_patch_get_hunk": { + "type": "function", + "file": "git2/patch.h", + "line": 199, + "lineto": 203, + "args": [ + { + "name": "out", + "type": "const git_diff_hunk **", + "comment": "Output pointer to git_diff_hunk of hunk" + }, + { + "name": "lines_in_hunk", + "type": "size_t *", + "comment": "Output count of total lines in this hunk" + }, + { + "name": "patch", + "type": "git_patch *", + "comment": "Input pointer to patch object" + }, + { + "name": "hunk_idx", + "type": "size_t", + "comment": "Input index of hunk to get information about" + } + ], + "argline": "const git_diff_hunk **out, size_t *lines_in_hunk, git_patch *patch, size_t hunk_idx", + "sig": "const git_diff_hunk **::size_t *::git_patch *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if hunk_idx out of range, \n<\n0 on error" + }, + "description": "

Get the information about a hunk in a patch

\n", + "comments": "

Given a patch and a hunk index into the patch, this returns detailed information about that hunk. Any of the output pointers can be passed as NULL if you don't care about that particular piece of information.

\n", + "group": "patch" + }, + "git_patch_num_lines_in_hunk": { + "type": "function", + "file": "git2/patch.h", + "line": 212, + "lineto": 214, + "args": [ + { + "name": "patch", + "type": "const git_patch *", + "comment": "The git_patch object" + }, + { + "name": "hunk_idx", + "type": "size_t", + "comment": "Index of the hunk" + } + ], + "argline": "const git_patch *patch, size_t hunk_idx", + "sig": "const git_patch *::size_t", + "return": { + "type": "int", + "comment": " Number of lines in hunk or GIT_ENOTFOUND if invalid hunk index" + }, + "description": "

Get the number of lines in a hunk.

\n", + "comments": "", + "group": "patch" + }, + "git_patch_get_line_in_hunk": { + "type": "function", + "file": "git2/patch.h", + "line": 230, + "lineto": 234, + "args": [ + { + "name": "out", + "type": "const git_diff_line **", + "comment": "The git_diff_line data for this line" + }, + { + "name": "patch", + "type": "git_patch *", + "comment": "The patch to look in" + }, + { + "name": "hunk_idx", + "type": "size_t", + "comment": "The index of the hunk" + }, + { + "name": "line_of_hunk", + "type": "size_t", + "comment": "The index of the line in the hunk" + } + ], + "argline": "const git_diff_line **out, git_patch *patch, size_t hunk_idx, size_t line_of_hunk", + "sig": "const git_diff_line **::git_patch *::size_t::size_t", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Get data about a line in a hunk of a patch.

\n", + "comments": "

Given a patch, a hunk index, and a line index in the hunk, this will return a lot of details about that line. If you pass a hunk index larger than the number of hunks or a line index larger than the number of lines in the hunk, this will return -1.

\n", + "group": "patch" + }, + "git_patch_size": { + "type": "function", + "file": "git2/patch.h", + "line": 252, + "lineto": 256, + "args": [ + { + "name": "patch", + "type": "git_patch *", + "comment": "A git_patch representing changes to one file" + }, + { + "name": "include_context", + "type": "int", + "comment": "Include context lines in size if non-zero" + }, + { + "name": "include_hunk_headers", + "type": "int", + "comment": "Include hunk header lines if non-zero" + }, + { + "name": "include_file_headers", + "type": "int", + "comment": "Include file header lines if non-zero" + } + ], + "argline": "git_patch *patch, int include_context, int include_hunk_headers, int include_file_headers", + "sig": "git_patch *::int::int::int", + "return": { + "type": "size_t", + "comment": " The number of bytes of data" + }, + "description": "

Look up size of patch diff data in bytes

\n", + "comments": "

This returns the raw size of the patch data. This only includes the actual data from the lines of the diff, not the file or hunk headers.

\n\n

If you pass include_context as true (non-zero), this will be the size of all of the diff output; if you pass it as false (zero), this will only include the actual changed lines (as if context_lines was 0).

\n", + "group": "patch" + }, + "git_patch_print": { + "type": "function", + "file": "git2/patch.h", + "line": 270, + "lineto": 273, + "args": [ + { + "name": "patch", + "type": "git_patch *", + "comment": "A git_patch representing changes to one file" + }, + { + "name": "print_cb", + "type": "git_diff_line_cb", + "comment": "Callback function to output lines of the patch. Will be\n called for file headers, hunk headers, and diff lines." + }, + { + "name": "payload", + "type": "void *", + "comment": "Reference pointer that will be passed to your callbacks." + } + ], + "argline": "git_patch *patch, git_diff_line_cb print_cb, void *payload", + "sig": "git_patch *::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Serialize the patch to text via callback.

\n", + "comments": "

Returning a non-zero value from the callback will terminate the iteration and return that value to the caller.

\n", + "group": "patch" + }, + "git_patch_to_buf": { + "type": "function", + "file": "git2/patch.h", + "line": 282, + "lineto": 284, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The git_buf to be filled in" + }, + { + "name": "patch", + "type": "git_patch *", + "comment": "A git_patch representing changes to one file" + } + ], + "argline": "git_buf *out, git_patch *patch", + "sig": "git_buf *::git_patch *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure." + }, + "description": "

Get the content of a patch as a single diff text.

\n", + "comments": "", + "group": "patch", + "examples": { + "diff.c": [ + "ex/v1.7.2/diff.html#git_patch_to_buf-18" + ] + } + }, + "git_pathspec_new": { + "type": "function", + "file": "git2/pathspec.h", + "line": 82, + "lineto": 83, + "args": [ + { + "name": "out", + "type": "git_pathspec **", + "comment": "Output of the compiled pathspec" + }, + { + "name": "pathspec", + "type": "const git_strarray *", + "comment": "A git_strarray of the paths to match" + } + ], + "argline": "git_pathspec **out, const git_strarray *pathspec", + "sig": "git_pathspec **::const git_strarray *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Compile a pathspec

\n", + "comments": "", + "group": "pathspec", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_pathspec_new-40" + ] + } + }, + "git_pathspec_free": { + "type": "function", + "file": "git2/pathspec.h", + "line": 90, + "lineto": 90, + "args": [ + { + "name": "ps", + "type": "git_pathspec *", + "comment": "The compiled pathspec" + } + ], + "argline": "git_pathspec *ps", + "sig": "git_pathspec *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a pathspec

\n", + "comments": "", + "group": "pathspec", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_pathspec_free-41" + ] + } + }, + "git_pathspec_matches_path": { + "type": "function", + "file": "git2/pathspec.h", + "line": 105, + "lineto": 106, + "args": [ + { + "name": "ps", + "type": "const git_pathspec *", + "comment": "The compiled pathspec" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "path", + "type": "const char *", + "comment": "The pathname to attempt to match" + } + ], + "argline": "const git_pathspec *ps, uint32_t flags, const char *path", + "sig": "const git_pathspec *::uint32_t::const char *", + "return": { + "type": "int", + "comment": " 1 is path matches spec, 0 if it does not" + }, + "description": "

Try to match a path against a pathspec

\n", + "comments": "

Unlike most of the other pathspec matching functions, this will not fall back on the native case-sensitivity for your platform. You must explicitly pass flags to control case sensitivity or else this will fall back on being case sensitive.

\n", + "group": "pathspec" + }, + "git_pathspec_match_workdir": { + "type": "function", + "file": "git2/pathspec.h", + "line": 130, + "lineto": 134, + "args": [ + { + "name": "out", + "type": "git_pathspec_match_list **", + "comment": "Output list of matches; pass NULL to just get return value" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository in which to match; bare repo is an error" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "ps", + "type": "git_pathspec *", + "comment": "Pathspec to be matched" + } + ], + "argline": "git_pathspec_match_list **out, git_repository *repo, uint32_t flags, git_pathspec *ps", + "sig": "git_pathspec_match_list **::git_repository *::uint32_t::git_pathspec *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag was given" + }, + "description": "

Match a pathspec against the working directory of a repository.

\n", + "comments": "

This matches the pathspec against the current files in the working directory of the repository. It is an error to invoke this on a bare repo. This handles git ignores (i.e. ignored files will not be considered to match the pathspec unless the file is tracked in the index).

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", + "group": "pathspec" + }, + "git_pathspec_match_index": { + "type": "function", + "file": "git2/pathspec.h", + "line": 159, + "lineto": 163, + "args": [ + { + "name": "out", + "type": "git_pathspec_match_list **", + "comment": "Output list of matches; pass NULL to just get return value" + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to match against" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "ps", + "type": "git_pathspec *", + "comment": "Pathspec to be matched" + } + ], + "argline": "git_pathspec_match_list **out, git_index *index, uint32_t flags, git_pathspec *ps", + "sig": "git_pathspec_match_list **::git_index *::uint32_t::git_pathspec *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" + }, + "description": "

Match a pathspec against entries in an index.

\n", + "comments": "

This matches the pathspec against the files in the repository index.

\n\n

NOTE: At the moment, the case sensitivity of this match is controlled by the current case-sensitivity of the index object itself and the USE_CASE and IGNORE_CASE flags will have no effect. This behavior will be corrected in a future release.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", + "group": "pathspec" + }, + "git_pathspec_match_tree": { + "type": "function", + "file": "git2/pathspec.h", + "line": 183, + "lineto": 187, + "args": [ + { + "name": "out", + "type": "git_pathspec_match_list **", + "comment": "Output list of matches; pass NULL to just get return value" + }, + { + "name": "tree", + "type": "git_tree *", + "comment": "The root-level tree to match against" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "ps", + "type": "git_pathspec *", + "comment": "Pathspec to be matched" + } + ], + "argline": "git_pathspec_match_list **out, git_tree *tree, uint32_t flags, git_pathspec *ps", + "sig": "git_pathspec_match_list **::git_tree *::uint32_t::git_pathspec *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" + }, + "description": "

Match a pathspec against files in a tree.

\n", + "comments": "

This matches the pathspec against the files in the given tree.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", + "group": "pathspec", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_pathspec_match_tree-42" + ] + } + }, + "git_pathspec_match_diff": { + "type": "function", + "file": "git2/pathspec.h", + "line": 207, + "lineto": 211, + "args": [ + { + "name": "out", + "type": "git_pathspec_match_list **", + "comment": "Output list of matches; pass NULL to just get return value" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "A generated diff list" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "ps", + "type": "git_pathspec *", + "comment": "Pathspec to be matched" + } + ], + "argline": "git_pathspec_match_list **out, git_diff *diff, uint32_t flags, git_pathspec *ps", + "sig": "git_pathspec_match_list **::git_diff *::uint32_t::git_pathspec *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" + }, + "description": "

Match a pathspec against files in a diff list.

\n", + "comments": "

This matches the pathspec against the files in the given diff list.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", + "group": "pathspec" + }, + "git_pathspec_match_list_free": { + "type": "function", + "file": "git2/pathspec.h", + "line": 218, + "lineto": 218, + "args": [ + { + "name": "m", + "type": "git_pathspec_match_list *", + "comment": "The git_pathspec_match_list to be freed" + } + ], + "argline": "git_pathspec_match_list *m", + "sig": "git_pathspec_match_list *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free memory associates with a git_pathspec_match_list

\n", + "comments": "", + "group": "pathspec" + }, + "git_pathspec_match_list_entrycount": { + "type": "function", + "file": "git2/pathspec.h", + "line": 226, + "lineto": 227, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + } + ], + "argline": "const git_pathspec_match_list *m", + "sig": "const git_pathspec_match_list *", + "return": { + "type": "size_t", + "comment": " Number of items in match list" + }, + "description": "

Get the number of items in a match list.

\n", + "comments": "", + "group": "pathspec" + }, + "git_pathspec_match_list_entry": { + "type": "function", + "file": "git2/pathspec.h", + "line": 239, + "lineto": 240, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + }, + { + "name": "pos", + "type": "size_t", + "comment": "The index into the list" + } + ], + "argline": "const git_pathspec_match_list *m, size_t pos", + "sig": "const git_pathspec_match_list *::size_t", + "return": { + "type": "const char *", + "comment": " The filename of the match" + }, + "description": "

Get a matching filename by position.

\n", + "comments": "

This routine cannot be used if the match list was generated by git_pathspec_match_diff. If so, it will always return NULL.

\n", + "group": "pathspec" + }, + "git_pathspec_match_list_diff_entry": { + "type": "function", + "file": "git2/pathspec.h", + "line": 252, + "lineto": 253, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + }, + { + "name": "pos", + "type": "size_t", + "comment": "The index into the list" + } + ], + "argline": "const git_pathspec_match_list *m, size_t pos", + "sig": "const git_pathspec_match_list *::size_t", + "return": { + "type": "const git_diff_delta *", + "comment": " The filename of the match" + }, + "description": "

Get a matching diff delta by position.

\n", + "comments": "

This routine can only be used if the match list was generated by git_pathspec_match_diff. Otherwise it will always return NULL.

\n", + "group": "pathspec" + }, + "git_pathspec_match_list_failed_entrycount": { + "type": "function", + "file": "git2/pathspec.h", + "line": 264, + "lineto": 265, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + } + ], + "argline": "const git_pathspec_match_list *m", + "sig": "const git_pathspec_match_list *", + "return": { + "type": "size_t", + "comment": " Number of items in original pathspec that had no matches" + }, + "description": "

Get the number of pathspec items that did not match.

\n", + "comments": "

This will be zero unless you passed GIT_PATHSPEC_FIND_FAILURES when generating the git_pathspec_match_list.

\n", + "group": "pathspec" + }, + "git_pathspec_match_list_failed_entry": { + "type": "function", + "file": "git2/pathspec.h", + "line": 276, + "lineto": 277, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + }, + { + "name": "pos", + "type": "size_t", + "comment": "The index into the failed items" + } + ], + "argline": "const git_pathspec_match_list *m, size_t pos", + "sig": "const git_pathspec_match_list *::size_t", + "return": { + "type": "const char *", + "comment": " The pathspec pattern that didn't match anything" + }, + "description": "

Get an original pathspec string that had no matches.

\n", + "comments": "

This will be return NULL for positions out of range.

\n", + "group": "pathspec" + }, + "git_proxy_options_init": { + "type": "function", + "file": "git2/proxy.h", + "line": 94, + "lineto": 94, + "args": [ + { + "name": "opts", + "type": "git_proxy_options *", + "comment": "The `git_proxy_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_PROXY_OPTIONS_VERSION`." + } + ], + "argline": "git_proxy_options *opts, unsigned int version", + "sig": "git_proxy_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_proxy_options structure

\n", + "comments": "

Initializes a git_proxy_options with default values. Equivalent to creating an instance with GIT_PROXY_OPTIONS_INIT.

\n", + "group": "proxy" + }, + "git_rebase_options_init": { + "type": "function", + "file": "git2/rebase.h", + "line": 199, + "lineto": 201, + "args": [ + { + "name": "opts", + "type": "git_rebase_options *", + "comment": "The `git_rebase_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REBASE_OPTIONS_VERSION`." + } + ], + "argline": "git_rebase_options *opts, unsigned int version", + "sig": "git_rebase_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_rebase_options structure

\n", + "comments": "

Initializes a git_rebase_options with default values. Equivalent to creating an instance with GIT_REBASE_OPTIONS_INIT.

\n", + "group": "rebase" + }, + "git_rebase_init": { + "type": "function", + "file": "git2/rebase.h", + "line": 220, + "lineto": 226, + "args": [ + { + "name": "out", + "type": "git_rebase **", + "comment": "Pointer to store the rebase object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to perform the rebase" + }, + { + "name": "branch", + "type": "const git_annotated_commit *", + "comment": "The terminal commit to rebase, or NULL to rebase the\n current branch" + }, + { + "name": "upstream", + "type": "const git_annotated_commit *", + "comment": "The commit to begin rebasing from, or NULL to rebase all\n reachable commits" + }, + { + "name": "onto", + "type": "const git_annotated_commit *", + "comment": "The branch to rebase onto, or NULL to rebase onto the given\n upstream" + }, + { + "name": "opts", + "type": "const git_rebase_options *", + "comment": "Options to specify how rebase is performed, or NULL" + } + ], + "argline": "git_rebase **out, git_repository *repo, const git_annotated_commit *branch, const git_annotated_commit *upstream, const git_annotated_commit *onto, const git_rebase_options *opts", + "sig": "git_rebase **::git_repository *::const git_annotated_commit *::const git_annotated_commit *::const git_annotated_commit *::const git_rebase_options *", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initializes a rebase operation to rebase the changes in branch\n relative to upstream onto another branch. To begin the rebase\n process, call git_rebase_next. When you have finished with this\n object, call git_rebase_free.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_open": { + "type": "function", + "file": "git2/rebase.h", + "line": 237, + "lineto": 240, + "args": [ + { + "name": "out", + "type": "git_rebase **", + "comment": "Pointer to store the rebase object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository that has a rebase in-progress" + }, + { + "name": "opts", + "type": "const git_rebase_options *", + "comment": "Options to specify how rebase is performed" + } + ], + "argline": "git_rebase **out, git_repository *repo, const git_rebase_options *opts", + "sig": "git_rebase **::git_repository *::const git_rebase_options *", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Opens an existing rebase that was previously started by either an\n invocation of git_rebase_init or by another client.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_orig_head_name": { + "type": "function", + "file": "git2/rebase.h", + "line": 248, + "lineto": 248, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "const char *", + "comment": " The original `HEAD` ref name" + }, + "description": "

Gets the original HEAD ref name for merge rebases.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_orig_head_id": { + "type": "function", + "file": "git2/rebase.h", + "line": 256, + "lineto": 256, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "const git_oid *", + "comment": " The original `HEAD` id" + }, + "description": "

Gets the original HEAD id for merge rebases.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_onto_name": { + "type": "function", + "file": "git2/rebase.h", + "line": 264, + "lineto": 264, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "const char *", + "comment": " The `onto` ref name" + }, + "description": "

Gets the onto ref name for merge rebases.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_onto_id": { + "type": "function", + "file": "git2/rebase.h", + "line": 272, + "lineto": 272, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "const git_oid *", + "comment": " The `onto` id" + }, + "description": "

Gets the onto id for merge rebases.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_operation_entrycount": { + "type": "function", + "file": "git2/rebase.h", + "line": 280, + "lineto": 280, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase" + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "size_t", + "comment": " The number of rebase operations in total" + }, + "description": "

Gets the count of rebase operations that are to be applied.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_operation_current": { + "type": "function", + "file": "git2/rebase.h", + "line": 291, + "lineto": 291, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase" + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "size_t", + "comment": " The index of the rebase operation currently being applied." + }, + "description": "

Gets the index of the rebase operation that is currently being applied.\n If the first operation has not yet been applied (because you have\n called init but not yet next) then this returns\n GIT_REBASE_NO_OPERATION.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_operation_byindex": { + "type": "function", + "file": "git2/rebase.h", + "line": 300, + "lineto": 302, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase" + }, + { + "name": "idx", + "type": "size_t", + "comment": "The index of the rebase operation to retrieve" + } + ], + "argline": "git_rebase *rebase, size_t idx", + "sig": "git_rebase *::size_t", + "return": { + "type": "git_rebase_operation *", + "comment": " The rebase operation or NULL if `idx` was out of bounds" + }, + "description": "

Gets the rebase operation specified by the given index.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_next": { + "type": "function", + "file": "git2/rebase.h", + "line": 315, + "lineto": 317, + "args": [ + { + "name": "operation", + "type": "git_rebase_operation **", + "comment": "Pointer to store the rebase operation that is to be performed next" + }, + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase in progress" + } + ], + "argline": "git_rebase_operation **operation, git_rebase *rebase", + "sig": "git_rebase_operation **::git_rebase *", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Performs the next rebase operation and returns the information about it.\n If the operation is one that applies a patch (which is any operation except\n GIT_REBASE_OPERATION_EXEC) then the patch will be applied and the index and\n working directory will be updated with the changes. If there are conflicts,\n you will need to address those before committing the changes.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_inmemory_index": { + "type": "function", + "file": "git2/rebase.h", + "line": 334, + "lineto": 336, + "args": [ + { + "name": "index", + "type": "git_index **", + "comment": "The result index of the last operation." + }, + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_index **index, git_rebase *rebase", + "sig": "git_index **::git_rebase *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Gets the index produced by the last operation, which is the result\n of git_rebase_next and which will be committed by the next\n invocation of git_rebase_commit. This is useful for resolving\n conflicts in an in-memory rebase before committing them. You must\n call git_index_free when you are finished with this.

\n", + "comments": "

This is only applicable for in-memory rebases; for rebases within a working directory, the changes were applied to the repository's index.

\n", + "group": "rebase" + }, + "git_rebase_commit": { + "type": "function", + "file": "git2/rebase.h", + "line": 360, + "lineto": 366, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "Pointer in which to store the OID of the newly created commit" + }, + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase that is in-progress" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "The author of the updated commit, or NULL to keep the\n author from the original commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "The committer of the rebase" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "The encoding for the message in the commit,\n represented with a standard encoding name. If message is NULL,\n this should also be NULL, and the encoding from the original\n commit will be maintained. If message is specified, this may be\n NULL to indicate that \"UTF-8\" is to be used." + }, + { + "name": "message", + "type": "const char *", + "comment": "The message for this commit, or NULL to use the message\n from the original commit." + } + ], + "argline": "git_oid *id, git_rebase *rebase, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message", + "sig": "git_oid *::git_rebase *::const git_signature *::const git_signature *::const char *::const char *", + "return": { + "type": "int", + "comment": " Zero on success, GIT_EUNMERGED if there are unmerged changes in\n the index, GIT_EAPPLIED if the current commit has already\n been applied to the upstream and there is nothing to commit,\n -1 on failure." + }, + "description": "

Commits the current patch. You must have resolved any conflicts that\n were introduced during the patch application from the git_rebase_next\n invocation.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_abort": { + "type": "function", + "file": "git2/rebase.h", + "line": 376, + "lineto": 376, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase that is in-progress" + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "int", + "comment": " Zero on success; GIT_ENOTFOUND if a rebase is not in progress,\n -1 on other errors." + }, + "description": "

Aborts a rebase that is currently in progress, resetting the repository\n and working directory to their state before rebase began.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_finish": { + "type": "function", + "file": "git2/rebase.h", + "line": 386, + "lineto": 388, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase that is in-progress" + }, + { + "name": "signature", + "type": "const git_signature *", + "comment": "The identity that is finishing the rebase (optional)" + } + ], + "argline": "git_rebase *rebase, const git_signature *signature", + "sig": "git_rebase *::const git_signature *", + "return": { + "type": "int", + "comment": " Zero on success; -1 on error" + }, + "description": "

Finishes a rebase that is currently in progress once all patches have\n been applied.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_free": { + "type": "function", + "file": "git2/rebase.h", + "line": 395, + "lineto": 395, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase object" + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Frees the git_rebase object.

\n", + "comments": "", + "group": "rebase" + }, + "git_refdb_new": { + "type": "function", + "file": "git2/refdb.h", + "line": 35, + "lineto": 35, + "args": [ + { + "name": "out", + "type": "git_refdb **", + "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_refdb **out, git_repository *repo", + "sig": "git_refdb **::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a new reference database with no backends.

\n", + "comments": "

Before the Ref DB can be used for read/writing, a custom database backend must be manually set using git_refdb_set_backend()

\n", + "group": "refdb" + }, + "git_refdb_open": { + "type": "function", + "file": "git2/refdb.h", + "line": 49, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_refdb **", + "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_refdb **out, git_repository *repo", + "sig": "git_refdb **::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a new reference database and automatically add\n the default backends:

\n", + "comments": "
    \n
  • git_refdb_dir: read and write loose and packed refs from disk, assuming the repository dir as the folder
  • \n
\n", + "group": "refdb" + }, + "git_refdb_compress": { + "type": "function", + "file": "git2/refdb.h", + "line": 59, + "lineto": 59, + "args": [ + { + "name": "refdb", + "type": "git_refdb *", + "comment": "The reference database to optimize." + } + ], + "argline": "git_refdb *refdb", + "sig": "git_refdb *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Suggests that the given refdb compress or optimize its references.\n This mechanism is implementation specific. For on-disk reference\n databases, for example, this may pack all loose references.

\n", + "comments": "", + "group": "refdb" + }, + "git_refdb_free": { + "type": "function", + "file": "git2/refdb.h", + "line": 66, + "lineto": 66, + "args": [ + { + "name": "refdb", + "type": "git_refdb *", + "comment": "reference database pointer or NULL" + } + ], + "argline": "git_refdb *refdb", + "sig": "git_refdb *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Close an open reference database.

\n", + "comments": "", + "group": "refdb" + }, + "git_reflog_read": { + "type": "function", + "file": "git2/reflog.h", + "line": 38, + "lineto": 38, + "args": [ + { + "name": "out", + "type": "git_reflog **", + "comment": "pointer to reflog" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "name", + "type": "const char *", + "comment": "reference to look up" + } + ], + "argline": "git_reflog **out, git_repository *repo, const char *name", + "sig": "git_reflog **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Read the reflog for the given reference

\n", + "comments": "

If there is no reflog file for the given reference yet, an empty reflog object will be returned.

\n\n

The reflog must be freed manually by using git_reflog_free().

\n", + "group": "reflog" + }, + "git_reflog_write": { + "type": "function", + "file": "git2/reflog.h", + "line": 47, + "lineto": 47, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "an existing reflog object" + } + ], + "argline": "git_reflog *reflog", + "sig": "git_reflog *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Write an existing in-memory reflog object back to disk\n using an atomic file lock.

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_append": { + "type": "function", + "file": "git2/reflog.h", + "line": 60, + "lineto": 60, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "an existing reflog object" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the OID the reference is now pointing to" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "the signature of the committer" + }, + { + "name": "msg", + "type": "const char *", + "comment": "the reflog message" + } + ], + "argline": "git_reflog *reflog, const git_oid *id, const git_signature *committer, const char *msg", + "sig": "git_reflog *::const git_oid *::const git_signature *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add a new entry to the in-memory reflog.

\n", + "comments": "

msg is optional and can be NULL.

\n", + "group": "reflog" + }, + "git_reflog_rename": { + "type": "function", + "file": "git2/reflog.h", + "line": 75, + "lineto": 75, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "old_name", + "type": "const char *", + "comment": "the old name of the reference" + }, + { + "name": "name", + "type": "const char *", + "comment": "the new name of the reference" + } + ], + "argline": "git_repository *repo, const char *old_name, const char *name", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Rename a reflog

\n", + "comments": "

The reflog to be renamed is expected to already exist

\n\n

The new name will be checked for validity. See git_reference_create_symbolic() for rules about valid names.

\n", + "group": "reflog" + }, + "git_reflog_delete": { + "type": "function", + "file": "git2/reflog.h", + "line": 84, + "lineto": 84, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "name", + "type": "const char *", + "comment": "the reflog to delete" + } + ], + "argline": "git_repository *repo, const char *name", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Delete the reflog for the given reference

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entrycount": { + "type": "function", + "file": "git2/reflog.h", + "line": 92, + "lineto": 92, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "the previously loaded reflog" + } + ], + "argline": "git_reflog *reflog", + "sig": "git_reflog *", + "return": { + "type": "size_t", + "comment": " the number of log entries" + }, + "description": "

Get the number of log entries in a reflog

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entry_byindex": { + "type": "function", + "file": "git2/reflog.h", + "line": 105, + "lineto": 105, + "args": [ + { + "name": "reflog", + "type": "const git_reflog *", + "comment": "a previously loaded reflog" + }, + { + "name": "idx", + "type": "size_t", + "comment": "the position of the entry to lookup. Should be greater than or\n equal to 0 (zero) and less than `git_reflog_entrycount()`." + } + ], + "argline": "const git_reflog *reflog, size_t idx", + "sig": "const git_reflog *::size_t", + "return": { + "type": "const git_reflog_entry *", + "comment": " the entry; NULL if not found" + }, + "description": "

Lookup an entry by its index

\n", + "comments": "

Requesting the reflog entry with an index of 0 (zero) will return the most recently created entry.

\n", + "group": "reflog" + }, + "git_reflog_drop": { + "type": "function", + "file": "git2/reflog.h", + "line": 124, + "lineto": 127, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "a previously loaded reflog." + }, + { + "name": "idx", + "type": "size_t", + "comment": "the position of the entry to remove. Should be greater than or\n equal to 0 (zero) and less than `git_reflog_entrycount()`." + }, + { + "name": "rewrite_previous_entry", + "type": "int", + "comment": "1 to rewrite the history; 0 otherwise." + } + ], + "argline": "git_reflog *reflog, size_t idx, int rewrite_previous_entry", + "sig": "git_reflog *::size_t::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if the entry doesn't exist\n or an error code." + }, + "description": "

Remove an entry from the reflog by its index

\n", + "comments": "

To ensure there's no gap in the log history, set rewrite_previous_entry param value to 1. When deleting entry n, member old_oid of entry n-1 (if any) will be updated with the value of member new_oid of entry n+1.

\n", + "group": "reflog" + }, + "git_reflog_entry_id_old": { + "type": "function", + "file": "git2/reflog.h", + "line": 135, + "lineto": 135, + "args": [ + { + "name": "entry", + "type": "const git_reflog_entry *", + "comment": "a reflog entry" + } + ], + "argline": "const git_reflog_entry *entry", + "sig": "const git_reflog_entry *", + "return": { + "type": "const git_oid *", + "comment": " the old oid" + }, + "description": "

Get the old oid

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entry_id_new": { + "type": "function", + "file": "git2/reflog.h", + "line": 143, + "lineto": 143, + "args": [ + { + "name": "entry", + "type": "const git_reflog_entry *", + "comment": "a reflog entry" + } + ], + "argline": "const git_reflog_entry *entry", + "sig": "const git_reflog_entry *", + "return": { + "type": "const git_oid *", + "comment": " the new oid at this time" + }, + "description": "

Get the new oid

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entry_committer": { + "type": "function", + "file": "git2/reflog.h", + "line": 151, + "lineto": 151, + "args": [ + { + "name": "entry", + "type": "const git_reflog_entry *", + "comment": "a reflog entry" + } + ], + "argline": "const git_reflog_entry *entry", + "sig": "const git_reflog_entry *", + "return": { + "type": "const git_signature *", + "comment": " the committer" + }, + "description": "

Get the committer of this entry

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entry_message": { + "type": "function", + "file": "git2/reflog.h", + "line": 159, + "lineto": 159, + "args": [ + { + "name": "entry", + "type": "const git_reflog_entry *", + "comment": "a reflog entry" + } + ], + "argline": "const git_reflog_entry *entry", + "sig": "const git_reflog_entry *", + "return": { + "type": "const char *", + "comment": " the log msg" + }, + "description": "

Get the log message

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_free": { + "type": "function", + "file": "git2/reflog.h", + "line": 166, + "lineto": 166, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "reflog to free" + } + ], + "argline": "git_reflog *reflog", + "sig": "git_reflog *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the reflog

\n", + "comments": "", + "group": "reflog" + }, + "git_reference_lookup": { + "type": "function", + "file": "git2/refs.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer to the looked-up reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to look up the reference" + }, + { + "name": "name", + "type": "const char *", + "comment": "the long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...)" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name", + "sig": "git_reference **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code." + }, + "description": "

Lookup a reference by name in a repository.

\n", + "comments": "

The returned reference must be freed by the user.

\n\n

The name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n", + "group": "reference", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_reference_lookup-15", + "ex/v1.7.2/checkout.html#git_reference_lookup-16" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_reference_lookup-53" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_reference_lookup-21" + ] + } + }, + "git_reference_name_to_id": { + "type": "function", + "file": "git2/refs.h", + "line": 54, + "lineto": 55, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer to oid to be filled in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository in which to look up the reference" + }, + { + "name": "name", + "type": "const char *", + "comment": "The long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...)" + } + ], + "argline": "git_oid *out, git_repository *repo, const char *name", + "sig": "git_oid *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code." + }, + "description": "

Lookup a reference by name and resolve immediately to OID.

\n", + "comments": "

This function provides a quick way to resolve a reference name straight through to the object id that it refers to. This avoids having to allocate or free any git_reference objects for simple situations.

\n\n

The name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n", + "group": "reference" + }, + "git_reference_dwim": { + "type": "function", + "file": "git2/refs.h", + "line": 68, + "lineto": 68, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer in which to store the reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to look" + }, + { + "name": "shorthand", + "type": "const char *", + "comment": "the short name for the reference" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *shorthand", + "sig": "git_reference **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a reference by DWIMing its short name

\n", + "comments": "

Apply the git precedence rules to the given shorthand to determine which reference the user is referring to.

\n", + "group": "reference", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_reference_dwim-22" + ] + } + }, + "git_reference_symbolic_create_matching": { + "type": "function", + "file": "git2/refs.h", + "line": 112, + "lineto": 112, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where that reference will live" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the reference" + }, + { + "name": "target", + "type": "const char *", + "comment": "The target of the reference" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + }, + { + "name": "current_value", + "type": "const char *", + "comment": "The expected value of the reference when updating" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *current_value, const char *log_message", + "sig": "git_reference **::git_repository *::const char *::const char *::int::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC, GIT_EMODIFIED or an error code" + }, + "description": "

Conditionally create a new symbolic reference.

\n", + "comments": "

A symbolic reference is a reference name that refers to another reference name. If the other name moves, the symbolic name will move, too. As a simple example, the "HEAD" reference might refer to "refs/heads/master" while on the "master" branch of a repository.

\n\n

The symbolic reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n\n

It will return GIT_EMODIFIED if the reference's value at the time of updating does not match the one passed through current_value (i.e. if the ref has changed since the user read it).

\n\n

If current_value is all zeros, this function will return GIT_EMODIFIED if the ref already exists.

\n", + "group": "reference" + }, + "git_reference_symbolic_create": { + "type": "function", + "file": "git2/refs.h", + "line": 148, + "lineto": 148, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where that reference will live" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the reference" + }, + { + "name": "target", + "type": "const char *", + "comment": "The target of the reference" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *log_message", + "sig": "git_reference **::git_repository *::const char *::const char *::int::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Create a new symbolic reference.

\n", + "comments": "

A symbolic reference is a reference name that refers to another reference name. If the other name moves, the symbolic name will move, too. As a simple example, the "HEAD" reference might refer to "refs/heads/master" while on the "master" branch of a repository.

\n\n

The symbolic reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", + "group": "reference" + }, + "git_reference_create": { + "type": "function", + "file": "git2/refs.h", + "line": 185, + "lineto": 185, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where that reference will live" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the reference" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The object id pointed to by the reference." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const char *log_message", + "sig": "git_reference **::git_repository *::const char *::const git_oid *::int::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Create a new direct reference.

\n", + "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", + "group": "reference", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_reference_create-23" + ] + } + }, + "git_reference_create_matching": { + "type": "function", + "file": "git2/refs.h", + "line": 228, + "lineto": 228, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where that reference will live" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the reference" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The object id pointed to by the reference." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + }, + { + "name": "current_id", + "type": "const git_oid *", + "comment": "The expected value of the reference at the time of update" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const git_oid *current_id, const char *log_message", + "sig": "git_reference **::git_repository *::const char *::const git_oid *::int::const git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EMODIFIED if the value of the reference\n has changed, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Conditionally create new direct reference

\n", + "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n\n

It will return GIT_EMODIFIED if the reference's value at the time of updating does not match the one passed through current_id (i.e. if the ref has changed since the user read it).

\n", + "group": "reference" + }, + "git_reference_target": { + "type": "function", + "file": "git2/refs.h", + "line": 243, + "lineto": 243, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const git_oid *", + "comment": " a pointer to the oid if available, NULL otherwise" + }, + "description": "

Get the OID pointed to by a direct reference.

\n", + "comments": "

Only available if the reference is direct (i.e. an object id reference, not a symbolic one).

\n\n

To find the OID of a symbolic ref, call git_reference_resolve() and then this function (or maybe use git_reference_name_to_id() to directly resolve a reference name all the way through to an OID).

\n", + "group": "reference", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_reference_target-54" + ] + } + }, + "git_reference_target_peel": { + "type": "function", + "file": "git2/refs.h", + "line": 254, + "lineto": 254, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const git_oid *", + "comment": " a pointer to the oid if available, NULL otherwise" + }, + "description": "

Return the peeled OID target of this reference.

\n", + "comments": "

This peeled OID only applies to direct references that point to a hard Tag object: it is the result of peeling such Tag.

\n", + "group": "reference" + }, + "git_reference_symbolic_target": { + "type": "function", + "file": "git2/refs.h", + "line": 264, + "lineto": 264, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const char *", + "comment": " a pointer to the name if available, NULL otherwise" + }, + "description": "

Get full name to the reference pointed to by a symbolic reference.

\n", + "comments": "

Only available if the reference is symbolic.

\n", + "group": "reference", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_reference_symbolic_target-55" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_reference_symbolic_target-24" + ] + } + }, + "git_reference_type": { + "type": "function", + "file": "git2/refs.h", + "line": 274, + "lineto": 274, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "git_reference_t", + "comment": " the type" + }, + "description": "

Get the type of a reference.

\n", + "comments": "

Either direct (GIT_REFERENCE_DIRECT) or symbolic (GIT_REFERENCE_SYMBOLIC)

\n", + "group": "reference", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_reference_type-56" + ] + } + }, + "git_reference_name": { + "type": "function", + "file": "git2/refs.h", + "line": 284, + "lineto": 284, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const char *", + "comment": " the full name for the ref" + }, + "description": "

Get the full name of a reference.

\n", + "comments": "

See git_reference_symbolic_create() for rules about valid names.

\n", + "group": "reference", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_reference_name-17" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_reference_name-25" + ] + } + }, + "git_reference_resolve": { + "type": "function", + "file": "git2/refs.h", + "line": 302, + "lineto": 302, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the peeled reference" + }, + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "git_reference **out, const git_reference *ref", + "sig": "git_reference **::const git_reference *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Resolve a symbolic reference to a direct reference.

\n", + "comments": "

This method iteratively peels a symbolic reference until it resolves to a direct reference to an OID.

\n\n

The peeled reference is returned in the resolved_ref argument, and must be freed manually once it's no longer needed.

\n\n

If a direct reference is passed as an argument, a copy of that reference is returned. This copy must be manually freed too.

\n", + "group": "reference" + }, + "git_reference_owner": { + "type": "function", + "file": "git2/refs.h", + "line": 310, + "lineto": 310, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "git_repository *", + "comment": " a pointer to the repo" + }, + "description": "

Get the repository where a reference resides.

\n", + "comments": "", + "group": "reference" + }, + "git_reference_symbolic_set_target": { + "type": "function", + "file": "git2/refs.h", + "line": 332, + "lineto": 336, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "ref", + "type": "git_reference *", + "comment": "The reference" + }, + { + "name": "target", + "type": "const char *", + "comment": "The new target for the reference" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_reference *ref, const char *target, const char *log_message", + "sig": "git_reference **::git_reference *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Create a new reference with the same name as the given reference but a\n different symbolic target. The reference must be a symbolic reference,\n otherwise this will fail.

\n", + "comments": "

The new reference will be written to disk, overwriting the given reference.

\n\n

The target name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", + "group": "reference" + }, + "git_reference_set_target": { + "type": "function", + "file": "git2/refs.h", + "line": 352, + "lineto": 356, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "ref", + "type": "git_reference *", + "comment": "The reference" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The new target OID for the reference" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_reference *ref, const git_oid *id, const char *log_message", + "sig": "git_reference **::git_reference *::const git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EMODIFIED if the value of the reference\n has changed since it was read, or an error code" + }, + "description": "

Conditionally create a new reference with the same name as the given reference but a\n different OID target. The reference must be a direct reference, otherwise\n this will fail.

\n", + "comments": "

The new reference will be written to disk, overwriting the given reference.

\n", + "group": "reference", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_reference_set_target-26" + ] + } + }, + "git_reference_rename": { + "type": "function", + "file": "git2/refs.h", + "line": 381, + "lineto": 386, + "args": [ + { + "name": "new_ref", + "type": "git_reference **", + "comment": null + }, + { + "name": "ref", + "type": "git_reference *", + "comment": "The reference to rename" + }, + { + "name": "new_name", + "type": "const char *", + "comment": "The new name for the reference" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite an existing reference" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **new_ref, git_reference *ref, const char *new_name, int force, const char *log_message", + "sig": "git_reference **::git_reference *::const char *::int::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Rename an existing reference.

\n", + "comments": "

This method works for both direct and symbolic references.

\n\n

The new name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n\n

If the force flag is not enabled, and there's already a reference with the given name, the renaming will fail.

\n\n

IMPORTANT: The user needs to write a proper reflog entry if the reflog is enabled for the repository. We only rename the reflog if it exists.

\n", + "group": "reference" + }, + "git_reference_delete": { + "type": "function", + "file": "git2/refs.h", + "line": 401, + "lineto": 401, + "args": [ + { + "name": "ref", + "type": "git_reference *", + "comment": "The reference to remove" + } + ], + "argline": "git_reference *ref", + "sig": "git_reference *", + "return": { + "type": "int", + "comment": " 0, GIT_EMODIFIED or an error code" + }, + "description": "

Delete an existing reference.

\n", + "comments": "

This method works for both direct and symbolic references. The reference will be immediately removed on disk but the memory will not be freed. Callers must call git_reference_free.

\n\n

This function will return an error if the reference has changed from the time it was looked up.

\n", + "group": "reference" + }, + "git_reference_remove": { + "type": "function", + "file": "git2/refs.h", + "line": 412, + "lineto": 412, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": null + }, + { + "name": "name", + "type": "const char *", + "comment": "The reference to remove" + } + ], + "argline": "git_repository *repo, const char *name", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Delete an existing reference by name

\n", + "comments": "

This method removes the named reference from the repository without looking at its old value.

\n", + "group": "reference" + }, + "git_reference_list": { + "type": "function", + "file": "git2/refs.h", + "line": 426, + "lineto": 426, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": "Pointer to a git_strarray structure where\n\t\tthe reference names will be stored" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the refs" + } + ], + "argline": "git_strarray *array, git_repository *repo", + "sig": "git_strarray *::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Fill a list with all the references that can be found in a repository.

\n", + "comments": "

The string array will be filled with the names of all references; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free().

\n", + "group": "reference", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_reference_list-57" + ] + } + }, + "git_reference_foreach": { + "type": "function", + "file": "git2/refs.h", + "line": 466, + "lineto": 469, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the refs" + }, + { + "name": "callback", + "type": "git_reference_foreach_cb", + "comment": "Function which will be called for every listed ref" + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback" + } + ], + "argline": "git_repository *repo, git_reference_foreach_cb callback, void *payload", + "sig": "git_repository *::git_reference_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Perform a callback on each reference in the repository.

\n", + "comments": "

The callback function will be called for each reference in the repository, receiving the reference object and the payload value passed to this method. Returning a non-zero value from the callback will terminate the iteration.

\n\n

Note that the callback function is responsible to call git_reference_free on each reference passed to it.

\n", + "group": "reference" + }, + "git_reference_foreach_name": { + "type": "function", + "file": "git2/refs.h", + "line": 484, + "lineto": 487, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the refs" + }, + { + "name": "callback", + "type": "git_reference_foreach_name_cb", + "comment": "Function which will be called for every listed ref name" + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback" + } + ], + "argline": "git_repository *repo, git_reference_foreach_name_cb callback, void *payload", + "sig": "git_repository *::git_reference_foreach_name_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Perform a callback on the fully-qualified name of each reference.

\n", + "comments": "

The callback function will be called for each reference in the repository, receiving the name of the reference and the payload value passed to this method. Returning a non-zero value from the callback will terminate the iteration.

\n", + "group": "reference" + }, + "git_reference_dup": { + "type": "function", + "file": "git2/refs.h", + "line": 498, + "lineto": 498, + "args": [ + { + "name": "dest", + "type": "git_reference **", + "comment": "pointer where to store the copy" + }, + { + "name": "source", + "type": "git_reference *", + "comment": "object to copy" + } + ], + "argline": "git_reference **dest, git_reference *source", + "sig": "git_reference **::git_reference *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a copy of an existing reference.

\n", + "comments": "

Call git_reference_free to free the data.

\n", + "group": "reference" + }, + "git_reference_free": { + "type": "function", + "file": "git2/refs.h", + "line": 505, + "lineto": 505, + "args": [ + { + "name": "ref", + "type": "git_reference *", + "comment": "git_reference" + } + ], + "argline": "git_reference *ref", + "sig": "git_reference *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the given reference.

\n", + "comments": "", + "group": "reference", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_reference_free-18", + "ex/v1.7.2/checkout.html#git_reference_free-19", + "ex/v1.7.2/checkout.html#git_reference_free-20" + ], + "commit.c": [ + "ex/v1.7.2/commit.html#git_reference_free-7" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_reference_free-58" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_reference_free-27", + "ex/v1.7.2/merge.html#git_reference_free-28", + "ex/v1.7.2/merge.html#git_reference_free-29" + ], + "status.c": [ + "ex/v1.7.2/status.html#git_reference_free-1" + ] + } + }, + "git_reference_cmp": { + "type": "function", + "file": "git2/refs.h", + "line": 514, + "lineto": 516, + "args": [ + { + "name": "ref1", + "type": "const git_reference *", + "comment": "The first git_reference" + }, + { + "name": "ref2", + "type": "const git_reference *", + "comment": "The second git_reference" + } + ], + "argline": "const git_reference *ref1, const git_reference *ref2", + "sig": "const git_reference *::const git_reference *", + "return": { + "type": "int", + "comment": " 0 if the same, else a stable but meaningless ordering." + }, + "description": "

Compare two references.

\n", + "comments": "", + "group": "reference" + }, + "git_reference_iterator_new": { + "type": "function", + "file": "git2/refs.h", + "line": 525, + "lineto": 527, + "args": [ + { + "name": "out", + "type": "git_reference_iterator **", + "comment": "pointer in which to store the iterator" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_reference_iterator **out, git_repository *repo", + "sig": "git_reference_iterator **::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create an iterator for the repo's references

\n", + "comments": "", + "group": "reference" + }, + "git_reference_iterator_glob_new": { + "type": "function", + "file": "git2/refs.h", + "line": 538, + "lineto": 541, + "args": [ + { + "name": "out", + "type": "git_reference_iterator **", + "comment": "pointer in which to store the iterator" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "glob", + "type": "const char *", + "comment": "the glob to match against the reference names" + } + ], + "argline": "git_reference_iterator **out, git_repository *repo, const char *glob", + "sig": "git_reference_iterator **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create an iterator for the repo's references that match the\n specified glob

\n", + "comments": "", + "group": "reference" + }, + "git_reference_next": { + "type": "function", + "file": "git2/refs.h", + "line": 550, + "lineto": 550, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer in which to store the reference" + }, + { + "name": "iter", + "type": "git_reference_iterator *", + "comment": "the iterator" + } + ], + "argline": "git_reference **out, git_reference_iterator *iter", + "sig": "git_reference **::git_reference_iterator *", + "return": { + "type": "int", + "comment": " 0, GIT_ITEROVER if there are no more; or an error code" + }, + "description": "

Get the next reference

\n", + "comments": "", + "group": "reference" + }, + "git_reference_next_name": { + "type": "function", + "file": "git2/refs.h", + "line": 563, + "lineto": 563, + "args": [ + { + "name": "out", + "type": "const char **", + "comment": "pointer in which to store the string" + }, + { + "name": "iter", + "type": "git_reference_iterator *", + "comment": "the iterator" + } + ], + "argline": "const char **out, git_reference_iterator *iter", + "sig": "const char **::git_reference_iterator *", + "return": { + "type": "int", + "comment": " 0, GIT_ITEROVER if there are no more; or an error code" + }, + "description": "

Get the next reference's name

\n", + "comments": "

This function is provided for convenience in case only the names are interesting as it avoids the allocation of the git_reference object which git_reference_next() needs.

\n", + "group": "reference" + }, + "git_reference_iterator_free": { + "type": "function", + "file": "git2/refs.h", + "line": 570, + "lineto": 570, + "args": [ + { + "name": "iter", + "type": "git_reference_iterator *", + "comment": "the iterator to free" + } + ], + "argline": "git_reference_iterator *iter", + "sig": "git_reference_iterator *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the iterator and its associated resources

\n", + "comments": "", + "group": "reference" + }, + "git_reference_foreach_glob": { + "type": "function", + "file": "git2/refs.h", + "line": 590, + "lineto": 594, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the refs" + }, + { + "name": "glob", + "type": "const char *", + "comment": "Pattern to match (fnmatch-style) against reference name." + }, + { + "name": "callback", + "type": "git_reference_foreach_name_cb", + "comment": "Function which will be called for every listed ref" + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback" + } + ], + "argline": "git_repository *repo, const char *glob, git_reference_foreach_name_cb callback, void *payload", + "sig": "git_repository *::const char *::git_reference_foreach_name_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUSER on non-zero callback, or error code" + }, + "description": "

Perform a callback on each reference in the repository whose name\n matches the given pattern.

\n", + "comments": "

This function acts like git_reference_foreach() with an additional pattern match being applied to the reference name before issuing the callback function. See that function for more information.

\n\n

The pattern is matched using fnmatch or "glob" style where a '*' matches any sequence of letters, a '?' matches any letter, and square brackets can be used to define character ranges (such as "[0-9]" for digits).

\n", + "group": "reference" + }, + "git_reference_has_log": { + "type": "function", + "file": "git2/refs.h", + "line": 604, + "lineto": 604, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference's name" + } + ], + "argline": "git_repository *repo, const char *refname", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 when no reflog can be found, 1 when it exists;\n otherwise an error code." + }, + "description": "

Check if a reflog exists for the specified reference.

\n", + "comments": "", + "group": "reference" + }, + "git_reference_ensure_log": { + "type": "function", + "file": "git2/refs.h", + "line": 616, + "lineto": 616, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference's name" + } + ], + "argline": "git_repository *repo, const char *refname", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Ensure there is a reflog for a particular reference.

\n", + "comments": "

Make sure that successive updates to the reference will append to its log.

\n", + "group": "reference" + }, + "git_reference_is_branch": { + "type": "function", + "file": "git2/refs.h", + "line": 626, + "lineto": 626, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "A git reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 when the reference lives in the refs/heads\n namespace; 0 otherwise." + }, + "description": "

Check if a reference is a local branch.

\n", + "comments": "", + "group": "reference" + }, + "git_reference_is_remote": { + "type": "function", + "file": "git2/refs.h", + "line": 636, + "lineto": 636, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "A git reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 when the reference lives in the refs/remotes\n namespace; 0 otherwise." + }, + "description": "

Check if a reference is a remote tracking branch

\n", + "comments": "", + "group": "reference", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_reference_is_remote-21" + ] + } + }, + "git_reference_is_tag": { + "type": "function", + "file": "git2/refs.h", + "line": 646, + "lineto": 646, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "A git reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 when the reference lives in the refs/tags\n namespace; 0 otherwise." + }, + "description": "

Check if a reference is a tag

\n", + "comments": "", + "group": "reference" + }, + "git_reference_is_note": { + "type": "function", + "file": "git2/refs.h", + "line": 656, + "lineto": 656, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "A git reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 when the reference lives in the refs/notes\n namespace; 0 otherwise." + }, + "description": "

Check if a reference is a note

\n", + "comments": "", + "group": "reference" + }, + "git_reference_normalize_name": { + "type": "function", + "file": "git2/refs.h", + "line": 712, + "lineto": 716, + "args": [ + { + "name": "buffer_out", + "type": "char *", + "comment": "User allocated buffer to store normalized name" + }, + { + "name": "buffer_size", + "type": "size_t", + "comment": "Size of buffer_out" + }, + { + "name": "name", + "type": "const char *", + "comment": "Reference name to be checked." + }, + { + "name": "flags", + "type": "unsigned int", + "comment": "Flags to constrain name validation rules - see the\n GIT_REFERENCE_FORMAT constants above." + } + ], + "argline": "char *buffer_out, size_t buffer_size, const char *name, unsigned int flags", + "sig": "char *::size_t::const char *::unsigned int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EBUFS if buffer is too small, GIT_EINVALIDSPEC\n or an error code." + }, + "description": "

Normalize reference name and check validity.

\n", + "comments": "

This will normalize the reference name by removing any leading slash '/' characters and collapsing runs of adjacent slashes between name components into a single slash.

\n\n

Once normalized, if the reference name is valid, it will be returned in the user allocated buffer.

\n\n

See git_reference_symbolic_create() for rules about valid names.

\n", + "group": "reference" + }, + "git_reference_peel": { + "type": "function", + "file": "git2/refs.h", + "line": 733, + "lineto": 736, + "args": [ + { + "name": "out", + "type": "git_object **", + "comment": "Pointer to the peeled git_object" + }, + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference to be processed" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "The type of the requested object (GIT_OBJECT_COMMIT,\n GIT_OBJECT_TAG, GIT_OBJECT_TREE, GIT_OBJECT_BLOB or GIT_OBJECT_ANY)." + } + ], + "argline": "git_object **out, const git_reference *ref, git_object_t type", + "sig": "git_object **::const git_reference *::git_object_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EAMBIGUOUS, GIT_ENOTFOUND or an error code" + }, + "description": "

Recursively peel reference until object of the specified type is found.

\n", + "comments": "

The retrieved peeled object is owned by the repository and should be closed with the git_object_free method.

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until a non-tag object is met.

\n", + "group": "reference", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_reference_peel-30" + ] + } + }, + "git_reference_name_is_valid": { + "type": "function", + "file": "git2/refs.h", + "line": 753, + "lineto": 753, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "output pointer to set with validity of given reference name" + }, + { + "name": "refname", + "type": "const char *", + "comment": "name to be checked." + } + ], + "argline": "int *valid, const char *refname", + "sig": "int *::const char *", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Ensure the reference name is well-formed.

\n", + "comments": "

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n", + "group": "reference" + }, + "git_reference_shorthand": { + "type": "function", + "file": "git2/refs.h", + "line": 767, + "lineto": 767, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "a reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const char *", + "comment": " the human-readable version of the name" + }, + "description": "

Get the reference's short name

\n", + "comments": "

This will transform the reference name into a name "human-readable" version. If no shortname is appropriate, it will return the full name.

\n\n

The memory is owned by the reference and must not be freed.

\n", + "group": "reference", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_reference_shorthand-2" + ] + } + }, + "git_refspec_parse": { + "type": "function", + "file": "git2/refspec.h", + "line": 32, + "lineto": 32, + "args": [ + { + "name": "refspec", + "type": "git_refspec **", + "comment": "a pointer to hold the refspec handle" + }, + { + "name": "input", + "type": "const char *", + "comment": "the refspec string" + }, + { + "name": "is_fetch", + "type": "int", + "comment": "is this a refspec for a fetch" + } + ], + "argline": "git_refspec **refspec, const char *input, int is_fetch", + "sig": "git_refspec **::const char *::int", + "return": { + "type": "int", + "comment": " 0 if the refspec string could be parsed, -1 otherwise" + }, + "description": "

Parse a given refspec string

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_free": { + "type": "function", + "file": "git2/refspec.h", + "line": 39, + "lineto": 39, + "args": [ + { + "name": "refspec", + "type": "git_refspec *", + "comment": "the refspec object" + } + ], + "argline": "git_refspec *refspec", + "sig": "git_refspec *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a refspec object which has been created by git_refspec_parse

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_src": { + "type": "function", + "file": "git2/refspec.h", + "line": 47, + "lineto": 47, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + } + ], + "argline": "const git_refspec *refspec", + "sig": "const git_refspec *", + "return": { + "type": "const char *", + "comment": " the refspec's source specifier" + }, + "description": "

Get the source specifier

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_dst": { + "type": "function", + "file": "git2/refspec.h", + "line": 55, + "lineto": 55, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + } + ], + "argline": "const git_refspec *refspec", + "sig": "const git_refspec *", + "return": { + "type": "const char *", + "comment": " the refspec's destination specifier" + }, + "description": "

Get the destination specifier

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_string": { + "type": "function", + "file": "git2/refspec.h", + "line": 63, + "lineto": 63, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + } + ], + "argline": "const git_refspec *refspec", + "sig": "const git_refspec *", + "return": { + "type": "const char *", + "comment": null + }, + "description": "

Get the refspec's string

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_force": { + "type": "function", + "file": "git2/refspec.h", + "line": 71, + "lineto": 71, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + } + ], + "argline": "const git_refspec *refspec", + "sig": "const git_refspec *", + "return": { + "type": "int", + "comment": " 1 if force update has been set, 0 otherwise" + }, + "description": "

Get the force update setting

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_direction": { + "type": "function", + "file": "git2/refspec.h", + "line": 79, + "lineto": 79, + "args": [ + { + "name": "spec", + "type": "const git_refspec *", + "comment": "refspec" + } + ], + "argline": "const git_refspec *spec", + "sig": "const git_refspec *", + "return": { + "type": "git_direction", + "comment": " GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" + }, + "description": "

Get the refspec's direction.

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_src_matches": { + "type": "function", + "file": "git2/refspec.h", + "line": 88, + "lineto": 88, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the name of the reference to check" + } + ], + "argline": "const git_refspec *refspec, const char *refname", + "sig": "const git_refspec *::const char *", + "return": { + "type": "int", + "comment": " 1 if the refspec matches, 0 otherwise" + }, + "description": "

Check if a refspec's source descriptor matches a reference

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_dst_matches": { + "type": "function", + "file": "git2/refspec.h", + "line": 97, + "lineto": 97, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the name of the reference to check" + } + ], + "argline": "const git_refspec *refspec, const char *refname", + "sig": "const git_refspec *::const char *", + "return": { + "type": "int", + "comment": " 1 if the refspec matches, 0 otherwise" + }, + "description": "

Check if a refspec's destination descriptor matches a reference

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_transform": { + "type": "function", + "file": "git2/refspec.h", + "line": 107, + "lineto": 107, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "where to store the target name" + }, + { + "name": "spec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the reference to transform" + } + ], + "argline": "git_buf *out, const git_refspec *spec, const char *name", + "sig": "git_buf *::const git_refspec *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EBUFS or another error" + }, + "description": "

Transform a reference to its target following the refspec's rules

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_rtransform": { + "type": "function", + "file": "git2/refspec.h", + "line": 117, + "lineto": 117, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "where to store the source reference name" + }, + { + "name": "spec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the reference to transform" + } + ], + "argline": "git_buf *out, const git_refspec *spec, const char *name", + "sig": "git_buf *::const git_refspec *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EBUFS or another error" + }, + "description": "

Transform a target reference to its source reference following the refspec's rules

\n", + "comments": "", + "group": "refspec" + }, + "git_remote_create": { + "type": "function", + "file": "git2/remote.h", + "line": 38, + "lineto": 42, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "the resulting remote" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to create the remote" + }, + { + "name": "name", + "type": "const char *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote's url" + } + ], + "argline": "git_remote **out, git_repository *repo, const char *name, const char *url", + "sig": "git_remote **::git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Add a remote with the default fetch refspec to the repository's configuration.

\n", + "comments": "", + "group": "remote", + "examples": { + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_create-1" + ] + } + }, + "git_remote_create_options_init": { + "type": "function", + "file": "git2/remote.h", + "line": 121, + "lineto": 123, + "args": [ + { + "name": "opts", + "type": "git_remote_create_options *", + "comment": "The `git_remote_create_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REMOTE_CREATE_OPTIONS_VERSION`." + } + ], + "argline": "git_remote_create_options *opts, unsigned int version", + "sig": "git_remote_create_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_remote_create_options structure

\n", + "comments": "

Initializes a git_remote_create_options with default values. Equivalent to creating an instance with GIT_REMOTE_CREATE_OPTIONS_INIT.

\n", + "group": "remote" + }, + "git_remote_create_with_opts": { + "type": "function", + "file": "git2/remote.h", + "line": 137, + "lineto": 140, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "the resulting remote" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote's url" + }, + { + "name": "opts", + "type": "const git_remote_create_options *", + "comment": "the remote creation options" + } + ], + "argline": "git_remote **out, const char *url, const git_remote_create_options *opts", + "sig": "git_remote **::const char *::const git_remote_create_options *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Create a remote, with options.

\n", + "comments": "

This function allows more fine-grained control over the remote creation.

\n\n

Passing NULL as the opts argument will result in a detached remote.

\n", + "group": "remote" + }, + "git_remote_create_with_fetchspec": { + "type": "function", + "file": "git2/remote.h", + "line": 153, + "lineto": 158, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "the resulting remote" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to create the remote" + }, + { + "name": "name", + "type": "const char *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote's url" + }, + { + "name": "fetch", + "type": "const char *", + "comment": "the remote fetch value" + } + ], + "argline": "git_remote **out, git_repository *repo, const char *name, const char *url, const char *fetch", + "sig": "git_remote **::git_repository *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Add a remote with the provided fetch refspec (or default if NULL) to the repository's\n configuration.

\n", + "comments": "", + "group": "remote" + }, + "git_remote_create_anonymous": { + "type": "function", + "file": "git2/remote.h", + "line": 171, + "lineto": 174, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "pointer to the new remote objects" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the associated repository" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote repository's URL" + } + ], + "argline": "git_remote **out, git_repository *repo, const char *url", + "sig": "git_remote **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create an anonymous remote

\n", + "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n", + "group": "remote", + "examples": { + "fetch.c": [ + "ex/v1.7.2/fetch.html#git_remote_create_anonymous-4" + ], + "ls-remote.c": [ + "ex/v1.7.2/ls-remote.html#git_remote_create_anonymous-2" + ] + } + }, + "git_remote_create_detached": { + "type": "function", + "file": "git2/remote.h", + "line": 190, + "lineto": 192, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "pointer to the new remote objects" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote repository's URL" + } + ], + "argline": "git_remote **out, const char *url", + "sig": "git_remote **::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a remote without a connected local repo

\n", + "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n\n

Contrasted with git_remote_create_anonymous, a detached remote will not consider any repo configuration values (such as insteadof url substitutions).

\n", + "group": "remote" + }, + "git_remote_lookup": { + "type": "function", + "file": "git2/remote.h", + "line": 205, + "lineto": 205, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "pointer to the new remote object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the associated repository" + }, + { + "name": "name", + "type": "const char *", + "comment": "the remote's name" + } + ], + "argline": "git_remote **out, git_repository *repo, const char *name", + "sig": "git_remote **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Get the information for a particular remote

\n", + "comments": "

The name will be checked for validity. See git_tag_create() for rules about valid names.

\n", + "group": "remote", + "examples": { + "fetch.c": [ + "ex/v1.7.2/fetch.html#git_remote_lookup-5" + ], + "ls-remote.c": [ + "ex/v1.7.2/ls-remote.html#git_remote_lookup-3" + ], + "push.c": [ + "ex/v1.7.2/push.html#git_remote_lookup-1" + ], + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_lookup-2" + ] + } + }, + "git_remote_dup": { + "type": "function", + "file": "git2/remote.h", + "line": 217, + "lineto": 217, + "args": [ + { + "name": "dest", + "type": "git_remote **", + "comment": "pointer where to store the copy" + }, + { + "name": "source", + "type": "git_remote *", + "comment": "object to copy" + } + ], + "argline": "git_remote **dest, git_remote *source", + "sig": "git_remote **::git_remote *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a copy of an existing remote. All internal strings are also\n duplicated. Callbacks are not duplicated.

\n", + "comments": "

Call git_remote_free to free the data.

\n", + "group": "remote" + }, + "git_remote_owner": { + "type": "function", + "file": "git2/remote.h", + "line": 225, + "lineto": 225, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "git_repository *", + "comment": " a pointer to the repository" + }, + "description": "

Get the remote's repository

\n", + "comments": "", + "group": "remote" + }, + "git_remote_name": { + "type": "function", + "file": "git2/remote.h", + "line": 233, + "lineto": 233, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "const char *", + "comment": " a pointer to the name or NULL for in-memory remotes" + }, + "description": "

Get the remote's name

\n", + "comments": "", + "group": "remote" + }, + "git_remote_url": { + "type": "function", + "file": "git2/remote.h", + "line": 245, + "lineto": 245, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "const char *", + "comment": " a pointer to the url" + }, + "description": "

Get the remote's url

\n", + "comments": "

If url.*.insteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", + "group": "remote", + "examples": { + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_url-3" + ] + } + }, + "git_remote_pushurl": { + "type": "function", + "file": "git2/remote.h", + "line": 257, + "lineto": 257, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "const char *", + "comment": " a pointer to the url or NULL if no special url for pushing is set" + }, + "description": "

Get the remote's url for pushing.

\n", + "comments": "

If url.*.pushInsteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", + "group": "remote", + "examples": { + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_pushurl-4" + ] + } + }, + "git_remote_set_url": { + "type": "function", + "file": "git2/remote.h", + "line": 270, + "lineto": 270, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the change" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the url to set" + } + ], + "argline": "git_repository *repo, const char *remote, const char *url", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error value" + }, + "description": "

Set the remote's url in the configuration

\n", + "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", + "group": "remote", + "examples": { + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_set_url-5" + ] + } + }, + "git_remote_set_pushurl": { + "type": "function", + "file": "git2/remote.h", + "line": 284, + "lineto": 284, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the change" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the url to set" + } + ], + "argline": "git_repository *repo, const char *remote, const char *url", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, or an error code" + }, + "description": "

Set the remote's url for pushing in the configuration.

\n", + "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", + "group": "remote", + "examples": { + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_set_pushurl-6" + ] + } + }, + "git_remote_set_instance_url": { + "type": "function", + "file": "git2/remote.h", + "line": 294, + "lineto": 294, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the url to set" + } + ], + "argline": "git_remote *remote, const char *url", + "sig": "git_remote *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error value" + }, + "description": "

Set the url for this particular url instance. The URL in the\n configuration will be ignored, and will not be changed.

\n", + "comments": "", + "group": "remote" + }, + "git_remote_set_instance_pushurl": { + "type": "function", + "file": "git2/remote.h", + "line": 304, + "lineto": 304, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the url to set" + } + ], + "argline": "git_remote *remote, const char *url", + "sig": "git_remote *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error value" + }, + "description": "

Set the push url for this particular url instance. The URL in the\n configuration will be ignored, and will not be changed.

\n", + "comments": "", + "group": "remote" + }, + "git_remote_add_fetch": { + "type": "function", + "file": "git2/remote.h", + "line": 317, + "lineto": 317, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to change the configuration" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the name of the remote to change" + }, + { + "name": "refspec", + "type": "const char *", + "comment": "the new fetch refspec" + } + ], + "argline": "git_repository *repo, const char *remote, const char *refspec", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC if refspec is invalid or an error value" + }, + "description": "

Add a fetch refspec to the remote's configuration

\n", + "comments": "

Add the given refspec to the fetch list in the configuration. No loaded remote instances will be affected.

\n", + "group": "remote" + }, + "git_remote_get_fetch_refspecs": { + "type": "function", + "file": "git2/remote.h", + "line": 329, + "lineto": 329, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": "pointer to the array in which to store the strings" + }, + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + } + ], + "argline": "git_strarray *array, const git_remote *remote", + "sig": "git_strarray *::const git_remote *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Get the remote's list of fetch refspecs

\n", + "comments": "

The memory is owned by the user and should be freed with git_strarray_free.

\n", + "group": "remote" + }, + "git_remote_add_push": { + "type": "function", + "file": "git2/remote.h", + "line": 342, + "lineto": 342, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to change the configuration" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the name of the remote to change" + }, + { + "name": "refspec", + "type": "const char *", + "comment": "the new push refspec" + } + ], + "argline": "git_repository *repo, const char *remote, const char *refspec", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC if refspec is invalid or an error value" + }, + "description": "

Add a push refspec to the remote's configuration

\n", + "comments": "

Add the given refspec to the push list in the configuration. No loaded remote instances will be affected.

\n", + "group": "remote" + }, + "git_remote_get_push_refspecs": { + "type": "function", + "file": "git2/remote.h", + "line": 354, + "lineto": 354, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": "pointer to the array in which to store the strings" + }, + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + } + ], + "argline": "git_strarray *array, const git_remote *remote", + "sig": "git_strarray *::const git_remote *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Get the remote's list of push refspecs

\n", + "comments": "

The memory is owned by the user and should be freed with git_strarray_free.

\n", + "group": "remote" + }, + "git_remote_refspec_count": { + "type": "function", + "file": "git2/remote.h", + "line": 362, + "lineto": 362, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "size_t", + "comment": " the amount of refspecs configured in this remote" + }, + "description": "

Get the number of refspecs for a remote

\n", + "comments": "", + "group": "remote" + }, + "git_remote_get_refspec": { + "type": "function", + "file": "git2/remote.h", + "line": 371, + "lineto": 371, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + }, + { + "name": "n", + "type": "size_t", + "comment": "the refspec to get" + } + ], + "argline": "const git_remote *remote, size_t n", + "sig": "const git_remote *::size_t", + "return": { + "type": "const git_refspec *", + "comment": " the nth refspec" + }, + "description": "

Get a refspec from the remote

\n", + "comments": "", + "group": "remote" + }, + "git_remote_ls": { + "type": "function", + "file": "git2/remote.h", + "line": 393, + "lineto": 393, + "args": [ + { + "name": "out", + "type": "const git_remote_head ***", + "comment": "pointer to the array" + }, + { + "name": "size", + "type": "size_t *", + "comment": "the number of remote heads" + }, + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote_head ***out, size_t *size, git_remote *remote", + "sig": "const git_remote_head ***::size_t *::git_remote *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Get the remote repository's reference advertisement list

\n", + "comments": "

Get the list of references with which the server responds to a new connection.

\n\n

The remote (or more exactly its transport) must have connected to the remote repository. This list is available as soon as the connection to the remote is initiated and it remains available after disconnecting.

\n\n

The memory belongs to the remote. The pointer will be valid as long as a new connection is not initiated, but it is recommended that you make a copy in order to make use of the data.

\n", + "group": "remote", + "examples": { + "ls-remote.c": [ + "ex/v1.7.2/ls-remote.html#git_remote_ls-4" + ] + } + }, + "git_remote_connected": { + "type": "function", + "file": "git2/remote.h", + "line": 404, + "lineto": 404, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "int", + "comment": " 1 if it's connected, 0 otherwise." + }, + "description": "

Check whether the remote is connected

\n", + "comments": "

Check whether the remote's underlying transport is connected to the remote host.

\n", + "group": "remote" + }, + "git_remote_stop": { + "type": "function", + "file": "git2/remote.h", + "line": 415, + "lineto": 415, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote" + } + ], + "argline": "git_remote *remote", + "sig": "git_remote *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Cancel the operation

\n", + "comments": "

At certain points in its operation, the network code checks whether the operation has been cancelled and if so stops the operation.

\n", + "group": "remote" + }, + "git_remote_disconnect": { + "type": "function", + "file": "git2/remote.h", + "line": 425, + "lineto": 425, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to disconnect from" + } + ], + "argline": "git_remote *remote", + "sig": "git_remote *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Disconnect from the remote

\n", + "comments": "

Close the connection to the remote.

\n", + "group": "remote" + }, + "git_remote_free": { + "type": "function", + "file": "git2/remote.h", + "line": 435, + "lineto": 435, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to free" + } + ], + "argline": "git_remote *remote", + "sig": "git_remote *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the memory associated with a remote

\n", + "comments": "

This also disconnects from the remote, if the connection has not been closed yet (using git_remote_disconnect).

\n", + "group": "remote", + "examples": { + "fetch.c": [ + "ex/v1.7.2/fetch.html#git_remote_free-6", + "ex/v1.7.2/fetch.html#git_remote_free-7" + ], + "ls-remote.c": [ + "ex/v1.7.2/ls-remote.html#git_remote_free-5" + ], + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_free-7" + ] + } + }, + "git_remote_list": { + "type": "function", + "file": "git2/remote.h", + "line": 446, + "lineto": 446, + "args": [ + { + "name": "out", + "type": "git_strarray *", + "comment": "a string array which receives the names of the remotes" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to query" + } + ], + "argline": "git_strarray *out, git_repository *repo", + "sig": "git_strarray *::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get a list of the configured remotes for a repo

\n", + "comments": "

The string array must be freed by the user.

\n", + "group": "remote", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_remote_list-22" + ], + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_list-8" + ] + } + }, + "git_remote_init_callbacks": { + "type": "function", + "file": "git2/remote.h", + "line": 660, + "lineto": 662, + "args": [ + { + "name": "opts", + "type": "git_remote_callbacks *", + "comment": "the `git_remote_callbacks` struct to initialize" + }, + { + "name": "version", + "type": "unsigned int", + "comment": "Version of struct; pass `GIT_REMOTE_CALLBACKS_VERSION`" + } + ], + "argline": "git_remote_callbacks *opts, unsigned int version", + "sig": "git_remote_callbacks *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initializes a git_remote_callbacks with default values. Equivalent to\n creating an instance with GIT_REMOTE_CALLBACKS_INIT.

\n", + "comments": "", + "group": "remote" + }, + "git_fetch_options_init": { + "type": "function", + "file": "git2/remote.h", + "line": 791, + "lineto": 793, + "args": [ + { + "name": "opts", + "type": "git_fetch_options *", + "comment": "The `git_fetch_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_FETCH_OPTIONS_VERSION`." + } + ], + "argline": "git_fetch_options *opts, unsigned int version", + "sig": "git_fetch_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_fetch_options structure

\n", + "comments": "

Initializes a git_fetch_options with default values. Equivalent to creating an instance with GIT_FETCH_OPTIONS_INIT.

\n", + "group": "fetch" + }, + "git_push_options_init": { + "type": "function", + "file": "git2/remote.h", + "line": 848, + "lineto": 850, + "args": [ + { + "name": "opts", + "type": "git_push_options *", + "comment": "The `git_push_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_PUSH_OPTIONS_VERSION`." + } + ], + "argline": "git_push_options *opts, unsigned int version", + "sig": "git_push_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_push_options structure

\n", + "comments": "

Initializes a git_push_options with default values. Equivalent to creating an instance with GIT_PUSH_OPTIONS_INIT.

\n", + "group": "push", + "examples": { + "push.c": [ + "ex/v1.7.2/push.html#git_push_options_init-2" + ] + } + }, + "git_remote_connect_options_init": { + "type": "function", + "file": "git2/remote.h", + "line": 896, + "lineto": 898, + "args": [ + { + "name": "opts", + "type": "git_remote_connect_options *", + "comment": "The `git_remote_connect_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REMOTE_CONNECT_OPTIONS_VERSION`." + } + ], + "argline": "git_remote_connect_options *opts, unsigned int version", + "sig": "git_remote_connect_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_remote_connect_options structure.

\n", + "comments": "

Initializes a git_remote_connect_options with default values. Equivalent to creating an instance with GIT_REMOTE_CONNECT_OPTIONS_INIT.

\n", + "group": "remote" + }, + "git_remote_connect": { + "type": "function", + "file": "git2/remote.h", + "line": 915, + "lineto": 920, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to connect to" + }, + { + "name": "direction", + "type": "git_direction", + "comment": "GIT_DIRECTION_FETCH if you want to fetch or\n GIT_DIRECTION_PUSH if you want to push" + }, + { + "name": "callbacks", + "type": "const git_remote_callbacks *", + "comment": "the callbacks to use for this connection" + }, + { + "name": "proxy_opts", + "type": "const git_proxy_options *", + "comment": "proxy settings" + }, + { + "name": "custom_headers", + "type": "const git_strarray *", + "comment": "extra HTTP headers to use in this connection" + } + ], + "argline": "git_remote *remote, git_direction direction, const git_remote_callbacks *callbacks, const git_proxy_options *proxy_opts, const git_strarray *custom_headers", + "sig": "git_remote *::git_direction::const git_remote_callbacks *::const git_proxy_options *::const git_strarray *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Open a connection to a remote.

\n", + "comments": "

The transport is selected based on the URL; the direction argument is due to a limitation of the git protocol which starts up a specific binary which can only do the one or the other.

\n", + "group": "remote", + "examples": { + "ls-remote.c": [ + "ex/v1.7.2/ls-remote.html#git_remote_connect-6" + ] + } + }, + "git_remote_connect_ext": { + "type": "function", + "file": "git2/remote.h", + "line": 940, + "lineto": 943, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to connect to" + }, + { + "name": "direction", + "type": "git_direction", + "comment": "GIT_DIRECTION_FETCH if you want to fetch or\n GIT_DIRECTION_PUSH if you want to push" + }, + { + "name": "opts", + "type": "const git_remote_connect_options *", + "comment": "the remote connection options" + } + ], + "argline": "git_remote *remote, git_direction direction, const git_remote_connect_options *opts", + "sig": "git_remote *::git_direction::const git_remote_connect_options *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Open a connection to a remote with extended options.

\n", + "comments": "

The transport is selected based on the URL; the direction argument is due to a limitation of the git protocol which starts up a specific binary which can only do the one or the other.

\n\n

The given options structure will form the defaults for connection options and callback setup. Callers may override these defaults by specifying git_fetch_options or git_push_options in subsequent calls.

\n", + "group": "remote" + }, + "git_remote_download": { + "type": "function", + "file": "git2/remote.h", + "line": 965, + "lineto": 968, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote" + }, + { + "name": "refspecs", + "type": "const git_strarray *", + "comment": "the refspecs to use for this negotiation and\n download. Use NULL or an empty array to use the base refspecs" + }, + { + "name": "opts", + "type": "const git_fetch_options *", + "comment": "the options to use for this fetch or NULL" + } + ], + "argline": "git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts", + "sig": "git_remote *::const git_strarray *::const git_fetch_options *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Download and index the packfile.

\n", + "comments": "

Connect to the remote if it hasn't been done yet, negotiate with the remote git which objects are missing, download and index the packfile.

\n\n

The .idx file will be created and both it and the packfile with be renamed to their final name.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", + "group": "remote" + }, + "git_remote_upload": { + "type": "function", + "file": "git2/remote.h", + "line": 987, + "lineto": 990, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote" + }, + { + "name": "refspecs", + "type": "const git_strarray *", + "comment": "the refspecs to use for this negotiation and\n upload. Use NULL or an empty array to use the base refspecs" + }, + { + "name": "opts", + "type": "const git_push_options *", + "comment": "the options to use for this push" + } + ], + "argline": "git_remote *remote, const git_strarray *refspecs, const git_push_options *opts", + "sig": "git_remote *::const git_strarray *::const git_push_options *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a packfile and send it to the server

\n", + "comments": "

Connect to the remote if it hasn't been done yet, negotiate with the remote git which objects are missing, create a packfile with the missing objects and send it.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", + "group": "remote" + }, + "git_remote_update_tips": { + "type": "function", + "file": "git2/remote.h", + "line": 1009, + "lineto": 1014, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to update" + }, + { + "name": "callbacks", + "type": "const git_remote_callbacks *", + "comment": "pointer to the callback structure to use or NULL" + }, + { + "name": "update_fetchhead", + "type": "int", + "comment": "whether to write to FETCH_HEAD. Pass 1 to behave like git." + }, + { + "name": "download_tags", + "type": "git_remote_autotag_option_t", + "comment": "what the behaviour for downloading tags is for this fetch. This is\n ignored for push. This must be the same value passed to `git_remote_download()`." + }, + { + "name": "reflog_message", + "type": "const char *", + "comment": "The message to insert into the reflogs. If\n NULL and fetching, the default is \"fetch \n\", where \n is\n the name of the remote (or its url, for in-memory remotes). This\n parameter is ignored when pushing." + } + ], + "argline": "git_remote *remote, const git_remote_callbacks *callbacks, int update_fetchhead, git_remote_autotag_option_t download_tags, const char *reflog_message", + "sig": "git_remote *::const git_remote_callbacks *::int::git_remote_autotag_option_t::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Update the tips to the new state.

\n", + "comments": "

If callbacks are not specified then the callbacks specified to git_remote_connect will be used (if it was called).

\n", + "group": "remote" + }, + "git_remote_fetch": { + "type": "function", + "file": "git2/remote.h", + "line": 1034, + "lineto": 1038, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to fetch from" + }, + { + "name": "refspecs", + "type": "const git_strarray *", + "comment": "the refspecs to use for this fetch. Pass NULL or an\n empty array to use the base refspecs." + }, + { + "name": "opts", + "type": "const git_fetch_options *", + "comment": "options to use for this fetch or NULL" + }, + { + "name": "reflog_message", + "type": "const char *", + "comment": "The message to insert into the reflogs. If NULL, the\n\t\t\t\t\t\t\t\t default is \"fetch\"" + } + ], + "argline": "git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts, const char *reflog_message", + "sig": "git_remote *::const git_strarray *::const git_fetch_options *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Download new data and update tips.

\n", + "comments": "

Convenience function to connect to a remote, download the data, disconnect and update the remote-tracking branches.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", + "group": "remote", + "examples": { + "fetch.c": [ + "ex/v1.7.2/fetch.html#git_remote_fetch-8" + ] + } + }, + "git_remote_prune": { + "type": "function", + "file": "git2/remote.h", + "line": 1050, + "lineto": 1052, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to prune" + }, + { + "name": "callbacks", + "type": "const git_remote_callbacks *", + "comment": "callbacks to use for this prune" + } + ], + "argline": "git_remote *remote, const git_remote_callbacks *callbacks", + "sig": "git_remote *::const git_remote_callbacks *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Prune tracking refs that are no longer present on remote.

\n", + "comments": "

If callbacks are not specified then the callbacks specified to git_remote_connect will be used (if it was called).

\n", + "group": "remote" + }, + "git_remote_push": { + "type": "function", + "file": "git2/remote.h", + "line": 1067, + "lineto": 1070, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to push to" + }, + { + "name": "refspecs", + "type": "const git_strarray *", + "comment": "the refspecs to use for pushing. If NULL or an empty\n array, the configured refspecs will be used" + }, + { + "name": "opts", + "type": "const git_push_options *", + "comment": "options to use for this push" + } + ], + "argline": "git_remote *remote, const git_strarray *refspecs, const git_push_options *opts", + "sig": "git_remote *::const git_strarray *::const git_push_options *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Perform a push.

\n", + "comments": "

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", + "group": "remote", + "examples": { + "push.c": [ + "ex/v1.7.2/push.html#git_remote_push-3" + ] + } + }, + "git_remote_stats": { + "type": "function", + "file": "git2/remote.h", + "line": 1075, + "lineto": 1075, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": null + } + ], + "argline": "git_remote *remote", + "sig": "git_remote *", + "return": { + "type": "const git_indexer_progress *", + "comment": null + }, + "description": "

Get the statistics structure that is filled in by the fetch operation.

\n", + "comments": "", + "group": "remote", + "examples": { + "fetch.c": [ + "ex/v1.7.2/fetch.html#git_remote_stats-9" + ] + } + }, + "git_remote_autotag": { + "type": "function", + "file": "git2/remote.h", + "line": 1083, + "lineto": 1083, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "git_remote_autotag_option_t", + "comment": " the auto-follow setting" + }, + "description": "

Retrieve the tag auto-follow setting

\n", + "comments": "", + "group": "remote" + }, + "git_remote_set_autotag": { + "type": "function", + "file": "git2/remote.h", + "line": 1096, + "lineto": 1096, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to make the change" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the name of the remote" + }, + { + "name": "value", + "type": "git_remote_autotag_option_t", + "comment": "the new value to take." + } + ], + "argline": "git_repository *repo, const char *remote, git_remote_autotag_option_t value", + "sig": "git_repository *::const char *::git_remote_autotag_option_t", + "return": { + "type": "int", + "comment": " 0, or an error code." + }, + "description": "

Set the remote's tag following setting.

\n", + "comments": "

The change will be made in the configuration. No loaded remotes will be affected.

\n", + "group": "remote" + }, + "git_remote_prune_refs": { + "type": "function", + "file": "git2/remote.h", + "line": 1104, + "lineto": 1104, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "int", + "comment": " the ref-prune setting" + }, + "description": "

Retrieve the ref-prune setting

\n", + "comments": "", + "group": "remote" + }, + "git_remote_rename": { + "type": "function", + "file": "git2/remote.h", + "line": 1126, + "lineto": 1130, + "args": [ + { + "name": "problems", + "type": "git_strarray *", + "comment": "non-default refspecs cannot be renamed and will be\n stored here for further processing by the caller. Always free this\n strarray on successful return." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to rename" + }, + { + "name": "name", + "type": "const char *", + "comment": "the current name of the remote" + }, + { + "name": "new_name", + "type": "const char *", + "comment": "the new name the remote should bear" + } + ], + "argline": "git_strarray *problems, git_repository *repo, const char *name, const char *new_name", + "sig": "git_strarray *::git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Give the remote a new name

\n", + "comments": "

All remote-tracking branches and configuration settings for the remote are updated.

\n\n

The new name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

No loaded instances of a the remote with the old name will change their name or their list of refspecs.

\n", + "group": "remote", + "examples": { + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_rename-9" + ] + } + }, + "git_remote_name_is_valid": { + "type": "function", + "file": "git2/remote.h", + "line": 1139, + "lineto": 1139, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "output pointer to set with validity of given remote name" + }, + { + "name": "remote_name", + "type": "const char *", + "comment": "name to be checked." + } + ], + "argline": "int *valid, const char *remote_name", + "sig": "int *::const char *", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Ensure the remote name is well-formed.

\n", + "comments": "", + "group": "remote" + }, + "git_remote_delete": { + "type": "function", + "file": "git2/remote.h", + "line": 1151, + "lineto": 1151, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to act" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the remote to delete" + } + ], + "argline": "git_repository *repo, const char *name", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code." + }, + "description": "

Delete an existing persisted remote.

\n", + "comments": "

All remote-tracking branches and configuration settings for the remote will be removed.

\n", + "group": "remote", + "examples": { + "remote.c": [ + "ex/v1.7.2/remote.html#git_remote_delete-10" + ] + } + }, + "git_remote_default_branch": { + "type": "function", + "file": "git2/remote.h", + "line": 1169, + "lineto": 1169, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer in which to store the reference name" + }, + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote" + } + ], + "argline": "git_buf *out, git_remote *remote", + "sig": "git_buf *::git_remote *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the remote does not have any references\n or none of them point to HEAD's commit, or an error message." + }, + "description": "

Retrieve the name of the remote's default branch

\n", + "comments": "

The default branch of a repository is the branch which HEAD points to. If the remote does not support reporting this information directly, it performs the guess as git does; that is, if there are multiple branches which point to the same commit, the first one is chosen. If the master branch is a candidate, it wins.

\n\n

This function must only be called after connecting.

\n", + "group": "remote" + }, + "git_repository_open": { + "type": "function", + "file": "git2/repository.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "pointer to the repo which will be opened" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path to the repository" + } + ], + "argline": "git_repository **out, const char *path", + "sig": "git_repository **::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Open a git repository.

\n", + "comments": "

The 'path' argument must point to either a git repository folder, or an existing work dir.

\n\n

The method will automatically detect if 'path' is a normal or bare repository or fail is 'path' is neither.

\n", + "group": "repository", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_repository_open-59" + ] + } + }, + "git_repository_open_from_worktree": { + "type": "function", + "file": "git2/repository.h", + "line": 48, + "lineto": 48, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Output pointer containing opened repository" + }, + { + "name": "wt", + "type": "git_worktree *", + "comment": "Working tree to open" + } + ], + "argline": "git_repository **out, git_worktree *wt", + "sig": "git_repository **::git_worktree *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Open working tree as a repository

\n", + "comments": "

Open the working directory of the working tree as a normal repository that can then be worked on.

\n", + "group": "repository" + }, + "git_repository_discover": { + "type": "function", + "file": "git2/repository.h", + "line": 99, + "lineto": 103, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "A pointer to a user-allocated git_buf which will contain\n the found path." + }, + { + "name": "start_path", + "type": "const char *", + "comment": "The base path where the lookup starts." + }, + { + "name": "across_fs", + "type": "int", + "comment": "If true, then the lookup will not stop when a\n filesystem device change is detected while exploring parent directories." + }, + { + "name": "ceiling_dirs", + "type": "const char *", + "comment": "A GIT_PATH_LIST_SEPARATOR separated list of\n absolute symbolic link free paths. The lookup will stop when any\n of this paths is reached. Note that the lookup always performs on\n start_path no matter start_path appears in ceiling_dirs ceiling_dirs\n might be NULL (which is equivalent to an empty string)" + } + ], + "argline": "git_buf *out, const char *start_path, int across_fs, const char *ceiling_dirs", + "sig": "git_buf *::const char *::int::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Look for a git repository and copy its path in the given buffer.\n The lookup start from base_path and walk across parent directories\n if nothing has been found. The lookup ends when the first repository\n is found, or when reaching a directory referenced in ceiling_dirs\n or when the filesystem changes (in case across_fs is true).

\n", + "comments": "

The method will automatically detect if the repository is bare (if there is a repository).

\n", + "group": "repository" + }, + "git_repository_open_ext": { + "type": "function", + "file": "git2/repository.h", + "line": 175, + "lineto": 179, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Pointer to the repo which will be opened. This can\n actually be NULL if you only want to use the error code to\n see if a repo at this path could be opened." + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to open as git repository. If the flags\n permit \"searching\", then this can be a path to a subdirectory\n inside the working directory of the repository. May be NULL if\n flags is GIT_REPOSITORY_OPEN_FROM_ENV." + }, + { + "name": "flags", + "type": "unsigned int", + "comment": "A combination of the GIT_REPOSITORY_OPEN flags above." + }, + { + "name": "ceiling_dirs", + "type": "const char *", + "comment": "A GIT_PATH_LIST_SEPARATOR delimited list of path\n prefixes at which the search for a containing repository should\n terminate." + } + ], + "argline": "git_repository **out, const char *path, unsigned int flags, const char *ceiling_dirs", + "sig": "git_repository **::const char *::unsigned int::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if no repository could be found,\n or -1 if there was a repository but open failed for some reason\n (such as repo corruption or system errors)." + }, + "description": "

Find and open a repository with extended controls.

\n", + "comments": "", + "group": "repository", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_repository_open_ext-43" + ] + } + }, + "git_repository_open_bare": { + "type": "function", + "file": "git2/repository.h", + "line": 192, + "lineto": 192, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Pointer to the repo which will be opened." + }, + { + "name": "bare_path", + "type": "const char *", + "comment": "Direct path to the bare repository" + } + ], + "argline": "git_repository **out, const char *bare_path", + "sig": "git_repository **::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Open a bare repository on the serverside.

\n", + "comments": "

This is a fast open for bare repositories that will come in handy if you're e.g. hosting git repositories and need to access them efficiently

\n", + "group": "repository" + }, + "git_repository_free": { + "type": "function", + "file": "git2/repository.h", + "line": 205, + "lineto": 205, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository handle to close. If NULL nothing occurs." + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a previously allocated repository

\n", + "comments": "

Note that after a repository is free'd, all the objects it has spawned will still exist until they are manually closed by the user with git_object_free, but accessing any of the attributes of an object without a backing repository will result in undefined behavior

\n", + "group": "repository", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_repository_free-60" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_repository_free-4" + ] + } + }, + "git_repository_init": { + "type": "function", + "file": "git2/repository.h", + "line": 222, + "lineto": 225, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "pointer to the repo which will be created or reinitialized" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path to the repository" + }, + { + "name": "is_bare", + "type": "unsigned int", + "comment": "if true, a Git repository without a working directory is\n\t\tcreated at the pointed path. If false, provided path will be\n\t\tconsidered as the working directory into which the .git directory\n\t\twill be created." + } + ], + "argline": "git_repository **out, const char *path, unsigned int is_bare", + "sig": "git_repository **::const char *::unsigned int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Creates a new Git repository in the given folder.

\n", + "comments": "

TODO: - Reinit the repository

\n", + "group": "repository", + "examples": { + "init.c": [ + "ex/v1.7.2/init.html#git_repository_init-5" + ] + } + }, + "git_repository_init_options_init": { + "type": "function", + "file": "git2/repository.h", + "line": 388, + "lineto": 390, + "args": [ + { + "name": "opts", + "type": "git_repository_init_options *", + "comment": "The `git_repository_init_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REPOSITORY_INIT_OPTIONS_VERSION`." + } + ], + "argline": "git_repository_init_options *opts, unsigned int version", + "sig": "git_repository_init_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_repository_init_options structure

\n", + "comments": "

Initializes a git_repository_init_options with default values. Equivalent to creating an instance with GIT_REPOSITORY_INIT_OPTIONS_INIT.

\n", + "group": "repository" + }, + "git_repository_init_ext": { + "type": "function", + "file": "git2/repository.h", + "line": 405, + "lineto": 408, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Pointer to the repo which will be created or reinitialized." + }, + { + "name": "repo_path", + "type": "const char *", + "comment": "The path to the repository." + }, + { + "name": "opts", + "type": "git_repository_init_options *", + "comment": "Pointer to git_repository_init_options struct." + } + ], + "argline": "git_repository **out, const char *repo_path, git_repository_init_options *opts", + "sig": "git_repository **::const char *::git_repository_init_options *", + "return": { + "type": "int", + "comment": " 0 or an error code on failure." + }, + "description": "

Create a new Git repository in the given folder with extended controls.

\n", + "comments": "

This will initialize a new git repository (creating the repo_path if requested by flags) and working directory as needed. It will auto-detect the case sensitivity of the file system and if the file system supports file mode bits correctly.

\n", + "group": "repository", + "examples": { + "init.c": [ + "ex/v1.7.2/init.html#git_repository_init_ext-6" + ] + } + }, + "git_repository_head": { + "type": "function", + "file": "git2/repository.h", + "line": 423, + "lineto": 423, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer to the reference which will be retrieved" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "a repository object" + } + ], + "argline": "git_reference **out, git_repository *repo", + "sig": "git_reference **::git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing\n branch, GIT_ENOTFOUND when HEAD is missing; an error code otherwise" + }, + "description": "

Retrieve and resolve the reference pointed at by HEAD.

\n", + "comments": "

The returned git_reference will be owned by caller and git_reference_free() must be called when done with it to release the allocated memory and prevent a leak.

\n", + "group": "repository", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_repository_head-31", + "ex/v1.7.2/merge.html#git_repository_head-32" + ], + "status.c": [ + "ex/v1.7.2/status.html#git_repository_head-3" + ] + } + }, + "git_repository_head_for_worktree": { + "type": "function", + "file": "git2/repository.h", + "line": 433, + "lineto": 434, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer to the reference which will be retrieved" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "a repository object" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the worktree to retrieve HEAD for" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name", + "sig": "git_reference **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 when successful, error-code otherwise" + }, + "description": "

Retrieve the referenced HEAD for the worktree

\n", + "comments": "", + "group": "repository" + }, + "git_repository_head_detached": { + "type": "function", + "file": "git2/repository.h", + "line": 446, + "lineto": 446, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repo to test" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 1 if HEAD is detached, 0 if it's not; error code if there\n was an error." + }, + "description": "

Check if a repository's HEAD is detached

\n", + "comments": "

A repository's HEAD is detached when it points directly to a commit instead of a branch.

\n", + "group": "repository" + }, + "git_repository_head_detached_for_worktree": { + "type": "function", + "file": "git2/repository.h", + "line": 459, + "lineto": 460, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "a repository object" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the worktree to retrieve HEAD for" + } + ], + "argline": "git_repository *repo, const char *name", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 1 if HEAD is detached, 0 if its not; error code if\n there was an error" + }, + "description": "

Check if a worktree's HEAD is detached

\n", + "comments": "

A worktree's HEAD is detached when it points directly to a commit instead of a branch.

\n", + "group": "repository" + }, + "git_repository_head_unborn": { + "type": "function", + "file": "git2/repository.h", + "line": 472, + "lineto": 472, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repo to test" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 1 if the current branch is unborn, 0 if it's not; error\n code if there was an error" + }, + "description": "

Check if the current branch is unborn

\n", + "comments": "

An unborn branch is one named from HEAD but which doesn't exist in the refs namespace, because it doesn't have any commit to point to.

\n", + "group": "repository" + }, + "git_repository_is_empty": { + "type": "function", + "file": "git2/repository.h", + "line": 486, + "lineto": 486, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repo to test" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 1 if the repository is empty, 0 if it isn't, error code\n if the repository is corrupted" + }, + "description": "

Check if a repository is empty

\n", + "comments": "

An empty repository has just been initialized and contains no references apart from HEAD, which must be pointing to the unborn master branch, or the branch specified for the repository in the init.defaultBranch configuration variable.

\n", + "group": "repository" + }, + "git_repository_item_path": { + "type": "function", + "file": "git2/repository.h", + "line": 523, + "lineto": 523, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Buffer to store the path at" + }, + { + "name": "repo", + "type": "const git_repository *", + "comment": "Repository to get path for" + }, + { + "name": "item", + "type": "git_repository_item_t", + "comment": "The repository item for which to retrieve the path" + } + ], + "argline": "git_buf *out, const git_repository *repo, git_repository_item_t item", + "sig": "git_buf *::const git_repository *::git_repository_item_t", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the path cannot exist or an error code" + }, + "description": "

Get the location of a specific repository file or directory

\n", + "comments": "

This function will retrieve the path of a specific repository item. It will thereby honor things like the repository's common directory, gitdir, etc. In case a file path cannot exist for a given item (e.g. the working directory of a bare repository), GIT_ENOTFOUND is returned.

\n", + "group": "repository" + }, + "git_repository_path": { + "type": "function", + "file": "git2/repository.h", + "line": 534, + "lineto": 534, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "A repository object" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "const char *", + "comment": " the path to the repository" + }, + "description": "

Get the path of this repository

\n", + "comments": "

This is the path of the .git folder for normal repositories, or of the repository itself for bare repositories.

\n", + "group": "repository", + "examples": { + "init.c": [ + "ex/v1.7.2/init.html#git_repository_path-7" + ], + "status.c": [ + "ex/v1.7.2/status.html#git_repository_path-4" + ] + } + }, + "git_repository_workdir": { + "type": "function", + "file": "git2/repository.h", + "line": 545, + "lineto": 545, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "A repository object" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "const char *", + "comment": " the path to the working dir, if it exists" + }, + "description": "

Get the path of the working directory for this repository

\n", + "comments": "

If the repository is bare, this function will always return NULL.

\n", + "group": "repository", + "examples": { + "init.c": [ + "ex/v1.7.2/init.html#git_repository_workdir-8" + ] + } + }, + "git_repository_commondir": { + "type": "function", + "file": "git2/repository.h", + "line": 557, + "lineto": 557, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "A repository object" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "const char *", + "comment": " the path to the common dir" + }, + "description": "

Get the path of the shared common directory for this repository.

\n", + "comments": "

If the repository is bare, it is the root directory for the repository. If the repository is a worktree, it is the parent repo's gitdir. Otherwise, it is the gitdir.

\n", + "group": "repository" + }, + "git_repository_set_workdir": { + "type": "function", + "file": "git2/repository.h", + "line": 576, + "lineto": 577, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "workdir", + "type": "const char *", + "comment": "The path to a working directory" + }, + { + "name": "update_gitlink", + "type": "int", + "comment": "Create/update gitlink in workdir and set config\n \"core.worktree\" (if workdir is not the parent of the .git directory)" + } + ], + "argline": "git_repository *repo, const char *workdir, int update_gitlink", + "sig": "git_repository *::const char *::int", + "return": { + "type": "int", + "comment": " 0, or an error code" + }, + "description": "

Set the path to the working directory for this repository

\n", + "comments": "

The working directory doesn't need to be the same one that contains the .git folder for this repository.

\n\n

If this repository is bare, setting its working directory will turn it into a normal repository, capable of performing all the common workdir operations (checkout, status, index manipulation, etc).

\n", + "group": "repository" + }, + "git_repository_is_bare": { + "type": "function", + "file": "git2/repository.h", + "line": 585, + "lineto": 585, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "Repo to test" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "int", + "comment": " 1 if the repository is bare, 0 otherwise." + }, + "description": "

Check if a repository is bare

\n", + "comments": "", + "group": "repository", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_repository_is_bare-5" + ] + } + }, + "git_repository_is_worktree": { + "type": "function", + "file": "git2/repository.h", + "line": 593, + "lineto": 593, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "Repo to test" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "int", + "comment": " 1 if the repository is a linked work tree, 0 otherwise." + }, + "description": "

Check if a repository is a linked work tree

\n", + "comments": "", + "group": "repository" + }, + "git_repository_config": { + "type": "function", + "file": "git2/repository.h", + "line": 609, + "lineto": 609, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "Pointer to store the loaded configuration" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_config **out, git_repository *repo", + "sig": "git_config **::git_repository *", + "return": { + "type": "int", + "comment": " 0, or an error code" + }, + "description": "

Get the configuration file for this repository.

\n", + "comments": "

If a configuration file has not been set, the default config set for the repository will be returned, including global and system configurations (if they are available).

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", + "group": "repository", + "examples": { + "config.c": [ + "ex/v1.7.2/config.html#git_repository_config-9" + ] + } + }, + "git_repository_config_snapshot": { + "type": "function", + "file": "git2/repository.h", + "line": 625, + "lineto": 625, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "Pointer to store the loaded configuration" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_config **out, git_repository *repo", + "sig": "git_config **::git_repository *", + "return": { + "type": "int", + "comment": " 0, or an error code" + }, + "description": "

Get a snapshot of the repository's configuration

\n", + "comments": "

Convenience function to take a snapshot from the repository's configuration. The contents of this snapshot will not change, even if the underlying config files are modified.

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", + "group": "repository", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_repository_config_snapshot-61", + "ex/v1.7.2/general.html#git_repository_config_snapshot-62" + ] + } + }, + "git_repository_odb": { + "type": "function", + "file": "git2/repository.h", + "line": 641, + "lineto": 641, + "args": [ + { + "name": "out", + "type": "git_odb **", + "comment": "Pointer to store the loaded ODB" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_odb **out, git_repository *repo", + "sig": "git_odb **::git_repository *", + "return": { + "type": "int", + "comment": " 0, or an error code" + }, + "description": "

Get the Object Database for this repository.

\n", + "comments": "

If a custom ODB has not been set, the default database for the repository will be returned (the one located in .git/objects).

\n\n

The ODB must be freed once it's no longer being used by the user.

\n", + "group": "repository", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_repository_odb-29" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_repository_odb-63" + ] + } + }, + "git_repository_refdb": { + "type": "function", + "file": "git2/repository.h", + "line": 657, + "lineto": 657, + "args": [ + { + "name": "out", + "type": "git_refdb **", + "comment": "Pointer to store the loaded refdb" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_refdb **out, git_repository *repo", + "sig": "git_refdb **::git_repository *", + "return": { + "type": "int", + "comment": " 0, or an error code" + }, + "description": "

Get the Reference Database Backend for this repository.

\n", + "comments": "

If a custom refsdb has not been set, the default database for the repository will be returned (the one that manipulates loose and packed references in the .git directory).

\n\n

The refdb must be freed once it's no longer being used by the user.

\n", + "group": "repository" + }, + "git_repository_index": { + "type": "function", + "file": "git2/repository.h", + "line": 673, + "lineto": 673, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "Pointer to store the loaded index" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_index **out, git_repository *repo", + "sig": "git_index **::git_repository *", + "return": { + "type": "int", + "comment": " 0, or an error code" + }, + "description": "

Get the Index file for this repository.

\n", + "comments": "

If a custom index has not been set, the default index for the repository will be returned (the one located in .git/index).

\n\n

The index must be freed once it's no longer being used by the user.

\n", + "group": "repository", + "examples": { + "add.c": [ + "ex/v1.7.2/add.html#git_repository_index-5" + ], + "commit.c": [ + "ex/v1.7.2/commit.html#git_repository_index-8" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_repository_index-64" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_repository_index-9" + ], + "ls-files.c": [ + "ex/v1.7.2/ls-files.html#git_repository_index-5" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_repository_index-33" + ] + } + }, + "git_repository_message": { + "type": "function", + "file": "git2/repository.h", + "line": 691, + "lineto": 691, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "git_buf to write data into" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository to read prepared message from" + } + ], + "argline": "git_buf *out, git_repository *repo", + "sig": "git_buf *::git_repository *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if no message exists or an error code" + }, + "description": "

Retrieve git's prepared message

\n", + "comments": "

Operations such as git revert/cherry-pick/merge with the -n option stop just short of creating a commit with the changes and save their prepared message in .git/MERGE_MSG so the next git-commit execution can present it to the user for them to amend if they wish.

\n\n

Use this function to get the contents of this file. Don't forget to remove the file after you create the commit.

\n", + "group": "repository" + }, + "git_repository_message_remove": { + "type": "function", + "file": "git2/repository.h", + "line": 701, + "lineto": 701, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository to remove prepared message from." + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Remove git's prepared message.

\n", + "comments": "

Remove the message that git_repository_message retrieves.

\n", + "group": "repository" + }, + "git_repository_state_cleanup": { + "type": "function", + "file": "git2/repository.h", + "line": 710, + "lineto": 710, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, or error" + }, + "description": "

Remove all the metadata associated with an ongoing command like merge,\n revert, cherry-pick, etc. For example: MERGE_HEAD, MERGE_MSG, etc.

\n", + "comments": "", + "group": "repository", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_repository_state_cleanup-34" + ] + } + }, + "git_repository_fetchhead_foreach": { + "type": "function", + "file": "git2/repository.h", + "line": 741, + "lineto": 744, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "callback", + "type": "git_repository_fetchhead_foreach_cb", + "comment": "Callback function" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to callback data (optional)" + } + ], + "argline": "git_repository *repo, git_repository_fetchhead_foreach_cb callback, void *payload", + "sig": "git_repository *::git_repository_fetchhead_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, GIT_ENOTFOUND if\n there is no FETCH_HEAD file, or other error code." + }, + "description": "

Invoke 'callback' for each entry in the given FETCH_HEAD file.

\n", + "comments": "

Return a non-zero value from the callback to stop the loop.

\n", + "group": "repository" + }, + "git_repository_mergehead_foreach": { + "type": "function", + "file": "git2/repository.h", + "line": 770, + "lineto": 773, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "callback", + "type": "git_repository_mergehead_foreach_cb", + "comment": "Callback function" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to callback data (optional)" + } + ], + "argline": "git_repository *repo, git_repository_mergehead_foreach_cb callback, void *payload", + "sig": "git_repository *::git_repository_mergehead_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, GIT_ENOTFOUND if\n there is no MERGE_HEAD file, or other error code." + }, + "description": "

If a merge is in progress, invoke 'callback' for each commit ID in the\n MERGE_HEAD file.

\n", + "comments": "

Return a non-zero value from the callback to stop the loop.

\n", + "group": "repository" + }, + "git_repository_hashfile": { + "type": "function", + "file": "git2/repository.h", + "line": 800, + "lineto": 805, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Output value of calculated SHA" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to file on disk whose contents should be hashed. This\n may be an absolute path or a relative path, in which case it\n will be treated as a path within the working directory." + }, + { + "name": "type", + "type": "git_object_t", + "comment": "The object type to hash as (e.g. GIT_OBJECT_BLOB)" + }, + { + "name": "as_path", + "type": "const char *", + "comment": "The path to use to look up filtering rules. If this is\n an empty string then no filters will be applied when\n calculating the hash. If this is `NULL` and the `path`\n parameter is a file within the repository's working\n directory, then the `path` will be used." + } + ], + "argline": "git_oid *out, git_repository *repo, const char *path, git_object_t type, const char *as_path", + "sig": "git_oid *::git_repository *::const char *::git_object_t::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Calculate hash of file using repository filtering rules.

\n", + "comments": "

If you simply want to calculate the hash of a file on disk with no filters, you can just use the git_odb_hashfile() API. However, if you want to hash a file in the repository and you want to apply filtering rules (e.g. crlf filters) before generating the SHA, then use this function.

\n\n

Note: if the repository has core.safecrlf set to fail and the filtering triggers that failure, then this function will return an error and not calculate the hash of the file.

\n", + "group": "repository" + }, + "git_repository_set_head": { + "type": "function", + "file": "git2/repository.h", + "line": 825, + "lineto": 827, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + }, + { + "name": "refname", + "type": "const char *", + "comment": "Canonical name of the reference the HEAD should point at" + } + ], + "argline": "git_repository *repo, const char *refname", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Make the repository HEAD point to the specified reference.

\n", + "comments": "

If the provided reference points to a Tree or a Blob, the HEAD is unaltered and -1 is returned.

\n\n

If the provided reference points to a branch, the HEAD will point to that branch, staying attached, or become attached if it isn't yet. If the branch doesn't exist yet, no error will be return. The HEAD will then be attached to an unborn branch.

\n\n

Otherwise, the HEAD will be detached and will directly point to the Commit.

\n", + "group": "repository", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_repository_set_head-23" + ] + } + }, + "git_repository_set_head_detached": { + "type": "function", + "file": "git2/repository.h", + "line": 845, + "lineto": 847, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + }, + { + "name": "committish", + "type": "const git_oid *", + "comment": "Object id of the Commit the HEAD should point to" + } + ], + "argline": "git_repository *repo, const git_oid *committish", + "sig": "git_repository *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code" + }, + "description": "

Make the repository HEAD directly point to the Commit.

\n", + "comments": "

If the provided committish cannot be found in the repository, the HEAD is unaltered and GIT_ENOTFOUND is returned.

\n\n

If the provided committish cannot be peeled into a commit, the HEAD is unaltered and -1 is returned.

\n\n

Otherwise, the HEAD will eventually be detached and will directly point to the peeled Commit.

\n", + "group": "repository" + }, + "git_repository_set_head_detached_from_annotated": { + "type": "function", + "file": "git2/repository.h", + "line": 861, + "lineto": 863, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": null + }, + { + "name": "committish", + "type": "const git_annotated_commit *", + "comment": null + } + ], + "argline": "git_repository *repo, const git_annotated_commit *committish", + "sig": "git_repository *::const git_annotated_commit *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Make the repository HEAD directly point to the Commit.

\n", + "comments": "

This behaves like git_repository_set_head_detached() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_repository_set_head_detached().

\n", + "group": "repository", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_repository_set_head_detached_from_annotated-24" + ] + } + }, + "git_repository_detach_head": { + "type": "function", + "file": "git2/repository.h", + "line": 882, + "lineto": 883, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing\n branch or an error code" + }, + "description": "

Detach the HEAD.

\n", + "comments": "

If the HEAD is already detached and points to a Commit, 0 is returned.

\n\n

If the HEAD is already detached and points to a Tag, the HEAD is updated into making it point to the peeled Commit, and 0 is returned.

\n\n

If the HEAD is already detached and points to a non committish, the HEAD is unaltered, and -1 is returned.

\n\n

Otherwise, the HEAD will be detached and point to the peeled Commit.

\n", + "group": "repository" + }, + "git_repository_state": { + "type": "function", + "file": "git2/repository.h", + "line": 913, + "lineto": 913, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " The state of the repository" + }, + "description": "

Determines the status of a git repository - ie, whether an operation\n (merge, cherry-pick, etc) is in progress.

\n", + "comments": "", + "group": "repository", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_repository_state-25" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_repository_state-35" + ] + } + }, + "git_repository_set_namespace": { + "type": "function", + "file": "git2/repository.h", + "line": 927, + "lineto": 927, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repo" + }, + { + "name": "nmspace", + "type": "const char *", + "comment": "The namespace. This should not include the refs\n\tfolder, e.g. to namespace all references under `refs/namespaces/foo/`,\n\tuse `foo` as the namespace." + } + ], + "argline": "git_repository *repo, const char *nmspace", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error" + }, + "description": "

Sets the active namespace for this Git Repository

\n", + "comments": "

This namespace affects all reference operations for the repo. See man gitnamespaces

\n", + "group": "repository" + }, + "git_repository_get_namespace": { + "type": "function", + "file": "git2/repository.h", + "line": 935, + "lineto": 935, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repo" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "const char *", + "comment": " the active namespace, or NULL if there isn't one" + }, + "description": "

Get the currently active namespace for this repository

\n", + "comments": "", + "group": "repository" + }, + "git_repository_is_shallow": { + "type": "function", + "file": "git2/repository.h", + "line": 944, + "lineto": 944, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 1 if shallow, zero if not" + }, + "description": "

Determine if the repository was a shallow clone

\n", + "comments": "", + "group": "repository" + }, + "git_repository_ident": { + "type": "function", + "file": "git2/repository.h", + "line": 957, + "lineto": 957, + "args": [ + { + "name": "name", + "type": "const char **", + "comment": "where to store the pointer to the name" + }, + { + "name": "email", + "type": "const char **", + "comment": "where to store the pointer to the email" + }, + { + "name": "repo", + "type": "const git_repository *", + "comment": "the repository" + } + ], + "argline": "const char **name, const char **email, const git_repository *repo", + "sig": "const char **::const char **::const git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Retrieve the configured identity to use for reflogs

\n", + "comments": "

The memory is owned by the repository and must not be freed by the user.

\n", + "group": "repository" + }, + "git_repository_set_ident": { + "type": "function", + "file": "git2/repository.h", + "line": 971, + "lineto": 971, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to configure" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name to use for the reflog entries" + }, + { + "name": "email", + "type": "const char *", + "comment": "the email to use for the reflog entries" + } + ], + "argline": "git_repository *repo, const char *name, const char *email", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Set the identity to be used for writing reflogs

\n", + "comments": "

If both are set, this name and email will be used to write to the reflog. Pass NULL to unset. When unset, the identity will be taken from the repository's configuration.

\n", + "group": "repository" + }, + "git_repository_oid_type": { + "type": "function", + "file": "git2/repository.h", + "line": 979, + "lineto": 979, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "git_oid_t", + "comment": " the object id type" + }, + "description": "

Gets the object type used by this repository.

\n", + "comments": "", + "group": "repository" + }, + "git_reset": { + "type": "function", + "file": "git2/reset.h", + "line": 62, + "lineto": 66, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to perform the reset operation." + }, + { + "name": "target", + "type": "const git_object *", + "comment": "Committish to which the Head should be moved to. This object\n must belong to the given `repo` and can either be a git_commit or a\n git_tag. When a git_tag is being passed, it should be dereferenceable\n to a git_commit which oid will be used as the target of the branch." + }, + { + "name": "reset_type", + "type": "git_reset_t", + "comment": "Kind of reset operation to perform." + }, + { + "name": "checkout_opts", + "type": "const git_checkout_options *", + "comment": "Optional checkout options to be used for a HARD reset.\n The checkout_strategy field will be overridden (based on reset_type).\n This parameter can be used to propagate notify and progress callbacks." + } + ], + "argline": "git_repository *repo, const git_object *target, git_reset_t reset_type, const git_checkout_options *checkout_opts", + "sig": "git_repository *::const git_object *::git_reset_t::const git_checkout_options *", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", + "comments": "

SOFT reset means the Head will be moved to the commit.

\n\n

MIXED reset will trigger a SOFT reset, plus the index will be replaced with the content of the commit tree.

\n\n

HARD reset will trigger a MIXED reset and the working directory will be replaced with the content of the index. (Untracked and ignored files will be left alone, however.)

\n\n

TODO: Implement remaining kinds of resets.

\n", + "group": "reset" + }, + "git_reset_from_annotated": { + "type": "function", + "file": "git2/reset.h", + "line": 80, + "lineto": 84, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": null + }, + { + "name": "commit", + "type": "const git_annotated_commit *", + "comment": null + }, + { + "name": "reset_type", + "type": "git_reset_t", + "comment": null + }, + { + "name": "checkout_opts", + "type": "const git_checkout_options *", + "comment": null + } + ], + "argline": "git_repository *repo, const git_annotated_commit *commit, git_reset_t reset_type, const git_checkout_options *checkout_opts", + "sig": "git_repository *::const git_annotated_commit *::git_reset_t::const git_checkout_options *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", + "comments": "

This behaves like git_reset() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_reset().

\n", + "group": "reset" + }, + "git_reset_default": { + "type": "function", + "file": "git2/reset.h", + "line": 104, + "lineto": 107, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to perform the reset operation." + }, + { + "name": "target", + "type": "const git_object *", + "comment": "The committish which content will be used to reset the content\n of the index." + }, + { + "name": "pathspecs", + "type": "const git_strarray *", + "comment": "List of pathspecs to operate on." + } + ], + "argline": "git_repository *repo, const git_object *target, const git_strarray *pathspecs", + "sig": "git_repository *::const git_object *::const git_strarray *", + "return": { + "type": "int", + "comment": " 0 on success or an error code \n<\n 0" + }, + "description": "

Updates some entries in the index from the target commit tree.

\n", + "comments": "

The scope of the updated entries is determined by the paths being passed in the pathspec parameters.

\n\n

Passing a NULL target will result in removing entries in the index matching the provided pathspecs.

\n", + "group": "reset" + }, + "git_revert_options_init": { + "type": "function", + "file": "git2/revert.h", + "line": 49, + "lineto": 51, + "args": [ + { + "name": "opts", + "type": "git_revert_options *", + "comment": "The `git_revert_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REVERT_OPTIONS_VERSION`." + } + ], + "argline": "git_revert_options *opts, unsigned int version", + "sig": "git_revert_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_revert_options structure

\n", + "comments": "

Initializes a git_revert_options with default values. Equivalent to creating an instance with GIT_REVERT_OPTIONS_INIT.

\n", + "group": "revert" + }, + "git_revert_commit": { + "type": "function", + "file": "git2/revert.h", + "line": 67, + "lineto": 73, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "pointer to store the index result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository that contains the given commits" + }, + { + "name": "revert_commit", + "type": "git_commit *", + "comment": "the commit to revert" + }, + { + "name": "our_commit", + "type": "git_commit *", + "comment": "the commit to revert against (eg, HEAD)" + }, + { + "name": "mainline", + "type": "unsigned int", + "comment": "the parent of the revert commit, if it is a merge" + }, + { + "name": "merge_options", + "type": "const git_merge_options *", + "comment": "the merge options (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, git_commit *revert_commit, git_commit *our_commit, unsigned int mainline, const git_merge_options *merge_options", + "sig": "git_index **::git_repository *::git_commit *::git_commit *::unsigned int::const git_merge_options *", + "return": { + "type": "int", + "comment": " zero on success, -1 on failure." + }, + "description": "

Reverts the given commit against the given "our" commit, producing an\n index that reflects the result of the revert.

\n", + "comments": "

The returned index must be freed explicitly with git_index_free.

\n", + "group": "revert" + }, + "git_revert": { + "type": "function", + "file": "git2/revert.h", + "line": 83, + "lineto": 86, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to revert" + }, + { + "name": "commit", + "type": "git_commit *", + "comment": "the commit to revert" + }, + { + "name": "given_opts", + "type": "const git_revert_options *", + "comment": "the revert options (or null for defaults)" + } + ], + "argline": "git_repository *repo, git_commit *commit, const git_revert_options *given_opts", + "sig": "git_repository *::git_commit *::const git_revert_options *", + "return": { + "type": "int", + "comment": " zero on success, -1 on failure." + }, + "description": "

Reverts the given commit, producing changes in the index and working directory.

\n", + "comments": "", + "group": "revert" + }, + "git_revparse_single": { + "type": "function", + "file": "git2/revparse.h", + "line": 37, + "lineto": 38, + "args": [ + { + "name": "out", + "type": "git_object **", + "comment": "pointer to output object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to search in" + }, + { + "name": "spec", + "type": "const char *", + "comment": "the textual specification for an object" + } + ], + "argline": "git_object **out, git_repository *repo, const char *spec", + "sig": "git_object **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Find a single object, as specified by a revision string.

\n", + "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

The returned object should be released with git_object_free when no longer needed.

\n", + "group": "revparse", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_revparse_single-22" + ], + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_revparse_single-30" + ], + "describe.c": [ + "ex/v1.7.2/describe.html#git_revparse_single-6" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_revparse_single-44" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_revparse_single-9", + "ex/v1.7.2/tag.html#git_revparse_single-10", + "ex/v1.7.2/tag.html#git_revparse_single-11", + "ex/v1.7.2/tag.html#git_revparse_single-12" + ] + } + }, + "git_revparse_ext": { + "type": "function", + "file": "git2/revparse.h", + "line": 61, + "lineto": 65, + "args": [ + { + "name": "object_out", + "type": "git_object **", + "comment": "pointer to output object" + }, + { + "name": "reference_out", + "type": "git_reference **", + "comment": "pointer to output reference or NULL" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to search in" + }, + { + "name": "spec", + "type": "const char *", + "comment": "the textual specification for an object" + } + ], + "argline": "git_object **object_out, git_reference **reference_out, git_repository *repo, const char *spec", + "sig": "git_object **::git_reference **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC\n or an error code" + }, + "description": "

Find a single object and intermediate reference by a revision string.

\n", + "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

In some cases (@{<-n>} or <branchname>@{upstream}), the expression may point to an intermediate reference. When such expressions are being passed in, reference_out will be valued as well.

\n\n

The returned object should be released with git_object_free and the returned reference with git_reference_free when no longer needed.

\n", + "group": "revparse", + "examples": { + "commit.c": [ + "ex/v1.7.2/commit.html#git_revparse_ext-9" + ] + } + }, + "git_revparse": { + "type": "function", + "file": "git2/revparse.h", + "line": 105, + "lineto": 108, + "args": [ + { + "name": "revspec", + "type": "git_revspec *", + "comment": "Pointer to an user-allocated git_revspec struct where\n\t the result of the rev-parse will be stored" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to search in" + }, + { + "name": "spec", + "type": "const char *", + "comment": "the rev-parse spec to parse" + } + ], + "argline": "git_revspec *revspec, git_repository *repo, const char *spec", + "sig": "git_revspec *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_INVALIDSPEC, GIT_ENOTFOUND, GIT_EAMBIGUOUS or an error code" + }, + "description": "

Parse a revision string for from, to, and intent.

\n", + "comments": "

See man gitrevisions or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", + "group": "revparse", + "examples": { + "blame.c": [ + "ex/v1.7.2/blame.html#git_revparse-23" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_revparse-45" + ], + "rev-parse.c": [ + "ex/v1.7.2/rev-parse.html#git_revparse-14", + "ex/v1.7.2/rev-parse.html#git_revparse-15" + ] + } + }, + "git_revwalk_new": { + "type": "function", + "file": "git2/revwalk.h", + "line": 73, + "lineto": 73, + "args": [ + { + "name": "out", + "type": "git_revwalk **", + "comment": "pointer to the new revision walker" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to walk through" + } + ], + "argline": "git_revwalk **out, git_repository *repo", + "sig": "git_revwalk **::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Allocate a new revision walker to iterate through a repo.

\n", + "comments": "

This revision walker uses a custom memory pool and an internal commit cache, so it is relatively expensive to allocate.

\n\n

For maximum performance, this revision walker should be reused for different walks.

\n\n

This revision walker is not thread safe: it may only be used to walk a repository on a single thread; however, it is possible to have several revision walkers in several different threads walking the same repository.

\n", + "group": "revwalk", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_revwalk_new-65" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_revwalk_new-46", + "ex/v1.7.2/log.html#git_revwalk_new-47" + ] + } + }, + "git_revwalk_reset": { + "type": "function", + "file": "git2/revwalk.h", + "line": 89, + "lineto": 89, + "args": [ + { + "name": "walker", + "type": "git_revwalk *", + "comment": "handle to reset." + } + ], + "argline": "git_revwalk *walker", + "sig": "git_revwalk *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Reset the revision walker for reuse.

\n", + "comments": "

This will clear all the pushed and hidden commits, and leave the walker in a blank state (just like at creation) ready to receive new commit pushes and start a new walk.

\n\n

The revision walk is automatically reset when a walk is over.

\n", + "group": "revwalk" + }, + "git_revwalk_push": { + "type": "function", + "file": "git2/revwalk.h", + "line": 108, + "lineto": 108, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the oid of the commit to start from." + } + ], + "argline": "git_revwalk *walk, const git_oid *id", + "sig": "git_revwalk *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add a new root for the traversal

\n", + "comments": "

The pushed commit will be marked as one of the roots from which to start the walk. This commit may not be walked if it or a child is hidden.

\n\n

At least one commit must be pushed onto the walker before a walk can be started.

\n\n

The given id must belong to a committish on the walked repository.

\n", + "group": "revwalk", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_revwalk_push-66" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_revwalk_push-48" + ] + } + }, + "git_revwalk_push_glob": { + "type": "function", + "file": "git2/revwalk.h", + "line": 126, + "lineto": 126, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "glob", + "type": "const char *", + "comment": "the glob pattern references should match" + } + ], + "argline": "git_revwalk *walk, const char *glob", + "sig": "git_revwalk *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Push matching references

\n", + "comments": "

The OIDs pointed to by the references that match the given glob pattern will be pushed to the revision walker.

\n\n

A leading 'refs/' is implied if not present as well as a trailing '/*' if the glob lacks '?', '*' or '['.

\n\n

Any references matching this glob which do not point to a committish will be ignored.

\n", + "group": "revwalk" + }, + "git_revwalk_push_head": { + "type": "function", + "file": "git2/revwalk.h", + "line": 134, + "lineto": 134, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Push the repository's HEAD

\n", + "comments": "", + "group": "revwalk", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_revwalk_push_head-49" + ] + } + }, + "git_revwalk_hide": { + "type": "function", + "file": "git2/revwalk.h", + "line": 149, + "lineto": 149, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal." + }, + { + "name": "commit_id", + "type": "const git_oid *", + "comment": "the oid of commit that will be ignored during the traversal" + } + ], + "argline": "git_revwalk *walk, const git_oid *commit_id", + "sig": "git_revwalk *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Mark a commit (and its ancestors) uninteresting for the output.

\n", + "comments": "

The given id must belong to a committish on the walked repository.

\n\n

The resolved commit and all its parents will be hidden from the output on the revision walk.

\n", + "group": "revwalk", + "examples": { + "log.c": [ + "ex/v1.7.2/log.html#git_revwalk_hide-50" + ] + } + }, + "git_revwalk_hide_glob": { + "type": "function", + "file": "git2/revwalk.h", + "line": 168, + "lineto": 168, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "glob", + "type": "const char *", + "comment": "the glob pattern references should match" + } + ], + "argline": "git_revwalk *walk, const char *glob", + "sig": "git_revwalk *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Hide matching references.

\n", + "comments": "

The OIDs pointed to by the references that match the given glob pattern and their ancestors will be hidden from the output on the revision walk.

\n\n

A leading 'refs/' is implied if not present as well as a trailing '/*' if the glob lacks '?', '*' or '['.

\n\n

Any references matching this glob which do not point to a committish will be ignored.

\n", + "group": "revwalk" + }, + "git_revwalk_hide_head": { + "type": "function", + "file": "git2/revwalk.h", + "line": 176, + "lineto": 176, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Hide the repository's HEAD

\n", + "comments": "", + "group": "revwalk" + }, + "git_revwalk_push_ref": { + "type": "function", + "file": "git2/revwalk.h", + "line": 187, + "lineto": 187, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference to push" + } + ], + "argline": "git_revwalk *walk, const char *refname", + "sig": "git_revwalk *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Push the OID pointed to by a reference

\n", + "comments": "

The reference must point to a committish.

\n", + "group": "revwalk" + }, + "git_revwalk_hide_ref": { + "type": "function", + "file": "git2/revwalk.h", + "line": 198, + "lineto": 198, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference to hide" + } + ], + "argline": "git_revwalk *walk, const char *refname", + "sig": "git_revwalk *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Hide the OID pointed to by a reference

\n", + "comments": "

The reference must point to a committish.

\n", + "group": "revwalk" + }, + "git_revwalk_next": { + "type": "function", + "file": "git2/revwalk.h", + "line": 218, + "lineto": 218, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer where to store the oid of the next commit" + }, + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker to pop the commit from." + } + ], + "argline": "git_oid *out, git_revwalk *walk", + "sig": "git_oid *::git_revwalk *", + "return": { + "type": "int", + "comment": " 0 if the next commit was found;\n\tGIT_ITEROVER if there are no commits left to iterate" + }, + "description": "

Get the next commit from the revision walk.

\n", + "comments": "

The initial call to this method is not blocking when iterating through a repo with a time-sorting mode.

\n\n

Iterating with Topological or inverted modes makes the initial call blocking to preprocess the commit list, but this block should be mostly unnoticeable on most repositories (topological preprocessing times at 0.3s on the git.git repo).

\n\n

The revision walker is reset when the walk is over.

\n", + "group": "revwalk", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_revwalk_next-67" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_revwalk_next-51" + ] + } + }, + "git_revwalk_sorting": { + "type": "function", + "file": "git2/revwalk.h", + "line": 230, + "lineto": 230, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal." + }, + { + "name": "sort_mode", + "type": "unsigned int", + "comment": "combination of GIT_SORT_XXX flags" + } + ], + "argline": "git_revwalk *walk, unsigned int sort_mode", + "sig": "git_revwalk *::unsigned int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Change the sorting mode when iterating through the\n repository's contents.

\n", + "comments": "

Changing the sorting mode resets the walker.

\n", + "group": "revwalk", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_revwalk_sorting-68" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_revwalk_sorting-52", + "ex/v1.7.2/log.html#git_revwalk_sorting-53" + ] + } + }, + "git_revwalk_push_range": { + "type": "function", + "file": "git2/revwalk.h", + "line": 245, + "lineto": 245, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "range", + "type": "const char *", + "comment": "the range" + } + ], + "argline": "git_revwalk *walk, const char *range", + "sig": "git_revwalk *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Push and hide the respective endpoints of the given range.

\n", + "comments": "

The range should be of the form .. where each is in the form accepted by 'git_revparse_single'. The left-hand commit will be hidden and the right-hand commit pushed.

\n", + "group": "revwalk" + }, + "git_revwalk_simplify_first_parent": { + "type": "function", + "file": "git2/revwalk.h", + "line": 255, + "lineto": 255, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "The revision walker." + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Simplify the history by first-parent

\n", + "comments": "

No parents other than the first for each commit will be enqueued.

\n", + "group": "revwalk" + }, + "git_revwalk_free": { + "type": "function", + "file": "git2/revwalk.h", + "line": 263, + "lineto": 263, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "traversal handle to close. If NULL nothing occurs." + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a revision walker previously allocated.

\n", + "comments": "", + "group": "revwalk", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_revwalk_free-69" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_revwalk_free-54" + ] + } + }, + "git_revwalk_repository": { + "type": "function", + "file": "git2/revwalk.h", + "line": 272, + "lineto": 272, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the revision walker" + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { + "type": "git_repository *", + "comment": " the repository being walked" + }, + "description": "

Return the repository on which this walker\n is operating.

\n", + "comments": "", + "group": "revwalk" + }, + "git_revwalk_add_hide_cb": { + "type": "function", + "file": "git2/revwalk.h", + "line": 295, + "lineto": 298, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the revision walker" + }, + { + "name": "hide_cb", + "type": "git_revwalk_hide_cb", + "comment": "callback function to hide a commit and its parents" + }, + { + "name": "payload", + "type": "void *", + "comment": "data payload to be passed to callback function" + } + ], + "argline": "git_revwalk *walk, git_revwalk_hide_cb hide_cb, void *payload", + "sig": "git_revwalk *::git_revwalk_hide_cb::void *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Adds, changes or removes a callback function to hide a commit and its parents

\n", + "comments": "", + "group": "revwalk" + }, + "git_signature_new": { + "type": "function", + "file": "git2/signature.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature, in case of error NULL" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the person" + }, + { + "name": "email", + "type": "const char *", + "comment": "email of the person" + }, + { + "name": "time", + "type": "git_time_t", + "comment": "time (in seconds from epoch) when the action happened" + }, + { + "name": "offset", + "type": "int", + "comment": "timezone offset (in minutes) for the time" + } + ], + "argline": "git_signature **out, const char *name, const char *email, git_time_t time, int offset", + "sig": "git_signature **::const char *::const char *::git_time_t::int", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a new action signature.

\n", + "comments": "

Call git_signature_free() to free the data.

\n\n

Note: angle brackets ('<' and '>') characters are not allowed to be used in either the name or the email parameter.

\n", + "group": "signature", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_signature_new-70", + "ex/v1.7.2/general.html#git_signature_new-71" + ] + } + }, + "git_signature_now": { + "type": "function", + "file": "git2/signature.h", + "line": 49, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature, in case of error NULL" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the person" + }, + { + "name": "email", + "type": "const char *", + "comment": "email of the person" + } + ], + "argline": "git_signature **out, const char *name, const char *email", + "sig": "git_signature **::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a new action signature with a timestamp of 'now'.

\n", + "comments": "

Call git_signature_free() to free the data.

\n", + "group": "signature", + "examples": { + "merge.c": [ + "ex/v1.7.2/merge.html#git_signature_now-36" + ] + } + }, + "git_signature_default": { + "type": "function", + "file": "git2/signature.h", + "line": 63, + "lineto": 63, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository pointer" + } + ], + "argline": "git_signature **out, git_repository *repo", + "sig": "git_signature **::git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if config is missing, or error code" + }, + "description": "

Create a new action signature with default user and now timestamp.

\n", + "comments": "

This looks up the user.name and user.email from the configuration and uses the current time as the timestamp, and creates a new signature based on that information. It will return GIT_ENOTFOUND if either the user.name or user.email are not set.

\n", + "group": "signature", + "examples": { + "commit.c": [ + "ex/v1.7.2/commit.html#git_signature_default-10" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_signature_default-10" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_signature_default-13" + ] + } + }, + "git_signature_from_buffer": { + "type": "function", + "file": "git2/signature.h", + "line": 76, + "lineto": 76, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature" + }, + { + "name": "buf", + "type": "const char *", + "comment": "signature string" + } + ], + "argline": "git_signature **out, const char *buf", + "sig": "git_signature **::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALID if the signature is not parseable, or an error code" + }, + "description": "

Create a new signature by parsing the given buffer, which is\n expected to be in the format "Real Name \n<email

\n\n
\n

timestamp tzoffset",\n where timestamp is the number of seconds since the Unix epoch and\n tzoffset is the timezone offset in hhmm format (note the lack\n of a colon separator).

\n
\n", + "comments": "", + "group": "signature" + }, + "git_signature_dup": { + "type": "function", + "file": "git2/signature.h", + "line": 88, + "lineto": 88, + "args": [ + { + "name": "dest", + "type": "git_signature **", + "comment": "pointer where to store the copy" + }, + { + "name": "sig", + "type": "const git_signature *", + "comment": "signature to duplicate" + } + ], + "argline": "git_signature **dest, const git_signature *sig", + "sig": "git_signature **::const git_signature *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a copy of an existing signature. All internal strings are also\n duplicated.

\n", + "comments": "

Call git_signature_free() to free the data.

\n", + "group": "signature" + }, + "git_signature_free": { + "type": "function", + "file": "git2/signature.h", + "line": 99, + "lineto": 99, + "args": [ + { + "name": "sig", + "type": "git_signature *", + "comment": "signature to free" + } + ], + "argline": "git_signature *sig", + "sig": "git_signature *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free an existing signature.

\n", + "comments": "

Because the signature is not an opaque structure, it is legal to free it manually, but be sure to free the "name" and "email" strings in addition to the structure itself.

\n", + "group": "signature", + "examples": { + "commit.c": [ + "ex/v1.7.2/commit.html#git_signature_free-11" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_signature_free-72", + "ex/v1.7.2/general.html#git_signature_free-73" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_signature_free-11" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_signature_free-14" + ] + } + }, + "git_stash_save": { + "type": "function", + "file": "git2/stash.h", + "line": 67, + "lineto": 72, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Object id of the commit containing the stashed state.\n This commit is also the target of the direct reference refs/stash." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "stasher", + "type": "const git_signature *", + "comment": "The identity of the person performing the stashing." + }, + { + "name": "message", + "type": "const char *", + "comment": "Optional description along with the stashed state." + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Flags to control the stashing process. (see GIT_STASH_* above)" + } + ], + "argline": "git_oid *out, git_repository *repo, const git_signature *stasher, const char *message, uint32_t flags", + "sig": "git_oid *::git_repository *::const git_signature *::const char *::uint32_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND where there's nothing to stash,\n or error code." + }, + "description": "

Save the local modifications to a new stash.

\n", + "comments": "", + "group": "stash" + }, + "git_stash_save_options_init": { + "type": "function", + "file": "git2/stash.h", + "line": 110, + "lineto": 111, + "args": [ + { + "name": "opts", + "type": "git_stash_save_options *", + "comment": "The `git_stash_save_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_STASH_SAVE_OPTIONS_VERSION`." + } + ], + "argline": "git_stash_save_options *opts, unsigned int version", + "sig": "git_stash_save_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_stash_save_options structure

\n", + "comments": "

Initializes a git_stash_save_options with default values. Equivalent to creating an instance with GIT_STASH_SAVE_OPTIONS_INIT.

\n", + "group": "stash" + }, + "git_stash_save_with_opts": { + "type": "function", + "file": "git2/stash.h", + "line": 123, + "lineto": 126, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Object id of the commit containing the stashed state.\n This commit is also the target of the direct reference refs/stash." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "opts", + "type": "const git_stash_save_options *", + "comment": "The stash options." + } + ], + "argline": "git_oid *out, git_repository *repo, const git_stash_save_options *opts", + "sig": "git_oid *::git_repository *::const git_stash_save_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND where there's nothing to stash,\n or error code." + }, + "description": "

Save the local modifications to a new stash, with options.

\n", + "comments": "", + "group": "stash" + }, + "git_stash_apply_options_init": { + "type": "function", + "file": "git2/stash.h", + "line": 210, + "lineto": 211, + "args": [ + { + "name": "opts", + "type": "git_stash_apply_options *", + "comment": "The `git_stash_apply_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_STASH_APPLY_OPTIONS_VERSION`." + } + ], + "argline": "git_stash_apply_options *opts, unsigned int version", + "sig": "git_stash_apply_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_stash_apply_options structure

\n", + "comments": "

Initializes a git_stash_apply_options with default values. Equivalent to creating an instance with GIT_STASH_APPLY_OPTIONS_INIT.

\n", + "group": "stash" + }, + "git_stash_apply": { + "type": "function", + "file": "git2/stash.h", + "line": 239, + "lineto": 242, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "index", + "type": "size_t", + "comment": "The position within the stash list. 0 points to the\n most recent stashed state." + }, + { + "name": "options", + "type": "const git_stash_apply_options *", + "comment": "Optional options to control how stashes are applied." + } + ], + "argline": "git_repository *repo, size_t index, const git_stash_apply_options *options", + "sig": "git_repository *::size_t::const git_stash_apply_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the\n given index, GIT_EMERGECONFLICT if changes exist in the working\n directory, or an error code" + }, + "description": "

Apply a single stashed state from the stash list.

\n", + "comments": "

If local changes in the working directory conflict with changes in the stash then GIT_EMERGECONFLICT will be returned. In this case, the index will always remain unmodified and all files in the working directory will remain unmodified. However, if you are restoring untracked files or ignored files and there is a conflict when applying the modified files, then those files will remain in the working directory.

\n\n

If passing the GIT_STASH_APPLY_REINSTATE_INDEX flag and there would be conflicts when reinstating the index, the function will return GIT_EMERGECONFLICT and both the working directory and index will be left unmodified.

\n\n

Note that a minimum checkout strategy of GIT_CHECKOUT_SAFE is implied.

\n", + "group": "stash" + }, + "git_stash_foreach": { + "type": "function", + "file": "git2/stash.h", + "line": 275, + "lineto": 278, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the stash." + }, + { + "name": "callback", + "type": "git_stash_cb", + "comment": "Callback to invoke per found stashed state. The most\n recent stash state will be enumerated first." + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra parameter to callback function." + } + ], + "argline": "git_repository *repo, git_stash_cb callback, void *payload", + "sig": "git_repository *::git_stash_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code." + }, + "description": "

Loop over all the stashed states and issue a callback for each one.

\n", + "comments": "

If the callback returns a non-zero value, this will stop looping.

\n", + "group": "stash" + }, + "git_stash_drop": { + "type": "function", + "file": "git2/stash.h", + "line": 291, + "lineto": 293, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "index", + "type": "size_t", + "comment": "The position within the stash list. 0 points to the\n most recent stashed state." + } + ], + "argline": "git_repository *repo, size_t index", + "sig": "git_repository *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the given\n index, or error code." + }, + "description": "

Remove a single stashed state from the stash list.

\n", + "comments": "", + "group": "stash" + }, + "git_stash_pop": { + "type": "function", + "file": "git2/stash.h", + "line": 307, + "lineto": 310, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "index", + "type": "size_t", + "comment": "The position within the stash list. 0 points to the\n most recent stashed state." + }, + { + "name": "options", + "type": "const git_stash_apply_options *", + "comment": "Optional options to control how stashes are applied." + } + ], + "argline": "git_repository *repo, size_t index, const git_stash_apply_options *options", + "sig": "git_repository *::size_t::const git_stash_apply_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the given\n index, or error code. (see git_stash_apply() above for details)" + }, + "description": "

Apply a single stashed state from the stash list and remove it from the list\n if successful.

\n", + "comments": "", + "group": "stash" + }, + "git_status_options_init": { + "type": "function", + "file": "git2/status.h", + "line": 277, + "lineto": 279, + "args": [ + { + "name": "opts", + "type": "git_status_options *", + "comment": "The `git_status_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_STATUS_OPTIONS_VERSION`." + } + ], + "argline": "git_status_options *opts, unsigned int version", + "sig": "git_status_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_status_options structure

\n", + "comments": "

Initializes a git_status_options with default values. Equivalent to creating an instance with GIT_STATUS_OPTIONS_INIT.

\n", + "group": "status" + }, + "git_status_foreach": { + "type": "function", + "file": "git2/status.h", + "line": 317, + "lineto": 320, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "callback", + "type": "git_status_cb", + "comment": "The function to call on each file" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to pass through to callback function" + } + ], + "argline": "git_repository *repo, git_status_cb callback, void *payload", + "sig": "git_repository *::git_status_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Gather file statuses and run a callback for each one.

\n", + "comments": "

The callback is passed the path of the file, the status (a combination of the git_status_t values above) and the payload data pointer passed into this function.

\n\n

If the callback returns a non-zero value, this function will stop looping and return that value to caller.

\n", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_status_foreach-6" + ] + } + }, + "git_status_foreach_ext": { + "type": "function", + "file": "git2/status.h", + "line": 341, + "lineto": 345, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository object" + }, + { + "name": "opts", + "type": "const git_status_options *", + "comment": "Status options structure" + }, + { + "name": "callback", + "type": "git_status_cb", + "comment": "The function to call on each file" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to pass through to callback function" + } + ], + "argline": "git_repository *repo, const git_status_options *opts, git_status_cb callback, void *payload", + "sig": "git_repository *::const git_status_options *::git_status_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Gather file status information and run callbacks as requested.

\n", + "comments": "

This is an extended version of the git_status_foreach() API that allows for more granular control over which paths will be processed and in what order. See the git_status_options structure for details about the additional controls that this makes available.

\n\n

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_status_foreach_ext-7" + ] + } + }, + "git_status_file": { + "type": "function", + "file": "git2/status.h", + "line": 373, + "lineto": 376, + "args": [ + { + "name": "status_flags", + "type": "unsigned int *", + "comment": "Output combination of git_status_t values for file" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "path", + "type": "const char *", + "comment": "The exact path to retrieve status for relative to the\n repository working directory" + } + ], + "argline": "unsigned int *status_flags, git_repository *repo, const char *path", + "sig": "unsigned int *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if the file is not found in the HEAD,\n index, and work tree, GIT_EAMBIGUOUS if `path` matches multiple files\n or if it refers to a folder, and -1 on other errors." + }, + "description": "

Get file status for a single file.

\n", + "comments": "

This tries to get status for the filename that you give. If no files match that name (in either the HEAD, index, or working directory), this returns GIT_ENOTFOUND.

\n\n

If the name matches multiple files (for example, if the path names a directory or if running on a case- insensitive filesystem and yet the HEAD has two entries that both match the path), then this returns GIT_EAMBIGUOUS because it cannot give correct results.

\n\n

This does not do any sort of rename detection. Renames require a set of targets and because of the path filtering, there is not enough information to check renames correctly. To check file status with rename detection, there is no choice but to do a full git_status_list_new and scan through looking for the path that you are interested in.

\n", + "group": "status", + "examples": { + "add.c": [ + "ex/v1.7.2/add.html#git_status_file-6" + ] + } + }, + "git_status_list_new": { + "type": "function", + "file": "git2/status.h", + "line": 391, + "lineto": 394, + "args": [ + { + "name": "out", + "type": "git_status_list **", + "comment": "Pointer to store the status results in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository object" + }, + { + "name": "opts", + "type": "const git_status_options *", + "comment": "Status options structure" + } + ], + "argline": "git_status_list **out, git_repository *repo, const git_status_options *opts", + "sig": "git_status_list **::git_repository *::const git_status_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Gather file status information and populate the git_status_list.

\n", + "comments": "

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_status_list_new-8", + "ex/v1.7.2/status.html#git_status_list_new-9" + ] + } + }, + "git_status_list_entrycount": { + "type": "function", + "file": "git2/status.h", + "line": 405, + "lineto": 406, + "args": [ + { + "name": "statuslist", + "type": "git_status_list *", + "comment": "Existing status list object" + } + ], + "argline": "git_status_list *statuslist", + "sig": "git_status_list *", + "return": { + "type": "size_t", + "comment": " the number of status entries" + }, + "description": "

Gets the count of status entries in this list.

\n", + "comments": "

If there are no changes in status (at least according the options given when the status list was created), this can return 0.

\n", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_status_list_entrycount-10", + "ex/v1.7.2/status.html#git_status_list_entrycount-11" + ] + } + }, + "git_status_byindex": { + "type": "function", + "file": "git2/status.h", + "line": 417, + "lineto": 419, + "args": [ + { + "name": "statuslist", + "type": "git_status_list *", + "comment": "Existing status list object" + }, + { + "name": "idx", + "type": "size_t", + "comment": "Position of the entry" + } + ], + "argline": "git_status_list *statuslist, size_t idx", + "sig": "git_status_list *::size_t", + "return": { + "type": "const git_status_entry *", + "comment": " Pointer to the entry; NULL if out of bounds" + }, + "description": "

Get a pointer to one of the entries in the status list.

\n", + "comments": "

The entry is not modifiable and should not be freed.

\n", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_status_byindex-12", + "ex/v1.7.2/status.html#git_status_byindex-13", + "ex/v1.7.2/status.html#git_status_byindex-14", + "ex/v1.7.2/status.html#git_status_byindex-15", + "ex/v1.7.2/status.html#git_status_byindex-16", + "ex/v1.7.2/status.html#git_status_byindex-17" + ] + } + }, + "git_status_list_free": { + "type": "function", + "file": "git2/status.h", + "line": 426, + "lineto": 427, + "args": [ + { + "name": "statuslist", + "type": "git_status_list *", + "comment": "Existing status list object" + } + ], + "argline": "git_status_list *statuslist", + "sig": "git_status_list *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free an existing status list

\n", + "comments": "", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_status_list_free-18" + ] + } + }, + "git_status_should_ignore": { + "type": "function", + "file": "git2/status.h", + "line": 445, + "lineto": 448, + "args": [ + { + "name": "ignored", + "type": "int *", + "comment": "Boolean returning 0 if the file is not ignored, 1 if it is" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "path", + "type": "const char *", + "comment": "The file to check ignores for, rooted at the repo's workdir." + } + ], + "argline": "int *ignored, git_repository *repo, const char *path", + "sig": "int *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 if ignore rules could be processed for the file (regardless\n of whether it exists or not), or an error \n<\n 0 if they could not." + }, + "description": "

Test if the ignore rules apply to a given file.

\n", + "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git add ." on the directory containing the file, would it be added or not?

\n", + "group": "status" + }, + "git_strarray_dispose": { + "type": "function", + "file": "git2/strarray.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": "The git_strarray that contains strings to free" + } + ], + "argline": "git_strarray *array", + "sig": "git_strarray *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the strings contained in a string array. This method should\n be called on git_strarray objects that were provided by the\n library. Not doing so, will result in a memory leak.

\n", + "comments": "

This does not free the git_strarray itself, since the library will never allocate that object directly itself.

\n", + "group": "strarray", + "examples": { + "checkout.c": [ + "ex/v1.7.2/checkout.html#git_strarray_dispose-26" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_strarray_dispose-74" + ], + "remote.c": [ + "ex/v1.7.2/remote.html#git_strarray_dispose-11", + "ex/v1.7.2/remote.html#git_strarray_dispose-12" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_strarray_dispose-15" + ] + } + }, + "git_submodule_update_options_init": { + "type": "function", + "file": "git2/submodule.h", + "line": 171, + "lineto": 172, + "args": [ + { + "name": "opts", + "type": "git_submodule_update_options *", + "comment": "The `git_submodule_update_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_SUBMODULE_UPDATE_OPTIONS_VERSION`." + } + ], + "argline": "git_submodule_update_options *opts, unsigned int version", + "sig": "git_submodule_update_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_submodule_update_options structure

\n", + "comments": "

Initializes a git_submodule_update_options with default values. Equivalent to creating an instance with GIT_SUBMODULE_UPDATE_OPTIONS_INIT.

\n", + "group": "submodule" + }, + "git_submodule_update": { + "type": "function", + "file": "git2/submodule.h", + "line": 192, + "lineto": 192, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Submodule object" + }, + { + "name": "init", + "type": "int", + "comment": "If the submodule is not initialized, setting this flag to true\n will initialize the submodule before updating. Otherwise, this will\n return an error if attempting to update an uninitialized repository.\n but setting this to true forces them to be updated." + }, + { + "name": "options", + "type": "git_submodule_update_options *", + "comment": "configuration options for the update. If NULL, the\n function works as though GIT_SUBMODULE_UPDATE_OPTIONS_INIT was passed." + } + ], + "argline": "git_submodule *submodule, int init, git_submodule_update_options *options", + "sig": "git_submodule *::int::git_submodule_update_options *", + "return": { + "type": "int", + "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)." + }, + "description": "

Update a submodule. This will clone a missing submodule and\n checkout the subrepository to the commit specified in the index of\n the containing repository. If the submodule repository doesn't contain\n the target commit (e.g. because fetchRecurseSubmodules isn't set), then\n the submodule is fetched using the fetch options supplied in options.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_lookup": { + "type": "function", + "file": "git2/submodule.h", + "line": 221, + "lineto": 224, + "args": [ + { + "name": "out", + "type": "git_submodule **", + "comment": "Output ptr to submodule; pass NULL to just get return code" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The parent repository" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of or path to the submodule; trailing slashes okay" + } + ], + "argline": "git_submodule **out, git_repository *repo, const char *name", + "sig": "git_submodule **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if submodule does not exist,\n GIT_EEXISTS if a repository is found in working directory only,\n -1 on other errors." + }, + "description": "

Lookup submodule information by name or path.

\n", + "comments": "

Given either the submodule name or path (they are usually the same), this returns a structure describing the submodule.

\n\n

There are two expected error scenarios:

\n\n
    \n
  • The submodule is not mentioned in the HEAD, the index, and the config, but does "exist" in the working directory (i.e. there is a subdirectory that appears to be a Git repository). In this case, this function returns GIT_EEXISTS to indicate a sub-repository exists but not in a state where a git_submodule can be instantiated. - The submodule is not mentioned in the HEAD, index, or config and the working directory doesn't contain a value git repo at that path. There may or may not be anything else at that path, but nothing that looks like a submodule. In this case, this returns GIT_ENOTFOUND.
  • \n
\n\n

You must call git_submodule_free when done with the submodule.

\n", + "group": "submodule" + }, + "git_submodule_dup": { + "type": "function", + "file": "git2/submodule.h", + "line": 234, + "lineto": 234, + "args": [ + { + "name": "out", + "type": "git_submodule **", + "comment": "Pointer to store the copy of the submodule." + }, + { + "name": "source", + "type": "git_submodule *", + "comment": "Original submodule to copy." + } + ], + "argline": "git_submodule **out, git_submodule *source", + "sig": "git_submodule **::git_submodule *", + "return": { + "type": "int", + "comment": " 0" + }, + "description": "

Create an in-memory copy of a submodule. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_free": { + "type": "function", + "file": "git2/submodule.h", + "line": 241, + "lineto": 241, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Release a submodule

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_foreach": { + "type": "function", + "file": "git2/submodule.h", + "line": 261, + "lineto": 264, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository" + }, + { + "name": "callback", + "type": "git_submodule_cb", + "comment": "Function to be called with the name of each submodule.\n Return a non-zero value to terminate the iteration." + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra data to pass to callback" + } + ], + "argline": "git_repository *repo, git_submodule_cb callback, void *payload", + "sig": "git_repository *::git_submodule_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, or non-zero return value of callback" + }, + "description": "

Iterate over all tracked submodules of a repository.

\n", + "comments": "

See the note on git_submodule above. This iterates over the tracked submodules as described therein.

\n\n

If you are concerned about items in the working directory that look like submodules but are not tracked, the diff API will generate a diff record for workdir items that look like submodules but are not tracked, showing them as added in the workdir. Also, the status API will treat the entire subdirectory of a contained git repo as a single GIT_STATUS_WT_NEW item.

\n", + "group": "submodule", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_submodule_foreach-19" + ] + } + }, + "git_submodule_add_setup": { + "type": "function", + "file": "git2/submodule.h", + "line": 292, + "lineto": 297, + "args": [ + { + "name": "out", + "type": "git_submodule **", + "comment": "The newly created submodule ready to open for clone" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository in which you want to create the submodule" + }, + { + "name": "url", + "type": "const char *", + "comment": "URL for the submodule's remote" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path at which the submodule should be created" + }, + { + "name": "use_gitlink", + "type": "int", + "comment": "Should workdir contain a gitlink to the repo in\n .git/modules vs. repo directly in workdir." + } + ], + "argline": "git_submodule **out, git_repository *repo, const char *url, const char *path, int use_gitlink", + "sig": "git_submodule **::git_repository *::const char *::const char *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS if submodule already exists,\n -1 on other errors." + }, + "description": "

Set up a new git submodule for checkout.

\n", + "comments": "

This does "git submodule add" up to the fetch and checkout of the submodule contents. It preps a new submodule, creates an entry in .gitmodules and creates an empty initialized repository either at the given path in the working directory or in .git/modules with a gitlink from the working directory to the new repo.

\n\n

To fully emulate "git submodule add" call this function, then open the submodule repo and perform the clone step as needed (if you don't need anything custom see git_submodule_add_clone()). Lastly, call git_submodule_add_finalize() to wrap up adding the new submodule and .gitmodules to the index to be ready to commit.

\n\n

You must call git_submodule_free on the submodule object when done.

\n", + "group": "submodule" + }, + "git_submodule_clone": { + "type": "function", + "file": "git2/submodule.h", + "line": 310, + "lineto": 313, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "The newly created repository object. Optional." + }, + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule currently waiting for its clone." + }, + { + "name": "opts", + "type": "const git_submodule_update_options *", + "comment": "The options to use." + } + ], + "argline": "git_repository **out, git_submodule *submodule, const git_submodule_update_options *opts", + "sig": "git_repository **::git_submodule *::const git_submodule_update_options *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on other errors (see git_clone)." + }, + "description": "

Perform the clone step for a newly created submodule.

\n", + "comments": "

This performs the necessary git_clone to setup a newly-created submodule.

\n", + "group": "submodule" + }, + "git_submodule_add_finalize": { + "type": "function", + "file": "git2/submodule.h", + "line": 326, + "lineto": 326, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to finish adding." + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Resolve the setup of a new git submodule.

\n", + "comments": "

This should be called on a submodule once you have called add setup and done the clone of the submodule. This adds the .gitmodules file and the newly cloned submodule to the index to be ready to be committed (but doesn't actually do the commit).

\n", + "group": "submodule" + }, + "git_submodule_add_to_index": { + "type": "function", + "file": "git2/submodule.h", + "line": 338, + "lineto": 340, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to add to the index" + }, + { + "name": "write_index", + "type": "int", + "comment": "Boolean if this should immediately write the index\n file. If you pass this as false, you will have to get the\n git_index and explicitly call `git_index_write()` on it to\n save the change." + } + ], + "argline": "git_submodule *submodule, int write_index", + "sig": "git_submodule *::int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Add current submodule HEAD commit to index of superproject.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_owner": { + "type": "function", + "file": "git2/submodule.h", + "line": 353, + "lineto": 353, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "git_repository *", + "comment": " Pointer to `git_repository`" + }, + "description": "

Get the containing repository for a submodule.

\n", + "comments": "

This returns a pointer to the repository that contains the submodule. This is a just a reference to the repository that was passed to the original git_submodule_lookup() call, so if that repository has been freed, then this may be a dangling reference.

\n", + "group": "submodule" + }, + "git_submodule_name": { + "type": "function", + "file": "git2/submodule.h", + "line": 361, + "lineto": 361, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const char *", + "comment": " Pointer to the submodule name" + }, + "description": "

Get the name of submodule.

\n", + "comments": "", + "group": "submodule", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_submodule_name-20" + ] + } + }, + "git_submodule_path": { + "type": "function", + "file": "git2/submodule.h", + "line": 372, + "lineto": 372, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const char *", + "comment": " Pointer to the submodule path" + }, + "description": "

Get the path to the submodule.

\n", + "comments": "

The path is almost always the same as the submodule name, but the two are actually not required to match.

\n", + "group": "submodule", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_submodule_path-21" + ] + } + }, + "git_submodule_url": { + "type": "function", + "file": "git2/submodule.h", + "line": 380, + "lineto": 380, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const char *", + "comment": " Pointer to the submodule url" + }, + "description": "

Get the URL for the submodule.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_resolve_url": { + "type": "function", + "file": "git2/submodule.h", + "line": 390, + "lineto": 390, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer to store the absolute submodule url in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Pointer to repository object" + }, + { + "name": "url", + "type": "const char *", + "comment": "Relative url" + } + ], + "argline": "git_buf *out, git_repository *repo, const char *url", + "sig": "git_buf *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Resolve a submodule url relative to the given repository.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_branch": { + "type": "function", + "file": "git2/submodule.h", + "line": 398, + "lineto": 398, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const char *", + "comment": " Pointer to the submodule branch" + }, + "description": "

Get the branch for the submodule.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_set_branch": { + "type": "function", + "file": "git2/submodule.h", + "line": 411, + "lineto": 411, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the submodule to configure" + }, + { + "name": "branch", + "type": "const char *", + "comment": "Branch that should be used for the submodule" + } + ], + "argline": "git_repository *repo, const char *name, const char *branch", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Set the branch for the submodule in the configuration

\n", + "comments": "

After calling this, you may wish to call git_submodule_sync() to write the changes to the checked out submodule repository.

\n", + "group": "submodule" + }, + "git_submodule_set_url": { + "type": "function", + "file": "git2/submodule.h", + "line": 425, + "lineto": 425, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the submodule to configure" + }, + { + "name": "url", + "type": "const char *", + "comment": "URL that should be used for the submodule" + } + ], + "argline": "git_repository *repo, const char *name, const char *url", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Set the URL for the submodule in the configuration

\n", + "comments": "

After calling this, you may wish to call git_submodule_sync() to write the changes to the checked out submodule repository.

\n", + "group": "submodule" + }, + "git_submodule_index_id": { + "type": "function", + "file": "git2/submodule.h", + "line": 433, + "lineto": 433, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const git_oid *", + "comment": " Pointer to git_oid or NULL if submodule is not in index." + }, + "description": "

Get the OID for the submodule in the index.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_head_id": { + "type": "function", + "file": "git2/submodule.h", + "line": 441, + "lineto": 441, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const git_oid *", + "comment": " Pointer to git_oid or NULL if submodule is not in the HEAD." + }, + "description": "

Get the OID for the submodule in the current HEAD tree.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_wd_id": { + "type": "function", + "file": "git2/submodule.h", + "line": 454, + "lineto": 454, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const git_oid *", + "comment": " Pointer to git_oid or NULL if submodule is not checked out." + }, + "description": "

Get the OID for the submodule in the current working directory.

\n", + "comments": "

This returns the OID that corresponds to looking up 'HEAD' in the checked out submodule. If there are pending changes in the index or anything else, this won't notice that. You should call git_submodule_status() for a more complete picture about the state of the working directory.

\n", + "group": "submodule" + }, + "git_submodule_ignore": { + "type": "function", + "file": "git2/submodule.h", + "line": 479, + "lineto": 480, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to check" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "git_submodule_ignore_t", + "comment": " The current git_submodule_ignore_t valyue what will be used for\n this submodule." + }, + "description": "

Get the ignore rule that will be used for the submodule.

\n", + "comments": "

These values control the behavior of git_submodule_status() for this submodule. There are four ignore values:

\n\n
    \n
  • GIT_SUBMODULE_IGNORE_NONE will consider any change to the contents of the submodule from a clean checkout to be dirty, including the addition of untracked files. This is the default if unspecified. - GIT_SUBMODULE_IGNORE_UNTRACKED examines the contents of the working tree (i.e. call git_status_foreach() on the submodule) but UNTRACKED files will not count as making the submodule dirty. - GIT_SUBMODULE_IGNORE_DIRTY means to only check if the HEAD of the submodule has moved for status. This is fast since it does not need to scan the working tree of the submodule at all. - GIT_SUBMODULE_IGNORE_ALL means not to open the submodule repo. The working directory will be consider clean so long as there is a checked out version present.
  • \n
\n", + "group": "submodule" + }, + "git_submodule_set_ignore": { + "type": "function", + "file": "git2/submodule.h", + "line": 492, + "lineto": 495, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the submdule" + }, + { + "name": "ignore", + "type": "git_submodule_ignore_t", + "comment": "The new value for the ignore rule" + } + ], + "argline": "git_repository *repo, const char *name, git_submodule_ignore_t ignore", + "sig": "git_repository *::const char *::git_submodule_ignore_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Set the ignore rule for the submodule in the configuration

\n", + "comments": "

This does not affect any currently-loaded instances.

\n", + "group": "submodule" + }, + "git_submodule_update_strategy": { + "type": "function", + "file": "git2/submodule.h", + "line": 507, + "lineto": 508, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to check" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "git_submodule_update_t", + "comment": " The current git_submodule_update_t value that will be used\n for this submodule." + }, + "description": "

Get the update rule that will be used for the submodule.

\n", + "comments": "

This value controls the behavior of the git submodule update command. There are four useful values documented with git_submodule_update_t.

\n", + "group": "submodule" + }, + "git_submodule_set_update": { + "type": "function", + "file": "git2/submodule.h", + "line": 520, + "lineto": 523, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the submodule to configure" + }, + { + "name": "update", + "type": "git_submodule_update_t", + "comment": "The new value to use" + } + ], + "argline": "git_repository *repo, const char *name, git_submodule_update_t update", + "sig": "git_repository *::const char *::git_submodule_update_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Set the update rule for the submodule in the configuration

\n", + "comments": "

This setting won't affect any existing instances.

\n", + "group": "submodule" + }, + "git_submodule_fetch_recurse_submodules": { + "type": "function", + "file": "git2/submodule.h", + "line": 536, + "lineto": 537, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": null + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "git_submodule_recurse_t", + "comment": " 0 if fetchRecurseSubmodules is false, 1 if true" + }, + "description": "

Read the fetchRecurseSubmodules rule for a submodule.

\n", + "comments": "

This accesses the submodule..fetchRecurseSubmodules value for the submodule that controls fetching behavior for the submodule.

\n\n

Note that at this time, libgit2 does not honor this setting and the fetch functionality current ignores submodules.

\n", + "group": "submodule" + }, + "git_submodule_set_fetch_recurse_submodules": { + "type": "function", + "file": "git2/submodule.h", + "line": 549, + "lineto": 552, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the submodule to configure" + }, + { + "name": "fetch_recurse_submodules", + "type": "git_submodule_recurse_t", + "comment": "Boolean value" + } + ], + "argline": "git_repository *repo, const char *name, git_submodule_recurse_t fetch_recurse_submodules", + "sig": "git_repository *::const char *::git_submodule_recurse_t", + "return": { + "type": "int", + "comment": " old value for fetchRecurseSubmodules" + }, + "description": "

Set the fetchRecurseSubmodules rule for a submodule in the configuration

\n", + "comments": "

This setting won't affect any existing instances.

\n", + "group": "submodule" + }, + "git_submodule_init": { + "type": "function", + "file": "git2/submodule.h", + "line": 567, + "lineto": 567, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to write into the superproject config" + }, + { + "name": "overwrite", + "type": "int", + "comment": "By default, existing entries will not be overwritten,\n but setting this to true forces them to be updated." + } + ], + "argline": "git_submodule *submodule, int overwrite", + "sig": "git_submodule *::int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure." + }, + "description": "

Copy submodule info into ".git/config" file.

\n", + "comments": "

Just like "git submodule init", this copies information about the submodule into ".git/config". You can use the accessor functions above to alter the in-memory git_submodule object and control what is written to the config, overriding what is in .gitmodules.

\n", + "group": "submodule" + }, + "git_submodule_repo_init": { + "type": "function", + "file": "git2/submodule.h", + "line": 582, + "lineto": 585, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Output pointer to the created git repository." + }, + { + "name": "sm", + "type": "const git_submodule *", + "comment": "The submodule to create a new subrepository from." + }, + { + "name": "use_gitlink", + "type": "int", + "comment": "Should the workdir contain a gitlink to\n the repo in .git/modules vs. repo directly in workdir." + } + ], + "argline": "git_repository **out, const git_submodule *sm, int use_gitlink", + "sig": "git_repository **::const git_submodule *::int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure." + }, + "description": "

Set up the subrepository for a submodule in preparation for clone.

\n", + "comments": "

This function can be called to init and set up a submodule repository from a submodule in preparation to clone it from its remote.

\n", + "group": "submodule" + }, + "git_submodule_sync": { + "type": "function", + "file": "git2/submodule.h", + "line": 598, + "lineto": 598, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to copy." + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "int", + "comment": " 0 or an error code." + }, + "description": "

Copy submodule remote info into submodule repo.

\n", + "comments": "

This copies the information about the submodules URL into the checked out submodule config, acting like "git submodule sync". This is useful if you have altered the URL for the submodule (or it has been altered by a fetch of upstream changes) and you need to update your local repo.

\n", + "group": "submodule" + }, + "git_submodule_open": { + "type": "function", + "file": "git2/submodule.h", + "line": 612, + "lineto": 614, + "args": [ + { + "name": "repo", + "type": "git_repository **", + "comment": "Pointer to the submodule repo which was opened" + }, + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Submodule to be opened" + } + ], + "argline": "git_repository **repo, git_submodule *submodule", + "sig": "git_repository **::git_submodule *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 if submodule repo could not be opened." + }, + "description": "

Open the repository for a submodule.

\n", + "comments": "

This is a newly opened repository object. The caller is responsible for calling git_repository_free() on it when done. Multiple calls to this function will return distinct git_repository objects. This will only work if the submodule is checked out into the working directory.

\n", + "group": "submodule" + }, + "git_submodule_reload": { + "type": "function", + "file": "git2/submodule.h", + "line": 626, + "lineto": 626, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to reload" + }, + { + "name": "force", + "type": "int", + "comment": "Force reload even if the data doesn't seem out of date" + } + ], + "argline": "git_submodule *submodule, int force", + "sig": "git_submodule *::int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on error" + }, + "description": "

Reread submodule info from config, index, and HEAD.

\n", + "comments": "

Call this to reread cached submodule information for this submodule if you have reason to believe that it has changed.

\n", + "group": "submodule" + }, + "git_submodule_status": { + "type": "function", + "file": "git2/submodule.h", + "line": 642, + "lineto": 646, + "args": [ + { + "name": "status", + "type": "unsigned int *", + "comment": "Combination of `GIT_SUBMODULE_STATUS` flags" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to look" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the submodule" + }, + { + "name": "ignore", + "type": "git_submodule_ignore_t", + "comment": "the ignore rules to follow" + } + ], + "argline": "unsigned int *status, git_repository *repo, const char *name, git_submodule_ignore_t ignore", + "sig": "unsigned int *::git_repository *::const char *::git_submodule_ignore_t", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on error" + }, + "description": "

Get the status for a submodule.

\n", + "comments": "

This looks at a submodule and tries to determine the status. It will return a combination of the GIT_SUBMODULE_STATUS values above. How deeply it examines the working directory to do this will depend on the git_submodule_ignore_t value for the submodule.

\n", + "group": "submodule", + "examples": { + "status.c": [ + "ex/v1.7.2/status.html#git_submodule_status-22" + ] + } + }, + "git_submodule_location": { + "type": "function", + "file": "git2/submodule.h", + "line": 662, + "lineto": 664, + "args": [ + { + "name": "location_status", + "type": "unsigned int *", + "comment": "Combination of first four `GIT_SUBMODULE_STATUS` flags" + }, + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Submodule for which to get status" + } + ], + "argline": "unsigned int *location_status, git_submodule *submodule", + "sig": "unsigned int *::git_submodule *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on error" + }, + "description": "

Get the locations of submodule information.

\n", + "comments": "

This is a bit like a very lightweight version of git_submodule_status. It just returns a made of the first four submodule status values (i.e. the ones like GIT_SUBMODULE_STATUS_IN_HEAD, etc) that tell you where the submodule data comes from (i.e. the HEAD commit, gitmodules file, etc.). This can be useful if you want to know if the submodule is present in the working directory at this point in time, etc.

\n", + "group": "submodule" + }, + "git_tag_lookup": { + "type": "function", + "file": "git2/tag.h", + "line": 33, + "lineto": 34, + "args": [ + { + "name": "out", + "type": "git_tag **", + "comment": "pointer to the looked up tag" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the tag." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the tag to locate." + } + ], + "argline": "git_tag **out, git_repository *repo, const git_oid *id", + "sig": "git_tag **::git_repository *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a tag object from the repository.

\n", + "comments": "", + "group": "tag", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_tag_lookup-75" + ] + } + }, + "git_tag_lookup_prefix": { + "type": "function", + "file": "git2/tag.h", + "line": 48, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_tag **", + "comment": "pointer to the looked up tag" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the tag." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the tag to locate." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + } + ], + "argline": "git_tag **out, git_repository *repo, const git_oid *id, size_t len", + "sig": "git_tag **::git_repository *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a tag object from the repository,\n given a prefix of its identifier (short id).

\n", + "comments": "", + "group": "tag" + }, + "git_tag_free": { + "type": "function", + "file": "git2/tag.h", + "line": 61, + "lineto": 61, + "args": [ + { + "name": "tag", + "type": "git_tag *", + "comment": "the tag to close" + } + ], + "argline": "git_tag *tag", + "sig": "git_tag *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Close an open tag

\n", + "comments": "

You can no longer use the git_tag pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you are through with a tag to release memory. Failure to do so will cause a memory leak.

\n", + "group": "tag", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_tag_free-76" + ] + } + }, + "git_tag_id": { + "type": "function", + "file": "git2/tag.h", + "line": 69, + "lineto": 69, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "const git_oid *", + "comment": " object identity for the tag." + }, + "description": "

Get the id of a tag.

\n", + "comments": "", + "group": "tag" + }, + "git_tag_owner": { + "type": "function", + "file": "git2/tag.h", + "line": 77, + "lineto": 77, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "A previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "git_repository *", + "comment": " Repository that contains this tag." + }, + "description": "

Get the repository that contains the tag.

\n", + "comments": "", + "group": "tag" + }, + "git_tag_target": { + "type": "function", + "file": "git2/tag.h", + "line": 89, + "lineto": 89, + "args": [ + { + "name": "target_out", + "type": "git_object **", + "comment": "pointer where to store the target" + }, + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "git_object **target_out, const git_tag *tag", + "sig": "git_object **::const git_tag *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Get the tagged object of a tag

\n", + "comments": "

This method performs a repository lookup for the given object and returns it

\n", + "group": "tag", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_tag_target-77" + ] + } + }, + "git_tag_target_id": { + "type": "function", + "file": "git2/tag.h", + "line": 97, + "lineto": 97, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "const git_oid *", + "comment": " pointer to the OID" + }, + "description": "

Get the OID of the tagged object of a tag

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tag_target_id-31" + ] + } + }, + "git_tag_target_type": { + "type": "function", + "file": "git2/tag.h", + "line": 105, + "lineto": 105, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "git_object_t", + "comment": " type of the tagged object" + }, + "description": "

Get the type of a tag's tagged object

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tag_target_type-32" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_tag_target_type-78" + ] + } + }, + "git_tag_name": { + "type": "function", + "file": "git2/tag.h", + "line": 113, + "lineto": 113, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "const char *", + "comment": " name of the tag" + }, + "description": "

Get the name of a tag

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tag_name-33" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_tag_name-79" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_tag_name-16" + ] + } + }, + "git_tag_tagger": { + "type": "function", + "file": "git2/tag.h", + "line": 121, + "lineto": 121, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "const git_signature *", + "comment": " reference to the tag's author or NULL when unspecified" + }, + "description": "

Get the tagger (author) of a tag

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tag_tagger-34" + ] + } + }, + "git_tag_message": { + "type": "function", + "file": "git2/tag.h", + "line": 129, + "lineto": 129, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "const char *", + "comment": " message of the tag or NULL when unspecified" + }, + "description": "

Get the message of a tag

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tag_message-35", + "ex/v1.7.2/cat-file.html#git_tag_message-36" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_tag_message-80" + ], + "tag.c": [ + "ex/v1.7.2/tag.html#git_tag_message-17" + ] + } + }, + "git_tag_create": { + "type": "function", + "file": "git2/tag.h", + "line": 171, + "lineto": 178, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the\n newly created tag. If the tag already exists, this parameter\n will be the oid of the existing tag, and the function will\n return a GIT_EEXISTS error code." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the tag" + }, + { + "name": "tag_name", + "type": "const char *", + "comment": "Name for the tag; this name is validated\n for consistency. It should also not conflict with an\n already existing tag name" + }, + { + "name": "target", + "type": "const git_object *", + "comment": "Object to which this tag points. This object\n must belong to the given `repo`." + }, + { + "name": "tagger", + "type": "const git_signature *", + "comment": "Signature of the tagger for this tag, and\n of the tagging time" + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this tag" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + } + ], + "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, const git_signature *tagger, const char *message, int force", + "sig": "git_oid *::git_repository *::const char *::const git_object *::const git_signature *::const char *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code\n\tA tag object is written to the ODB, and a proper reference\n\tis written in the /refs/tags folder, pointing to it" + }, + "description": "

Create a new tag in the repository from an object

\n", + "comments": "

A new reference will also be created pointing to this tag object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n\n

The tag name will be checked for validity. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.

\n", + "group": "tag", + "examples": { + "tag.c": [ + "ex/v1.7.2/tag.html#git_tag_create-18" + ] + } + }, + "git_tag_annotation_create": { + "type": "function", + "file": "git2/tag.h", + "line": 203, + "lineto": 209, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the\n newly created tag" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the tag" + }, + { + "name": "tag_name", + "type": "const char *", + "comment": "Name for the tag" + }, + { + "name": "target", + "type": "const git_object *", + "comment": "Object to which this tag points. This object\n must belong to the given `repo`." + }, + { + "name": "tagger", + "type": "const git_signature *", + "comment": "Signature of the tagger for this tag, and\n of the tagging time" + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this tag" + } + ], + "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, const git_signature *tagger, const char *message", + "sig": "git_oid *::git_repository *::const char *::const git_object *::const git_signature *::const char *", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Create a new tag in the object database pointing to a git_object

\n", + "comments": "

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n", + "group": "tag" + }, + "git_tag_create_from_buffer": { + "type": "function", + "file": "git2/tag.h", + "line": 220, + "lineto": 224, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the newly created tag" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the tag" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "Raw tag data" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing tags" + } + ], + "argline": "git_oid *oid, git_repository *repo, const char *buffer, int force", + "sig": "git_oid *::git_repository *::const char *::int", + "return": { + "type": "int", + "comment": " 0 on success; error code otherwise" + }, + "description": "

Create a new tag in the repository from a buffer

\n", + "comments": "", + "group": "tag" + }, + "git_tag_create_lightweight": { + "type": "function", + "file": "git2/tag.h", + "line": 256, + "lineto": 261, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the provided\n target object. If the tag already exists, this parameter\n will be filled with the oid of the existing pointed object\n and the function will return a GIT_EEXISTS error code." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the lightweight tag" + }, + { + "name": "tag_name", + "type": "const char *", + "comment": "Name for the tag; this name is validated\n for consistency. It should also not conflict with an\n already existing tag name" + }, + { + "name": "target", + "type": "const git_object *", + "comment": "Object to which this tag points. This object\n must belong to the given `repo`." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + } + ], + "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, int force", + "sig": "git_oid *::git_repository *::const char *::const git_object *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code\n\tA proper reference is written in the /refs/tags folder,\n pointing to the provided target object" + }, + "description": "

Create a new lightweight tag pointing at a target object

\n", + "comments": "

A new direct reference will be created pointing to this target object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", + "group": "tag", + "examples": { + "tag.c": [ + "ex/v1.7.2/tag.html#git_tag_create_lightweight-19" + ] + } + }, + "git_tag_delete": { + "type": "function", + "file": "git2/tag.h", + "line": 276, + "lineto": 278, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where lives the tag" + }, + { + "name": "tag_name", + "type": "const char *", + "comment": "Name of the tag to be deleted;\n this name is validated for consistency." + } + ], + "argline": "git_repository *repo, const char *tag_name", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Delete an existing tag reference.

\n", + "comments": "

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", + "group": "tag", + "examples": { + "tag.c": [ + "ex/v1.7.2/tag.html#git_tag_delete-20" + ] + } + }, + "git_tag_list": { + "type": "function", + "file": "git2/tag.h", + "line": 293, + "lineto": 295, + "args": [ + { + "name": "tag_names", + "type": "git_strarray *", + "comment": "Pointer to a git_strarray structure where\n\t\tthe tag names will be stored" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the tags" + } + ], + "argline": "git_strarray *tag_names, git_repository *repo", + "sig": "git_strarray *::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Fill a list with all the tags in the Repository

\n", + "comments": "

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", + "group": "tag" + }, + "git_tag_list_match": { + "type": "function", + "file": "git2/tag.h", + "line": 315, + "lineto": 318, + "args": [ + { + "name": "tag_names", + "type": "git_strarray *", + "comment": "Pointer to a git_strarray structure where\n\t\tthe tag names will be stored" + }, + { + "name": "pattern", + "type": "const char *", + "comment": "Standard fnmatch pattern" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the tags" + } + ], + "argline": "git_strarray *tag_names, const char *pattern, git_repository *repo", + "sig": "git_strarray *::const char *::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Fill a list with all the tags in the Repository\n which name match a defined pattern

\n", + "comments": "

If an empty pattern is provided, all the tags will be returned.

\n\n

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", + "group": "tag", + "examples": { + "tag.c": [ + "ex/v1.7.2/tag.html#git_tag_list_match-21" + ] + } + }, + "git_tag_foreach": { + "type": "function", + "file": "git2/tag.h", + "line": 339, + "lineto": 342, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository" + }, + { + "name": "callback", + "type": "git_tag_foreach_cb", + "comment": "Callback function" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to callback data (optional)" + } + ], + "argline": "git_repository *repo, git_tag_foreach_cb callback, void *payload", + "sig": "git_repository *::git_tag_foreach_cb::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Call callback `cb' for each tag in the repository

\n", + "comments": "", + "group": "tag" + }, + "git_tag_peel": { + "type": "function", + "file": "git2/tag.h", + "line": 355, + "lineto": 357, + "args": [ + { + "name": "tag_target_out", + "type": "git_object **", + "comment": "Pointer to the peeled git_object" + }, + { + "name": "tag", + "type": "const git_tag *", + "comment": "The tag to be processed" + } + ], + "argline": "git_object **tag_target_out, const git_tag *tag", + "sig": "git_object **::const git_tag *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Recursively peel a tag until a non tag git_object is found

\n", + "comments": "

The retrieved tag_target object is owned by the repository and should be closed with the git_object_free method.

\n", + "group": "tag" + }, + "git_tag_dup": { + "type": "function", + "file": "git2/tag.h", + "line": 367, + "lineto": 367, + "args": [ + { + "name": "out", + "type": "git_tag **", + "comment": "Pointer to store the copy of the tag" + }, + { + "name": "source", + "type": "git_tag *", + "comment": "Original tag to copy" + } + ], + "argline": "git_tag **out, git_tag *source", + "sig": "git_tag **::git_tag *", + "return": { + "type": "int", + "comment": " 0" + }, + "description": "

Create an in-memory copy of a tag. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "tag" + }, + "git_tag_name_is_valid": { + "type": "function", + "file": "git2/tag.h", + "line": 379, + "lineto": 379, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "output pointer to set with validity of given tag name" + }, + { + "name": "name", + "type": "const char *", + "comment": "a tag name to test" + } + ], + "argline": "int *valid, const char *name", + "sig": "int *::const char *", + "return": { + "type": "int", + "comment": " 0 on success or an error code" + }, + "description": "

Determine whether a tag name is valid, meaning that (when prefixed\n with refs/tags/) that it is a valid reference name, and that any\n additional tag name restrictions are imposed (eg, it cannot start\n with a -).

\n", + "comments": "", + "group": "tag" + }, + "git_trace_set": { + "type": "function", + "file": "git2/trace.h", + "line": 63, + "lineto": 63, + "args": [ + { + "name": "level", + "type": "git_trace_level_t", + "comment": "Level to set tracing to" + }, + { + "name": "cb", + "type": "git_trace_cb", + "comment": "Function to call with trace data" + } + ], + "argline": "git_trace_level_t level, git_trace_cb cb", + "sig": "git_trace_level_t::git_trace_cb", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Sets the system tracing configuration to the specified level with the\n specified callback. When system events occur at a level equal to, or\n lower than, the given level they will be reported to the given callback.

\n", + "comments": "", + "group": "trace" + }, + "git_transaction_new": { + "type": "function", + "file": "git2/transaction.h", + "line": 32, + "lineto": 32, + "args": [ + { + "name": "out", + "type": "git_transaction **", + "comment": "the resulting transaction" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to lock" + } + ], + "argline": "git_transaction **out, git_repository *repo", + "sig": "git_transaction **::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a new transaction object

\n", + "comments": "

This does not lock anything, but sets up the transaction object to know from which repository to lock.

\n", + "group": "transaction" + }, + "git_transaction_lock_ref": { + "type": "function", + "file": "git2/transaction.h", + "line": 44, + "lineto": 44, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference to lock" + } + ], + "argline": "git_transaction *tx, const char *refname", + "sig": "git_transaction *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error message" + }, + "description": "

Lock a reference

\n", + "comments": "

Lock the specified reference. This is the first step to updating a reference.

\n", + "group": "transaction" + }, + "git_transaction_set_target": { + "type": "function", + "file": "git2/transaction.h", + "line": 59, + "lineto": 59, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "reference to update" + }, + { + "name": "target", + "type": "const git_oid *", + "comment": "target to set the reference to" + }, + { + "name": "sig", + "type": "const git_signature *", + "comment": "signature to use in the reflog; pass NULL to read the identity from the config" + }, + { + "name": "msg", + "type": "const char *", + "comment": "message to use in the reflog" + } + ], + "argline": "git_transaction *tx, const char *refname, const git_oid *target, const git_signature *sig, const char *msg", + "sig": "git_transaction *::const char *::const git_oid *::const git_signature *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" + }, + "description": "

Set the target of a reference

\n", + "comments": "

Set the target of the specified reference. This reference must be locked.

\n", + "group": "transaction" + }, + "git_transaction_set_symbolic_target": { + "type": "function", + "file": "git2/transaction.h", + "line": 74, + "lineto": 74, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "reference to update" + }, + { + "name": "target", + "type": "const char *", + "comment": "target to set the reference to" + }, + { + "name": "sig", + "type": "const git_signature *", + "comment": "signature to use in the reflog; pass NULL to read the identity from the config" + }, + { + "name": "msg", + "type": "const char *", + "comment": "message to use in the reflog" + } + ], + "argline": "git_transaction *tx, const char *refname, const char *target, const git_signature *sig, const char *msg", + "sig": "git_transaction *::const char *::const char *::const git_signature *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" + }, + "description": "

Set the target of a reference

\n", + "comments": "

Set the target of the specified reference. This reference must be locked.

\n", + "group": "transaction" + }, + "git_transaction_set_reflog": { + "type": "function", + "file": "git2/transaction.h", + "line": 87, + "lineto": 87, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference whose reflog to set" + }, + { + "name": "reflog", + "type": "const git_reflog *", + "comment": "the reflog as it should be written out" + } + ], + "argline": "git_transaction *tx, const char *refname, const git_reflog *reflog", + "sig": "git_transaction *::const char *::const git_reflog *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" + }, + "description": "

Set the reflog of a reference

\n", + "comments": "

Set the specified reference's reflog. If this is combined with setting the target, that update won't be written to the reflog.

\n", + "group": "transaction" + }, + "git_transaction_remove": { + "type": "function", + "file": "git2/transaction.h", + "line": 96, + "lineto": 96, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference to remove" + } + ], + "argline": "git_transaction *tx, const char *refname", + "sig": "git_transaction *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" + }, + "description": "

Remove a reference

\n", + "comments": "", + "group": "transaction" + }, + "git_transaction_commit": { + "type": "function", + "file": "git2/transaction.h", + "line": 107, + "lineto": 107, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + } + ], + "argline": "git_transaction *tx", + "sig": "git_transaction *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Commit the changes from the transaction

\n", + "comments": "

Perform the changes that have been queued. The updates will be made one by one, and the first failure will stop the processing.

\n", + "group": "transaction" + }, + "git_transaction_free": { + "type": "function", + "file": "git2/transaction.h", + "line": 117, + "lineto": 117, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + } + ], + "argline": "git_transaction *tx", + "sig": "git_transaction *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free the resources allocated by this transaction

\n", + "comments": "

If any references remain locked, they will be unlocked without any changes made to them.

\n", + "group": "transaction" + }, + "git_tree_lookup": { + "type": "function", + "file": "git2/tree.h", + "line": 32, + "lineto": 33, + "args": [ + { + "name": "out", + "type": "git_tree **", + "comment": "Pointer to the looked up tree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repo to use when locating the tree." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "Identity of the tree to locate." + } + ], + "argline": "git_tree **out, git_repository *repo, const git_oid *id", + "sig": "git_tree **::git_repository *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a tree object from the repository.

\n", + "comments": "", + "group": "tree", + "examples": { + "commit.c": [ + "ex/v1.7.2/commit.html#git_tree_lookup-12" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_tree_lookup-81", + "ex/v1.7.2/general.html#git_tree_lookup-82" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_tree_lookup-12" + ], + "merge.c": [ + "ex/v1.7.2/merge.html#git_tree_lookup-37" + ] + } + }, + "git_tree_lookup_prefix": { + "type": "function", + "file": "git2/tree.h", + "line": 47, + "lineto": 51, + "args": [ + { + "name": "out", + "type": "git_tree **", + "comment": "pointer to the looked up tree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the tree." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the tree to locate." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + } + ], + "argline": "git_tree **out, git_repository *repo, const git_oid *id, size_t len", + "sig": "git_tree **::git_repository *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a tree object from the repository,\n given a prefix of its identifier (short id).

\n", + "comments": "", + "group": "tree" + }, + "git_tree_free": { + "type": "function", + "file": "git2/tree.h", + "line": 63, + "lineto": 63, + "args": [ + { + "name": "tree", + "type": "git_tree *", + "comment": "The tree to close" + } + ], + "argline": "git_tree *tree", + "sig": "git_tree *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Close an open tree

\n", + "comments": "

You can no longer use the git_tree pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you stop using a tree to release memory. Failure to do so will cause a memory leak.

\n", + "group": "tree", + "examples": { + "commit.c": [ + "ex/v1.7.2/commit.html#git_tree_free-13" + ], + "diff.c": [ + "ex/v1.7.2/diff.html#git_tree_free-19", + "ex/v1.7.2/diff.html#git_tree_free-20" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_tree_free-83", + "ex/v1.7.2/general.html#git_tree_free-84" + ], + "init.c": [ + "ex/v1.7.2/init.html#git_tree_free-13" + ], + "log.c": [ + "ex/v1.7.2/log.html#git_tree_free-55", + "ex/v1.7.2/log.html#git_tree_free-56", + "ex/v1.7.2/log.html#git_tree_free-57", + "ex/v1.7.2/log.html#git_tree_free-58", + "ex/v1.7.2/log.html#git_tree_free-59" + ] + } + }, + "git_tree_id": { + "type": "function", + "file": "git2/tree.h", + "line": 71, + "lineto": 71, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + } + ], + "argline": "const git_tree *tree", + "sig": "const git_tree *", + "return": { + "type": "const git_oid *", + "comment": " object identity for the tree." + }, + "description": "

Get the id of a tree.

\n", + "comments": "", + "group": "tree" + }, + "git_tree_owner": { + "type": "function", + "file": "git2/tree.h", + "line": 79, + "lineto": 79, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "A previously loaded tree." + } + ], + "argline": "const git_tree *tree", + "sig": "const git_tree *", + "return": { + "type": "git_repository *", + "comment": " Repository that contains this tree." + }, + "description": "

Get the repository that contains the tree.

\n", + "comments": "", + "group": "tree" + }, + "git_tree_entrycount": { + "type": "function", + "file": "git2/tree.h", + "line": 87, + "lineto": 87, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + } + ], + "argline": "const git_tree *tree", + "sig": "const git_tree *", + "return": { + "type": "size_t", + "comment": " the number of entries in the tree" + }, + "description": "

Get the number of entries listed in a tree

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tree_entrycount-37" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_tree_entrycount-85" + ] + } + }, + "git_tree_entry_byname": { + "type": "function", + "file": "git2/tree.h", + "line": 99, + "lineto": 100, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + }, + { + "name": "filename", + "type": "const char *", + "comment": "the filename of the desired entry" + } + ], + "argline": "const git_tree *tree, const char *filename", + "sig": "const git_tree *::const char *", + "return": { + "type": "const git_tree_entry *", + "comment": " the tree entry; NULL if not found" + }, + "description": "

Lookup a tree entry by its filename

\n", + "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", + "group": "tree", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_tree_entry_byname-86" + ] + } + }, + "git_tree_entry_byindex": { + "type": "function", + "file": "git2/tree.h", + "line": 112, + "lineto": 113, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + }, + { + "name": "idx", + "type": "size_t", + "comment": "the position in the entry list" + } + ], + "argline": "const git_tree *tree, size_t idx", + "sig": "const git_tree *::size_t", + "return": { + "type": "const git_tree_entry *", + "comment": " the tree entry; NULL if not found" + }, + "description": "

Lookup a tree entry by its position in the tree

\n", + "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", + "group": "tree", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tree_entry_byindex-38" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_tree_entry_byindex-87" + ] + } + }, + "git_tree_entry_byid": { + "type": "function", + "file": "git2/tree.h", + "line": 127, + "lineto": 128, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the sha being looked for" + } + ], + "argline": "const git_tree *tree, const git_oid *id", + "sig": "const git_tree *::const git_oid *", + "return": { + "type": "const git_tree_entry *", + "comment": " the tree entry; NULL if not found" + }, + "description": "

Lookup a tree entry by SHA value.

\n", + "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n\n

Warning: this must examine every entry in the tree, so it is not fast.

\n", + "group": "tree" + }, + "git_tree_entry_bypath": { + "type": "function", + "file": "git2/tree.h", + "line": 142, + "lineto": 145, + "args": [ + { + "name": "out", + "type": "git_tree_entry **", + "comment": "Pointer where to store the tree entry" + }, + { + "name": "root", + "type": "const git_tree *", + "comment": "Previously loaded tree which is the root of the relative path" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to the contained entry" + } + ], + "argline": "git_tree_entry **out, const git_tree *root, const char *path", + "sig": "git_tree_entry **::const git_tree *::const char *", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND if the path does not exist" + }, + "description": "

Retrieve a tree entry contained in a tree or in any of its subtrees,\n given its relative path.

\n", + "comments": "

Unlike the other lookup functions, the returned tree entry is owned by the user and must be freed explicitly with git_tree_entry_free().

\n", + "group": "tree" + }, + "git_tree_entry_dup": { + "type": "function", + "file": "git2/tree.h", + "line": 157, + "lineto": 157, + "args": [ + { + "name": "dest", + "type": "git_tree_entry **", + "comment": "pointer where to store the copy" + }, + { + "name": "source", + "type": "const git_tree_entry *", + "comment": "tree entry to duplicate" + } + ], + "argline": "git_tree_entry **dest, const git_tree_entry *source", + "sig": "git_tree_entry **::const git_tree_entry *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Duplicate a tree entry

\n", + "comments": "

Create a copy of a tree entry. The returned copy is owned by the user, and must be freed explicitly with git_tree_entry_free().

\n", + "group": "tree" + }, + "git_tree_entry_free": { + "type": "function", + "file": "git2/tree.h", + "line": 168, + "lineto": 168, + "args": [ + { + "name": "entry", + "type": "git_tree_entry *", + "comment": "The entry to free" + } + ], + "argline": "git_tree_entry *entry", + "sig": "git_tree_entry *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a user-owned tree entry

\n", + "comments": "

IMPORTANT: This function is only needed for tree entries owned by the user, such as the ones returned by git_tree_entry_dup() or git_tree_entry_bypath().

\n", + "group": "tree" + }, + "git_tree_entry_name": { + "type": "function", + "file": "git2/tree.h", + "line": 176, + "lineto": 176, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "const char *", + "comment": " the name of the file" + }, + "description": "

Get the filename of a tree entry

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tree_entry_name-39" + ], + "general.c": [ + "ex/v1.7.2/general.html#git_tree_entry_name-88", + "ex/v1.7.2/general.html#git_tree_entry_name-89" + ] + } + }, + "git_tree_entry_id": { + "type": "function", + "file": "git2/tree.h", + "line": 184, + "lineto": 184, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "const git_oid *", + "comment": " the oid of the object" + }, + "description": "

Get the id of the object pointed by the entry

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tree_entry_id-40" + ] + } + }, + "git_tree_entry_type": { + "type": "function", + "file": "git2/tree.h", + "line": 192, + "lineto": 192, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "git_object_t", + "comment": " the type of the pointed object" + }, + "description": "

Get the type of the object pointed by the entry

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tree_entry_type-41" + ] + } + }, + "git_tree_entry_filemode": { + "type": "function", + "file": "git2/tree.h", + "line": 200, + "lineto": 200, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "git_filemode_t", + "comment": " filemode as an integer" + }, + "description": "

Get the UNIX file attributes of a tree entry

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": [ + "ex/v1.7.2/cat-file.html#git_tree_entry_filemode-42" + ] + } + }, + "git_tree_entry_filemode_raw": { + "type": "function", + "file": "git2/tree.h", + "line": 212, + "lineto": 212, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "git_filemode_t", + "comment": " filemode as an integer" + }, + "description": "

Get the raw UNIX file attributes of a tree entry

\n", + "comments": "

This function does not perform any normalization and is only useful if you need to be able to recreate the original tree object.

\n", + "group": "tree" + }, + "git_tree_entry_cmp": { + "type": "function", + "file": "git2/tree.h", + "line": 220, + "lineto": 220, + "args": [ + { + "name": "e1", + "type": "const git_tree_entry *", + "comment": "first tree entry" + }, + { + "name": "e2", + "type": "const git_tree_entry *", + "comment": "second tree entry" + } + ], + "argline": "const git_tree_entry *e1, const git_tree_entry *e2", + "sig": "const git_tree_entry *::const git_tree_entry *", + "return": { + "type": "int", + "comment": " \n<\n0 if e1 is before e2, 0 if e1 == e2, >0 if e1 is after e2" + }, + "description": "

Compare two tree entries

\n", + "comments": "", + "group": "tree" + }, + "git_tree_entry_to_object": { + "type": "function", + "file": "git2/tree.h", + "line": 232, + "lineto": 235, + "args": [ + { + "name": "object_out", + "type": "git_object **", + "comment": "pointer to the converted object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to lookup the pointed object" + }, + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "git_object **object_out, git_repository *repo, const git_tree_entry *entry", + "sig": "git_object **::git_repository *::const git_tree_entry *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Convert a tree entry to the git_object it points to.

\n", + "comments": "

You must call git_object_free() on the object when you are done with it.

\n", + "group": "tree", + "examples": { + "general.c": [ + "ex/v1.7.2/general.html#git_tree_entry_to_object-90" + ] + } + }, + "git_treebuilder_new": { + "type": "function", + "file": "git2/tree.h", + "line": 254, + "lineto": 255, + "args": [ + { + "name": "out", + "type": "git_treebuilder **", + "comment": "Pointer where to store the tree builder" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository in which to store the object" + }, + { + "name": "source", + "type": "const git_tree *", + "comment": "Source tree to initialize the builder (optional)" + } + ], + "argline": "git_treebuilder **out, git_repository *repo, const git_tree *source", + "sig": "git_treebuilder **::git_repository *::const git_tree *", + "return": { + "type": "int", + "comment": " 0 on success; error code otherwise" + }, + "description": "

Create a new tree builder.

\n", + "comments": "

The tree builder can be used to create or modify trees in memory and write them as tree objects to the database.

\n\n

If the source parameter is not NULL, the tree builder will be initialized with the entries of the given tree.

\n\n

If the source parameter is NULL, the tree builder will start with no entries and will have to be filled manually.

\n", + "group": "treebuilder" + }, + "git_treebuilder_clear": { + "type": "function", + "file": "git2/tree.h", + "line": 263, + "lineto": 263, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Builder to clear" + } + ], + "argline": "git_treebuilder *bld", + "sig": "git_treebuilder *", + "return": { + "type": "int", + "comment": " 0 on success; error code otherwise" + }, + "description": "

Clear all the entries in the builder

\n", + "comments": "", + "group": "treebuilder" + }, + "git_treebuilder_entrycount": { + "type": "function", + "file": "git2/tree.h", + "line": 271, + "lineto": 271, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "a previously loaded treebuilder." + } + ], + "argline": "git_treebuilder *bld", + "sig": "git_treebuilder *", + "return": { + "type": "size_t", + "comment": " the number of entries in the treebuilder" + }, + "description": "

Get the number of entries listed in a treebuilder

\n", + "comments": "", + "group": "treebuilder" + }, + "git_treebuilder_free": { + "type": "function", + "file": "git2/tree.h", + "line": 282, + "lineto": 282, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Builder to free" + } + ], + "argline": "git_treebuilder *bld", + "sig": "git_treebuilder *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a tree builder

\n", + "comments": "

This will clear all the entries and free to builder. Failing to free the builder after you're done using it will result in a memory leak

\n", + "group": "treebuilder" + }, + "git_treebuilder_get": { + "type": "function", + "file": "git2/tree.h", + "line": 294, + "lineto": 295, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder" + }, + { + "name": "filename", + "type": "const char *", + "comment": "Name of the entry" + } + ], + "argline": "git_treebuilder *bld, const char *filename", + "sig": "git_treebuilder *::const char *", + "return": { + "type": "const git_tree_entry *", + "comment": " pointer to the entry; NULL if not found" + }, + "description": "

Get an entry from the builder from its filename

\n", + "comments": "

The returned entry is owned by the builder and should not be freed manually.

\n", + "group": "treebuilder" + }, + "git_treebuilder_insert": { + "type": "function", + "file": "git2/tree.h", + "line": 325, + "lineto": 330, + "args": [ + { + "name": "out", + "type": "const git_tree_entry **", + "comment": "Pointer to store the entry (optional)" + }, + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder" + }, + { + "name": "filename", + "type": "const char *", + "comment": "Filename of the entry" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "SHA1 oid of the entry" + }, + { + "name": "filemode", + "type": "git_filemode_t", + "comment": "Folder attributes of the entry. This parameter must\n\t\t\tbe valued with one of the following entries: 0040000, 0100644,\n\t\t\t0100755, 0120000 or 0160000." + } + ], + "argline": "const git_tree_entry **out, git_treebuilder *bld, const char *filename, const git_oid *id, git_filemode_t filemode", + "sig": "const git_tree_entry **::git_treebuilder *::const char *::const git_oid *::git_filemode_t", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add or update an entry to the builder

\n", + "comments": "

Insert a new entry for filename in the builder with the given attributes.

\n\n

If an entry named filename already exists, its attributes will be updated with the given ones.

\n\n

The optional pointer out can be used to retrieve a pointer to the newly created/updated entry. Pass NULL if you do not need it. The pointer may not be valid past the next operation in this builder. Duplicate the entry if you want to keep it.

\n\n

By default the entry that you are inserting will be checked for validity; that it exists in the object database and is of the correct type. If you do not want this behavior, set the GIT_OPT_ENABLE_STRICT_OBJECT_CREATION library option to false.

\n", + "group": "treebuilder" + }, + "git_treebuilder_remove": { + "type": "function", + "file": "git2/tree.h", + "line": 339, + "lineto": 340, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder" + }, + { + "name": "filename", + "type": "const char *", + "comment": "Filename of the entry to remove" + } + ], + "argline": "git_treebuilder *bld, const char *filename", + "sig": "git_treebuilder *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Remove an entry from the builder by its filename

\n", + "comments": "", + "group": "treebuilder" + }, + "git_treebuilder_filter": { + "type": "function", + "file": "git2/tree.h", + "line": 364, + "lineto": 367, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder" + }, + { + "name": "filter", + "type": "git_treebuilder_filter_cb", + "comment": "Callback to filter entries" + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra data to pass to filter callback" + } + ], + "argline": "git_treebuilder *bld, git_treebuilder_filter_cb filter, void *payload", + "sig": "git_treebuilder *::git_treebuilder_filter_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Selectively remove entries in the tree

\n", + "comments": "

The filter callback will be called for each entry in the tree with a pointer to the entry and the provided payload; if the callback returns non-zero, the entry will be filtered (removed from the builder).

\n", + "group": "treebuilder" + }, + "git_treebuilder_write": { + "type": "function", + "file": "git2/tree.h", + "line": 379, + "lineto": 380, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "Pointer to store the OID of the newly written tree" + }, + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder to write" + } + ], + "argline": "git_oid *id, git_treebuilder *bld", + "sig": "git_oid *::git_treebuilder *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Write the contents of the tree builder as a tree object

\n", + "comments": "

The tree builder will be written to the given repo, and its identifying SHA1 hash will be stored in the id pointer.

\n", + "group": "treebuilder" + }, + "git_tree_walk": { + "type": "function", + "file": "git2/tree.h", + "line": 409, + "lineto": 413, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "The tree to walk" + }, + { + "name": "mode", + "type": "git_treewalk_mode", + "comment": "Traversal mode (pre or post-order)" + }, + { + "name": "callback", + "type": "git_treewalk_cb", + "comment": "Function to call on each tree entry" + }, + { + "name": "payload", + "type": "void *", + "comment": "Opaque pointer to be passed on each callback" + } + ], + "argline": "const git_tree *tree, git_treewalk_mode mode, git_treewalk_cb callback, void *payload", + "sig": "const git_tree *::git_treewalk_mode::git_treewalk_cb::void *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Traverse the entries in a tree and its subtrees in post or pre order.

\n", + "comments": "

The entries will be traversed in the specified order, children subtrees will be automatically loaded as required, and the callback will be called once per entry with the current (relative) root for the entry and the entry data itself.

\n\n

If the callback returns a positive value, the passed entry will be skipped on the traversal (in pre mode). A negative value stops the walk.

\n", + "group": "tree" + }, + "git_tree_dup": { + "type": "function", + "file": "git2/tree.h", + "line": 423, + "lineto": 423, + "args": [ + { + "name": "out", + "type": "git_tree **", + "comment": "Pointer to store the copy of the tree" + }, + { + "name": "source", + "type": "git_tree *", + "comment": "Original tree to copy" + } + ], + "argline": "git_tree **out, git_tree *source", + "sig": "git_tree **::git_tree *", + "return": { + "type": "int", + "comment": " 0" + }, + "description": "

Create an in-memory copy of a tree. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "tree" + }, + "git_tree_create_updated": { + "type": "function", + "file": "git2/tree.h", + "line": 470, + "lineto": 470, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "id of the new tree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to create the tree, must be the\n same as for `baseline`" + }, + { + "name": "baseline", + "type": "git_tree *", + "comment": "the tree to base these changes on" + }, + { + "name": "nupdates", + "type": "size_t", + "comment": "the number of elements in the update list" + }, + { + "name": "updates", + "type": "const git_tree_update *", + "comment": "the list of updates to perform" + } + ], + "argline": "git_oid *out, git_repository *repo, git_tree *baseline, size_t nupdates, const git_tree_update *updates", + "sig": "git_oid *::git_repository *::git_tree *::size_t::const git_tree_update *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Create a tree based on another one with the specified modifications

\n", + "comments": "

Given the baseline perform the changes described in the list of updates and create a new tree.

\n\n

This function is optimized for common file/directory addition, removal and replacement in trees. It is much more efficient than reading the tree into a git_index and modifying that, but in exchange it is not as flexible.

\n\n

Deleting and adding the same entry is undefined behaviour, changing a tree to a blob or viceversa is not supported.

\n", + "group": "tree" + }, + "git_worktree_list": { + "type": "function", + "file": "git2/worktree.h", + "line": 34, + "lineto": 34, + "args": [ + { + "name": "out", + "type": "git_strarray *", + "comment": "pointer to the array of working tree names" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when listing working trees" + } + ], + "argline": "git_strarray *out, git_repository *repo", + "sig": "git_strarray *::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

List names of linked working trees

\n", + "comments": "

The returned list should be released with git_strarray_free when no longer needed.

\n", + "group": "worktree" + }, + "git_worktree_lookup": { + "type": "function", + "file": "git2/worktree.h", + "line": 44, + "lineto": 44, + "args": [ + { + "name": "out", + "type": "git_worktree **", + "comment": "Output pointer to looked up worktree or `NULL`" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing worktrees" + }, + { + "name": "name", + "type": "const char *", + "comment": "Name of the working tree to look up" + } + ], + "argline": "git_worktree **out, git_repository *repo, const char *name", + "sig": "git_worktree **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Lookup a working tree by its name for a given repository

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_open_from_repository": { + "type": "function", + "file": "git2/worktree.h", + "line": 57, + "lineto": 57, + "args": [ + { + "name": "out", + "type": "git_worktree **", + "comment": "Out-pointer for the newly allocated worktree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository to look up worktree for" + } + ], + "argline": "git_worktree **out, git_repository *repo", + "sig": "git_worktree **::git_repository *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Open a worktree of a given repository

\n", + "comments": "

If a repository is not the main tree but a worktree, this function will look up the worktree inside the parent repository and create a new git_worktree structure.

\n", + "group": "worktree" + }, + "git_worktree_free": { + "type": "function", + "file": "git2/worktree.h", + "line": 64, + "lineto": 64, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "worktree handle to close. If NULL nothing occurs." + } + ], + "argline": "git_worktree *wt", + "sig": "git_worktree *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Free a previously allocated worktree

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_validate": { + "type": "function", + "file": "git2/worktree.h", + "line": 76, + "lineto": 76, + "args": [ + { + "name": "wt", + "type": "const git_worktree *", + "comment": "Worktree to check" + } + ], + "argline": "const git_worktree *wt", + "sig": "const git_worktree *", + "return": { + "type": "int", + "comment": " 0 when worktree is valid, error-code otherwise" + }, + "description": "

Check if worktree is valid

\n", + "comments": "

A valid worktree requires both the git data structures inside the linked parent repository and the linked working copy to be present.

\n", + "group": "worktree" + }, + "git_worktree_add_options_init": { + "type": "function", + "file": "git2/worktree.h", + "line": 110, + "lineto": 111, + "args": [ + { + "name": "opts", + "type": "git_worktree_add_options *", + "comment": "The `git_worktree_add_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_WORKTREE_ADD_OPTIONS_VERSION`." + } + ], + "argline": "git_worktree_add_options *opts, unsigned int version", + "sig": "git_worktree_add_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_worktree_add_options structure

\n", + "comments": "

Initializes a git_worktree_add_options with default values. Equivalent to creating an instance with GIT_WORKTREE_ADD_OPTIONS_INIT.

\n", + "group": "worktree" + }, + "git_worktree_add": { + "type": "function", + "file": "git2/worktree.h", + "line": 127, + "lineto": 129, + "args": [ + { + "name": "out", + "type": "git_worktree **", + "comment": "Output pointer containing new working tree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository to create working tree for" + }, + { + "name": "name", + "type": "const char *", + "comment": "Name of the working tree" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to create working tree at" + }, + { + "name": "opts", + "type": "const git_worktree_add_options *", + "comment": "Options to modify default behavior. May be NULL" + } + ], + "argline": "git_worktree **out, git_repository *repo, const char *name, const char *path, const git_worktree_add_options *opts", + "sig": "git_worktree **::git_repository *::const char *::const char *::const git_worktree_add_options *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Add a new working tree

\n", + "comments": "

Add a new working tree for the repository, that is create the required data structures inside the repository and check out the current HEAD at path

\n", + "group": "worktree" + }, + "git_worktree_lock": { + "type": "function", + "file": "git2/worktree.h", + "line": 141, + "lineto": 141, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "Worktree to lock" + }, + { + "name": "reason", + "type": "const char *", + "comment": "Reason why the working tree is being locked" + } + ], + "argline": "git_worktree *wt, const char *reason", + "sig": "git_worktree *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero otherwise" + }, + "description": "

Lock worktree if not already locked

\n", + "comments": "

Lock a worktree, optionally specifying a reason why the linked working tree is being locked.

\n", + "group": "worktree" + }, + "git_worktree_unlock": { + "type": "function", + "file": "git2/worktree.h", + "line": 150, + "lineto": 150, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "Worktree to unlock" + } + ], + "argline": "git_worktree *wt", + "sig": "git_worktree *", + "return": { + "type": "int", + "comment": " 0 on success, 1 if worktree was not locked, error-code\n otherwise" + }, + "description": "

Unlock a locked worktree

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_is_locked": { + "type": "function", + "file": "git2/worktree.h", + "line": 164, + "lineto": 164, + "args": [ + { + "name": "reason", + "type": "git_buf *", + "comment": "Buffer to store reason in. If NULL no reason is stored." + }, + { + "name": "wt", + "type": "const git_worktree *", + "comment": "Worktree to check" + } + ], + "argline": "git_buf *reason, const git_worktree *wt", + "sig": "git_buf *::const git_worktree *", + "return": { + "type": "int", + "comment": " 0 when the working tree not locked, a value greater\n than zero if it is locked, less than zero if there was an\n error" + }, + "description": "

Check if worktree is locked

\n", + "comments": "

A worktree may be locked if the linked working tree is stored on a portable device which is not available.

\n", + "group": "worktree" + }, + "git_worktree_name": { + "type": "function", + "file": "git2/worktree.h", + "line": 173, + "lineto": 173, + "args": [ + { + "name": "wt", + "type": "const git_worktree *", + "comment": "Worktree to get the name for" + } + ], + "argline": "const git_worktree *wt", + "sig": "const git_worktree *", + "return": { + "type": "const char *", + "comment": " The worktree's name. The pointer returned is valid for the\n lifetime of the git_worktree" + }, + "description": "

Retrieve the name of the worktree

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_path": { + "type": "function", + "file": "git2/worktree.h", + "line": 182, + "lineto": 182, + "args": [ + { + "name": "wt", + "type": "const git_worktree *", + "comment": "Worktree to get the path for" + } + ], + "argline": "const git_worktree *wt", + "sig": "const git_worktree *", + "return": { + "type": "const char *", + "comment": " The worktree's filesystem path. The pointer returned\n is valid for the lifetime of the git_worktree." + }, + "description": "

Retrieve the filesystem path for the worktree

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_prune_options_init": { + "type": "function", + "file": "git2/worktree.h", + "line": 224, + "lineto": 226, + "args": [ + { + "name": "opts", + "type": "git_worktree_prune_options *", + "comment": "The `git_worktree_prune_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_WORKTREE_PRUNE_OPTIONS_VERSION`." + } + ], + "argline": "git_worktree_prune_options *opts, unsigned int version", + "sig": "git_worktree_prune_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_worktree_prune_options structure

\n", + "comments": "

Initializes a git_worktree_prune_options with default values. Equivalent to creating an instance with GIT_WORKTREE_PRUNE_OPTIONS_INIT.

\n", + "group": "worktree" + }, + "git_worktree_is_prunable": { + "type": "function", + "file": "git2/worktree.h", + "line": 248, + "lineto": 249, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "Worktree to check." + }, + { + "name": "opts", + "type": "git_worktree_prune_options *", + "comment": "The prunable options." + } + ], + "argline": "git_worktree *wt, git_worktree_prune_options *opts", + "sig": "git_worktree *::git_worktree_prune_options *", + "return": { + "type": "int", + "comment": " 1 if the worktree is prunable, 0 otherwise, or an error code." + }, + "description": "

Is the worktree prunable with the given options?

\n", + "comments": "

A worktree is not prunable in the following scenarios:

\n\n
    \n
  • the worktree is linking to a valid on-disk worktree. The valid member will cause this check to be ignored. - the worktree is locked. The locked flag will cause this check to be ignored.
  • \n
\n\n

If the worktree is not valid and not locked or if the above flags have been passed in, this function will return a positive value. If the worktree is not prunable, an error message will be set (visible in giterr_last) with details about why.

\n", + "group": "worktree" + }, + "git_worktree_prune": { + "type": "function", + "file": "git2/worktree.h", + "line": 263, + "lineto": 264, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "Worktree to prune" + }, + { + "name": "opts", + "type": "git_worktree_prune_options *", + "comment": "Specifies which checks to override. See\n `git_worktree_is_prunable`. May be NULL" + } + ], + "argline": "git_worktree *wt, git_worktree_prune_options *opts", + "sig": "git_worktree *::git_worktree_prune_options *", + "return": { + "type": "int", + "comment": " 0 or an error code" + }, + "description": "

Prune working tree

\n", + "comments": "

Prune the working tree, that is remove the git data structures on disk. The repository will only be pruned of git_worktree_is_prunable succeeds.

\n", + "group": "worktree" + } + }, + "callbacks": { + "git_apply_delta_cb": { + "type": "callback", + "file": "git2/apply.h", + "line": 38, + "lineto": 40, + "args": [ + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": "The delta to be applied" + }, + { + "name": "payload", + "type": "void *", + "comment": "User-specified payload" + } + ], + "argline": "const git_diff_delta *delta, void *payload", + "sig": "const git_diff_delta *::void *", + "return": { + "type": "int", + "comment": " 0 if the delta is applied, \n<\n 0 if the apply process will be aborted\n\tor > 0 if the delta will not be applied." + }, + "description": "

When applying a patch, callback that will be made per delta (file).

\n", + "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the delta will not be applied, but the apply process continues - returns 0, the delta is applied, and the apply process continues.

\n" + }, + "git_apply_hunk_cb": { + "type": "callback", + "file": "git2/apply.h", + "line": 56, + "lineto": 58, + "args": [ + { + "name": "hunk", + "type": "const git_diff_hunk *", + "comment": "The hunk to be applied" + }, + { + "name": "payload", + "type": "void *", + "comment": "User-specified payload" + } + ], + "argline": "const git_diff_hunk *hunk, void *payload", + "sig": "const git_diff_hunk *::void *", + "return": { + "type": "int", + "comment": " 0 if the hunk is applied, \n<\n 0 if the apply process will be aborted\n\tor > 0 if the hunk will not be applied." + }, + "description": "

When applying a patch, callback that will be made per hunk.

\n", + "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the hunk will not be applied, but the apply process continues - returns 0, the hunk is applied, and the apply process continues.

\n" + }, + "git_attr_foreach_cb": { + "type": "callback", + "file": "git2/attr.h", + "line": 291, + "lineto": 291, + "args": [ + { + "name": "name", + "type": "const char *", + "comment": "The attribute name." + }, + { + "name": "value", + "type": "const char *", + "comment": "The attribute value. May be NULL if the attribute is explicitly\n set to UNSPECIFIED using the '!' sign." + }, + { + "name": "payload", + "type": "void *", + "comment": "A user-specified pointer." + } + ], + "argline": "const char *name, const char *value, void *payload", + "sig": "const char *::const char *::void *", + "return": { + "type": "int", + "comment": " 0 to continue looping, non-zero to stop. This value will be returned\n from git_attr_foreach." + }, + "description": "

The callback used with git_attr_foreach.

\n", + "comments": "

This callback will be invoked only once per attribute name, even if there are multiple rules for a given file. The highest priority rule will be used.

\n" + }, + "git_transport_certificate_check_cb": { + "type": "callback", + "file": "git2/cert.h", + "line": 72, + "lineto": 72, + "args": [ + { + "name": "cert", + "type": "git_cert *", + "comment": "The host certificate" + }, + { + "name": "valid", + "type": "int", + "comment": "Whether the libgit2 checks (OpenSSL or WinHTTP) think\n this certificate is valid" + }, + { + "name": "host", + "type": "const char *", + "comment": "Hostname of the host libgit2 connected to" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "git_cert *cert, int valid, const char *host, void *payload", + "sig": "git_cert *::int::const char *::void *", + "return": { + "type": "int", + "comment": " 0 to proceed with the connection, \n<\n 0 to fail the connection\n or > 0 to indicate that the callback refused to act and that\n the existing validity determination should be honored" + }, + "description": "

Callback for the user's custom certificate checks.

\n", "comments": "" - }, - { - "type": "git_proxy_t", - "name": "type", - "comments": " The type of proxy to use, by URL, auto-detect." - }, - { - "type": "const char *", - "name": "url", - "comments": " The URL of the proxy." - }, - { - "type": "git_credential_acquire_cb", - "name": "credentials", - "comments": " This will be called if the remote host requires\n authentication in order to connect to it.\n\n Returning GIT_PASSTHROUGH will make libgit2 behave as\n though this field isn't set." - }, - { - "type": "git_transport_certificate_check_cb", - "name": "certificate_check", - "comments": " If cert verification fails, this will be called to let the\n user make the final decision of whether to allow the\n connection to proceed. Returns 0 to allow the connection\n or a negative value to indicate an error." - }, - { - "type": "void *", - "name": "payload", - "comments": " Payload to be provided to the credentials and certificate\n check callbacks." - } - ], - "used": { - "returns": [], - "needs": [ - "git_proxy_options_init", - "git_remote_connect" - ] - } - } - ], - [ - "git_proxy_t", - { - "decl": [ - "GIT_PROXY_NONE", - "GIT_PROXY_AUTO", - "GIT_PROXY_SPECIFIED" - ], - "type": "enum", - "file": "git2/proxy.h", - "line": 20, - "lineto": 36, - "block": "GIT_PROXY_NONE\nGIT_PROXY_AUTO\nGIT_PROXY_SPECIFIED", - "tdef": "typedef", - "description": " The type of proxy to use.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_PROXY_NONE", - "comments": "

Do not attempt to connect through a proxy

\n\n

If built against libcurl, it itself may attempt to connect\n to a proxy if the environment variables specify it.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_PROXY_AUTO", - "comments": "

Try to auto-detect the proxy from the git configuration.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_PROXY_SPECIFIED", - "comments": "

Connect via the URL given in the options

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_push", - { - "decl": "git_push", - "type": "struct", - "value": "git_push", - "file": "git2/types.h", - "line": 253, - "lineto": 253, - "tdef": "typedef", - "description": " Preparation for a push operation. Can be used to configure what to\n push and the level of parallelism of the packfile builder.", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_push_negotiation", - "git_push_options_init", - "git_remote_push", - "git_remote_upload" - ] - } - } - ], - [ - "git_push_options", - { - "decl": [ - "unsigned int version", - "unsigned int pb_parallelism", - "git_remote_callbacks callbacks", - "git_proxy_options proxy_opts", - "git_strarray custom_headers" - ], - "type": "struct", - "value": "git_push_options", - "file": "git2/remote.h", - "line": 765, - "lineto": 792, - "block": "unsigned int version\nunsigned int pb_parallelism\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_strarray custom_headers", - "tdef": "typedef", - "description": " Controls the behavior of a git_push object.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_checkout_notify_cb": { + "type": "callback", + "file": "git2/checkout.h", + "line": 255, + "lineto": 261, + "args": [ + { + "name": "why", + "type": "git_checkout_notify_t", + "comment": null + }, + { + "name": "path", + "type": "const char *", + "comment": null + }, + { + "name": "baseline", + "type": "const git_diff_file *", + "comment": null + }, + { + "name": "target", + "type": "const git_diff_file *", + "comment": null + }, + { + "name": "workdir", + "type": "const git_diff_file *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "git_checkout_notify_t why, const char *path, const git_diff_file *baseline, const git_diff_file *target, const git_diff_file *workdir, void *payload", + "sig": "git_checkout_notify_t::const char *::const git_diff_file *::const git_diff_file *::const git_diff_file *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Checkout notification callback function

\n", "comments": "" - }, - { - "type": "unsigned int", - "name": "pb_parallelism", - "comments": " If the transport being used to push to the remote requires the creation\n of a pack file, this controls the number of worker threads used by\n the packbuilder when creating that pack file to be sent to the remote.\n\n If set to 0, the packbuilder will auto-detect the number of threads\n to create. The default value is 1." - }, - { - "type": "git_remote_callbacks", - "name": "callbacks", - "comments": " Callbacks to use for this push operation" - }, - { - "type": "git_proxy_options", - "name": "proxy_opts", - "comments": " Proxy options to use, by default no proxy is used." - }, - { - "type": "git_strarray", - "name": "custom_headers", - "comments": " Extra headers for this push operation" - } - ], - "used": { - "returns": [], - "needs": [ - "git_push_options_init", - "git_remote_push", - "git_remote_upload" - ] - } - } - ], - [ - "git_push_update", - { - "decl": [ - "char * src_refname", - "char * dst_refname", - "git_oid src", - "git_oid dst" - ], - "type": "struct", - "value": "git_push_update", - "file": "git2/remote.h", - "line": 459, - "lineto": 476, - "block": "char * src_refname\nchar * dst_refname\ngit_oid src\ngit_oid dst", - "tdef": "typedef", - "description": " Represents an update which will be performed on the remote during push", - "comments": "", - "fields": [ - { - "type": "char *", - "name": "src_refname", - "comments": " The source name of the reference" - }, - { - "type": "char *", - "name": "dst_refname", - "comments": " The name of the reference to update on the server" - }, - { - "type": "git_oid", - "name": "src", - "comments": " The current target of the reference" - }, - { - "type": "git_oid", - "name": "dst", - "comments": " The new target for the reference" - } - ], - "used": { - "returns": [], - "needs": [ - "git_push_negotiation" - ] - } - } - ], - [ - "git_rebase", - { - "decl": "git_rebase", - "type": "struct", - "value": "git_rebase", - "file": "git2/types.h", - "line": 204, - "lineto": 204, - "tdef": "typedef", - "description": " Representation of a rebase ", - "comments": "", - "used": { - "returns": [ - "git_rebase_operation_byindex" - ], - "needs": [ - "git_rebase_abort", - "git_rebase_commit", - "git_rebase_finish", - "git_rebase_free", - "git_rebase_init", - "git_rebase_inmemory_index", - "git_rebase_next", - "git_rebase_onto_id", - "git_rebase_onto_name", - "git_rebase_open", - "git_rebase_operation_byindex", - "git_rebase_operation_current", - "git_rebase_operation_entrycount", - "git_rebase_options_init", - "git_rebase_orig_head_id", - "git_rebase_orig_head_name" - ] - } - } - ], - [ - "git_rebase_operation", - { - "decl": [ - "git_rebase_operation_t type", - "const git_oid id", - "const char * exec" - ], - "type": "struct", - "value": "git_rebase_operation", - "file": "git2/rebase.h", - "line": 172, - "lineto": 187, - "block": "git_rebase_operation_t type\nconst git_oid id\nconst char * exec", - "tdef": "typedef", - "description": " A rebase operation", - "comments": "

Describes a single instruction/operation to be performed during the rebase.

\n", - "fields": [ - { - "type": "git_rebase_operation_t", - "name": "type", - "comments": " The type of rebase operation. " - }, - { - "type": "const git_oid", - "name": "id", - "comments": " The commit ID being cherry-picked. This will be populated for\n all operations except those of type `GIT_REBASE_OPERATION_EXEC`." - }, - { - "type": "const char *", - "name": "exec", - "comments": " The executable the user has requested be run. This will only\n be populated for operations of type `GIT_REBASE_OPERATION_EXEC`." - } - ], - "used": { - "returns": [ - "git_rebase_operation_byindex" - ], - "needs": [ - "git_rebase_next" - ] - } - } - ], - [ - "git_rebase_operation_t", - { - "decl": [ - "GIT_REBASE_OPERATION_PICK", - "GIT_REBASE_OPERATION_REWORD", - "GIT_REBASE_OPERATION_EDIT", - "GIT_REBASE_OPERATION_SQUASH", - "GIT_REBASE_OPERATION_FIXUP", - "GIT_REBASE_OPERATION_EXEC" - ], - "type": "enum", - "file": "git2/rebase.h", - "line": 120, - "lineto": 156, - "block": "GIT_REBASE_OPERATION_PICK\nGIT_REBASE_OPERATION_REWORD\nGIT_REBASE_OPERATION_EDIT\nGIT_REBASE_OPERATION_SQUASH\nGIT_REBASE_OPERATION_FIXUP\nGIT_REBASE_OPERATION_EXEC", - "tdef": "typedef", - "description": " Type of rebase operation in-progress after calling `git_rebase_next`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REBASE_OPERATION_PICK", - "comments": "

The given commit is to be cherry-picked. The client should commit\n the changes and continue if there are no conflicts.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_REWORD", - "comments": "

The given commit is to be cherry-picked, but the client should prompt\n the user to provide an updated commit message.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_EDIT", - "comments": "

The given commit is to be cherry-picked, but the client should stop\n to allow the user to edit the changes before committing them.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_SQUASH", - "comments": "

The given commit is to be squashed into the previous commit. The\n commit message will be merged with the previous message.

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_FIXUP", - "comments": "

The given commit is to be squashed into the previous commit. The\n commit message from this commit will be discarded.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_EXEC", - "comments": "

No commit will be cherry-picked. The client should run the given\n command and (if successful) continue.

\n", - "value": 5 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_rebase_options", - { - "decl": [ - "unsigned int version", - "int quiet", - "int inmemory", - "const char * rewrite_notes_ref", - "git_merge_options merge_options", - "git_checkout_options checkout_options", - "git_commit_create_cb commit_create_cb", - "int (*)(git_buf *, git_buf *, const char *, void *) signing_cb", - "void * payload" - ], - "type": "struct", - "value": "git_rebase_options", - "file": "git2/rebase.h", - "line": 32, - "lineto": 115, - "block": "unsigned int version\nint quiet\nint inmemory\nconst char * rewrite_notes_ref\ngit_merge_options merge_options\ngit_checkout_options checkout_options\ngit_commit_create_cb commit_create_cb\nint (*)(git_buf *, git_buf *, const char *, void *) signing_cb\nvoid * payload", - "tdef": "typedef", - "description": " Rebase options", - "comments": "

Use to tell the rebase machinery how to operate.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_checkout_progress_cb": { + "type": "callback", + "file": "git2/checkout.h", + "line": 264, + "lineto": 268, + "args": [ + { + "name": "path", + "type": "const char *", + "comment": null + }, + { + "name": "completed_steps", + "type": "size_t", + "comment": null + }, + { + "name": "total_steps", + "type": "size_t", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const char *path, size_t completed_steps, size_t total_steps, void *payload", + "sig": "const char *::size_t::size_t::void *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Checkout progress notification function

\n", "comments": "" - }, - { - "type": "int", - "name": "quiet", - "comments": " Used by `git_rebase_init`, this will instruct other clients working\n on this rebase that you want a quiet rebase experience, which they\n may choose to provide in an application-specific manner. This has no\n effect upon libgit2 directly, but is provided for interoperability\n between Git tools." - }, - { - "type": "int", - "name": "inmemory", - "comments": " Used by `git_rebase_init`, this will begin an in-memory rebase,\n which will allow callers to step through the rebase operations and\n commit the rebased changes, but will not rewind HEAD or update the\n repository to be in a rebasing state. This will not interfere with\n the working directory (if there is one)." - }, - { - "type": "const char *", - "name": "rewrite_notes_ref", - "comments": " Used by `git_rebase_finish`, this is the name of the notes reference\n used to rewrite notes for rebased commits when finishing the rebase;\n if NULL, the contents of the configuration option `notes.rewriteRef`\n is examined, unless the configuration option `notes.rewrite.rebase`\n is set to false. If `notes.rewriteRef` is also NULL, notes will\n not be rewritten." - }, - { - "type": "git_merge_options", - "name": "merge_options", - "comments": " Options to control how trees are merged during `git_rebase_next`." - }, - { - "type": "git_checkout_options", - "name": "checkout_options", - "comments": " Options to control how files are written during `git_rebase_init`,\n `git_rebase_next` and `git_rebase_abort`. Note that a minimum\n strategy of `GIT_CHECKOUT_SAFE` is defaulted in `init` and `next`,\n and a minimum strategy of `GIT_CHECKOUT_FORCE` is defaulted in\n `abort` to match git semantics." - }, - { - "type": "git_commit_create_cb", - "name": "commit_create_cb", - "comments": " Optional callback that allows users to override commit\n creation in `git_rebase_commit`. If specified, users can\n create their own commit and provide the commit ID, which\n may be useful for signing commits or otherwise customizing\n the commit creation.\n\n If this callback returns `GIT_PASSTHROUGH`, then\n `git_rebase_commit` will continue to create the commit." - }, - { - "type": "int (*)(git_buf *, git_buf *, const char *, void *)", - "name": "signing_cb", - "comments": " If provided, this will be called with the commit content, allowing\n a signature to be added to the rebase commit. Can be skipped with\n GIT_PASSTHROUGH. If GIT_PASSTHROUGH is returned, a commit will be made\n without a signature.\n\n This field is only used when performing git_rebase_commit.\n\n This callback is not invoked if a `git_commit_create_cb` is\n specified.\n\n This callback is deprecated; users should provide a\n creation callback as `commit_create_cb` that produces a\n commit buffer, signs it, and commits it." - }, - { - "type": "void *", - "name": "payload", - "comments": " This will be passed to each of the callbacks in this struct\n as the last parameter." - } - ], - "used": { - "returns": [], - "needs": [ - "git_rebase_init", - "git_rebase_open", - "git_rebase_options_init" - ] - } - } - ], - [ - "git_refdb", - { - "decl": "git_refdb", - "type": "struct", - "value": "git_refdb", - "file": "git2/types.h", - "line": 103, - "lineto": 103, - "tdef": "typedef", - "description": " An open refs database handle. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_refdb_compress", - "git_refdb_free", - "git_refdb_new", - "git_refdb_open", - "git_repository_refdb" - ] - } - } - ], - [ - "git_refdb_backend", - { - "decl": "git_refdb_backend", - "type": "struct", - "value": "git_refdb_backend", - "file": "git2/types.h", - "line": 106, - "lineto": 106, - "tdef": "typedef", - "description": " A custom backend for refs ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_reference", - { - "decl": "git_reference", - "type": "struct", - "value": "git_reference", - "file": "git2/types.h", - "line": 189, - "lineto": 189, - "tdef": "typedef", - "description": " In-memory representation of a reference. ", - "comments": "", - "used": { - "returns": [ - "git_reference_type" - ], - "needs": [ - "git_annotated_commit_from_ref", - "git_branch_create", - "git_branch_create_from_annotated", - "git_branch_delete", - "git_branch_is_checked_out", - "git_branch_is_head", - "git_branch_lookup", - "git_branch_move", - "git_branch_name", - "git_branch_next", - "git_branch_set_upstream", - "git_branch_upstream", - "git_merge_analysis_for_ref", - "git_reference_cmp", - "git_reference_create", - "git_reference_create_matching", - "git_reference_delete", - "git_reference_dup", - "git_reference_dwim", - "git_reference_foreach", - "git_reference_foreach_cb", - "git_reference_foreach_glob", - "git_reference_foreach_name", - "git_reference_free", - "git_reference_is_branch", - "git_reference_is_note", - "git_reference_is_remote", - "git_reference_is_tag", - "git_reference_iterator_free", - "git_reference_iterator_glob_new", - "git_reference_iterator_new", - "git_reference_lookup", - "git_reference_name", - "git_reference_next", - "git_reference_next_name", - "git_reference_owner", - "git_reference_peel", - "git_reference_rename", - "git_reference_resolve", - "git_reference_set_target", - "git_reference_shorthand", - "git_reference_symbolic_create", - "git_reference_symbolic_create_matching", - "git_reference_symbolic_set_target", - "git_reference_symbolic_target", - "git_reference_target", - "git_reference_target_peel", - "git_reference_type", - "git_repository_head", - "git_repository_head_for_worktree", - "git_revparse_ext" - ] - } - } - ], - [ - "git_reference_format_t", - { - "decl": [ - "GIT_REFERENCE_FORMAT_NORMAL", - "GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL", - "GIT_REFERENCE_FORMAT_REFSPEC_PATTERN", - "GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND" - ], - "type": "enum", - "file": "git2/refs.h", - "line": 661, - "lineto": 690, - "block": "GIT_REFERENCE_FORMAT_NORMAL\nGIT_REFERENCE_FORMAT_ALLOW_ONELEVEL\nGIT_REFERENCE_FORMAT_REFSPEC_PATTERN\nGIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", - "tdef": "typedef", - "description": " Normalization options for reference lookup", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REFERENCE_FORMAT_NORMAL", - "comments": "

No particular normalization.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL", - "comments": "

Control whether one-level refnames are accepted\n (i.e., refnames that do not contain multiple /-separated\n components). Those are expected to be written only using\n uppercase letters and underscore (FETCH_HEAD, ...)

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REFERENCE_FORMAT_REFSPEC_PATTERN", - "comments": "

Interpret the provided name as a reference pattern for a\n refspec (as used with remote repositories). If this option\n is enabled, the name is allowed to contain a single * (\n<star

\n\n
\n

)\n in place of a one full pathname component\n (e.g., foo/\n<star\n/bar but not foo/bar\n<star\n).

\n
\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", - "comments": "

Interpret the name as part of a refspec in shorthand form\n so the ONELEVEL naming rules aren't enforced and 'master'\n becomes a valid name.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_reference_iterator", - { - "decl": "git_reference_iterator", - "type": "struct", - "value": "git_reference_iterator", - "file": "git2/types.h", - "line": 192, - "lineto": 192, - "tdef": "typedef", - "description": " Iterator for references ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_reference_iterator_free", - "git_reference_iterator_glob_new", - "git_reference_iterator_new", - "git_reference_next", - "git_reference_next_name" - ] - } - } - ], - [ - "git_reference_t", - { - "decl": [ - "GIT_REFERENCE_INVALID", - "GIT_REFERENCE_DIRECT", - "GIT_REFERENCE_SYMBOLIC", - "GIT_REFERENCE_ALL" - ], - "type": "enum", - "file": "git2/types.h", - "line": 207, - "lineto": 212, - "block": "GIT_REFERENCE_INVALID\nGIT_REFERENCE_DIRECT\nGIT_REFERENCE_SYMBOLIC\nGIT_REFERENCE_ALL", - "tdef": "typedef", - "description": " Basic type of any Git reference. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REFERENCE_INVALID", - "comments": "

Invalid reference

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REFERENCE_DIRECT", - "comments": "

A reference that points at an object id

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REFERENCE_SYMBOLIC", - "comments": "

A reference that points at another reference

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REFERENCE_ALL", - "comments": "", - "value": 3 - } - ], - "used": { - "returns": [ - "git_reference_type" - ], - "needs": [] - } - } - ], - [ - "git_reflog", - { - "decl": "git_reflog", - "type": "struct", - "value": "git_reflog", - "file": "git2/types.h", - "line": 166, - "lineto": 166, - "tdef": "typedef", - "description": " Representation of a reference log ", - "comments": "", - "used": { - "returns": [ - "git_reflog_entry_byindex" - ], - "needs": [ - "git_reflog_append", - "git_reflog_drop", - "git_reflog_entry_byindex", - "git_reflog_entry_committer", - "git_reflog_entry_id_new", - "git_reflog_entry_id_old", - "git_reflog_entry_message", - "git_reflog_entrycount", - "git_reflog_free", - "git_reflog_read", - "git_reflog_write", - "git_transaction_set_reflog" - ] - } - } - ], - [ - "git_reflog_entry", - { - "decl": "git_reflog_entry", - "type": "struct", - "value": "git_reflog_entry", - "file": "git2/types.h", - "line": 163, - "lineto": 163, - "tdef": "typedef", - "description": " Representation of a reference log entry ", - "comments": "", - "used": { - "returns": [ - "git_reflog_entry_byindex" - ], - "needs": [ - "git_reflog_entry_committer", - "git_reflog_entry_id_new", - "git_reflog_entry_id_old", - "git_reflog_entry_message" - ] - } - } - ], - [ - "git_refspec", - { - "decl": "git_refspec", - "type": "struct", - "value": "git_refspec", - "file": "git2/types.h", - "line": 235, - "lineto": 235, - "tdef": "typedef", - "description": " A refspec specifies the mapping between remote and local reference\n names when fetch or pushing.", - "comments": "", - "used": { - "returns": [ - "git_remote_get_refspec" - ], - "needs": [ - "git_refspec_direction", - "git_refspec_dst", - "git_refspec_dst_matches", - "git_refspec_force", - "git_refspec_free", - "git_refspec_parse", - "git_refspec_rtransform", - "git_refspec_src", - "git_refspec_src_matches", - "git_refspec_string", - "git_refspec_transform" - ] - } - } - ], - [ - "git_remote", - { - "decl": "git_remote", - "type": "struct", - "value": "git_remote", - "file": "git2/types.h", - "line": 241, - "lineto": 241, - "tdef": "typedef", - "description": " Git's idea of a remote repository. A remote can be anonymous (in\n which case it does not have backing configuration entires).", - "comments": "", - "used": { - "returns": [ - "git_remote_autotag" - ], - "needs": [ - "git_headlist_cb", - "git_remote_autotag", - "git_remote_connect", - "git_remote_connected", - "git_remote_create", - "git_remote_create_anonymous", - "git_remote_create_cb", - "git_remote_create_detached", - "git_remote_create_options_init", - "git_remote_create_with_fetchspec", - "git_remote_create_with_opts", - "git_remote_default_branch", - "git_remote_disconnect", - "git_remote_download", - "git_remote_dup", - "git_remote_fetch", - "git_remote_free", - "git_remote_get_fetch_refspecs", - "git_remote_get_push_refspecs", - "git_remote_get_refspec", - "git_remote_init_callbacks", - "git_remote_lookup", - "git_remote_ls", - "git_remote_name", - "git_remote_owner", - "git_remote_prune", - "git_remote_prune_refs", - "git_remote_push", - "git_remote_pushurl", - "git_remote_ready_cb", - "git_remote_refspec_count", - "git_remote_set_autotag", - "git_remote_set_instance_pushurl", - "git_remote_set_instance_url", - "git_remote_stats", - "git_remote_stop", - "git_remote_update_tips", - "git_remote_upload", - "git_remote_url", - "git_transport_cb" - ] - } - } - ], - [ - "git_remote_autotag_option_t", - { - "decl": [ - "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED", - "GIT_REMOTE_DOWNLOAD_TAGS_AUTO", - "GIT_REMOTE_DOWNLOAD_TAGS_NONE", - "GIT_REMOTE_DOWNLOAD_TAGS_ALL" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 676, - "lineto": 694, - "block": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED\nGIT_REMOTE_DOWNLOAD_TAGS_AUTO\nGIT_REMOTE_DOWNLOAD_TAGS_NONE\nGIT_REMOTE_DOWNLOAD_TAGS_ALL", - "tdef": "typedef", - "description": " Automatic tag following option", - "comments": "

Lets us select the --tags option to use.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED", - "comments": "

Use the setting from the configuration.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REMOTE_DOWNLOAD_TAGS_AUTO", - "comments": "

Ask the server for tags pointing to objects we're already\n downloading.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REMOTE_DOWNLOAD_TAGS_NONE", - "comments": "

Don't ask for any tags beyond the refspecs.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REMOTE_DOWNLOAD_TAGS_ALL", - "comments": "

Ask for the all the tags.

\n", - "value": 3 - } - ], - "used": { - "returns": [ - "git_remote_autotag" - ], - "needs": [ - "git_remote_set_autotag", - "git_remote_update_tips" - ] - } - } - ], - [ - "git_remote_callbacks", - { - "decl": [ - "unsigned int version", - "git_transport_message_cb sideband_progress", - "int (*)(git_remote_completion_t, void *) completion", - "git_credential_acquire_cb credentials", - "git_transport_certificate_check_cb certificate_check", - "git_indexer_progress_cb transfer_progress", - "int (*)(const char *, const git_oid *, const git_oid *, void *) update_tips", - "git_packbuilder_progress pack_progress", - "git_push_transfer_progress_cb push_transfer_progress", - "git_push_update_reference_cb push_update_reference", - "git_push_negotiation push_negotiation", - "git_transport_cb transport", - "git_remote_ready_cb remote_ready", - "void * payload", - "git_url_resolve_cb resolve_url" - ], - "type": "struct", - "value": "git_remote_callbacks", - "file": "git2/remote.h", - "line": 537, - "lineto": 638, - "block": "unsigned int version\ngit_transport_message_cb sideband_progress\nint (*)(git_remote_completion_t, void *) completion\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\ngit_indexer_progress_cb transfer_progress\nint (*)(const char *, const git_oid *, const git_oid *, void *) update_tips\ngit_packbuilder_progress pack_progress\ngit_push_transfer_progress_cb push_transfer_progress\ngit_push_update_reference_cb push_update_reference\ngit_push_negotiation push_negotiation\ngit_transport_cb transport\ngit_remote_ready_cb remote_ready\nvoid * payload\ngit_url_resolve_cb resolve_url", - "tdef": null, - "description": " The callback settings structure", - "comments": "

Set the callbacks to be called by the remote when informing the user about the progress of the network operations.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " The version " - }, - { - "type": "git_transport_message_cb", - "name": "sideband_progress", - "comments": " Textual progress from the remote. Text send over the\n progress side-band will be passed to this function (this is\n the 'counting objects' output)." - }, - { - "type": "int (*)(git_remote_completion_t, void *)", - "name": "completion", + }, + "git_checkout_perfdata_cb": { + "type": "callback", + "file": "git2/checkout.h", + "line": 271, + "lineto": 273, + "args": [ + { + "name": "perfdata", + "type": "const git_checkout_perfdata *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_checkout_perfdata *perfdata, void *payload", + "sig": "const git_checkout_perfdata *::void *", + "return": { + "type": "void", + "comment": null + }, + "description": "

Checkout perfdata notification function

\n", "comments": "" - }, - { - "type": "git_credential_acquire_cb", - "name": "credentials", - "comments": " This will be called if the remote host requires\n authentication in order to connect to it.\n\n Returning GIT_PASSTHROUGH will make libgit2 behave as\n though this field isn't set." - }, - { - "type": "git_transport_certificate_check_cb", - "name": "certificate_check", - "comments": " If cert verification fails, this will be called to let the\n user make the final decision of whether to allow the\n connection to proceed. Returns 0 to allow the connection\n or a negative value to indicate an error." - }, - { - "type": "git_indexer_progress_cb", - "name": "transfer_progress", - "comments": " During the download of new data, this will be regularly\n called with the current count of progress done by the\n indexer." - }, - { - "type": "int (*)(const char *, const git_oid *, const git_oid *, void *)", - "name": "update_tips", + }, + "git_remote_create_cb": { + "type": "callback", + "file": "git2/clone.h", + "line": 69, + "lineto": 74, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "the resulting remote" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to create the remote" + }, + { + "name": "name", + "type": "const char *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote's url" + }, + { + "name": "payload", + "type": "void *", + "comment": "an opaque payload" + } + ], + "argline": "git_remote **out, git_repository *repo, const char *name, const char *url, void *payload", + "sig": "git_remote **::git_repository *::const char *::const char *::void *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

The signature of a function matching git_remote_create, with an additional\n void* as a callback payload.

\n", + "comments": "

Callers of git_clone may provide a function matching this signature to override the remote creation and customization process during a clone operation.

\n" + }, + "git_repository_create_cb": { + "type": "callback", + "file": "git2/clone.h", + "line": 90, + "lineto": 94, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "the resulting repository" + }, + { + "name": "path", + "type": "const char *", + "comment": "path in which to create the repository" + }, + { + "name": "bare", + "type": "int", + "comment": "whether the repository is bare. This is the value from the clone options" + }, + { + "name": "payload", + "type": "void *", + "comment": "payload specified by the options" + } + ], + "argline": "git_repository **out, const char *path, int bare, void *payload", + "sig": "git_repository **::const char *::int::void *", + "return": { + "type": "int", + "comment": " 0, or a negative value to indicate error" + }, + "description": "

The signature of a function matching git_repository_init, with an\n additional void * as callback payload.

\n", + "comments": "

Callers of git_clone my provide a function matching this signature to override the repository creation and customization process during a clone operation.

\n" + }, + "git_commit_create_cb": { + "type": "callback", + "file": "git2/commit.h", + "line": 533, + "lineto": 542, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "pointer that this callback will populate with the object\n id of the commit that is created" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "the author name and time of the commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "the committer name and time of the commit" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "the encoding of the given message, or NULL\n to assume UTF8" + }, + { + "name": "message", + "type": "const char *", + "comment": "the commit message" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "the tree to be committed" + }, + { + "name": "parent_count", + "type": "size_t", + "comment": "the number of parents for this commit" + }, + { + "name": "parents", + "type": "const git_commit *[]", + "comment": "the commit parents" + }, + { + "name": "payload", + "type": "void *", + "comment": "the payload pointer in the rebase options" + } + ], + "argline": "git_oid *out, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents, void *payload", + "sig": "git_oid *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]::void *", + "return": { + "type": "int", + "comment": " 0 if this callback has created the commit and populated the out\n parameter, GIT_PASSTHROUGH if the callback has not created a\n commit and wants the calling function to create the commit as\n if no callback had been specified, any other value to stop\n and return a failure" + }, + "description": "

Commit creation callback: used when a function is going to create\n commits (for example, in git_rebase_commit) to allow callers to\n override the commit creation behavior. For example, users may\n wish to sign commits by providing this information to\n git_commit_create_buffer, signing that buffer, then calling\n git_commit_create_with_signature. The resultant commit id\n should be set in the out object id parameter.

\n", "comments": "" - }, - { - "type": "git_packbuilder_progress", - "name": "pack_progress", - "comments": " Function to call with progress information during pack\n building. Be aware that this is called inline with pack\n building operations, so performance may be affected." - }, - { - "type": "git_push_transfer_progress_cb", - "name": "push_transfer_progress", - "comments": " Function to call with progress information during the\n upload portion of a push. Be aware that this is called\n inline with pack building operations, so performance may be\n affected." - }, - { - "type": "git_push_update_reference_cb", - "name": "push_update_reference", - "comments": " See documentation of git_push_update_reference_cb" - }, - { - "type": "git_push_negotiation", - "name": "push_negotiation", - "comments": " Called once between the negotiation step and the upload. It\n provides information about what updates will be performed." - }, - { - "type": "git_transport_cb", - "name": "transport", - "comments": " Create the transport to use for this operation. Leave NULL\n to auto-detect." - }, - { - "type": "git_remote_ready_cb", - "name": "remote_ready", - "comments": " Callback when the remote is ready to connect." - }, - { - "type": "void *", - "name": "payload", - "comments": " This will be passed to each of the callbacks in this struct\n as the last parameter." - }, - { - "type": "git_url_resolve_cb", - "name": "resolve_url", - "comments": " Resolve URL before connecting to remote.\n The returned URL will be used to connect to the remote instead.\n\n This callback is deprecated; users should use\n git_remote_ready_cb and configure the instance URL instead." - } - ], - "used": { - "returns": [], - "needs": [ - "git_remote_connect", - "git_remote_init_callbacks", - "git_remote_prune", - "git_remote_update_tips" - ] - } - } - ], - [ - "git_remote_completion_t", - { - "decl": [ - "GIT_REMOTE_COMPLETION_DOWNLOAD", - "GIT_REMOTE_COMPLETION_INDEXING", - "GIT_REMOTE_COMPLETION_ERROR" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 443, - "lineto": 447, - "block": "GIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR\nGIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR", - "tdef": "typedef", - "description": " Argument to the completion callback which tells it which operation\n finished.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REMOTE_COMPLETION_DOWNLOAD", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REMOTE_COMPLETION_INDEXING", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REMOTE_COMPLETION_ERROR", - "comments": "", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_remote_create_flags", - { - "decl": [ - "GIT_REMOTE_CREATE_SKIP_INSTEADOF", - "GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 47, - "lineto": 53, - "block": "GIT_REMOTE_CREATE_SKIP_INSTEADOF\nGIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC", - "tdef": "typedef", - "description": " Remote creation options flags", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REMOTE_CREATE_SKIP_INSTEADOF", - "comments": "

Ignore the repository apply.insteadOf configuration

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC", - "comments": "

Don't build a fetchspec from the name if none is set

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_remote_create_options", - { - "decl": [ - "unsigned int version", - "git_repository * repository", - "const char * name", - "const char * fetchspec", - "unsigned int flags" - ], - "type": "struct", - "value": "git_remote_create_options", - "file": "git2/remote.h", - "line": 62, - "lineto": 82, - "block": "unsigned int version\ngit_repository * repository\nconst char * name\nconst char * fetchspec\nunsigned int flags", - "tdef": "typedef", - "description": " Remote creation options structure", - "comments": "

Initialize with GIT_REMOTE_CREATE_OPTIONS_INIT. Alternatively, you can use git_remote_create_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_config_foreach_cb": { + "type": "callback", + "file": "git2/config.h", + "line": 87, + "lineto": 87, + "args": [ + { + "name": "entry", + "type": "const git_config_entry *", + "comment": "the entry currently being enumerated" + }, + { + "name": "payload", + "type": "void *", + "comment": "a user-specified pointer" + } + ], + "argline": "const git_config_entry *entry, void *payload", + "sig": "const git_config_entry *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration." + }, + "description": "

A config enumeration callback

\n", "comments": "" - }, - { - "type": "git_repository *", - "name": "repository", - "comments": " The repository that should own the remote.\n Setting this to NULL results in a detached remote." - }, - { - "type": "const char *", - "name": "name", - "comments": " The remote's name.\n Setting this to NULL results in an in-memory/anonymous remote." - }, - { - "type": "const char *", - "name": "fetchspec", - "comments": " The fetchspec the remote should use. " - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " Additional flags for the remote. See git_remote_create_flags. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_remote_create_options_init", - "git_remote_create_with_opts" - ] - } - } - ], - [ - "git_remote_head", - { - "decl": [ - "int local", - "git_oid oid", - "git_oid loid", - "char * name", - "char * symref_target" - ], - "type": "struct", - "value": "git_remote_head", - "file": "git2/net.h", - "line": 40, - "lineto": 50, - "block": "int local\ngit_oid oid\ngit_oid loid\nchar * name\nchar * symref_target", - "tdef": null, - "description": " Description of a reference advertised by a remote server, given out\n on `ls` calls.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "local", + }, + "git_credential_acquire_cb": { + "type": "callback", + "file": "git2/credential.h", + "line": 131, + "lineto": 136, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "url", + "type": "const char *", + "comment": "The resource for which we are demanding a credential." + }, + { + "name": "username_from_url", + "type": "const char *", + "comment": "The username that was embedded in a \"user\n@\nhost\"\n remote url, or NULL if not included." + }, + { + "name": "allowed_types", + "type": "unsigned int", + "comment": "A bitmask stating which credential types are OK to return." + }, + { + "name": "payload", + "type": "void *", + "comment": "The payload provided when specifying this callback." + } + ], + "argline": "git_credential **out, const char *url, const char *username_from_url, unsigned int allowed_types, void *payload", + "sig": "git_credential **::const char *::const char *::unsigned int::void *", + "return": { + "type": "int", + "comment": " 0 for success, \n<\n 0 to indicate an error, > 0 to indicate\n no credential was acquired" + }, + "description": "

Credential acquisition callback.

\n", + "comments": "

This callback is usually involved any time another system might need authentication. As such, you are expected to provide a valid git_credential object back, depending on allowed_types (a git_credential_t bitmask).

\n\n

Note that most authentication details are your responsibility - this callback will be called until the authentication succeeds, or you report an error. As such, it's easy to get in a loop if you fail to stop providing the same incorrect credentials.

\n" + }, + "git_commit_signing_cb": { + "type": "callback", + "file": "git2/deprecated.h", + "line": 276, + "lineto": 280, + "args": [ + { + "name": "signature", + "type": "git_buf *", + "comment": null + }, + { + "name": "signature_field", + "type": "git_buf *", + "comment": null + }, + { + "name": "commit_content", + "type": "const char *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "git_buf *signature, git_buf *signature_field, const char *commit_content, void *payload", + "sig": "git_buf *::git_buf *::const char *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Provide a commit signature during commit creation.

\n", + "comments": "

Callers should instead define a git_commit_create_cb that generates a commit buffer using git_commit_create_buffer, sign that buffer and call git_commit_create_with_signature.

\n" + }, + "git_headlist_cb": { + "type": "callback", + "file": "git2/deprecated.h", + "line": 855, + "lineto": 855, + "args": [ + { + "name": "rhead", + "type": "git_remote_head *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "git_remote_head *rhead, void *payload", + "sig": "git_remote_head *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Callback for listing the remote heads

\n", "comments": "" - }, - { - "type": "git_oid", - "name": "oid", + }, + "git_diff_notify_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 346, + "lineto": 350, + "args": [ + { + "name": "diff_so_far", + "type": "const git_diff *", + "comment": null + }, + { + "name": "delta_to_add", + "type": "const git_diff_delta *", + "comment": null + }, + { + "name": "matched_pathspec", + "type": "const char *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_diff *diff_so_far, const git_diff_delta *delta_to_add, const char *matched_pathspec, void *payload", + "sig": "const git_diff *::const git_diff_delta *::const char *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Diff notification callback function.

\n", + "comments": "

The callback will be called for each file, just before the git_diff_delta gets inserted into the diff.

\n\n

When the callback: - returns < 0, the diff process will be aborted. - returns > 0, the delta will not be inserted into the diff, but the diff process continues. - returns 0, the delta is inserted into the diff, and the diff process continues.

\n" + }, + "git_diff_progress_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 362, + "lineto": 366, + "args": [ + { + "name": "diff_so_far", + "type": "const git_diff *", + "comment": "The diff being generated." + }, + { + "name": "old_path", + "type": "const char *", + "comment": "The path to the old file or NULL." + }, + { + "name": "new_path", + "type": "const char *", + "comment": "The path to the new file or NULL." + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_diff *diff_so_far, const char *old_path, const char *new_path, void *payload", + "sig": "const git_diff *::const char *::const char *::void *", + "return": { + "type": "int", + "comment": " Non-zero to abort the diff." + }, + "description": "

Diff progress callback.

\n", + "comments": "

Called before each file comparison.

\n" + }, + "git_diff_file_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 496, + "lineto": 499, + "args": [ + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": "A pointer to the delta data for the file" + }, + { + "name": "progress", + "type": "float", + "comment": "Goes from 0 to 1 over the diff" + }, + { + "name": "payload", + "type": "void *", + "comment": "User-specified pointer from foreach function" + } + ], + "argline": "const git_diff_delta *delta, float progress, void *payload", + "sig": "const git_diff_delta *::float::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

When iterating over a diff, callback that will be made per file.

\n", "comments": "" - }, - { - "type": "git_oid", - "name": "loid", + }, + "git_diff_binary_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 562, + "lineto": 565, + "args": [ + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": null + }, + { + "name": "binary", + "type": "const git_diff_binary *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_diff_delta *delta, const git_diff_binary *binary, void *payload", + "sig": "const git_diff_delta *::const git_diff_binary *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

When iterating over a diff, callback that will be made for\n binary content within the diff.

\n", "comments": "" - }, - { - "type": "char *", - "name": "name", + }, + "git_diff_hunk_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 588, + "lineto": 591, + "args": [ + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": null + }, + { + "name": "hunk", + "type": "const git_diff_hunk *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, void *payload", + "sig": "const git_diff_delta *::const git_diff_hunk *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

When iterating over a diff, callback that will be made per hunk.

\n", "comments": "" - }, - { - "type": "char *", - "name": "symref_target", - "comments": " If the server send a symref mapping for this ref, this will\n point to the target." - } - ], - "used": { - "returns": [], - "needs": [ - "git_headlist_cb", - "git_remote_ls" - ] - } - } - ], - [ - "git_repository", - { - "decl": "git_repository", - "type": "struct", - "value": "git_repository", - "file": "git2/types.h", - "line": 118, - "lineto": 118, - "tdef": "typedef", - "description": " Representation of an existing git repository,\n including all its object contents", - "comments": "", - "used": { - "returns": [ - "git_blob_owner", - "git_commit_owner", - "git_index_owner", - "git_object_owner", - "git_patch_owner", - "git_reference_owner", - "git_remote_owner", - "git_revwalk_repository", - "git_submodule_owner", - "git_tag_owner", - "git_tree_owner" - ], - "needs": [ - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_from_ref", - "git_annotated_commit_from_revspec", - "git_annotated_commit_lookup", - "git_apply", - "git_apply_to_tree", - "git_attr_add_macro", - "git_attr_cache_flush", - "git_attr_foreach", - "git_attr_foreach_ext", - "git_attr_get", - "git_attr_get_ext", - "git_attr_get_many", - "git_attr_get_many_ext", - "git_blame_file", - "git_blob_create_from_buffer", - "git_blob_create_from_disk", - "git_blob_create_from_stream", - "git_blob_create_from_workdir", - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_branch_create", - "git_branch_create_from_annotated", - "git_branch_iterator_new", - "git_branch_lookup", - "git_branch_remote_name", - "git_branch_upstream_merge", - "git_branch_upstream_name", - "git_branch_upstream_remote", - "git_checkout_head", - "git_checkout_index", - "git_checkout_tree", - "git_cherrypick", - "git_cherrypick_commit", - "git_clone", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_v", - "git_commit_create_with_signature", - "git_commit_extract_signature", - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_config_add_file_ondisk", - "git_describe_workdir", - "git_diff_commit_as_email", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_filter_list_apply_to_file", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_file", - "git_graph_ahead_behind", - "git_graph_descendant_of", - "git_graph_reachable_from_any", - "git_ignore_add_rule", - "git_ignore_clear_internal_rules", - "git_ignore_path_is_ignored", - "git_index_write_tree_to", - "git_mailmap_from_repository", - "git_merge", - "git_merge_analysis", - "git_merge_analysis_for_ref", - "git_merge_base", - "git_merge_base_many", - "git_merge_base_octopus", - "git_merge_bases", - "git_merge_bases_many", - "git_merge_commits", - "git_merge_file_from_index", - "git_merge_trees", - "git_note_commit_create", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_create", - "git_note_default_ref", - "git_note_foreach", - "git_note_iterator_new", - "git_note_read", - "git_note_remove", - "git_object_lookup", - "git_object_lookup_prefix", - "git_packbuilder_new", - "git_pathspec_match_workdir", - "git_rebase_init", - "git_rebase_open", - "git_refdb_new", - "git_refdb_open", - "git_reference_create", - "git_reference_create_matching", - "git_reference_dwim", - "git_reference_ensure_log", - "git_reference_foreach", - "git_reference_foreach_glob", - "git_reference_foreach_name", - "git_reference_has_log", - "git_reference_iterator_glob_new", - "git_reference_iterator_new", - "git_reference_list", - "git_reference_lookup", - "git_reference_name_to_id", - "git_reference_remove", - "git_reference_symbolic_create", - "git_reference_symbolic_create_matching", - "git_reflog_delete", - "git_reflog_read", - "git_reflog_rename", - "git_remote_add_fetch", - "git_remote_add_push", - "git_remote_create", - "git_remote_create_anonymous", - "git_remote_create_cb", - "git_remote_create_with_fetchspec", - "git_remote_delete", - "git_remote_list", - "git_remote_lookup", - "git_remote_rename", - "git_remote_set_autotag", - "git_remote_set_pushurl", - "git_remote_set_url", - "git_repository_commondir", - "git_repository_config", - "git_repository_config_snapshot", - "git_repository_create_cb", - "git_repository_detach_head", - "git_repository_fetchhead_foreach", - "git_repository_free", - "git_repository_get_namespace", - "git_repository_hashfile", - "git_repository_head", - "git_repository_head_detached", - "git_repository_head_detached_for_worktree", - "git_repository_head_for_worktree", - "git_repository_head_unborn", - "git_repository_ident", - "git_repository_index", - "git_repository_init", - "git_repository_init_ext", - "git_repository_init_options_init", - "git_repository_is_bare", - "git_repository_is_empty", - "git_repository_is_shallow", - "git_repository_is_worktree", - "git_repository_item_path", - "git_repository_mergehead_foreach", - "git_repository_message", - "git_repository_message_remove", - "git_repository_odb", - "git_repository_open", - "git_repository_open_bare", - "git_repository_open_ext", - "git_repository_open_from_worktree", - "git_repository_path", - "git_repository_refdb", - "git_repository_set_head", - "git_repository_set_head_detached", - "git_repository_set_head_detached_from_annotated", - "git_repository_set_ident", - "git_repository_set_namespace", - "git_repository_set_workdir", - "git_repository_state", - "git_repository_state_cleanup", - "git_repository_workdir", - "git_repository_wrap_odb", - "git_reset", - "git_reset_default", - "git_reset_from_annotated", - "git_revert", - "git_revert_commit", - "git_revparse", - "git_revparse_ext", - "git_revparse_single", - "git_revwalk_new", - "git_signature_default", - "git_stash_apply", - "git_stash_drop", - "git_stash_foreach", - "git_stash_pop", - "git_stash_save", - "git_status_file", - "git_status_foreach", - "git_status_foreach_ext", - "git_status_list_new", - "git_status_should_ignore", - "git_submodule_add_setup", - "git_submodule_clone", - "git_submodule_foreach", - "git_submodule_lookup", - "git_submodule_open", - "git_submodule_repo_init", - "git_submodule_resolve_url", - "git_submodule_set_branch", - "git_submodule_set_fetch_recurse_submodules", - "git_submodule_set_ignore", - "git_submodule_set_update", - "git_submodule_set_url", - "git_submodule_status", - "git_tag_annotation_create", - "git_tag_create", - "git_tag_create_from_buffer", - "git_tag_create_lightweight", - "git_tag_delete", - "git_tag_foreach", - "git_tag_list", - "git_tag_list_match", - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_transaction_new", - "git_tree_create_updated", - "git_tree_entry_to_object", - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_treebuilder_new", - "git_worktree_add", - "git_worktree_list", - "git_worktree_lookup", - "git_worktree_open_from_repository" - ] - } - } - ], - [ - "git_repository_init_flag_t", - { - "decl": [ - "GIT_REPOSITORY_INIT_BARE", - "GIT_REPOSITORY_INIT_NO_REINIT", - "GIT_REPOSITORY_INIT_NO_DOTGIT_DIR", - "GIT_REPOSITORY_INIT_MKDIR", - "GIT_REPOSITORY_INIT_MKPATH", - "GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE", - "GIT_REPOSITORY_INIT_RELATIVE_GITLINK" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 225, - "lineto": 271, - "block": "GIT_REPOSITORY_INIT_BARE\nGIT_REPOSITORY_INIT_NO_REINIT\nGIT_REPOSITORY_INIT_NO_DOTGIT_DIR\nGIT_REPOSITORY_INIT_MKDIR\nGIT_REPOSITORY_INIT_MKPATH\nGIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE\nGIT_REPOSITORY_INIT_RELATIVE_GITLINK", - "tdef": "typedef", - "description": " Option flags for `git_repository_init_ext`.", - "comments": "

These flags configure extra behaviors to git_repository_init_ext. In every case, the default behavior is the zero value (i.e. flag is not set). Just OR the flag values together for the flags parameter when initializing a new repo.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_BARE", - "comments": "

Create a bare repository with no working directory.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_NO_REINIT", - "comments": "

Return an GIT_EEXISTS error if the repo_path appears to already be\n an git repository.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_NO_DOTGIT_DIR", - "comments": "

Normally a "/.git/" will be appended to the repo path for\n non-bare repos (if it is not already there), but passing this flag\n prevents that behavior.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_MKDIR", - "comments": "

Make the repo_path (and workdir_path) as needed. Init is always willing\n to create the ".git" directory even without this flag. This flag tells\n init to create the trailing component of the repo and workdir paths\n as needed.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_MKPATH", - "comments": "

Recursively make all components of the repo and workdir paths as\n necessary.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE", - "comments": "

libgit2 normally uses internal templates to initialize a new repo.\n This flags enables external templates, looking the "template_path" from\n the options if set, or the init.templatedir global config if not,\n or falling back on "/usr/share/git-core/templates" if it exists.

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_RELATIVE_GITLINK", - "comments": "

If an alternate workdir is specified, use relative paths for the gitdir\n and core.worktree.

\n", - "value": 64 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_repository_init_mode_t", - { - "decl": [ - "GIT_REPOSITORY_INIT_SHARED_UMASK", - "GIT_REPOSITORY_INIT_SHARED_GROUP", - "GIT_REPOSITORY_INIT_SHARED_ALL" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 280, - "lineto": 296, - "block": "GIT_REPOSITORY_INIT_SHARED_UMASK\nGIT_REPOSITORY_INIT_SHARED_GROUP\nGIT_REPOSITORY_INIT_SHARED_ALL", - "tdef": "typedef", - "description": " Mode options for `git_repository_init_ext`.", - "comments": "

Set the mode field of the git_repository_init_options structure either to the custom mode that you would like, or to one of the defined modes.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_SHARED_UMASK", - "comments": "

Use permissions configured by umask - the default.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_SHARED_GROUP", - "comments": "

Use "--shared=group" behavior, chmod'ing the new repo to be group\n writable and "g+sx" for sticky group assignment.

\n", - "value": 1533 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_SHARED_ALL", - "comments": "

Use "--shared=all" behavior, adding world readability.

\n", - "value": 1535 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_repository_init_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "uint32_t mode", - "const char * workdir_path", - "const char * description", - "const char * template_path", - "const char * initial_head", - "const char * origin_url" - ], - "type": "struct", - "value": "git_repository_init_options", - "file": "git2/repository.h", - "line": 304, - "lineto": 354, - "block": "unsigned int version\nuint32_t flags\nuint32_t mode\nconst char * workdir_path\nconst char * description\nconst char * template_path\nconst char * initial_head\nconst char * origin_url", - "tdef": "typedef", - "description": " Extended options structure for `git_repository_init_ext`.", - "comments": "

This contains extra options for git_repository_init_ext that enable additional initialization features.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_diff_line_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 649, + "lineto": 653, + "args": [ + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": null + }, + { + "name": "hunk", + "type": "const git_diff_hunk *", + "comment": null + }, + { + "name": "line", + "type": "const git_diff_line *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, const git_diff_line *line, void *payload", + "sig": "const git_diff_delta *::const git_diff_hunk *::const git_diff_line *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

When iterating over a diff, callback that will be made per text diff\n line. In this context, the provided range will be NULL.

\n", + "comments": "

When printing a diff, callback that will be made to output each line of text. This uses some extra GIT_DIFF_LINE_... constants for output of lines of file and hunk headers.

\n" + }, + "git_index_matched_path_cb": { + "type": "callback", + "file": "git2/index.h", + "line": 135, + "lineto": 136, + "args": [ + { + "name": "path", + "type": "const char *", + "comment": null + }, + { + "name": "matched_pathspec", + "type": "const char *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const char *path, const char *matched_pathspec, void *payload", + "sig": "const char *::const char *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Callback for APIs that add/remove/update files matching pathspec

\n", "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " Combination of GIT_REPOSITORY_INIT flags above." - }, - { - "type": "uint32_t", - "name": "mode", - "comments": " Set to one of the standard GIT_REPOSITORY_INIT_SHARED_... constants\n above, or to a custom value that you would like." - }, - { - "type": "const char *", - "name": "workdir_path", - "comments": " The path to the working dir or NULL for default (i.e. repo_path parent\n on non-bare repos). IF THIS IS RELATIVE PATH, IT WILL BE EVALUATED\n RELATIVE TO THE REPO_PATH. If this is not the \"natural\" working\n directory, a .git gitlink file will be created here linking to the\n repo_path." - }, - { - "type": "const char *", - "name": "description", - "comments": " If set, this will be used to initialize the \"description\" file in the\n repository, instead of using the template content." - }, - { - "type": "const char *", - "name": "template_path", - "comments": " When GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE is set, this contains\n the path to use for the template directory. If this is NULL, the config\n or default directory options will be used instead." - }, - { - "type": "const char *", - "name": "initial_head", - "comments": " The name of the head to point HEAD at. If NULL, then this will be\n treated as \"master\" and the HEAD ref will be set to \"refs/heads/master\".\n If this begins with \"refs/\" it will be used verbatim;\n otherwise \"refs/heads/\" will be prefixed." - }, - { - "type": "const char *", - "name": "origin_url", - "comments": " If this is non-NULL, then after the rest of the repository\n initialization is completed, an \"origin\" remote will be added\n pointing to this URL." - } - ], - "used": { - "returns": [], - "needs": [ - "git_repository_init_ext", - "git_repository_init_options_init" - ] - } - } - ], - [ - "git_repository_item_t", - { - "decl": [ - "GIT_REPOSITORY_ITEM_GITDIR", - "GIT_REPOSITORY_ITEM_WORKDIR", - "GIT_REPOSITORY_ITEM_COMMONDIR", - "GIT_REPOSITORY_ITEM_INDEX", - "GIT_REPOSITORY_ITEM_OBJECTS", - "GIT_REPOSITORY_ITEM_REFS", - "GIT_REPOSITORY_ITEM_PACKED_REFS", - "GIT_REPOSITORY_ITEM_REMOTES", - "GIT_REPOSITORY_ITEM_CONFIG", - "GIT_REPOSITORY_ITEM_INFO", - "GIT_REPOSITORY_ITEM_HOOKS", - "GIT_REPOSITORY_ITEM_LOGS", - "GIT_REPOSITORY_ITEM_MODULES", - "GIT_REPOSITORY_ITEM_WORKTREES", - "GIT_REPOSITORY_ITEM__LAST" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 470, - "lineto": 486, - "block": "GIT_REPOSITORY_ITEM_GITDIR\nGIT_REPOSITORY_ITEM_WORKDIR\nGIT_REPOSITORY_ITEM_COMMONDIR\nGIT_REPOSITORY_ITEM_INDEX\nGIT_REPOSITORY_ITEM_OBJECTS\nGIT_REPOSITORY_ITEM_REFS\nGIT_REPOSITORY_ITEM_PACKED_REFS\nGIT_REPOSITORY_ITEM_REMOTES\nGIT_REPOSITORY_ITEM_CONFIG\nGIT_REPOSITORY_ITEM_INFO\nGIT_REPOSITORY_ITEM_HOOKS\nGIT_REPOSITORY_ITEM_LOGS\nGIT_REPOSITORY_ITEM_MODULES\nGIT_REPOSITORY_ITEM_WORKTREES\nGIT_REPOSITORY_ITEM__LAST", - "tdef": "typedef", - "description": " List of items which belong to the git repository layout", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_GITDIR", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_WORKDIR", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_COMMONDIR", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_INDEX", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_OBJECTS", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_REFS", - "comments": "", - "value": 5 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_PACKED_REFS", - "comments": "", - "value": 6 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_REMOTES", - "comments": "", - "value": 7 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_CONFIG", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_INFO", - "comments": "", - "value": 9 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_HOOKS", - "comments": "", - "value": 10 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_LOGS", - "comments": "", - "value": 11 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_MODULES", - "comments": "", - "value": 12 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_WORKTREES", - "comments": "", - "value": 13 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM__LAST", - "comments": "", - "value": 14 - } - ], - "used": { - "returns": [], - "needs": [ - "git_repository_item_path" - ] - } - } - ], - [ - "git_repository_open_flag_t", - { - "decl": [ - "GIT_REPOSITORY_OPEN_NO_SEARCH", - "GIT_REPOSITORY_OPEN_CROSS_FS", - "GIT_REPOSITORY_OPEN_BARE", - "GIT_REPOSITORY_OPEN_NO_DOTGIT", - "GIT_REPOSITORY_OPEN_FROM_ENV" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 98, - "lineto": 145, - "block": "GIT_REPOSITORY_OPEN_NO_SEARCH\nGIT_REPOSITORY_OPEN_CROSS_FS\nGIT_REPOSITORY_OPEN_BARE\nGIT_REPOSITORY_OPEN_NO_DOTGIT\nGIT_REPOSITORY_OPEN_FROM_ENV", - "tdef": "typedef", - "description": " Option flags for `git_repository_open_ext`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_NO_SEARCH", - "comments": "

Only open the repository if it can be immediately found in the\n start_path. Do not walk up from the start_path looking at parent\n directories.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_CROSS_FS", - "comments": "

Unless this flag is set, open will not continue searching across\n filesystem boundaries (i.e. when st_dev changes from the stat\n system call). For example, searching in a user's home directory at\n "/home/user/source/" will not return "/.git/" as the found repo if\n "/" is a different filesystem than "/home".

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_BARE", - "comments": "

Open repository as a bare repo regardless of core.bare config, and\n defer loading config file for faster setup.\n Unlike git_repository_open_bare, this can follow gitlinks.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_NO_DOTGIT", - "comments": "

Do not check for a repository by appending /.git to the start_path;\n only open the repository if start_path itself points to the git\n directory.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_FROM_ENV", - "comments": "

Find and open a git repository, respecting the environment variables\n used by the git command-line tools.\n If set, git_repository_open_ext will ignore the other flags and\n the ceiling_dirs argument, and will allow a NULL path to use\n GIT_DIR or search from the current directory.\n The search for a repository will respect $GIT_CEILING_DIRECTORIES and\n $GIT_DISCOVERY_ACROSS_FILESYSTEM. The opened repository will\n respect $GIT_INDEX_FILE, $GIT_NAMESPACE, $GIT_OBJECT_DIRECTORY, and\n $GIT_ALTERNATE_OBJECT_DIRECTORIES.\n In the future, this flag will also cause git_repository_open_ext\n to respect $GIT_WORK_TREE and $GIT_COMMON_DIR; currently,\n git_repository_open_ext with this flag will error out if either\n $GIT_WORK_TREE or $GIT_COMMON_DIR is set.

\n", - "value": 16 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_repository_state_t", - { - "decl": [ - "GIT_REPOSITORY_STATE_NONE", - "GIT_REPOSITORY_STATE_MERGE", - "GIT_REPOSITORY_STATE_REVERT", - "GIT_REPOSITORY_STATE_REVERT_SEQUENCE", - "GIT_REPOSITORY_STATE_CHERRYPICK", - "GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE", - "GIT_REPOSITORY_STATE_BISECT", - "GIT_REPOSITORY_STATE_REBASE", - "GIT_REPOSITORY_STATE_REBASE_INTERACTIVE", - "GIT_REPOSITORY_STATE_REBASE_MERGE", - "GIT_REPOSITORY_STATE_APPLY_MAILBOX", - "GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 867, - "lineto": 880, - "block": "GIT_REPOSITORY_STATE_NONE\nGIT_REPOSITORY_STATE_MERGE\nGIT_REPOSITORY_STATE_REVERT\nGIT_REPOSITORY_STATE_REVERT_SEQUENCE\nGIT_REPOSITORY_STATE_CHERRYPICK\nGIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE\nGIT_REPOSITORY_STATE_BISECT\nGIT_REPOSITORY_STATE_REBASE\nGIT_REPOSITORY_STATE_REBASE_INTERACTIVE\nGIT_REPOSITORY_STATE_REBASE_MERGE\nGIT_REPOSITORY_STATE_APPLY_MAILBOX\nGIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", - "tdef": "typedef", - "description": " Repository state", - "comments": "

These values represent possible states for the repository to be in, based on the current operation which is ongoing.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_NONE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_MERGE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REVERT", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REVERT_SEQUENCE", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_CHERRYPICK", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE", - "comments": "", - "value": 5 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_BISECT", - "comments": "", - "value": 6 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REBASE", - "comments": "", - "value": 7 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REBASE_INTERACTIVE", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REBASE_MERGE", - "comments": "", - "value": 9 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_APPLY_MAILBOX", - "comments": "", - "value": 10 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", - "comments": "", - "value": 11 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_reset_t", - { - "decl": [ - "GIT_RESET_SOFT", - "GIT_RESET_MIXED", - "GIT_RESET_HARD" - ], - "type": "enum", - "file": "git2/reset.h", - "line": 26, - "lineto": 30, - "block": "GIT_RESET_SOFT\nGIT_RESET_MIXED\nGIT_RESET_HARD", - "tdef": "typedef", - "description": " Kinds of reset operation", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_RESET_SOFT", - "comments": "

Move the head to the given commit

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_RESET_MIXED", - "comments": "

SOFT plus reset index to the commit

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_RESET_HARD", - "comments": "

MIXED plus changes in working tree discarded

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [ - "git_reset", - "git_reset_from_annotated" - ] - } - } - ], - [ - "git_revert_options", - { - "decl": [ - "unsigned int version", - "unsigned int mainline", - "git_merge_options merge_opts", - "git_checkout_options checkout_opts" - ], - "type": "struct", - "value": "git_revert_options", - "file": "git2/revert.h", - "line": 26, - "lineto": 34, - "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", - "tdef": "typedef", - "description": " Options for revert", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_indexer_progress_cb": { + "type": "callback", + "file": "git2/indexer.h", + "line": 57, + "lineto": 57, + "args": [ + { + "name": "stats", + "type": "const git_indexer_progress *", + "comment": "Structure containing information about the state of the transfer" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by caller" + } + ], + "argline": "const git_indexer_progress *stats, void *payload", + "sig": "const git_indexer_progress *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Type for progress callbacks during indexing. Return a value less\n than zero to cancel the indexing or download.

\n", "comments": "" - }, - { - "type": "unsigned int", - "name": "mainline", - "comments": " For merge commits, the \"mainline\" is treated as the parent. " - }, - { - "type": "git_merge_options", - "name": "merge_opts", - "comments": " Options for the merging " - }, - { - "type": "git_checkout_options", - "name": "checkout_opts", - "comments": " Options for the checkout " - } - ], - "used": { - "returns": [], - "needs": [ - "git_revert", - "git_revert_options_init" - ] - } - } - ], - [ - "git_revspec", - { - "decl": [ - "git_object * from", - "git_object * to", - "unsigned int flags" - ], - "type": "struct", - "value": "git_revspec", - "file": "git2/revparse.h", - "line": 83, - "lineto": 90, - "block": "git_object * from\ngit_object * to\nunsigned int flags", - "tdef": "typedef", - "description": " Git Revision Spec: output of a `git_revparse` operation", - "comments": "", - "fields": [ - { - "type": "git_object *", - "name": "from", - "comments": " The left element of the revspec; must be freed by the user " - }, - { - "type": "git_object *", - "name": "to", - "comments": " The right element of the revspec; must be freed by the user " - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " The intent of the revspec (i.e. `git_revspec_mode_t` flags) " - } - ], - "used": { - "returns": [], - "needs": [ - "git_revparse" - ] - } - } - ], - [ - "git_revspec_t", - { - "decl": [ - "GIT_REVSPEC_SINGLE", - "GIT_REVSPEC_RANGE", - "GIT_REVSPEC_MERGE_BASE" - ], - "type": "enum", - "file": "git2/revparse.h", - "line": 71, - "lineto": 78, - "block": "GIT_REVSPEC_SINGLE\nGIT_REVSPEC_RANGE\nGIT_REVSPEC_MERGE_BASE", - "tdef": "typedef", - "description": " Revparse flags. These indicate the intended behavior of the spec passed to\n git_revparse.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REVSPEC_SINGLE", - "comments": "

The spec targeted a single object.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REVSPEC_RANGE", - "comments": "

The spec targeted a range of commits.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REVSPEC_MERGE_BASE", - "comments": "

The spec used the '...' operator, which invokes special semantics.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_revwalk", - { - "decl": "git_revwalk", - "type": "struct", - "value": "git_revwalk", - "file": "git2/types.h", - "line": 127, - "lineto": 127, - "tdef": "typedef", - "description": " Representation of an in-progress walk through the commits in a repo ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_packbuilder_insert_walk", - "git_revwalk_add_hide_cb", - "git_revwalk_free", - "git_revwalk_hide", - "git_revwalk_hide_glob", - "git_revwalk_hide_head", - "git_revwalk_hide_ref", - "git_revwalk_new", - "git_revwalk_next", - "git_revwalk_push", - "git_revwalk_push_glob", - "git_revwalk_push_head", - "git_revwalk_push_range", - "git_revwalk_push_ref", - "git_revwalk_repository", - "git_revwalk_reset", - "git_revwalk_simplify_first_parent", - "git_revwalk_sorting" - ] - } - } - ], - [ - "git_signature", - { - "decl": [ - "char * name", - "char * email", - "git_time when" - ], - "type": "struct", - "value": "git_signature", - "file": "git2/types.h", - "line": 182, - "lineto": 186, - "block": "char * name\nchar * email\ngit_time when", - "tdef": "typedef", - "description": " An action signature (e.g. for committers, taggers, etc) ", - "comments": "", - "fields": [ - { - "type": "char *", - "name": "name", - "comments": " full name of the author " - }, - { - "type": "char *", - "name": "email", - "comments": " email of the author " - }, - { - "type": "git_time", - "name": "when", - "comments": " time when the action happened " - } - ], - "used": { - "returns": [ - "git_commit_author", - "git_commit_committer", - "git_note_author", - "git_note_committer", - "git_reflog_entry_committer", - "git_tag_tagger" - ], - "needs": [ - "git_commit_amend", - "git_commit_author_with_mailmap", - "git_commit_committer_with_mailmap", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_cb", - "git_commit_create_v", - "git_mailmap_resolve_signature", - "git_note_commit_create", - "git_note_commit_remove", - "git_note_create", - "git_note_remove", - "git_rebase_commit", - "git_rebase_finish", - "git_reflog_append", - "git_signature_default", - "git_signature_dup", - "git_signature_free", - "git_signature_from_buffer", - "git_signature_new", - "git_signature_now", - "git_stash_save", - "git_tag_annotation_create", - "git_tag_create", - "git_transaction_set_symbolic_target", - "git_transaction_set_target" - ] - } - } - ], - [ - "git_smart_service_t", - { - "decl": [ - "GIT_SERVICE_UPLOADPACK_LS", - "GIT_SERVICE_UPLOADPACK", - "GIT_SERVICE_RECEIVEPACK_LS", - "GIT_SERVICE_RECEIVEPACK" - ], - "type": "enum", - "file": "git2/sys/transport.h", - "line": 288, - "lineto": 293, - "block": "GIT_SERVICE_UPLOADPACK_LS\nGIT_SERVICE_UPLOADPACK\nGIT_SERVICE_RECEIVEPACK_LS\nGIT_SERVICE_RECEIVEPACK", - "tdef": "typedef", - "description": " Actions that the smart transport can ask a subtransport to perform ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_SERVICE_UPLOADPACK_LS", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SERVICE_UPLOADPACK", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SERVICE_RECEIVEPACK_LS", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_SERVICE_RECEIVEPACK", - "comments": "", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_sort_t", - { - "decl": [ - "GIT_SORT_NONE", - "GIT_SORT_TOPOLOGICAL", - "GIT_SORT_TIME", - "GIT_SORT_REVERSE" - ], - "type": "enum", - "file": "git2/revwalk.h", - "line": 26, - "lineto": 53, - "block": "GIT_SORT_NONE\nGIT_SORT_TOPOLOGICAL\nGIT_SORT_TIME\nGIT_SORT_REVERSE", - "tdef": "typedef", - "description": " Flags to specify the sorting which a revwalk should perform.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_SORT_NONE", - "comments": "

Sort the output with the same default method from git: reverse\n chronological order. This is the default sorting for new walkers.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_SORT_TOPOLOGICAL", - "comments": "

Sort the repository contents in topological order (no parents before\n all of its children are shown); this sorting mode can be combined\n with time sorting to produce git's --date-order`.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SORT_TIME", - "comments": "

Sort the repository contents by commit time;\n this sorting mode can be combined with\n topological sorting.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SORT_REVERSE", - "comments": "

Iterate through the repository contents in reverse\n order; this sorting mode can be combined with\n any of the above.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_stash_apply_flags", - { - "decl": [ - "GIT_STASH_APPLY_DEFAULT", - "GIT_STASH_APPLY_REINSTATE_INDEX" - ], - "type": "enum", - "file": "git2/stash.h", - "line": 75, - "lineto": 82, - "block": "GIT_STASH_APPLY_DEFAULT\nGIT_STASH_APPLY_REINSTATE_INDEX", - "tdef": "typedef", - "description": " Stash application flags. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STASH_APPLY_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_REINSTATE_INDEX", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_stash_apply_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "git_checkout_options checkout_options", - "git_stash_apply_progress_cb progress_cb", - "void * progress_payload" - ], - "type": "struct", - "value": "git_stash_apply_options", - "file": "git2/stash.h", - "line": 126, - "lineto": 138, - "block": "unsigned int version\nuint32_t flags\ngit_checkout_options checkout_options\ngit_stash_apply_progress_cb progress_cb\nvoid * progress_payload", - "tdef": "typedef", - "description": " Stash application options structure", - "comments": "

Initialize with GIT_STASH_APPLY_OPTIONS_INIT. Alternatively, you can use git_stash_apply_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_note_foreach_cb": { + "type": "callback", + "file": "git2/notes.h", + "line": 29, + "lineto": 30, + "args": [ + { + "name": "blob_id", + "type": "const git_oid *", + "comment": null + }, + { + "name": "annotated_object_id", + "type": "const git_oid *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_oid *blob_id, const git_oid *annotated_object_id, void *payload", + "sig": "const git_oid *::const git_oid *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Callback for git_note_foreach.

\n", + "comments": "

Receives: - blob_id: Oid of the blob containing the message - annotated_object_id: Oid of the git object being annotated - payload: Payload data passed to git_note_foreach

\n" + }, + "git_odb_foreach_cb": { + "type": "callback", + "file": "git2/odb.h", + "line": 39, + "lineto": 39, + "args": [ + { + "name": "id", + "type": "const git_oid *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_oid *id, void *payload", + "sig": "const git_oid *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Function type for callbacks from git_odb_foreach.

\n", "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " See `git_stash_apply_flags`, above. " - }, - { - "type": "git_checkout_options", - "name": "checkout_options", - "comments": " Options to use when writing files to the working directory. " - }, - { - "type": "git_stash_apply_progress_cb", - "name": "progress_cb", - "comments": " Optional callback to notify the consumer of application progress. " - }, - { - "type": "void *", - "name": "progress_payload", + }, + "git_packbuilder_foreach_cb": { + "type": "callback", + "file": "git2/pack.h", + "line": 208, + "lineto": 208, + "args": [ + { + "name": "buf", + "type": "void *", + "comment": "A pointer to the object's data" + }, + { + "name": "size", + "type": "size_t", + "comment": "The size of the underlying object" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_packbuilder_foreach" + } + ], + "argline": "void *buf, size_t size, void *payload", + "sig": "void *::size_t::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over packed objects

\n", "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_stash_apply", - "git_stash_apply_options_init", - "git_stash_pop" - ] - } - } - ], - [ - "git_stash_apply_progress_t", - { - "decl": [ - "GIT_STASH_APPLY_PROGRESS_NONE", - "GIT_STASH_APPLY_PROGRESS_LOADING_STASH", - "GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX", - "GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED", - "GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED", - "GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED", - "GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED", - "GIT_STASH_APPLY_PROGRESS_DONE" - ], - "type": "enum", - "file": "git2/stash.h", - "line": 85, - "lineto": 108, - "block": "GIT_STASH_APPLY_PROGRESS_NONE\nGIT_STASH_APPLY_PROGRESS_LOADING_STASH\nGIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX\nGIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED\nGIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED\nGIT_STASH_APPLY_PROGRESS_DONE", - "tdef": "typedef", - "description": " Stash apply progression states ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_NONE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_LOADING_STASH", - "comments": "

Loading the stashed data from the object database.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX", - "comments": "

The stored index is being analyzed.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED", - "comments": "

The modified files are being analyzed.

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED", - "comments": "

The untracked and ignored files are being analyzed.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED", - "comments": "

The untracked files are being written to disk.

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED", - "comments": "

The modified files are being written to disk.

\n", - "value": 6 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_DONE", - "comments": "

The stash was applied successfully.

\n", - "value": 7 - } - ], - "used": { - "returns": [], - "needs": [ - "git_stash_apply_progress_cb" - ] - } - } - ], - [ - "git_stash_flags", - { - "decl": [ - "GIT_STASH_DEFAULT", - "GIT_STASH_KEEP_INDEX", - "GIT_STASH_INCLUDE_UNTRACKED", - "GIT_STASH_INCLUDE_IGNORED" - ], - "type": "enum", - "file": "git2/stash.h", - "line": 25, - "lineto": 48, - "block": "GIT_STASH_DEFAULT\nGIT_STASH_KEEP_INDEX\nGIT_STASH_INCLUDE_UNTRACKED\nGIT_STASH_INCLUDE_IGNORED", - "tdef": "typedef", - "description": " Stash flags", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STASH_DEFAULT", - "comments": "

No option, default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STASH_KEEP_INDEX", - "comments": "

All changes already added to the index are left intact in\n the working directory

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STASH_INCLUDE_UNTRACKED", - "comments": "

All untracked files are also stashed and then cleaned up\n from the working directory

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STASH_INCLUDE_IGNORED", - "comments": "

All ignored files are also stashed and then cleaned up from\n the working directory

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_status_entry", - { - "decl": [ - "git_status_t status", - "git_diff_delta * head_to_index", - "git_diff_delta * index_to_workdir" - ], - "type": "struct", - "value": "git_status_entry", - "file": "git2/status.h", - "line": 286, - "lineto": 290, - "block": "git_status_t status\ngit_diff_delta * head_to_index\ngit_diff_delta * index_to_workdir", - "tdef": "typedef", - "description": " A status entry, providing the differences between the file as it exists\n in HEAD and the index, and providing the differences between the index\n and the working directory.", - "comments": "

The status value provides the status flags for this file.

\n\n

The head_to_index value provides detailed information about the differences between the file in HEAD and the file in the index.

\n\n

The index_to_workdir value provides detailed information about the differences between the file in the index and the file in the working directory.

\n", - "fields": [ - { - "type": "git_status_t", - "name": "status", + }, + "git_packbuilder_progress": { + "type": "callback", + "file": "git2/pack.h", + "line": 237, + "lineto": 241, + "args": [ + { + "name": "stage", + "type": "int", + "comment": null + }, + { + "name": "current", + "type": "uint32_t", + "comment": null + }, + { + "name": "total", + "type": "uint32_t", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "int stage, uint32_t current, uint32_t total, void *payload", + "sig": "int::uint32_t::uint32_t::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Packbuilder progress notification function

\n", "comments": "" - }, - { - "type": "git_diff_delta *", - "name": "head_to_index", + }, + "git_reference_foreach_cb": { + "type": "callback", + "file": "git2/refs.h", + "line": 437, + "lineto": 437, + "args": [ + { + "name": "reference", + "type": "git_reference *", + "comment": "The reference object" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_reference_foreach" + } + ], + "argline": "git_reference *reference, void *payload", + "sig": "git_reference *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over references

\n", "comments": "" - }, - { - "type": "git_diff_delta *", - "name": "index_to_workdir", + }, + "git_reference_foreach_name_cb": { + "type": "callback", + "file": "git2/refs.h", + "line": 448, + "lineto": 448, + "args": [ + { + "name": "name", + "type": "const char *", + "comment": "The reference name" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_reference_foreach_name" + } + ], + "argline": "const char *name, void *payload", + "sig": "const char *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over reference names

\n", "comments": "" - } - ], - "used": { - "returns": [ - "git_status_byindex" - ], - "needs": [] - } - } - ], - [ - "git_status_list", - { - "decl": "git_status_list", - "type": "struct", - "value": "git_status_list", - "file": "git2/types.h", - "line": 201, - "lineto": 201, - "tdef": "typedef", - "description": " Representation of a status collection ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_status_byindex", - "git_status_list_entrycount", - "git_status_list_free", - "git_status_list_new" - ] - } - } - ], - [ - "git_status_opt_t", - { - "decl": [ - "GIT_STATUS_OPT_INCLUDE_UNTRACKED", - "GIT_STATUS_OPT_INCLUDE_IGNORED", - "GIT_STATUS_OPT_INCLUDE_UNMODIFIED", - "GIT_STATUS_OPT_EXCLUDE_SUBMODULES", - "GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS", - "GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH", - "GIT_STATUS_OPT_RECURSE_IGNORED_DIRS", - "GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX", - "GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR", - "GIT_STATUS_OPT_SORT_CASE_SENSITIVELY", - "GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY", - "GIT_STATUS_OPT_RENAMES_FROM_REWRITES", - "GIT_STATUS_OPT_NO_REFRESH", - "GIT_STATUS_OPT_UPDATE_INDEX", - "GIT_STATUS_OPT_INCLUDE_UNREADABLE", - "GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED" - ], - "type": "enum", - "file": "git2/status.h", - "line": 101, - "lineto": 208, - "block": "GIT_STATUS_OPT_INCLUDE_UNTRACKED\nGIT_STATUS_OPT_INCLUDE_IGNORED\nGIT_STATUS_OPT_INCLUDE_UNMODIFIED\nGIT_STATUS_OPT_EXCLUDE_SUBMODULES\nGIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS\nGIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH\nGIT_STATUS_OPT_RECURSE_IGNORED_DIRS\nGIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX\nGIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR\nGIT_STATUS_OPT_SORT_CASE_SENSITIVELY\nGIT_STATUS_OPT_SORT_CASE_INSENSITIVELY\nGIT_STATUS_OPT_RENAMES_FROM_REWRITES\nGIT_STATUS_OPT_NO_REFRESH\nGIT_STATUS_OPT_UPDATE_INDEX\nGIT_STATUS_OPT_INCLUDE_UNREADABLE\nGIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", - "tdef": "typedef", - "description": " Flags to control status callbacks", - "comments": "

Calling git_status_foreach() is like calling the extended version with: GIT_STATUS_OPT_INCLUDE_IGNORED, GIT_STATUS_OPT_INCLUDE_UNTRACKED, and GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS. Those options are bundled together as GIT_STATUS_OPT_DEFAULTS if you want them as a baseline.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_UNTRACKED", - "comments": "

Says that callbacks should be made on untracked files.\n These will only be made if the workdir files are included in the status\n "show" option.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_IGNORED", - "comments": "

Says that ignored files get callbacks.\n Again, these callbacks will only be made if the workdir files are\n included in the status "show" option.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_UNMODIFIED", - "comments": "

Indicates that callback should be made even on unmodified files.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_EXCLUDE_SUBMODULES", - "comments": "

Indicates that submodules should be skipped.\n This only applies if there are no pending typechanges to the submodule\n (either from or to another type).

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS", - "comments": "

Indicates that all files in untracked directories should be included.\n Normally if an entire directory is new, then just the top-level\n directory is included (with a trailing slash on the entry name).\n This flag says to include all of the individual files in the directory\n instead.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH", - "comments": "

Indicates that the given path should be treated as a literal path,\n and not as a pathspec pattern.

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RECURSE_IGNORED_DIRS", - "comments": "

Indicates that the contents of ignored directories should be included\n in the status. This is like doing git ls-files -o -i --exclude-standard\n with core git.

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX", - "comments": "

Indicates that rename detection should be processed between the head and\n the index and enables the GIT_STATUS_INDEX_RENAMED as a possible status\n flag.

\n", - "value": 128 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR", - "comments": "

Indicates that rename detection should be run between the index and the\n working directory and enabled GIT_STATUS_WT_RENAMED as a possible status\n flag.

\n", - "value": 256 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_SORT_CASE_SENSITIVELY", - "comments": "

Overrides the native case sensitivity for the file system and forces\n the output to be in case-sensitive order.

\n", - "value": 512 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY", - "comments": "

Overrides the native case sensitivity for the file system and forces\n the output to be in case-insensitive order.

\n", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RENAMES_FROM_REWRITES", - "comments": "

Iindicates that rename detection should include rewritten files.

\n", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_NO_REFRESH", - "comments": "

Bypasses the default status behavior of doing a "soft" index reload\n (i.e. reloading the index data if the file on disk has been modified\n outside libgit2).

\n", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_UPDATE_INDEX", - "comments": "

Tells libgit2 to refresh the stat cache in the index for files that are\n unchanged but have out of date stat einformation in the index.\n It will result in less work being done on subsequent calls to get status.\n This is mutually exclusive with the NO_REFRESH option.

\n", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_UNREADABLE", - "comments": "

Normally files that cannot be opened or read are ignored as\n these are often transient files; this option will return\n unreadable files as GIT_STATUS_WT_UNREADABLE.

\n", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", - "comments": "

Unreadable files will be detected and given the status\n untracked instead of unreadable.

\n", - "value": 32768 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_status_options", - { - "decl": [ - "unsigned int version", - "git_status_show_t show", - "unsigned int flags", - "git_strarray pathspec", - "git_tree * baseline" - ], - "type": "struct", - "value": "git_status_options", - "file": "git2/status.h", - "line": 222, - "lineto": 253, - "block": "unsigned int version\ngit_status_show_t show\nunsigned int flags\ngit_strarray pathspec\ngit_tree * baseline", - "tdef": "typedef", - "description": " Options to control how `git_status_foreach_ext()` will issue callbacks.", - "comments": "

Initialize with GIT_STATUS_OPTIONS_INIT. Alternatively, you can use git_status_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " The struct version; pass `GIT_STATUS_OPTIONS_VERSION`." - }, - { - "type": "git_status_show_t", - "name": "show", - "comments": " The `show` value is one of the `git_status_show_t` constants that\n control which files to scan and in what order." - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " The `flags` value is an OR'ed combination of the\n `git_status_opt_t` values above." - }, - { - "type": "git_strarray", - "name": "pathspec", - "comments": " The `pathspec` is an array of path patterns to match (using\n fnmatch-style matching), or just an array of paths to match\n exactly if `GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH` is specified\n in the flags." - }, - { - "type": "git_tree *", - "name": "baseline", - "comments": " The `baseline` is the tree to be used for comparison to the\n working directory and index; defaults to HEAD." - } - ], - "used": { - "returns": [], - "needs": [ - "git_status_foreach_ext", - "git_status_list_new", - "git_status_options_init" - ] - } - } - ], - [ - "git_status_show_t", - { - "decl": [ - "GIT_STATUS_SHOW_INDEX_AND_WORKDIR", - "GIT_STATUS_SHOW_INDEX_ONLY", - "GIT_STATUS_SHOW_WORKDIR_ONLY" - ], - "type": "enum", - "file": "git2/status.h", - "line": 73, - "lineto": 91, - "block": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR\nGIT_STATUS_SHOW_INDEX_ONLY\nGIT_STATUS_SHOW_WORKDIR_ONLY", - "tdef": "typedef", - "description": " Select the files on which to report status.", - "comments": "

With git_status_foreach_ext, this will control which changes get callbacks. With git_status_list_new, these will control which changes are included in the list.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR", - "comments": "

The default. This roughly matches git status --porcelain regarding\n which files are included and in what order.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STATUS_SHOW_INDEX_ONLY", - "comments": "

Only gives status based on HEAD to index comparison, not looking at\n working directory changes.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STATUS_SHOW_WORKDIR_ONLY", - "comments": "

Only gives status based on index to working directory comparison,\n not comparing the index to the HEAD.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_status_t", - { - "decl": [ - "GIT_STATUS_CURRENT", - "GIT_STATUS_INDEX_NEW", - "GIT_STATUS_INDEX_MODIFIED", - "GIT_STATUS_INDEX_DELETED", - "GIT_STATUS_INDEX_RENAMED", - "GIT_STATUS_INDEX_TYPECHANGE", - "GIT_STATUS_WT_NEW", - "GIT_STATUS_WT_MODIFIED", - "GIT_STATUS_WT_DELETED", - "GIT_STATUS_WT_TYPECHANGE", - "GIT_STATUS_WT_RENAMED", - "GIT_STATUS_WT_UNREADABLE", - "GIT_STATUS_IGNORED", - "GIT_STATUS_CONFLICTED" - ], - "type": "enum", - "file": "git2/status.h", - "line": 34, - "lineto": 52, - "block": "GIT_STATUS_CURRENT\nGIT_STATUS_INDEX_NEW\nGIT_STATUS_INDEX_MODIFIED\nGIT_STATUS_INDEX_DELETED\nGIT_STATUS_INDEX_RENAMED\nGIT_STATUS_INDEX_TYPECHANGE\nGIT_STATUS_WT_NEW\nGIT_STATUS_WT_MODIFIED\nGIT_STATUS_WT_DELETED\nGIT_STATUS_WT_TYPECHANGE\nGIT_STATUS_WT_RENAMED\nGIT_STATUS_WT_UNREADABLE\nGIT_STATUS_IGNORED\nGIT_STATUS_CONFLICTED", - "tdef": "typedef", - "description": " Status flags for a single file.", - "comments": "

A combination of these values will be returned to indicate the status of a file. Status compares the working directory, the index, and the current HEAD of the repository. The GIT_STATUS_INDEX set of flags represents the status of file in the index relative to the HEAD, and the GIT_STATUS_WT set of flags represent the status of the file in the working directory relative to the index.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_STATUS_CURRENT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_NEW", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_MODIFIED", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_DELETED", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_RENAMED", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_TYPECHANGE", - "comments": "", - "value": 16 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_NEW", - "comments": "", - "value": 128 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_MODIFIED", - "comments": "", - "value": 256 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_DELETED", - "comments": "", - "value": 512 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_TYPECHANGE", - "comments": "", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_RENAMED", - "comments": "", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_UNREADABLE", - "comments": "", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_STATUS_IGNORED", - "comments": "", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_STATUS_CONFLICTED", - "comments": "", - "value": 32768 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_strarray", - { - "decl": [ - "char ** strings", - "size_t count" - ], - "type": "struct", - "value": "git_strarray", - "file": "git2/strarray.h", - "line": 22, - "lineto": 25, - "block": "char ** strings\nsize_t count", - "tdef": "typedef", - "description": " Array of strings ", - "comments": "", - "fields": [ - { - "type": "char **", - "name": "strings", + }, + "git_push_transfer_progress_cb": { + "type": "callback", + "file": "git2/remote.h", + "line": 459, + "lineto": 463, + "args": [ + { + "name": "current", + "type": "unsigned int", + "comment": null + }, + { + "name": "total", + "type": "unsigned int", + "comment": null + }, + { + "name": "bytes", + "type": "size_t", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "unsigned int current, unsigned int total, size_t bytes, void *payload", + "sig": "unsigned int::unsigned int::size_t::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Push network progress notification function

\n", "comments": "" - }, - { - "type": "size_t", - "name": "count", + }, + "git_push_negotiation": { + "type": "callback", + "file": "git2/remote.h", + "line": 495, + "lineto": 495, + "args": [ + { + "name": "updates", + "type": "const git_push_update **", + "comment": "an array containing the updates which will be sent\n as commands to the destination." + }, + { + "name": "len", + "type": "size_t", + "comment": "number of elements in `updates`" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "const git_push_update **updates, size_t len, void *payload", + "sig": "const git_push_update **::size_t::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Callback used to inform of upcoming updates.

\n", "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_index_add_all", - "git_index_remove_all", - "git_index_update_all", - "git_pathspec_new", - "git_reference_list", - "git_remote_connect", - "git_remote_download", - "git_remote_fetch", - "git_remote_get_fetch_refspecs", - "git_remote_get_push_refspecs", - "git_remote_list", - "git_remote_push", - "git_remote_rename", - "git_remote_upload", - "git_reset_default", - "git_strarray_copy", - "git_strarray_dispose", - "git_strarray_free", - "git_tag_list", - "git_tag_list_match", - "git_worktree_list" - ] - } - } - ], - [ - "git_stream_t", - { - "decl": [ - "GIT_STREAM_STANDARD", - "GIT_STREAM_TLS" - ], - "type": "enum", - "file": "git2/sys/stream.h", - "line": 77, - "lineto": 83, - "block": "GIT_STREAM_STANDARD\nGIT_STREAM_TLS", - "tdef": "typedef", - "description": " The type of stream to register.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STREAM_STANDARD", - "comments": "

A standard (non-TLS) socket.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STREAM_TLS", - "comments": "

A TLS-encrypted socket.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_submodule", - { - "decl": "git_submodule", - "type": "struct", - "value": "git_submodule", - "file": "git2/types.h", - "line": 267, - "lineto": 267, - "tdef": "typedef", - "description": " Opaque structure representing a submodule.", - "comments": "", - "used": { - "returns": [ - "git_submodule_fetch_recurse_submodules", - "git_submodule_ignore", - "git_submodule_update_strategy" - ], - "needs": [ - "git_submodule_add_finalize", - "git_submodule_add_setup", - "git_submodule_add_to_index", - "git_submodule_branch", - "git_submodule_cb", - "git_submodule_clone", - "git_submodule_dup", - "git_submodule_fetch_recurse_submodules", - "git_submodule_foreach", - "git_submodule_free", - "git_submodule_head_id", - "git_submodule_ignore", - "git_submodule_index_id", - "git_submodule_init", - "git_submodule_location", - "git_submodule_lookup", - "git_submodule_name", - "git_submodule_open", - "git_submodule_owner", - "git_submodule_path", - "git_submodule_reload", - "git_submodule_repo_init", - "git_submodule_set_fetch_recurse_submodules", - "git_submodule_set_ignore", - "git_submodule_set_update", - "git_submodule_status", - "git_submodule_sync", - "git_submodule_update", - "git_submodule_update_options_init", - "git_submodule_update_strategy", - "git_submodule_url", - "git_submodule_wd_id" - ] - } - } - ], - [ - "git_submodule_ignore_t", - { - "decl": [ - "GIT_SUBMODULE_IGNORE_UNSPECIFIED", - "GIT_SUBMODULE_IGNORE_NONE", - "GIT_SUBMODULE_IGNORE_UNTRACKED", - "GIT_SUBMODULE_IGNORE_DIRTY", - "GIT_SUBMODULE_IGNORE_ALL" - ], - "type": "enum", - "file": "git2/types.h", - "line": 331, - "lineto": 338, - "block": "GIT_SUBMODULE_IGNORE_UNSPECIFIED\nGIT_SUBMODULE_IGNORE_NONE\nGIT_SUBMODULE_IGNORE_UNTRACKED\nGIT_SUBMODULE_IGNORE_DIRTY\nGIT_SUBMODULE_IGNORE_ALL", - "tdef": "typedef", - "description": " Submodule ignore values", - "comments": "

These values represent settings for the submodule.$name.ignore configuration value which says how deeply to look at the working directory when getting submodule status.

\n\n

You can override this value in memory on a per-submodule basis with git_submodule_set_ignore() and can write the changed value to disk with git_submodule_save(). If you have overwritten the value, you can revert to the on disk value by using GIT_SUBMODULE_IGNORE_RESET.

\n\n

The values are:

\n\n
    \n
  • GIT_SUBMODULE_IGNORE_UNSPECIFIED: use the submodule's configuration - GIT_SUBMODULE_IGNORE_NONE: don't ignore any change - i.e. even an untracked file, will mark the submodule as dirty. Ignored files are still ignored, of course. - GIT_SUBMODULE_IGNORE_UNTRACKED: ignore untracked files; only changes to tracked files, or the index or the HEAD commit will matter. - GIT_SUBMODULE_IGNORE_DIRTY: ignore changes in the working directory, only considering changes if the HEAD of submodule has moved from the value in the superproject. - GIT_SUBMODULE_IGNORE_ALL: never check if the submodule is dirty - GIT_SUBMODULE_IGNORE_DEFAULT: not used except as static initializer when we don't want any particular ignore rule to be specified.
  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_UNSPECIFIED", - "comments": "

use the submodule's configuration

\n", - "value": -1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_NONE", - "comments": "

any change or untracked == dirty

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_UNTRACKED", - "comments": "

dirty if tracked files change

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_DIRTY", - "comments": "

only dirty if HEAD moved

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_ALL", - "comments": "

never dirty

\n", - "value": 4 - } - ], - "used": { - "returns": [ - "git_submodule_ignore" - ], - "needs": [ - "git_submodule_set_ignore", - "git_submodule_status" - ] - } - } - ], - [ - "git_submodule_recurse_t", - { - "decl": [ - "GIT_SUBMODULE_RECURSE_NO", - "GIT_SUBMODULE_RECURSE_YES", - "GIT_SUBMODULE_RECURSE_ONDEMAND" - ], - "type": "enum", - "file": "git2/types.h", - "line": 350, - "lineto": 354, - "block": "GIT_SUBMODULE_RECURSE_NO\nGIT_SUBMODULE_RECURSE_YES\nGIT_SUBMODULE_RECURSE_ONDEMAND", - "tdef": "typedef", - "description": " Options for submodule recurse.", - "comments": "

Represent the value of submodule.$name.fetchRecurseSubmodules

\n\n
    \n
  • GIT_SUBMODULE_RECURSE_NO - do no recurse into submodules * GIT_SUBMODULE_RECURSE_YES - recurse into submodules * GIT_SUBMODULE_RECURSE_ONDEMAND - recurse into submodules only when commit not already in local clone
  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_SUBMODULE_RECURSE_NO", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_RECURSE_YES", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_RECURSE_ONDEMAND", - "comments": "", - "value": 2 - } - ], - "used": { - "returns": [ - "git_submodule_fetch_recurse_submodules" - ], - "needs": [ - "git_submodule_set_fetch_recurse_submodules" - ] - } - } - ], - [ - "git_submodule_status_t", - { - "decl": [ - "GIT_SUBMODULE_STATUS_IN_HEAD", - "GIT_SUBMODULE_STATUS_IN_INDEX", - "GIT_SUBMODULE_STATUS_IN_CONFIG", - "GIT_SUBMODULE_STATUS_IN_WD", - "GIT_SUBMODULE_STATUS_INDEX_ADDED", - "GIT_SUBMODULE_STATUS_INDEX_DELETED", - "GIT_SUBMODULE_STATUS_INDEX_MODIFIED", - "GIT_SUBMODULE_STATUS_WD_UNINITIALIZED", - "GIT_SUBMODULE_STATUS_WD_ADDED", - "GIT_SUBMODULE_STATUS_WD_DELETED", - "GIT_SUBMODULE_STATUS_WD_MODIFIED", - "GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED", - "GIT_SUBMODULE_STATUS_WD_WD_MODIFIED", - "GIT_SUBMODULE_STATUS_WD_UNTRACKED" - ], - "type": "enum", - "file": "git2/submodule.h", - "line": 74, - "lineto": 89, - "block": "GIT_SUBMODULE_STATUS_IN_HEAD\nGIT_SUBMODULE_STATUS_IN_INDEX\nGIT_SUBMODULE_STATUS_IN_CONFIG\nGIT_SUBMODULE_STATUS_IN_WD\nGIT_SUBMODULE_STATUS_INDEX_ADDED\nGIT_SUBMODULE_STATUS_INDEX_DELETED\nGIT_SUBMODULE_STATUS_INDEX_MODIFIED\nGIT_SUBMODULE_STATUS_WD_UNINITIALIZED\nGIT_SUBMODULE_STATUS_WD_ADDED\nGIT_SUBMODULE_STATUS_WD_DELETED\nGIT_SUBMODULE_STATUS_WD_MODIFIED\nGIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED\nGIT_SUBMODULE_STATUS_WD_WD_MODIFIED\nGIT_SUBMODULE_STATUS_WD_UNTRACKED", - "tdef": "typedef", - "description": " Return codes for submodule status.", - "comments": "

A combination of these flags will be returned to describe the status of a submodule. Depending on the "ignore" property of the submodule, some of the flags may never be returned because they indicate changes that are supposed to be ignored.

\n\n

Submodule info is contained in 4 places: the HEAD tree, the index, config files (both .git/config and .gitmodules), and the working directory. Any or all of those places might be missing information about the submodule depending on what state the repo is in. We consider all four places to build the combination of status flags.

\n\n

There are four values that are not really status, but give basic info about what sources of submodule data are available. These will be returned even if ignore is set to "ALL".

\n\n
    \n
  • IN_HEAD - superproject head contains submodule * IN_INDEX - superproject index contains submodule * IN_CONFIG - superproject gitmodules has submodule * IN_WD - superproject workdir has submodule
  • \n
\n\n

The following values will be returned so long as ignore is not "ALL".

\n\n
    \n
  • INDEX_ADDED - in index, not in head * INDEX_DELETED - in head, not in index * INDEX_MODIFIED - index and head don't match * WD_UNINITIALIZED - workdir contains empty directory * WD_ADDED - in workdir, not index * WD_DELETED - in index, not workdir * WD_MODIFIED - index and workdir head don't match
  • \n
\n\n

The following can only be returned if ignore is "NONE" or "UNTRACKED".

\n\n
    \n
  • WD_INDEX_MODIFIED - submodule workdir index is dirty * WD_WD_MODIFIED - submodule workdir has modified files
  • \n
\n\n

Lastly, the following will only be returned for ignore "NONE".

\n\n
    \n
  • WD_UNTRACKED - wd contains untracked files
  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_IN_HEAD", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_IN_INDEX", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_IN_CONFIG", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_IN_WD", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_INDEX_ADDED", - "comments": "", - "value": 16 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_INDEX_DELETED", - "comments": "", - "value": 32 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_INDEX_MODIFIED", - "comments": "", - "value": 64 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_UNINITIALIZED", - "comments": "", - "value": 128 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_ADDED", - "comments": "", - "value": 256 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_DELETED", - "comments": "", - "value": 512 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_MODIFIED", - "comments": "", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED", - "comments": "", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_WD_MODIFIED", - "comments": "", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_UNTRACKED", - "comments": "", - "value": 8192 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_submodule_update_options", - { - "decl": [ - "unsigned int version", - "git_checkout_options checkout_opts", - "git_fetch_options fetch_opts", - "int allow_fetch" - ], - "type": "struct", - "value": "git_submodule_update_options", - "file": "git2/submodule.h", - "line": 128, - "lineto": 153, - "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint allow_fetch", - "tdef": "typedef", - "description": " Submodule update options structure", - "comments": "

Initialize with GIT_SUBMODULE_UPDATE_OPTIONS_INIT. Alternatively, you can use git_submodule_update_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_push_update_reference_cb": { + "type": "callback", + "file": "git2/remote.h", + "line": 509, + "lineto": 509, + "args": [ + { + "name": "refname", + "type": "const char *", + "comment": "refname specifying to the remote ref" + }, + { + "name": "status", + "type": "const char *", + "comment": "status message sent from the remote" + }, + { + "name": "data", + "type": "void *", + "comment": "data provided by the caller" + } + ], + "argline": "const char *refname, const char *status, void *data", + "sig": "const char *::const char *::void *", + "return": { + "type": "int", + "comment": " 0 on success, otherwise an error" + }, + "description": "

Callback used to inform of the update status from the remote.

\n", + "comments": "

Called for each updated reference on push. If status is not NULL, the update was rejected by the remote server and status contains the reason given.

\n" + }, + "git_url_resolve_cb": { + "type": "callback", + "file": "git2/remote.h", + "line": 525, + "lineto": 525, + "args": [ + { + "name": "url_resolved", + "type": "git_buf *", + "comment": "The buffer to write the resolved URL to" + }, + { + "name": "url", + "type": "const char *", + "comment": "The URL to resolve" + }, + { + "name": "direction", + "type": "int", + "comment": "GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "git_buf *url_resolved, const char *url, int direction, void *payload", + "sig": "git_buf *::const char *::int::void *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_PASSTHROUGH or an error\n " + }, + "description": "

Callback to resolve URLs before connecting to remote

\n", + "comments": "

If you return GIT_PASSTHROUGH, you don't need to write anything to url_resolved.

\n" + }, + "git_remote_ready_cb": { + "type": "callback", + "file": "git2/remote.h", + "line": 538, + "lineto": 538, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "The remote to be connected" + }, + { + "name": "direction", + "type": "int", + "comment": "GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "git_remote *remote, int direction, void *payload", + "sig": "git_remote *::int::void *", + "return": { + "type": "int", + "comment": " 0 on success, or an error" + }, + "description": "

Callback invoked immediately before we attempt to connect to the\n given url. Callers may change the URL before the connection by\n calling git_remote_set_instance_url in the callback.

\n", "comments": "" - }, - { - "type": "git_checkout_options", - "name": "checkout_opts", - "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`. Generally you will want the use\n GIT_CHECKOUT_SAFE to update files in the working\n directory." - }, - { - "type": "git_fetch_options", - "name": "fetch_opts", - "comments": " Options which control the fetch, including callbacks.\n\n The callbacks to use for reporting fetch progress, and for acquiring\n credentials in the event they are needed." - }, - { - "type": "int", - "name": "allow_fetch", - "comments": " Allow fetching from the submodule's default remote if the target\n commit isn't found. Enabled by default." - } - ], - "used": { - "returns": [], - "needs": [ - "git_submodule_clone", - "git_submodule_update", - "git_submodule_update_options_init" - ] - } - } - ], - [ - "git_submodule_update_t", - { - "decl": [ - "GIT_SUBMODULE_UPDATE_CHECKOUT", - "GIT_SUBMODULE_UPDATE_REBASE", - "GIT_SUBMODULE_UPDATE_MERGE", - "GIT_SUBMODULE_UPDATE_NONE", - "GIT_SUBMODULE_UPDATE_DEFAULT" - ], - "type": "enum", - "file": "git2/types.h", - "line": 295, - "lineto": 302, - "block": "GIT_SUBMODULE_UPDATE_CHECKOUT\nGIT_SUBMODULE_UPDATE_REBASE\nGIT_SUBMODULE_UPDATE_MERGE\nGIT_SUBMODULE_UPDATE_NONE\nGIT_SUBMODULE_UPDATE_DEFAULT", - "tdef": "typedef", - "description": " Submodule update values", - "comments": "

These values represent settings for the submodule.$name.update configuration value which says how to handle git submodule update for this submodule. The value is usually set in the ".gitmodules" file and copied to ".git/config" when the submodule is initialized.

\n\n

You can override this setting on a per-submodule basis with git_submodule_set_update() and write the changed value to disk using git_submodule_save(). If you have overwritten the value, you can revert it by passing GIT_SUBMODULE_UPDATE_RESET to the set function.

\n\n

The values are:

\n\n
    \n
  • GIT_SUBMODULE_UPDATE_CHECKOUT: the default; when a submodule is updated, checkout the new detached HEAD to the submodule directory. - GIT_SUBMODULE_UPDATE_REBASE: update by rebasing the current checked out branch onto the commit from the superproject. - GIT_SUBMODULE_UPDATE_MERGE: update by merging the commit in the superproject into the current checkout out branch of the submodule. - GIT_SUBMODULE_UPDATE_NONE: do not update this submodule even when the commit in the superproject is updated. - GIT_SUBMODULE_UPDATE_DEFAULT: not used except as static initializer when we don't want any particular update rule to be specified.
  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_CHECKOUT", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_REBASE", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_MERGE", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_NONE", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_DEFAULT", - "comments": "", - "value": 0 - } - ], - "used": { - "returns": [ - "git_submodule_update_strategy" - ], - "needs": [ - "git_submodule_set_update" - ] - } - } - ], - [ - "git_tag", - { - "decl": "git_tag", - "type": "struct", - "value": "git_tag", - "file": "git2/types.h", - "line": 130, - "lineto": 130, - "tdef": "typedef", - "description": " Parsed representation of a tag object. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_tag_dup", - "git_tag_foreach", - "git_tag_free", - "git_tag_id", - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_tag_message", - "git_tag_name", - "git_tag_owner", - "git_tag_peel", - "git_tag_tagger", - "git_tag_target", - "git_tag_target_id", - "git_tag_target_type" - ] - } - } - ], - [ - "git_time", - { - "decl": [ - "git_time_t time", - "int offset", - "char sign" - ], - "type": "struct", - "value": "git_time", - "file": "git2/types.h", - "line": 175, - "lineto": 179, - "block": "git_time_t time\nint offset\nchar sign", - "tdef": "typedef", - "description": " Time in a signature ", - "comments": "", - "fields": [ - { - "type": "git_time_t", - "name": "time", - "comments": " time in seconds from epoch " - }, - { - "type": "int", - "name": "offset", - "comments": " timezone offset, in minutes " - }, - { - "type": "char", - "name": "sign", - "comments": " indicator for questionable '-0000' offsets in signature " - } - ], - "used": { - "returns": [ - "git_commit_time" - ], - "needs": [ - "git_signature_new" - ] - } - } - ], - [ - "git_trace_level_t", - { - "decl": [ - "GIT_TRACE_NONE", - "GIT_TRACE_FATAL", - "GIT_TRACE_ERROR", - "GIT_TRACE_WARN", - "GIT_TRACE_INFO", - "GIT_TRACE_DEBUG", - "GIT_TRACE_TRACE" - ], - "type": "enum", - "file": "git2/trace.h", - "line": 26, - "lineto": 47, - "block": "GIT_TRACE_NONE\nGIT_TRACE_FATAL\nGIT_TRACE_ERROR\nGIT_TRACE_WARN\nGIT_TRACE_INFO\nGIT_TRACE_DEBUG\nGIT_TRACE_TRACE", - "tdef": "typedef", - "description": " Available tracing levels. When tracing is set to a particular level,\n callers will be provided tracing at the given level and all lower levels.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_TRACE_NONE", - "comments": "

No tracing will be performed.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_TRACE_FATAL", - "comments": "

Severe errors that may impact the program's execution

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_TRACE_ERROR", - "comments": "

Errors that do not impact the program's execution

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_TRACE_WARN", - "comments": "

Warnings that suggest abnormal data

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_TRACE_INFO", - "comments": "

Informational messages about program execution

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_TRACE_DEBUG", - "comments": "

Detailed data that allows for debugging

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_TRACE_TRACE", - "comments": "

Exceptionally detailed debugging data

\n", - "value": 6 - } - ], - "used": { - "returns": [], - "needs": [ - "git_trace_cb", - "git_trace_set" - ] - } - } - ], - [ - "git_transaction", - { - "decl": "git_transaction", - "type": "struct", - "value": "git_transaction", - "file": "git2/types.h", - "line": 195, - "lineto": 195, - "tdef": "typedef", - "description": " Transactional interface to references ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_config_lock", - "git_transaction_commit", - "git_transaction_free", - "git_transaction_lock_ref", - "git_transaction_new", - "git_transaction_remove", - "git_transaction_set_reflog", - "git_transaction_set_symbolic_target", - "git_transaction_set_target" - ] - } - } - ], - [ - "git_transport", - { - "decl": "git_transport", - "type": "struct", - "value": "git_transport", - "file": "git2/types.h", - "line": 247, - "lineto": 247, - "tdef": "typedef", - "description": " Interface which represents a transport to communicate with a\n remote.", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_transport_cb" - ] - } - } - ], - [ - "git_tree", - { - "decl": "git_tree", - "type": "struct", - "value": "git_tree", - "file": "git2/types.h", - "line": 142, - "lineto": 142, - "tdef": "typedef", - "description": " Representation of a tree object. ", - "comments": "", - "used": { - "returns": [ - "git_tree_entry_byid", - "git_tree_entry_byindex", - "git_tree_entry_byname", - "git_treebuilder_get" - ], - "needs": [ - "git_apply_to_tree", - "git_commit_amend", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_cb", - "git_commit_create_v", - "git_commit_tree", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_index_read_tree", - "git_merge_trees", - "git_pathspec_match_tree", - "git_tree_create_updated", - "git_tree_dup", - "git_tree_entry_byid", - "git_tree_entry_byindex", - "git_tree_entry_byname", - "git_tree_entry_bypath", - "git_tree_entry_cmp", - "git_tree_entry_dup", - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw", - "git_tree_entry_free", - "git_tree_entry_id", - "git_tree_entry_name", - "git_tree_entry_to_object", - "git_tree_entry_type", - "git_tree_entrycount", - "git_tree_free", - "git_tree_id", - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_tree_owner", - "git_tree_walk", - "git_treebuilder_clear", - "git_treebuilder_entrycount", - "git_treebuilder_filter", - "git_treebuilder_filter_cb", - "git_treebuilder_free", - "git_treebuilder_get", - "git_treebuilder_insert", - "git_treebuilder_new", - "git_treebuilder_remove", - "git_treebuilder_write", - "git_treebuilder_write_with_buffer", - "git_treewalk_cb" - ] - } - } - ], - [ - "git_tree_entry", - { - "decl": "git_tree_entry", - "type": "struct", - "value": "git_tree_entry", - "file": "git2/types.h", - "line": 139, - "lineto": 139, - "tdef": "typedef", - "description": " Representation of each one of the entries in a tree object. ", - "comments": "", - "used": { - "returns": [ - "git_tree_entry_byid", - "git_tree_entry_byindex", - "git_tree_entry_byname", - "git_treebuilder_get" - ], - "needs": [ - "git_tree_entry_bypath", - "git_tree_entry_cmp", - "git_tree_entry_dup", - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw", - "git_tree_entry_free", - "git_tree_entry_id", - "git_tree_entry_name", - "git_tree_entry_to_object", - "git_tree_entry_type", - "git_treebuilder_filter_cb", - "git_treebuilder_insert", - "git_treewalk_cb" - ] - } - } - ], - [ - "git_tree_update", - { - "decl": [ - "git_tree_update_t action", - "git_oid id", - "git_filemode_t filemode", - "const char * path" - ], - "type": "struct", - "value": "git_tree_update", - "file": "git2/tree.h", - "line": 437, - "lineto": 446, - "block": "git_tree_update_t action\ngit_oid id\ngit_filemode_t filemode\nconst char * path", - "tdef": "typedef", - "description": " An action to perform during the update of a tree", - "comments": "", - "fields": [ - { - "type": "git_tree_update_t", - "name": "action", - "comments": " Update action. If it's an removal, only the path is looked at " - }, - { - "type": "git_oid", - "name": "id", - "comments": " The entry's id " - }, - { - "type": "git_filemode_t", - "name": "filemode", - "comments": " The filemode/kind of object " - }, - { - "type": "const char *", - "name": "path", - "comments": " The full path from the root tree " - } - ], - "used": { - "returns": [], - "needs": [ - "git_tree_create_updated" - ] - } - } - ], - [ - "git_tree_update_t", - { - "decl": [ - "GIT_TREE_UPDATE_UPSERT", - "GIT_TREE_UPDATE_REMOVE" - ], - "type": "enum", - "file": "git2/tree.h", - "line": 427, - "lineto": 432, - "block": "GIT_TREE_UPDATE_UPSERT\nGIT_TREE_UPDATE_REMOVE", - "tdef": "typedef", - "description": " The kind of update to perform", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_TREE_UPDATE_UPSERT", - "comments": "

Update or insert an entry at the specified path

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_TREE_UPDATE_REMOVE", - "comments": "

Remove an entry from the specified path

\n", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_treebuilder", - { - "decl": "git_treebuilder", - "type": "struct", - "value": "git_treebuilder", - "file": "git2/types.h", - "line": 145, - "lineto": 145, - "tdef": "typedef", - "description": " Constructor for in-memory trees ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_treebuilder_clear", - "git_treebuilder_entrycount", - "git_treebuilder_filter", - "git_treebuilder_free", - "git_treebuilder_get", - "git_treebuilder_insert", - "git_treebuilder_new", - "git_treebuilder_remove", - "git_treebuilder_write", - "git_treebuilder_write_with_buffer" - ] - } - } - ], - [ - "git_treewalk_mode", - { - "decl": [ - "GIT_TREEWALK_PRE", - "GIT_TREEWALK_POST" - ], - "type": "enum", - "file": "git2/tree.h", - "line": 387, - "lineto": 390, - "block": "GIT_TREEWALK_PRE\nGIT_TREEWALK_POST", - "tdef": "typedef", - "description": " Tree traversal modes ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_TREEWALK_PRE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_TREEWALK_POST", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [ - "git_tree_walk" - ] - } - } - ], - [ - "git_worktree", - { - "decl": "git_worktree", - "type": "struct", - "value": "git_worktree", - "file": "git2/types.h", - "line": 121, - "lineto": 121, - "tdef": "typedef", - "description": " Representation of a working tree ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_repository_open_from_worktree", - "git_worktree_add", - "git_worktree_add_options_init", - "git_worktree_free", - "git_worktree_is_locked", - "git_worktree_is_prunable", - "git_worktree_lock", - "git_worktree_lookup", - "git_worktree_name", - "git_worktree_open_from_repository", - "git_worktree_path", - "git_worktree_prune", - "git_worktree_prune_options_init", - "git_worktree_unlock", - "git_worktree_validate" - ] - } - } - ], - [ - "git_worktree_add_options", - { - "decl": [ - "unsigned int version", - "int lock", - "git_reference * ref" - ], - "type": "struct", - "value": "git_worktree_add_options", - "file": "git2/worktree.h", - "line": 84, - "lineto": 89, - "block": "unsigned int version\nint lock\ngit_reference * ref", - "tdef": "typedef", - "description": " Worktree add options structure", - "comments": "

Initialize with GIT_WORKTREE_ADD_OPTIONS_INIT. Alternatively, you can use git_worktree_add_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_repository_fetchhead_foreach_cb": { + "type": "callback", + "file": "git2/repository.h", + "line": 724, + "lineto": 728, + "args": [ + { + "name": "ref_name", + "type": "const char *", + "comment": "The reference name" + }, + { + "name": "remote_url", + "type": "const char *", + "comment": "The remote URL" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "The reference target OID" + }, + { + "name": "is_merge", + "type": "unsigned int", + "comment": "Was the reference the result of a merge" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_repository_fetchhead_foreach" + } + ], + "argline": "const char *ref_name, const char *remote_url, const git_oid *oid, unsigned int is_merge, void *payload", + "sig": "const char *::const char *::const git_oid *::unsigned int::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over each FETCH_HEAD entry

\n", "comments": "" - }, - { - "type": "int", - "name": "lock", - "comments": " lock newly created worktree " - }, - { - "type": "git_reference *", - "name": "ref", - "comments": " reference to use for the new worktree HEAD " - } - ], - "used": { - "returns": [], - "needs": [ - "git_worktree_add", - "git_worktree_add_options_init" - ] - } - } - ], - [ - "git_worktree_prune_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags" - ], - "type": "struct", - "value": "git_worktree_prune_options", - "file": "git2/worktree.h", - "line": 198, - "lineto": 203, - "block": "unsigned int version\nuint32_t flags", - "tdef": "typedef", - "description": " Worktree prune options structure", - "comments": "

Initialize with GIT_WORKTREE_PRUNE_OPTIONS_INIT. Alternatively, you can use git_worktree_prune_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", + }, + "git_repository_mergehead_foreach_cb": { + "type": "callback", + "file": "git2/repository.h", + "line": 755, + "lineto": 756, + "args": [ + { + "name": "oid", + "type": "const git_oid *", + "comment": "The merge OID" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_repository_mergehead_foreach" + } + ], + "argline": "const git_oid *oid, void *payload", + "sig": "const git_oid *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over each MERGE_HEAD entry

\n", "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of `git_worktree_prune_t` " - } - ], - "used": { - "returns": [], - "needs": [ - "git_worktree_is_prunable", - "git_worktree_prune", - "git_worktree_prune_options_init" - ] - } - } - ], - [ - "git_worktree_prune_t", - { - "decl": [ - "GIT_WORKTREE_PRUNE_VALID", - "GIT_WORKTREE_PRUNE_LOCKED", - "GIT_WORKTREE_PRUNE_WORKING_TREE" - ], - "type": "enum", - "file": "git2/worktree.h", - "line": 182, - "lineto": 189, - "block": "GIT_WORKTREE_PRUNE_VALID\nGIT_WORKTREE_PRUNE_LOCKED\nGIT_WORKTREE_PRUNE_WORKING_TREE", - "tdef": "typedef", - "description": " Flags which can be passed to git_worktree_prune to alter its\n behavior.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_WORKTREE_PRUNE_VALID", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_WORKTREE_PRUNE_LOCKED", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_WORKTREE_PRUNE_WORKING_TREE", - "comments": "", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_writestream", - { - "decl": [ - "int (*)(git_writestream *, const char *, size_t) write", - "int (*)(git_writestream *) close", - "void (*)(git_writestream *) free" - ], - "type": "struct", - "value": "git_writestream", - "file": "git2/types.h", - "line": 359, - "lineto": 363, - "tdef": null, - "description": " A type to write in a streaming fashion, for example, for filters. ", - "comments": "", - "fields": [ - { - "type": "int (*)(git_writestream *, const char *, size_t)", - "name": "write", + }, + "git_revwalk_hide_cb": { + "type": "callback", + "file": "git2/revwalk.h", + "line": 283, + "lineto": 285, + "args": [ + { + "name": "commit_id", + "type": "const git_oid *", + "comment": "oid of Commit" + }, + { + "name": "payload", + "type": "void *", + "comment": "User-specified pointer to data to be passed as data payload" + } + ], + "argline": "const git_oid *commit_id, void *payload", + "sig": "const git_oid *::void *", + "return": { + "type": "int", + "comment": " non-zero to hide the commmit and it parent." + }, + "description": "

This is a callback function that user can provide to hide a\n commit and its parents. If the callback function returns non-zero value,\n then this commit and its parents will be hidden.

\n", + "comments": "" + }, + "git_stash_apply_progress_cb": { + "type": "callback", + "file": "git2/stash.h", + "line": 169, + "lineto": 171, + "args": [ + { + "name": "progress", + "type": "git_stash_apply_progress_t", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "git_stash_apply_progress_t progress, void *payload", + "sig": "git_stash_apply_progress_t::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Stash application progress notification function.\n Return 0 to continue processing, or a negative value to\n abort the stash application.

\n", + "comments": "" + }, + "git_stash_cb": { + "type": "callback", + "file": "git2/stash.h", + "line": 255, + "lineto": 259, + "args": [ + { + "name": "index", + "type": "size_t", + "comment": "The position within the stash list. 0 points to the\n most recent stashed state." + }, + { + "name": "message", + "type": "const char *", + "comment": "The stash message." + }, + { + "name": "stash_id", + "type": "const git_oid *", + "comment": "The commit oid of the stashed state." + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra parameter to callback function." + } + ], + "argline": "size_t index, const char *message, const git_oid *stash_id, void *payload", + "sig": "size_t::const char *::const git_oid *::void *", + "return": { + "type": "int", + "comment": " 0 to continue iterating or non-zero to stop." + }, + "description": "

This is a callback function you can provide to iterate over all the\n stashed states that will be invoked per entry.

\n", + "comments": "" + }, + "git_status_cb": { + "type": "callback", + "file": "git2/status.h", + "line": 63, + "lineto": 64, + "args": [ + { + "name": "path", + "type": "const char *", + "comment": null + }, + { + "name": "status_flags", + "type": "unsigned int", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const char *path, unsigned int status_flags, void *payload", + "sig": "const char *::unsigned int::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Function pointer to receive status on individual files

\n", + "comments": "

path is the relative path to the file from the root of the repository.

\n\n

status_flags is a combination of git_status_t values that apply.

\n\n

payload is the value you passed to the foreach function as payload.

\n" + }, + "git_submodule_cb": { + "type": "callback", + "file": "git2/submodule.h", + "line": 118, + "lineto": 119, + "args": [ + { + "name": "sm", + "type": "git_submodule *", + "comment": "git_submodule currently being visited" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the submodule" + }, + { + "name": "payload", + "type": "void *", + "comment": "value you passed to the foreach function as payload" + } + ], + "argline": "git_submodule *sm, const char *name, void *payload", + "sig": "git_submodule *::const char *::void *", + "return": { + "type": "int", + "comment": " 0 on success or error code" + }, + "description": "

Function pointer to receive each submodule

\n", + "comments": "" + }, + "git_tag_foreach_cb": { + "type": "callback", + "file": "git2/tag.h", + "line": 330, + "lineto": 330, + "args": [ + { + "name": "name", + "type": "const char *", + "comment": "The tag name" + }, + { + "name": "oid", + "type": "git_oid *", + "comment": "The tag's OID" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_tag_foreach" + } + ], + "argline": "const char *name, git_oid *oid, void *payload", + "sig": "const char *::git_oid *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over tag names

\n", + "comments": "" + }, + "git_trace_cb": { + "type": "callback", + "file": "git2/trace.h", + "line": 52, + "lineto": 52, + "args": [ + { + "name": "level", + "type": "git_trace_level_t", + "comment": null + }, + { + "name": "msg", + "type": "const char *", + "comment": null + } + ], + "argline": "git_trace_level_t level, const char *msg", + "sig": "git_trace_level_t::const char *", + "return": { + "type": "void", + "comment": null + }, + "description": "

An instance for a tracing function

\n", "comments": "" - }, - { - "type": "int (*)(git_writestream *)", - "name": "close", + }, + "git_transport_message_cb": { + "type": "callback", + "file": "git2/transport.h", + "line": 34, + "lineto": 34, + "args": [ + { + "name": "str", + "type": "const char *", + "comment": "The message from the transport" + }, + { + "name": "len", + "type": "int", + "comment": "The length of the message" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "const char *str, int len, void *payload", + "sig": "const char *::int::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Callback for messages received by the transport.

\n", + "comments": "

Return a negative value to cancel the network operation.

\n" + }, + "git_transport_cb": { + "type": "callback", + "file": "git2/transport.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "out", + "type": "git_transport **", + "comment": null + }, + { + "name": "owner", + "type": "git_remote *", + "comment": null + }, + { + "name": "param", + "type": "void *", + "comment": null + } + ], + "argline": "git_transport **out, git_remote *owner, void *param", + "sig": "git_transport **::git_remote *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Signature of a function which creates a transport

\n", "comments": "" - }, - { - "type": "void (*)(git_writestream *)", - "name": "free", + }, + "git_treebuilder_filter_cb": { + "type": "callback", + "file": "git2/tree.h", + "line": 349, + "lineto": 350, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const git_tree_entry *entry, void *payload", + "sig": "const git_tree_entry *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Callback for git_treebuilder_filter

\n", + "comments": "

The return value is treated as a boolean, with zero indicating that the entry should be left alone and any non-zero value meaning that the entry should be removed from the treebuilder list (i.e. filtered out).

\n" + }, + "git_treewalk_cb": { + "type": "callback", + "file": "git2/tree.h", + "line": 383, + "lineto": 384, + "args": [ + { + "name": "root", + "type": "const char *", + "comment": null + }, + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": null + }, + { + "name": "payload", + "type": "void *", + "comment": null + } + ], + "argline": "const char *root, const git_tree_entry *entry, void *payload", + "sig": "const char *::const git_tree_entry *::void *", + "return": { + "type": "int", + "comment": null + }, + "description": "

Callback for the tree traversal method

\n", "comments": "" - } - ], - "block": "int (*)(git_writestream *, const char *, size_t) write\nint (*)(git_writestream *) close\nvoid (*)(git_writestream *) free", - "used": { - "returns": [], - "needs": [ - "git_blob_create_from_stream", - "git_blob_create_from_stream_commit", - "git_filter_list_stream_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_data", - "git_filter_list_stream_file" - ] } - } - ] - ], - "prefix": "include", - "groups": [ - [ - "annotated", - [ - "git_annotated_commit_free", - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_from_ref", - "git_annotated_commit_from_revspec", - "git_annotated_commit_id", - "git_annotated_commit_lookup", - "git_annotated_commit_ref" - ] - ], - [ - "apply", - [ - "git_apply", - "git_apply_to_tree" - ] - ], - [ - "attr", - [ - "git_attr_add_macro", - "git_attr_cache_flush", - "git_attr_foreach", - "git_attr_foreach_ext", - "git_attr_get", - "git_attr_get_ext", - "git_attr_get_many", - "git_attr_get_many_ext", - "git_attr_value" - ] - ], - [ - "blame", - [ - "git_blame_buffer", - "git_blame_file", - "git_blame_free", - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline", - "git_blame_get_hunk_count", - "git_blame_init_options", - "git_blame_options_init" - ] - ], - [ - "blob", - [ - "git_blob_create_from_buffer", - "git_blob_create_from_disk", - "git_blob_create_from_stream", - "git_blob_create_from_stream_commit", - "git_blob_create_from_workdir", - "git_blob_dup", - "git_blob_filter", - "git_blob_filter_options_init", - "git_blob_filtered_content", - "git_blob_free", - "git_blob_id", - "git_blob_is_binary", - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_blob_owner", - "git_blob_rawcontent", - "git_blob_rawsize" - ] - ], - [ - "branch", - [ - "git_branch_create", - "git_branch_create_from_annotated", - "git_branch_delete", - "git_branch_is_checked_out", - "git_branch_is_head", - "git_branch_iterator_free", - "git_branch_iterator_new", - "git_branch_lookup", - "git_branch_move", - "git_branch_name", - "git_branch_name_is_valid", - "git_branch_next", - "git_branch_remote_name", - "git_branch_set_upstream", - "git_branch_upstream", - "git_branch_upstream_merge", - "git_branch_upstream_name", - "git_branch_upstream_remote" - ] - ], - [ - "buf", - [ - "git_buf_contains_nul", - "git_buf_dispose", - "git_buf_free", - "git_buf_grow", - "git_buf_is_binary", - "git_buf_set" - ] - ], - [ - "checkout", - [ - "git_checkout_head", - "git_checkout_index", - "git_checkout_options_init", - "git_checkout_tree" - ] - ], - [ - "cherrypick", - [ - "git_cherrypick", - "git_cherrypick_commit", - "git_cherrypick_options_init" - ] - ], - [ - "clone", - [ - "git_clone", - "git_clone_options_init" - ] - ], - [ - "commit", - [ - "git_commit_amend", - "git_commit_author", - "git_commit_author_with_mailmap", - "git_commit_body", - "git_commit_committer", - "git_commit_committer_with_mailmap", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_v", - "git_commit_create_with_signature", - "git_commit_dup", - "git_commit_extract_signature", - "git_commit_free", - "git_commit_header_field", - "git_commit_id", - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_commit_message", - "git_commit_message_encoding", - "git_commit_message_raw", - "git_commit_nth_gen_ancestor", - "git_commit_owner", - "git_commit_parent", - "git_commit_parent_id", - "git_commit_parentcount", - "git_commit_raw_header", - "git_commit_summary", - "git_commit_time", - "git_commit_time_offset", - "git_commit_tree", - "git_commit_tree_id" - ] - ], - [ - "config", - [ - "git_config_add_file_ondisk", - "git_config_backend_foreach_match", - "git_config_delete_entry", - "git_config_delete_multivar", - "git_config_entry_free", - "git_config_find_global", - "git_config_find_programdata", - "git_config_find_system", - "git_config_find_xdg", - "git_config_foreach", - "git_config_foreach_match", - "git_config_free", - "git_config_get_bool", - "git_config_get_entry", - "git_config_get_int32", - "git_config_get_int64", - "git_config_get_mapped", - "git_config_get_multivar_foreach", - "git_config_get_path", - "git_config_get_string", - "git_config_get_string_buf", - "git_config_iterator_free", - "git_config_iterator_glob_new", - "git_config_iterator_new", - "git_config_lock", - "git_config_lookup_map_value", - "git_config_multivar_iterator_new", - "git_config_new", - "git_config_next", - "git_config_open_default", - "git_config_open_global", - "git_config_open_level", - "git_config_open_ondisk", - "git_config_parse_bool", - "git_config_parse_int32", - "git_config_parse_int64", - "git_config_parse_path", - "git_config_set_bool", - "git_config_set_int32", - "git_config_set_int64", - "git_config_set_multivar", - "git_config_set_string", - "git_config_snapshot" - ] - ], - [ - "credential", - [ - "git_credential_default_new", - "git_credential_free", - "git_credential_get_username", - "git_credential_has_username", - "git_credential_ssh_custom_new", - "git_credential_ssh_interactive_new", - "git_credential_ssh_key_from_agent", - "git_credential_ssh_key_memory_new", - "git_credential_ssh_key_new", - "git_credential_username_new", - "git_credential_userpass", - "git_credential_userpass_plaintext_new" - ] - ], - [ - "describe", - [ - "git_describe_commit", - "git_describe_format", - "git_describe_format_options_init", - "git_describe_options_init", - "git_describe_result_free", - "git_describe_workdir" - ] - ], - [ - "diff", - [ - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_commit_as_email", - "git_diff_find_options_init", - "git_diff_find_similar", - "git_diff_foreach", - "git_diff_format_email", - "git_diff_format_email_options_init", - "git_diff_free", - "git_diff_from_buffer", - "git_diff_get_delta", - "git_diff_get_stats", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_is_sorted_icase", - "git_diff_merge", - "git_diff_num_deltas", - "git_diff_num_deltas_of_type", - "git_diff_options_init", - "git_diff_patchid", - "git_diff_patchid_options_init", - "git_diff_print", - "git_diff_stats_deletions", - "git_diff_stats_files_changed", - "git_diff_stats_free", - "git_diff_stats_insertions", - "git_diff_stats_to_buf", - "git_diff_status_char", - "git_diff_to_buf", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index" - ] - ], - [ - "error", - [ - "git_error_clear", - "git_error_last", - "git_error_set_oom", - "git_error_set_str" - ] - ], - [ - "fetch", - [ - "git_fetch_options_init" - ] - ], - [ - "filter", - [ - "git_filter_list_apply_to_blob", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_data", - "git_filter_list_apply_to_file", - "git_filter_list_contains", - "git_filter_list_free", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_data", - "git_filter_list_stream_file" - ] - ], - [ - "giterr", - [ - "giterr_clear", - "giterr_last", - "giterr_set_oom", - "giterr_set_str" - ] - ], - [ - "graph", - [ - "git_graph_ahead_behind", - "git_graph_descendant_of", - "git_graph_reachable_from_any" - ] - ], - [ - "ignore", - [ - "git_ignore_add_rule", - "git_ignore_clear_internal_rules", - "git_ignore_path_is_ignored" - ] - ], - [ - "index", - [ - "git_index_add", - "git_index_add_all", - "git_index_add_bypath", - "git_index_add_from_buffer", - "git_index_caps", - "git_index_checksum", - "git_index_clear", - "git_index_conflict_add", - "git_index_conflict_cleanup", - "git_index_conflict_get", - "git_index_conflict_iterator_free", - "git_index_conflict_iterator_new", - "git_index_conflict_next", - "git_index_conflict_remove", - "git_index_entry_is_conflict", - "git_index_entry_stage", - "git_index_entrycount", - "git_index_find", - "git_index_find_prefix", - "git_index_free", - "git_index_get_byindex", - "git_index_get_bypath", - "git_index_has_conflicts", - "git_index_iterator_free", - "git_index_iterator_new", - "git_index_iterator_next", - "git_index_new", - "git_index_open", - "git_index_owner", - "git_index_path", - "git_index_read", - "git_index_read_tree", - "git_index_remove", - "git_index_remove_all", - "git_index_remove_bypath", - "git_index_remove_directory", - "git_index_set_caps", - "git_index_set_version", - "git_index_update_all", - "git_index_version", - "git_index_write", - "git_index_write_tree", - "git_index_write_tree_to" - ] - ], - [ - "indexer", - [ - "git_indexer_append", - "git_indexer_commit", - "git_indexer_free", - "git_indexer_hash", - "git_indexer_new", - "git_indexer_options_init" - ] - ], - [ - "libgit2", - [ - "git_libgit2_features", - "git_libgit2_init", - "git_libgit2_opts", - "git_libgit2_shutdown", - "git_libgit2_version" - ] - ], - [ - "mailmap", - [ - "git_mailmap_add_entry", - "git_mailmap_free", - "git_mailmap_from_buffer", - "git_mailmap_from_repository", - "git_mailmap_new", - "git_mailmap_resolve", - "git_mailmap_resolve_signature" - ] - ], - [ - "merge", - [ - "git_merge", - "git_merge_analysis", - "git_merge_analysis_for_ref", - "git_merge_base", - "git_merge_base_many", - "git_merge_base_octopus", - "git_merge_bases", - "git_merge_bases_many", - "git_merge_commits", - "git_merge_file", - "git_merge_file_from_index", - "git_merge_file_input_init", - "git_merge_file_options_init", - "git_merge_file_result_free", - "git_merge_options_init", - "git_merge_trees" - ] - ], - [ - "message", - [ - "git_message_prettify", - "git_message_trailer_array_free", - "git_message_trailers" - ] - ], - [ - "note", - [ - "git_note_author", - "git_note_commit_create", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_committer", - "git_note_create", - "git_note_default_ref", - "git_note_foreach", - "git_note_free", - "git_note_id", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_message", - "git_note_next", - "git_note_read", - "git_note_remove" - ] - ], - [ - "object", - [ - "git_object__size", - "git_object_dup", - "git_object_free", - "git_object_id", - "git_object_lookup", - "git_object_lookup_bypath", - "git_object_lookup_prefix", - "git_object_owner", - "git_object_peel", - "git_object_short_id", - "git_object_string2type", - "git_object_type", - "git_object_type2string", - "git_object_typeisloose" - ] - ], - [ - "odb", - [ - "git_odb_add_alternate", - "git_odb_add_backend", - "git_odb_add_disk_alternate", - "git_odb_backend_loose", - "git_odb_backend_one_pack", - "git_odb_backend_pack", - "git_odb_exists", - "git_odb_exists_prefix", - "git_odb_expand_ids", - "git_odb_foreach", - "git_odb_free", - "git_odb_get_backend", - "git_odb_hash", - "git_odb_hashfile", - "git_odb_new", - "git_odb_num_backends", - "git_odb_object_data", - "git_odb_object_dup", - "git_odb_object_free", - "git_odb_object_id", - "git_odb_object_size", - "git_odb_object_type", - "git_odb_open", - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_read", - "git_odb_read_header", - "git_odb_read_prefix", - "git_odb_refresh", - "git_odb_set_commit_graph", - "git_odb_stream_finalize_write", - "git_odb_stream_free", - "git_odb_stream_read", - "git_odb_stream_write", - "git_odb_write", - "git_odb_write_multi_pack_index", - "git_odb_write_pack" - ] - ], - [ - "oid", - [ - "git_oid_cmp", - "git_oid_cpy", - "git_oid_equal", - "git_oid_fmt", - "git_oid_fromraw", - "git_oid_fromstr", - "git_oid_fromstrn", - "git_oid_fromstrp", - "git_oid_is_zero", - "git_oid_iszero", - "git_oid_ncmp", - "git_oid_nfmt", - "git_oid_pathfmt", - "git_oid_shorten_add", - "git_oid_shorten_free", - "git_oid_shorten_new", - "git_oid_strcmp", - "git_oid_streq", - "git_oid_tostr", - "git_oid_tostr_s" - ] - ], - [ - "oidarray", - [ - "git_oidarray_dispose", - "git_oidarray_free" - ] - ], - [ - "packbuilder", - [ - "git_packbuilder_foreach", - "git_packbuilder_free", - "git_packbuilder_hash", - "git_packbuilder_insert", - "git_packbuilder_insert_commit", - "git_packbuilder_insert_recur", - "git_packbuilder_insert_tree", - "git_packbuilder_insert_walk", - "git_packbuilder_new", - "git_packbuilder_object_count", - "git_packbuilder_set_callbacks", - "git_packbuilder_set_threads", - "git_packbuilder_write", - "git_packbuilder_write_buf", - "git_packbuilder_written" - ] - ], - [ - "patch", - [ - "git_patch_free", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs", - "git_patch_from_buffers", - "git_patch_from_diff", - "git_patch_get_delta", - "git_patch_get_hunk", - "git_patch_get_line_in_hunk", - "git_patch_line_stats", - "git_patch_num_hunks", - "git_patch_num_lines_in_hunk", - "git_patch_owner", - "git_patch_print", - "git_patch_size", - "git_patch_to_buf" - ] - ], - [ - "pathspec", - [ - "git_pathspec_free", - "git_pathspec_match_diff", - "git_pathspec_match_index", - "git_pathspec_match_list_diff_entry", - "git_pathspec_match_list_entry", - "git_pathspec_match_list_entrycount", - "git_pathspec_match_list_failed_entry", - "git_pathspec_match_list_failed_entrycount", - "git_pathspec_match_list_free", - "git_pathspec_match_tree", - "git_pathspec_match_workdir", - "git_pathspec_matches_path", - "git_pathspec_new" - ] - ], - [ - "proxy", - [ - "git_proxy_options_init" - ] - ], - [ - "push", - [ - "git_push_options_init" - ] - ], - [ - "rebase", - [ - "git_rebase_abort", - "git_rebase_commit", - "git_rebase_finish", - "git_rebase_free", - "git_rebase_init", - "git_rebase_inmemory_index", - "git_rebase_next", - "git_rebase_onto_id", - "git_rebase_onto_name", - "git_rebase_open", - "git_rebase_operation_byindex", - "git_rebase_operation_current", - "git_rebase_operation_entrycount", - "git_rebase_options_init", - "git_rebase_orig_head_id", - "git_rebase_orig_head_name" - ] - ], - [ - "refdb", - [ - "git_refdb_compress", - "git_refdb_free", - "git_refdb_new", - "git_refdb_open" - ] - ], - [ - "reference", - [ - "git_reference_cmp", - "git_reference_create", - "git_reference_create_matching", - "git_reference_delete", - "git_reference_dup", - "git_reference_dwim", - "git_reference_ensure_log", - "git_reference_foreach", - "git_reference_foreach_glob", - "git_reference_foreach_name", - "git_reference_free", - "git_reference_has_log", - "git_reference_is_branch", - "git_reference_is_note", - "git_reference_is_remote", - "git_reference_is_tag", - "git_reference_is_valid_name", - "git_reference_iterator_free", - "git_reference_iterator_glob_new", - "git_reference_iterator_new", - "git_reference_list", - "git_reference_lookup", - "git_reference_name", - "git_reference_name_is_valid", - "git_reference_name_to_id", - "git_reference_next", - "git_reference_next_name", - "git_reference_normalize_name", - "git_reference_owner", - "git_reference_peel", - "git_reference_remove", - "git_reference_rename", - "git_reference_resolve", - "git_reference_set_target", - "git_reference_shorthand", - "git_reference_symbolic_create", - "git_reference_symbolic_create_matching", - "git_reference_symbolic_set_target", - "git_reference_symbolic_target", - "git_reference_target", - "git_reference_target_peel", - "git_reference_type" - ] - ], - [ - "reflog", - [ - "git_reflog_append", - "git_reflog_delete", - "git_reflog_drop", - "git_reflog_entry_byindex", - "git_reflog_entry_committer", - "git_reflog_entry_id_new", - "git_reflog_entry_id_old", - "git_reflog_entry_message", - "git_reflog_entrycount", - "git_reflog_free", - "git_reflog_read", - "git_reflog_rename", - "git_reflog_write" - ] - ], - [ - "refspec", - [ - "git_refspec_direction", - "git_refspec_dst", - "git_refspec_dst_matches", - "git_refspec_force", - "git_refspec_free", - "git_refspec_parse", - "git_refspec_rtransform", - "git_refspec_src", - "git_refspec_src_matches", - "git_refspec_string", - "git_refspec_transform" - ] - ], - [ - "remote", - [ - "git_remote_add_fetch", - "git_remote_add_push", - "git_remote_autotag", - "git_remote_connect", - "git_remote_connected", - "git_remote_create", - "git_remote_create_anonymous", - "git_remote_create_detached", - "git_remote_create_options_init", - "git_remote_create_with_fetchspec", - "git_remote_create_with_opts", - "git_remote_default_branch", - "git_remote_delete", - "git_remote_disconnect", - "git_remote_download", - "git_remote_dup", - "git_remote_fetch", - "git_remote_free", - "git_remote_get_fetch_refspecs", - "git_remote_get_push_refspecs", - "git_remote_get_refspec", - "git_remote_init_callbacks", - "git_remote_is_valid_name", - "git_remote_list", - "git_remote_lookup", - "git_remote_ls", - "git_remote_name", - "git_remote_name_is_valid", - "git_remote_owner", - "git_remote_prune", - "git_remote_prune_refs", - "git_remote_push", - "git_remote_pushurl", - "git_remote_refspec_count", - "git_remote_rename", - "git_remote_set_autotag", - "git_remote_set_instance_pushurl", - "git_remote_set_instance_url", - "git_remote_set_pushurl", - "git_remote_set_url", - "git_remote_stats", - "git_remote_stop", - "git_remote_update_tips", - "git_remote_upload", - "git_remote_url" - ] - ], - [ - "repository", - [ - "git_repository_commondir", - "git_repository_config", - "git_repository_config_snapshot", - "git_repository_detach_head", - "git_repository_discover", - "git_repository_fetchhead_foreach", - "git_repository_free", - "git_repository_get_namespace", - "git_repository_hashfile", - "git_repository_head", - "git_repository_head_detached", - "git_repository_head_detached_for_worktree", - "git_repository_head_for_worktree", - "git_repository_head_unborn", - "git_repository_ident", - "git_repository_index", - "git_repository_init", - "git_repository_init_ext", - "git_repository_init_options_init", - "git_repository_is_bare", - "git_repository_is_empty", - "git_repository_is_shallow", - "git_repository_is_worktree", - "git_repository_item_path", - "git_repository_mergehead_foreach", - "git_repository_message", - "git_repository_message_remove", - "git_repository_odb", - "git_repository_open", - "git_repository_open_bare", - "git_repository_open_ext", - "git_repository_open_from_worktree", - "git_repository_path", - "git_repository_refdb", - "git_repository_set_head", - "git_repository_set_head_detached", - "git_repository_set_head_detached_from_annotated", - "git_repository_set_ident", - "git_repository_set_namespace", - "git_repository_set_workdir", - "git_repository_state", - "git_repository_state_cleanup", - "git_repository_workdir", - "git_repository_wrap_odb" - ] - ], - [ - "reset", - [ - "git_reset", - "git_reset_default", - "git_reset_from_annotated" - ] - ], - [ - "revert", - [ - "git_revert", - "git_revert_commit", - "git_revert_options_init" - ] - ], - [ - "revparse", - [ - "git_revparse", - "git_revparse_ext", - "git_revparse_single" - ] - ], - [ - "revwalk", - [ - "git_revwalk_add_hide_cb", - "git_revwalk_free", - "git_revwalk_hide", - "git_revwalk_hide_glob", - "git_revwalk_hide_head", - "git_revwalk_hide_ref", - "git_revwalk_new", - "git_revwalk_next", - "git_revwalk_push", - "git_revwalk_push_glob", - "git_revwalk_push_head", - "git_revwalk_push_range", - "git_revwalk_push_ref", - "git_revwalk_repository", - "git_revwalk_reset", - "git_revwalk_simplify_first_parent", - "git_revwalk_sorting" - ] - ], - [ - "signature", - [ - "git_signature_default", - "git_signature_dup", - "git_signature_free", - "git_signature_from_buffer", - "git_signature_new", - "git_signature_now" - ] - ], - [ - "stash", - [ - "git_stash_apply", - "git_stash_apply_options_init", - "git_stash_drop", - "git_stash_foreach", - "git_stash_pop", - "git_stash_save" - ] - ], - [ - "status", - [ - "git_status_byindex", - "git_status_file", - "git_status_foreach", - "git_status_foreach_ext", - "git_status_list_entrycount", - "git_status_list_free", - "git_status_list_new", - "git_status_options_init", - "git_status_should_ignore" - ] - ], - [ - "strarray", - [ - "git_strarray_copy", - "git_strarray_dispose", - "git_strarray_free" - ] - ], - [ - "submodule", - [ - "git_submodule_add_finalize", - "git_submodule_add_setup", - "git_submodule_add_to_index", - "git_submodule_branch", - "git_submodule_clone", - "git_submodule_dup", - "git_submodule_fetch_recurse_submodules", - "git_submodule_foreach", - "git_submodule_free", - "git_submodule_head_id", - "git_submodule_ignore", - "git_submodule_index_id", - "git_submodule_init", - "git_submodule_location", - "git_submodule_lookup", - "git_submodule_name", - "git_submodule_open", - "git_submodule_owner", - "git_submodule_path", - "git_submodule_reload", - "git_submodule_repo_init", - "git_submodule_resolve_url", - "git_submodule_set_branch", - "git_submodule_set_fetch_recurse_submodules", - "git_submodule_set_ignore", - "git_submodule_set_update", - "git_submodule_set_url", - "git_submodule_status", - "git_submodule_sync", - "git_submodule_update", - "git_submodule_update_options_init", - "git_submodule_update_strategy", - "git_submodule_url", - "git_submodule_wd_id" - ] - ], - [ - "tag", - [ - "git_tag_annotation_create", - "git_tag_create", - "git_tag_create_from_buffer", - "git_tag_create_lightweight", - "git_tag_delete", - "git_tag_dup", - "git_tag_foreach", - "git_tag_free", - "git_tag_id", - "git_tag_list", - "git_tag_list_match", - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_tag_message", - "git_tag_name", - "git_tag_name_is_valid", - "git_tag_owner", - "git_tag_peel", - "git_tag_tagger", - "git_tag_target", - "git_tag_target_id", - "git_tag_target_type" - ] - ], - [ - "trace", - [ - "git_trace_set" - ] - ], - [ - "transaction", - [ - "git_transaction_commit", - "git_transaction_free", - "git_transaction_lock_ref", - "git_transaction_new", - "git_transaction_remove", - "git_transaction_set_reflog", - "git_transaction_set_symbolic_target", - "git_transaction_set_target" - ] - ], - [ - "tree", - [ - "git_tree_create_updated", - "git_tree_dup", - "git_tree_entry_byid", - "git_tree_entry_byindex", - "git_tree_entry_byname", - "git_tree_entry_bypath", - "git_tree_entry_cmp", - "git_tree_entry_dup", - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw", - "git_tree_entry_free", - "git_tree_entry_id", - "git_tree_entry_name", - "git_tree_entry_to_object", - "git_tree_entry_type", - "git_tree_entrycount", - "git_tree_free", - "git_tree_id", - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_tree_owner", - "git_tree_walk" - ] - ], - [ - "treebuilder", - [ - "git_treebuilder_clear", - "git_treebuilder_entrycount", - "git_treebuilder_filter", - "git_treebuilder_free", - "git_treebuilder_get", - "git_treebuilder_insert", - "git_treebuilder_new", - "git_treebuilder_remove", - "git_treebuilder_write", - "git_treebuilder_write_with_buffer" - ] - ], - [ - "worktree", - [ - "git_worktree_add", - "git_worktree_add_options_init", - "git_worktree_free", - "git_worktree_is_locked", - "git_worktree_is_prunable", - "git_worktree_list", - "git_worktree_lock", - "git_worktree_lookup", - "git_worktree_name", - "git_worktree_open_from_repository", - "git_worktree_path", - "git_worktree_prune", - "git_worktree_prune_options_init", - "git_worktree_unlock", - "git_worktree_validate" - ] - ] - ], - "examples": [ - [ - "add.c", - "ex/v1.3.1/add.html" - ], - [ - "args.c", - "ex/v1.3.1/args.html" - ], - [ - "blame.c", - "ex/v1.3.1/blame.html" - ], - [ - "cat-file.c", - "ex/v1.3.1/cat-file.html" - ], - [ - "checkout.c", - "ex/v1.3.1/checkout.html" - ], - [ - "clone.c", - "ex/v1.3.1/clone.html" - ], - [ - "commit.c", - "ex/v1.3.1/commit.html" - ], - [ - "common.c", - "ex/v1.3.1/common.html" - ], - [ - "config.c", - "ex/v1.3.1/config.html" - ], - [ - "describe.c", - "ex/v1.3.1/describe.html" - ], - [ - "diff.c", - "ex/v1.3.1/diff.html" - ], - [ - "fetch.c", - "ex/v1.3.1/fetch.html" - ], - [ - "for-each-ref.c", - "ex/v1.3.1/for-each-ref.html" - ], - [ - "general.c", - "ex/v1.3.1/general.html" - ], - [ - "index-pack.c", - "ex/v1.3.1/index-pack.html" - ], - [ - "init.c", - "ex/v1.3.1/init.html" - ], - [ - "lg2.c", - "ex/v1.3.1/lg2.html" - ], - [ - "log.c", - "ex/v1.3.1/log.html" - ], - [ - "ls-files.c", - "ex/v1.3.1/ls-files.html" - ], - [ - "ls-remote.c", - "ex/v1.3.1/ls-remote.html" - ], - [ - "merge.c", - "ex/v1.3.1/merge.html" - ], - [ - "push.c", - "ex/v1.3.1/push.html" - ], - [ - "remote.c", - "ex/v1.3.1/remote.html" - ], - [ - "rev-list.c", - "ex/v1.3.1/rev-list.html" - ], - [ - "rev-parse.c", - "ex/v1.3.1/rev-parse.html" - ], - [ - "show-index.c", - "ex/v1.3.1/show-index.html" - ], - [ - "stash.c", - "ex/v1.3.1/stash.html" + }, + "globals": {}, + "types": [ + [ + "git_annotated_commit", + { + "decl": "git_annotated_commit", + "type": "struct", + "value": "git_annotated_commit", + "file": "git2/types.h", + "line": 198, + "lineto": 198, + "tdef": "typedef", + "description": " Annotated commits, the input to merge and rebase. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_annotated_commit_free", + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_from_ref", + "git_annotated_commit_from_revspec", + "git_annotated_commit_id", + "git_annotated_commit_lookup", + "git_annotated_commit_ref", + "git_branch_create_from_annotated", + "git_merge", + "git_merge_analysis", + "git_merge_analysis_for_ref", + "git_rebase_init", + "git_repository_set_head_detached_from_annotated", + "git_reset_from_annotated" + ] + } + } + ], + [ + "git_apply_flags_t", + { + "decl": [ + "GIT_APPLY_CHECK" + ], + "type": "enum", + "file": "git2/apply.h", + "line": 61, + "lineto": 67, + "block": "GIT_APPLY_CHECK", + "tdef": "typedef", + "description": " Flags controlling the behavior of git_apply ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_APPLY_CHECK", + "comments": "

Don't actually make changes, just test that the patch applies.\n This is the equivalent of git apply --check.

\n", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_apply_location_t", + { + "decl": [ + "GIT_APPLY_LOCATION_WORKDIR", + "GIT_APPLY_LOCATION_INDEX", + "GIT_APPLY_LOCATION_BOTH" + ], + "type": "enum", + "file": "git2/apply.h", + "line": 127, + "lineto": 145, + "block": "GIT_APPLY_LOCATION_WORKDIR\nGIT_APPLY_LOCATION_INDEX\nGIT_APPLY_LOCATION_BOTH", + "tdef": "typedef", + "description": " Possible application locations for git_apply ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_APPLY_LOCATION_WORKDIR", + "comments": "

Apply the patch to the workdir, leaving the index untouched.\n This is the equivalent of git apply with no location argument.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_APPLY_LOCATION_INDEX", + "comments": "

Apply the patch to the index, leaving the working directory\n untouched. This is the equivalent of git apply --cached.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_APPLY_LOCATION_BOTH", + "comments": "

Apply the patch to both the working directory and the index.\n This is the equivalent of git apply --index.

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [ + "git_apply" + ] + } + } + ], + [ + "git_apply_options", + { + "decl": [ + "unsigned int version", + "git_apply_delta_cb delta_cb", + "git_apply_hunk_cb hunk_cb", + "void * payload", + "unsigned int flags" + ], + "type": "struct", + "value": "git_apply_options", + "file": "git2/apply.h", + "line": 77, + "lineto": 91, + "block": "unsigned int version\ngit_apply_delta_cb delta_cb\ngit_apply_hunk_cb hunk_cb\nvoid * payload\nunsigned int flags", + "tdef": "typedef", + "description": " Apply options structure", + "comments": "

Initialize with GIT_APPLY_OPTIONS_INIT. Alternatively, you can use git_apply_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " The version " + }, + { + "type": "git_apply_delta_cb", + "name": "delta_cb", + "comments": " When applying a patch, callback that will be made per delta (file). " + }, + { + "type": "git_apply_hunk_cb", + "name": "hunk_cb", + "comments": " When applying a patch, callback that will be made per hunk. " + }, + { + "type": "void *", + "name": "payload", + "comments": " Payload passed to both delta_cb \n&\n hunk_cb. " + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " Bitmask of git_apply_flags_t " + } + ], + "used": { + "returns": [], + "needs": [ + "git_apply", + "git_apply_options_init", + "git_apply_to_tree" + ] + } + } + ], + [ + "git_attr_options", + { + "decl": [ + "unsigned int version", + "unsigned int flags", + "git_oid * commit_id", + "git_oid attr_commit_id" + ], + "type": "struct", + "value": "git_attr_options", + "file": "git2/attr.h", + "line": 144, + "lineto": 161, + "block": "unsigned int version\nunsigned int flags\ngit_oid * commit_id\ngit_oid attr_commit_id", + "tdef": "typedef", + "description": " An options structure for querying attributes.", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " A combination of GIT_ATTR_CHECK flags " + }, + { + "type": "git_oid *", + "name": "commit_id", + "comments": "" + }, + { + "type": "git_oid", + "name": "attr_commit_id", + "comments": " The commit to load attributes from, when\n `GIT_ATTR_CHECK_INCLUDE_COMMIT` is specified." + } + ], + "used": { + "returns": [], + "needs": [ + "git_attr_foreach_ext", + "git_attr_get_ext", + "git_attr_get_many_ext" + ] + } + } + ], + [ + "git_attr_value_t", + { + "decl": [ + "GIT_ATTR_VALUE_UNSPECIFIED", + "GIT_ATTR_VALUE_TRUE", + "GIT_ATTR_VALUE_FALSE", + "GIT_ATTR_VALUE_STRING" + ], + "type": "enum", + "file": "git2/attr.h", + "line": 82, + "lineto": 87, + "block": "GIT_ATTR_VALUE_UNSPECIFIED\nGIT_ATTR_VALUE_TRUE\nGIT_ATTR_VALUE_FALSE\nGIT_ATTR_VALUE_STRING", + "tdef": "typedef", + "description": " Possible states for an attribute", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_ATTR_VALUE_UNSPECIFIED", + "comments": "

The attribute has been left unspecified

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_ATTR_VALUE_TRUE", + "comments": "

The attribute has been set

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_ATTR_VALUE_FALSE", + "comments": "

The attribute has been unset

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_ATTR_VALUE_STRING", + "comments": "

This attribute has a value

\n", + "value": 3 + } + ], + "used": { + "returns": [ + "git_attr_value" + ], + "needs": [] + } + } + ], + [ + "git_blame", + { + "decl": "git_blame", + "type": "struct", + "value": "git_blame", + "file": "git2/blame.h", + "line": 202, + "lineto": 202, + "tdef": "typedef", + "description": " Opaque structure to hold blame results ", + "comments": "", + "used": { + "returns": [ + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline" + ], + "needs": [ + "git_blame_buffer", + "git_blame_file", + "git_blame_free", + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline", + "git_blame_get_hunk_count", + "git_blame_init_options", + "git_blame_options_init" + ] + } + } + ], + [ + "git_blame_flag_t", + { + "decl": [ + "GIT_BLAME_NORMAL", + "GIT_BLAME_TRACK_COPIES_SAME_FILE", + "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES", + "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES", + "GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES", + "GIT_BLAME_FIRST_PARENT", + "GIT_BLAME_USE_MAILMAP", + "GIT_BLAME_IGNORE_WHITESPACE" + ], + "type": "enum", + "file": "git2/blame.h", + "line": 26, + "lineto": 77, + "block": "GIT_BLAME_NORMAL\nGIT_BLAME_TRACK_COPIES_SAME_FILE\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES\nGIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES\nGIT_BLAME_FIRST_PARENT\nGIT_BLAME_USE_MAILMAP\nGIT_BLAME_IGNORE_WHITESPACE", + "tdef": "typedef", + "description": " Flags for indicating option behavior for git_blame APIs.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_BLAME_NORMAL", + "comments": "

Normal blame, the default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_BLAME_TRACK_COPIES_SAME_FILE", + "comments": "

Track lines that have moved within a file (like git blame -M).

\n\n

This is not yet implemented and reserved for future use.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES", + "comments": "

Track lines that have moved across files in the same commit\n (like git blame -C).

\n\n

This is not yet implemented and reserved for future use.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES", + "comments": "

Track lines that have been copied from another file that exists\n in the same commit (like git blame -CC). Implies SAME_FILE.

\n\n

This is not yet implemented and reserved for future use.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES", + "comments": "

Track lines that have been copied from another file that exists in\n any commit (like git blame -CCC). Implies SAME_COMMIT_COPIES.

\n\n

This is not yet implemented and reserved for future use.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_BLAME_FIRST_PARENT", + "comments": "

Restrict the search of commits to those reachable following only\n the first parents.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_BLAME_USE_MAILMAP", + "comments": "

Use mailmap file to map author and committer names and email\n addresses to canonical real names and email addresses. The\n mailmap will be read from the working directory, or HEAD in a\n bare repository.

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_BLAME_IGNORE_WHITESPACE", + "comments": "

Ignore whitespace differences

\n", + "value": 64 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_blame_hunk", + { + "decl": [ + "size_t lines_in_hunk", + "git_oid final_commit_id", + "size_t final_start_line_number", + "git_signature * final_signature", + "git_oid orig_commit_id", + "const char * orig_path", + "size_t orig_start_line_number", + "git_signature * orig_signature", + "char boundary" + ], + "type": "struct", + "value": "git_blame_hunk", + "file": "git2/blame.h", + "line": 145, + "lineto": 198, + "block": "size_t lines_in_hunk\ngit_oid final_commit_id\nsize_t final_start_line_number\ngit_signature * final_signature\ngit_oid orig_commit_id\nconst char * orig_path\nsize_t orig_start_line_number\ngit_signature * orig_signature\nchar boundary", + "tdef": "typedef", + "description": " Structure that represents a blame hunk.", + "comments": "", + "fields": [ + { + "type": "size_t", + "name": "lines_in_hunk", + "comments": " The number of lines in this hunk." + }, + { + "type": "git_oid", + "name": "final_commit_id", + "comments": " The OID of the commit where this line was last changed." + }, + { + "type": "size_t", + "name": "final_start_line_number", + "comments": " The 1-based line number where this hunk begins, in the final version\n of the file." + }, + { + "type": "git_signature *", + "name": "final_signature", + "comments": " The author of `final_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." + }, + { + "type": "git_oid", + "name": "orig_commit_id", + "comments": " The OID of the commit where this hunk was found.\n This will usually be the same as `final_commit_id`, except when\n `GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES` has been specified." + }, + { + "type": "const char *", + "name": "orig_path", + "comments": " The path to the file where this hunk originated, as of the commit\n specified by `orig_commit_id`." + }, + { + "type": "size_t", + "name": "orig_start_line_number", + "comments": " The 1-based line number where this hunk begins in the file named by\n `orig_path` in the commit specified by `orig_commit_id`." + }, + { + "type": "git_signature *", + "name": "orig_signature", + "comments": " The author of `orig_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." + }, + { + "type": "char", + "name": "boundary", + "comments": " The 1 iff the hunk has been tracked to a boundary commit (the root,\n or the commit specified in git_blame_options.oldest_commit)" + } + ], + "used": { + "returns": [ + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline" + ], + "needs": [] + } + } + ], + [ + "git_blame_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "uint16_t min_match_characters", + "git_oid newest_commit", + "git_oid oldest_commit", + "size_t min_line", + "size_t max_line" + ], + "type": "struct", + "value": "git_blame_options", + "file": "git2/blame.h", + "line": 86, + "lineto": 123, + "block": "unsigned int version\nuint32_t flags\nuint16_t min_match_characters\ngit_oid newest_commit\ngit_oid oldest_commit\nsize_t min_line\nsize_t max_line", + "tdef": "typedef", + "description": " Blame options structure", + "comments": "

Initialize with GIT_BLAME_OPTIONS_INIT. Alternatively, you can use git_blame_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of `git_blame_flag_t` " + }, + { + "type": "uint16_t", + "name": "min_match_characters", + "comments": " The lower bound on the number of alphanumeric characters that\n must be detected as moving/copying within a file for it to\n associate those lines with the parent commit. The default value\n is 20.\n\n This value only takes effect if any of the `GIT_BLAME_TRACK_COPIES_*`\n flags are specified." + }, + { + "type": "git_oid", + "name": "newest_commit", + "comments": " The id of the newest commit to consider. The default is HEAD. " + }, + { + "type": "git_oid", + "name": "oldest_commit", + "comments": " The id of the oldest commit to consider.\n The default is the first commit encountered with a NULL parent." + }, + { + "type": "size_t", + "name": "min_line", + "comments": " The first line in the file to blame.\n The default is 1 (line numbers start with 1)." + }, + { + "type": "size_t", + "name": "max_line", + "comments": " The last line in the file to blame.\n The default is the last line of the file." + } + ], + "used": { + "returns": [], + "needs": [ + "git_blame_file", + "git_blame_init_options", + "git_blame_options_init" + ] + } + } + ], + [ + "git_blob", + { + "decl": "git_blob", + "type": "struct", + "value": "git_blob", + "file": "git2/types.h", + "line": 133, + "lineto": 133, + "tdef": "typedef", + "description": " In-memory representation of a blob object. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_blob_dup", + "git_blob_filter", + "git_blob_filter_options_init", + "git_blob_filtered_content", + "git_blob_free", + "git_blob_id", + "git_blob_is_binary", + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_blob_owner", + "git_blob_rawcontent", + "git_blob_rawsize", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_filter_list_apply_to_blob", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_blob", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs" + ] + } + } + ], + [ + "git_blob_filter_flag_t", + { + "decl": [ + "GIT_BLOB_FILTER_CHECK_FOR_BINARY", + "GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES", + "GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD", + "GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT" + ], + "type": "enum", + "file": "git2/blob.h", + "line": 102, + "lineto": 123, + "block": "GIT_BLOB_FILTER_CHECK_FOR_BINARY\nGIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", + "tdef": "typedef", + "description": " Flags to control the functionality of `git_blob_filter`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_BLOB_FILTER_CHECK_FOR_BINARY", + "comments": "

When set, filters will not be applied to binary files.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES", + "comments": "

When set, filters will not load configuration from the\n system-wide gitattributes in /etc (or system equivalent).

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD", + "comments": "

When set, filters will be loaded from a .gitattributes file\n in the HEAD commit.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", + "comments": "

When set, filters will be loaded from a .gitattributes file\n in the specified commit.

\n", + "value": 8 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_blob_filter_options", + { + "decl": [ + "int version", + "uint32_t flags", + "git_oid * commit_id", + "git_oid attr_commit_id" + ], + "type": "struct", + "value": "git_blob_filter_options", + "file": "git2/blob.h", + "line": 132, + "lineto": 149, + "block": "int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", + "tdef": "typedef", + "description": " The options used when applying filter options to a file.", + "comments": "

Initialize with GIT_BLOB_FILTER_OPTIONS_INIT. Alternatively, you can use git_blob_filter_options_init.

\n", + "fields": [ + { + "type": "int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " Flags to control the filtering process, see `git_blob_filter_flag_t` above " + }, + { + "type": "git_oid *", + "name": "commit_id", + "comments": "" + }, + { + "type": "git_oid", + "name": "attr_commit_id", + "comments": " The commit to load attributes from, when\n `GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT` is specified." + } + ], + "used": { + "returns": [], + "needs": [ + "git_blob_filter", + "git_blob_filter_options_init" + ] + } + } + ], + [ + "git_branch_iterator", + { + "decl": "git_branch_iterator", + "type": "struct", + "value": "git_branch_iterator", + "file": "git2/branch.h", + "line": 90, + "lineto": 90, + "tdef": "typedef", + "description": " Iterator type for branches ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_branch_iterator_free", + "git_branch_iterator_new", + "git_branch_next" + ] + } + } + ], + [ + "git_branch_t", + { + "decl": [ + "GIT_BRANCH_LOCAL", + "GIT_BRANCH_REMOTE", + "GIT_BRANCH_ALL" + ], + "type": "enum", + "file": "git2/types.h", + "line": 215, + "lineto": 219, + "block": "GIT_BRANCH_LOCAL\nGIT_BRANCH_REMOTE\nGIT_BRANCH_ALL", + "tdef": "typedef", + "description": " Basic type of any Git branch. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_BRANCH_LOCAL", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_BRANCH_REMOTE", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_BRANCH_ALL", + "comments": "", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": [ + "git_branch_iterator_new", + "git_branch_lookup", + "git_branch_next" + ] + } + } + ], + [ + "git_buf", + { + "decl": [ + "char * ptr", + "size_t reserved", + "size_t size" + ], + "type": "struct", + "value": "git_buf", + "file": "git2/buffer.h", + "line": 33, + "lineto": 52, + "block": "char * ptr\nsize_t reserved\nsize_t size", + "tdef": "typedef", + "description": " A data buffer for exporting data from libgit2", + "comments": "

Sometimes libgit2 wants to return an allocated data buffer to the caller and have the caller take responsibility for freeing that memory. To make ownership clear in these cases, libgit2 uses git_buf to return this data. Callers should use git_buf_dispose() to release the memory when they are done.

\n\n

A git_buf contains a pointer to a NUL-terminated C string, and the length of the string (not including the NUL terminator).

\n", + "fields": [ + { + "type": "char *", + "name": "ptr", + "comments": " The buffer contents. `ptr` points to the start of the buffer\n being returned. The buffer's length (in bytes) is specified\n by the `size` member of the structure, and contains a NUL\n terminator at position `(size + 1)`." + }, + { + "type": "size_t", + "name": "reserved", + "comments": " This field is reserved and unused." + }, + { + "type": "size_t", + "name": "size", + "comments": " The length (in bytes) of the buffer pointed to by `ptr`,\n not including a NUL terminator." + } + ], + "used": { + "returns": [], + "needs": [ + "git_blob_filter", + "git_blob_filtered_content", + "git_branch_remote_name", + "git_branch_upstream_merge", + "git_branch_upstream_name", + "git_branch_upstream_remote", + "git_buf_contains_nul", + "git_buf_dispose", + "git_buf_free", + "git_buf_grow", + "git_buf_is_binary", + "git_buf_set", + "git_commit_create_buffer", + "git_commit_extract_signature", + "git_commit_header_field", + "git_commit_signing_cb", + "git_config_find_global", + "git_config_find_programdata", + "git_config_find_system", + "git_config_find_xdg", + "git_config_get_path", + "git_config_get_string_buf", + "git_config_parse_path", + "git_describe_format", + "git_diff_commit_as_email", + "git_diff_format_email", + "git_diff_stats_to_buf", + "git_diff_to_buf", + "git_filter_list_apply_to_blob", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_data", + "git_filter_list_apply_to_file", + "git_filter_list_stream_data", + "git_message_prettify", + "git_note_default_ref", + "git_object_short_id", + "git_packbuilder_write_buf", + "git_patch_to_buf", + "git_refspec_rtransform", + "git_refspec_transform", + "git_remote_default_branch", + "git_repository_discover", + "git_repository_item_path", + "git_repository_message", + "git_submodule_resolve_url", + "git_treebuilder_write_with_buffer", + "git_url_resolve_cb", + "git_worktree_is_locked" + ] + } + } + ], + [ + "git_cert", + { + "decl": "git_cert", + "type": "struct", + "value": "git_cert", + "file": "git2/types.h", + "line": 262, + "lineto": 262, + "block": "git_cert_t cert_type", + "tdef": "typedef", + "description": " Parent type for `git_cert_hostkey` and `git_cert_x509`.", + "comments": "", + "fields": [ + { + "type": "git_cert_t", + "name": "cert_type", + "comments": " Type of certificate. A `GIT_CERT_` value." + } + ], + "used": { + "returns": [], + "needs": [ + "git_transport_certificate_check_cb" + ] + } + } + ], + [ + "git_cert_hostkey", + { + "decl": [ + "git_cert parent", + "git_cert_ssh_t type", + "unsigned char [16] hash_md5", + "unsigned char [20] hash_sha1", + "unsigned char [32] hash_sha256", + "git_cert_ssh_raw_type_t raw_type", + "const char * hostkey", + "size_t hostkey_len" + ], + "type": "struct", + "value": "git_cert_hostkey", + "file": "git2/cert.h", + "line": 108, + "lineto": 151, + "block": "git_cert parent\ngit_cert_ssh_t type\nunsigned char [16] hash_md5\nunsigned char [20] hash_sha1\nunsigned char [32] hash_sha256\ngit_cert_ssh_raw_type_t raw_type\nconst char * hostkey\nsize_t hostkey_len", + "tdef": "typedef", + "description": " Hostkey information taken from libssh2", + "comments": "", + "fields": [ + { + "type": "git_cert", + "name": "parent", + "comments": " The parent cert " + }, + { + "type": "git_cert_ssh_t", + "name": "type", + "comments": " A bitmask containing the available fields." + }, + { + "type": "unsigned char [16]", + "name": "hash_md5", + "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_MD5` set, this will\n have the MD5 hash of the hostkey." + }, + { + "type": "unsigned char [20]", + "name": "hash_sha1", + "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_SHA1` set, this will\n have the SHA-1 hash of the hostkey." + }, + { + "type": "unsigned char [32]", + "name": "hash_sha256", + "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_SHA256` set, this will\n have the SHA-256 hash of the hostkey." + }, + { + "type": "git_cert_ssh_raw_type_t", + "name": "raw_type", + "comments": " Raw hostkey type. If `type` has `GIT_CERT_SSH_RAW` set, this will\n have the type of the raw hostkey." + }, + { + "type": "const char *", + "name": "hostkey", + "comments": " Pointer to the raw hostkey. If `type` has `GIT_CERT_SSH_RAW` set,\n this will have the raw contents of the hostkey." + }, + { + "type": "size_t", + "name": "hostkey_len", + "comments": " Raw hostkey length. If `type` has `GIT_CERT_SSH_RAW` set, this will\n have the length of the raw contents of the hostkey." + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_cert_ssh_t", + { + "decl": [ + "GIT_CERT_SSH_MD5", + "GIT_CERT_SSH_SHA1", + "GIT_CERT_SSH_SHA256", + "GIT_CERT_SSH_RAW" + ], + "type": "enum", + "file": "git2/cert.h", + "line": 77, + "lineto": 86, + "block": "GIT_CERT_SSH_MD5\nGIT_CERT_SSH_SHA1\nGIT_CERT_SSH_SHA256\nGIT_CERT_SSH_RAW", + "tdef": "typedef", + "description": " Type of SSH host fingerprint", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_CERT_SSH_MD5", + "comments": "

MD5 is available

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CERT_SSH_SHA1", + "comments": "

SHA-1 is available

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CERT_SSH_SHA256", + "comments": "

SHA-256 is available

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CERT_SSH_RAW", + "comments": "

Raw hostkey is available

\n", + "value": 8 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_cert_t", + { + "decl": [ + "GIT_CERT_NONE", + "GIT_CERT_X509", + "GIT_CERT_HOSTKEY_LIBSSH2", + "GIT_CERT_STRARRAY" + ], + "type": "enum", + "file": "git2/cert.h", + "line": 25, + "lineto": 48, + "block": "GIT_CERT_NONE\nGIT_CERT_X509\nGIT_CERT_HOSTKEY_LIBSSH2\nGIT_CERT_STRARRAY\nGIT_CERT_NONE\nGIT_CERT_X509\nGIT_CERT_HOSTKEY_LIBSSH2\nGIT_CERT_STRARRAY", + "tdef": "typedef", + "description": " Type of host certificate structure that is passed to the check callback", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_CERT_NONE", + "comments": "

No information about the certificate is available. This may\n happen when using curl.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CERT_X509", + "comments": "

The data argument to the callback will be a pointer to\n the DER-encoded data.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CERT_HOSTKEY_LIBSSH2", + "comments": "

The data argument to the callback will be a pointer to a\n git_cert_hostkey structure.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CERT_STRARRAY", + "comments": "

The data argument to the callback will be a pointer to a\n git_strarray with name:content strings containing\n information about the certificate. This is used when using\n curl.

\n", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_cert_x509", + { + "decl": [ + "git_cert parent", + "void * data", + "size_t len" + ], + "type": "struct", + "value": "git_cert_x509", + "file": "git2/cert.h", + "line": 156, + "lineto": 168, + "block": "git_cert parent\nvoid * data\nsize_t len", + "tdef": "typedef", + "description": " X.509 certificate information", + "comments": "", + "fields": [ + { + "type": "git_cert", + "name": "parent", + "comments": " The parent cert " + }, + { + "type": "void *", + "name": "data", + "comments": " Pointer to the X.509 certificate data" + }, + { + "type": "size_t", + "name": "len", + "comments": " Length of the memory block pointed to by `data`." + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_checkout_notify_t", + { + "decl": [ + "GIT_CHECKOUT_NOTIFY_NONE", + "GIT_CHECKOUT_NOTIFY_CONFLICT", + "GIT_CHECKOUT_NOTIFY_DIRTY", + "GIT_CHECKOUT_NOTIFY_UPDATED", + "GIT_CHECKOUT_NOTIFY_UNTRACKED", + "GIT_CHECKOUT_NOTIFY_IGNORED", + "GIT_CHECKOUT_NOTIFY_ALL" + ], + "type": "enum", + "file": "git2/checkout.h", + "line": 214, + "lineto": 245, + "block": "GIT_CHECKOUT_NOTIFY_NONE\nGIT_CHECKOUT_NOTIFY_CONFLICT\nGIT_CHECKOUT_NOTIFY_DIRTY\nGIT_CHECKOUT_NOTIFY_UPDATED\nGIT_CHECKOUT_NOTIFY_UNTRACKED\nGIT_CHECKOUT_NOTIFY_IGNORED\nGIT_CHECKOUT_NOTIFY_ALL", + "tdef": "typedef", + "description": " Checkout notification flags", + "comments": "

Checkout will invoke an options notification callback (notify_cb) for certain cases - you pick which ones via notify_flags:

\n\n

Returning a non-zero value from this callback will cancel the checkout. The non-zero return value will be propagated back and returned by the git_checkout_... call.

\n\n

Notification callbacks are made prior to modifying any files on disk, so canceling on any notification will still happen prior to any files being modified.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_NONE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_CONFLICT", + "comments": "

Invokes checkout on conflicting paths.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_DIRTY", + "comments": "

Notifies about "dirty" files, i.e. those that do not need an update\n but no longer match the baseline. Core git displays these files when\n checkout runs, but won't stop the checkout.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_UPDATED", + "comments": "

Sends notification for any file changed.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_UNTRACKED", + "comments": "

Notifies about untracked files.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_IGNORED", + "comments": "

Notifies about ignored files.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_ALL", + "comments": "

Notifies about ignored files.

\n", + "value": 65535 + } + ], + "used": { + "returns": [], + "needs": [ + "git_checkout_notify_cb" + ] + } + } + ], + [ + "git_checkout_options", + { + "decl": [ + "unsigned int version", + "unsigned int checkout_strategy", + "int disable_filters", + "unsigned int dir_mode", + "unsigned int file_mode", + "int file_open_flags", + "unsigned int notify_flags", + "git_checkout_notify_cb notify_cb", + "void * notify_payload", + "git_checkout_progress_cb progress_cb", + "void * progress_payload", + "git_strarray paths", + "git_tree * baseline", + "git_index * baseline_index", + "const char * target_directory", + "const char * ancestor_label", + "const char * our_label", + "const char * their_label", + "git_checkout_perfdata_cb perfdata_cb", + "void * perfdata_payload" + ], + "type": "struct", + "value": "git_checkout_options", + "file": "git2/checkout.h", + "line": 282, + "lineto": 345, + "block": "unsigned int version\nunsigned int checkout_strategy\nint disable_filters\nunsigned int dir_mode\nunsigned int file_mode\nint file_open_flags\nunsigned int notify_flags\ngit_checkout_notify_cb notify_cb\nvoid * notify_payload\ngit_checkout_progress_cb progress_cb\nvoid * progress_payload\ngit_strarray paths\ngit_tree * baseline\ngit_index * baseline_index\nconst char * target_directory\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_checkout_perfdata_cb perfdata_cb\nvoid * perfdata_payload", + "tdef": "typedef", + "description": " Checkout options structure", + "comments": "

Initialize with GIT_CHECKOUT_OPTIONS_INIT. Alternatively, you can use git_checkout_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " The version " + }, + { + "type": "unsigned int", + "name": "checkout_strategy", + "comments": " default will be a safe checkout " + }, + { + "type": "int", + "name": "disable_filters", + "comments": " don't apply filters like CRLF conversion " + }, + { + "type": "unsigned int", + "name": "dir_mode", + "comments": " default is 0755 " + }, + { + "type": "unsigned int", + "name": "file_mode", + "comments": " default is 0644 or 0755 as dictated by blob " + }, + { + "type": "int", + "name": "file_open_flags", + "comments": " default is O_CREAT | O_TRUNC | O_WRONLY " + }, + { + "type": "unsigned int", + "name": "notify_flags", + "comments": " see `git_checkout_notify_t` above " + }, + { + "type": "git_checkout_notify_cb", + "name": "notify_cb", + "comments": " Optional callback to get notifications on specific file states.\n " + }, + { + "type": "void *", + "name": "notify_payload", + "comments": " Payload passed to notify_cb " + }, + { + "type": "git_checkout_progress_cb", + "name": "progress_cb", + "comments": " Optional callback to notify the consumer of checkout progress. " + }, + { + "type": "void *", + "name": "progress_payload", + "comments": " Payload passed to progress_cb " + }, + { + "type": "git_strarray", + "name": "paths", + "comments": " A list of wildmatch patterns or paths.\n\n By default, all paths are processed. If you pass an array of wildmatch\n patterns, those will be used to filter which paths should be taken into\n account.\n\n Use GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH to treat as a simple list." + }, + { + "type": "git_tree *", + "name": "baseline", + "comments": " The expected content of the working directory; defaults to HEAD.\n\n If the working directory does not match this baseline information,\n that will produce a checkout conflict." + }, + { + "type": "git_index *", + "name": "baseline_index", + "comments": " Like `baseline` above, though expressed as an index. This\n option overrides `baseline`." + }, + { + "type": "const char *", + "name": "target_directory", + "comments": " alternative checkout path to workdir " + }, + { + "type": "const char *", + "name": "ancestor_label", + "comments": " the name of the common ancestor side of conflicts " + }, + { + "type": "const char *", + "name": "our_label", + "comments": " the name of the \"our\" side of conflicts " + }, + { + "type": "const char *", + "name": "their_label", + "comments": " the name of the \"their\" side of conflicts " + }, + { + "type": "git_checkout_perfdata_cb", + "name": "perfdata_cb", + "comments": " Optional callback to notify the consumer of performance data. " + }, + { + "type": "void *", + "name": "perfdata_payload", + "comments": " Payload passed to perfdata_cb " + } + ], + "used": { + "returns": [], + "needs": [ + "git_checkout_head", + "git_checkout_index", + "git_checkout_options_init", + "git_checkout_tree", + "git_merge", + "git_reset", + "git_reset_from_annotated" + ] + } + } + ], + [ + "git_checkout_perfdata", + { + "decl": [ + "size_t mkdir_calls", + "size_t stat_calls", + "size_t chmod_calls" + ], + "type": "struct", + "value": "git_checkout_perfdata", + "file": "git2/checkout.h", + "line": 248, + "lineto": 252, + "block": "size_t mkdir_calls\nsize_t stat_calls\nsize_t chmod_calls", + "tdef": "typedef", + "description": " Checkout performance-reporting structure ", + "comments": "", + "fields": [ + { + "type": "size_t", + "name": "mkdir_calls", + "comments": "" + }, + { + "type": "size_t", + "name": "stat_calls", + "comments": "" + }, + { + "type": "size_t", + "name": "chmod_calls", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_checkout_perfdata_cb" + ] + } + } + ], + [ + "git_checkout_strategy_t", + { + "decl": [ + "GIT_CHECKOUT_NONE", + "GIT_CHECKOUT_SAFE", + "GIT_CHECKOUT_FORCE", + "GIT_CHECKOUT_RECREATE_MISSING", + "GIT_CHECKOUT_ALLOW_CONFLICTS", + "GIT_CHECKOUT_REMOVE_UNTRACKED", + "GIT_CHECKOUT_REMOVE_IGNORED", + "GIT_CHECKOUT_UPDATE_ONLY", + "GIT_CHECKOUT_DONT_UPDATE_INDEX", + "GIT_CHECKOUT_NO_REFRESH", + "GIT_CHECKOUT_SKIP_UNMERGED", + "GIT_CHECKOUT_USE_OURS", + "GIT_CHECKOUT_USE_THEIRS", + "GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH", + "GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES", + "GIT_CHECKOUT_DONT_OVERWRITE_IGNORED", + "GIT_CHECKOUT_CONFLICT_STYLE_MERGE", + "GIT_CHECKOUT_CONFLICT_STYLE_DIFF3", + "GIT_CHECKOUT_DONT_REMOVE_EXISTING", + "GIT_CHECKOUT_DONT_WRITE_INDEX", + "GIT_CHECKOUT_DRY_RUN", + "GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3", + "GIT_CHECKOUT_UPDATE_SUBMODULES", + "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED" + ], + "type": "enum", + "file": "git2/checkout.h", + "line": 106, + "lineto": 198, + "block": "GIT_CHECKOUT_NONE\nGIT_CHECKOUT_SAFE\nGIT_CHECKOUT_FORCE\nGIT_CHECKOUT_RECREATE_MISSING\nGIT_CHECKOUT_ALLOW_CONFLICTS\nGIT_CHECKOUT_REMOVE_UNTRACKED\nGIT_CHECKOUT_REMOVE_IGNORED\nGIT_CHECKOUT_UPDATE_ONLY\nGIT_CHECKOUT_DONT_UPDATE_INDEX\nGIT_CHECKOUT_NO_REFRESH\nGIT_CHECKOUT_SKIP_UNMERGED\nGIT_CHECKOUT_USE_OURS\nGIT_CHECKOUT_USE_THEIRS\nGIT_CHECKOUT_DISABLE_PATHSPEC_MATCH\nGIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES\nGIT_CHECKOUT_DONT_OVERWRITE_IGNORED\nGIT_CHECKOUT_CONFLICT_STYLE_MERGE\nGIT_CHECKOUT_CONFLICT_STYLE_DIFF3\nGIT_CHECKOUT_DONT_REMOVE_EXISTING\nGIT_CHECKOUT_DONT_WRITE_INDEX\nGIT_CHECKOUT_DRY_RUN\nGIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3\nGIT_CHECKOUT_UPDATE_SUBMODULES\nGIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", + "tdef": "typedef", + "description": " Checkout behavior flags", + "comments": "

In libgit2, checkout is used to update the working directory and index to match a target tree. Unlike git checkout, it does not move the HEAD commit for you - use git_repository_set_head or the like to do that.

\n\n

Checkout looks at (up to) four things: the "target" tree you want to check out, the "baseline" tree of what was checked out previously, the working directory for actual files, and the index for staged changes.

\n\n

You give checkout one of three strategies for update:

\n\n
    \n
  • GIT_CHECKOUT_NONE is a dry-run strategy that checks for conflicts, etc., but doesn't make any actual changes.

  • \n
  • GIT_CHECKOUT_FORCE is at the opposite extreme, taking any action to make the working directory match the target (including potentially discarding modified files).

  • \n
  • GIT_CHECKOUT_SAFE is between these two options, it will only make modifications that will not lose changes.

    \n\n
                     |  target == baseline   |  target != baseline  |    ---------------------|-----------------------|----------------------|     workdir == baseline |       no action       |  create, update, or  |                         |                       |     delete file      |    ---------------------|-----------------------|----------------------|     workdir exists and  |       no action       |   conflict (notify   |       is != baseline    | notify dirty MODIFIED | and cancel checkout) |    ---------------------|-----------------------|----------------------|      workdir missing,   | notify dirty DELETED  |     create file      |      baseline present   |                       |                      |    ---------------------|-----------------------|----------------------|\n
  • \n
\n\n

To emulate git checkout, use GIT_CHECKOUT_SAFE with a checkout notification callback (see below) that displays information about dirty files. The default behavior will cancel checkout on conflicts.

\n\n

To emulate git checkout-index, use GIT_CHECKOUT_SAFE with a notification callback that cancels the operation if a dirty-but-existing file is found in the working directory. This core git command isn't quite "force" but is sensitive about some types of changes.

\n\n

To emulate git checkout -f, use GIT_CHECKOUT_FORCE.

\n\n

There are some additional flags to modify the behavior of checkout:

\n\n
    \n
  • GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates even if there are conflicts (instead of cancelling the checkout).

  • \n
  • GIT_CHECKOUT_REMOVE_UNTRACKED means remove untracked files (i.e. not in target, baseline, or index, and not ignored) from the working dir.

  • \n
  • GIT_CHECKOUT_REMOVE_IGNORED means remove ignored files (that are also untracked) from the working directory as well.

  • \n
  • GIT_CHECKOUT_UPDATE_ONLY means to only update the content of files that already exist. Files will not be created nor deleted. This just skips applying adds, deletes, and typechanges.

  • \n
  • GIT_CHECKOUT_DONT_UPDATE_INDEX prevents checkout from writing the updated files' information to the index.

  • \n
  • Normally, checkout will reload the index and git attributes from disk before any operations. GIT_CHECKOUT_NO_REFRESH prevents this reload.

  • \n
  • Unmerged index entries are conflicts. GIT_CHECKOUT_SKIP_UNMERGED skips files with unmerged index entries instead. GIT_CHECKOUT_USE_OURS and GIT_CHECKOUT_USE_THEIRS to proceed with the checkout using either the stage 2 ("ours") or stage 3 ("theirs") version of files in the index.

  • \n
  • GIT_CHECKOUT_DONT_OVERWRITE_IGNORED prevents ignored files from being overwritten. Normally, files that are ignored in the working directory are not considered "precious" and may be overwritten if the checkout target contains that file.

  • \n
  • GIT_CHECKOUT_DONT_REMOVE_EXISTING prevents checkout from removing files or folders that fold to the same name on case insensitive filesystems. This can cause files to retain their existing names and write through existing symbolic links.

  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_CHECKOUT_NONE", + "comments": "

default is a dry run, no actual updates

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_SAFE", + "comments": "

Allow safe updates that cannot overwrite uncommitted data.\n If the uncommitted changes don't conflict with the checked out files,\n the checkout will still proceed, leaving the changes intact.

\n\n

Mutually exclusive with GIT_CHECKOUT_FORCE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_FORCE", + "comments": "

Allow all updates to force working directory to look like index.

\n\n

Mutually exclusive with GIT_CHECKOUT_SAFE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_RECREATE_MISSING", + "comments": "

Allow checkout to recreate missing files

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_ALLOW_CONFLICTS", + "comments": "

Allow checkout to make safe updates even if conflicts are found

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_REMOVE_UNTRACKED", + "comments": "

Remove untracked files not in index (that are not ignored)

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_REMOVE_IGNORED", + "comments": "

Remove ignored files not in index

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_UPDATE_ONLY", + "comments": "

Only update existing files, don't create new ones

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DONT_UPDATE_INDEX", + "comments": "

Normally checkout updates index entries as it goes; this stops that.\n Implies GIT_CHECKOUT_DONT_WRITE_INDEX.

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NO_REFRESH", + "comments": "

Don't refresh index/config/etc before doing checkout

\n", + "value": 512 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_SKIP_UNMERGED", + "comments": "

Allow checkout to skip unmerged files

\n", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_USE_OURS", + "comments": "

For unmerged files, checkout stage 2 from index

\n", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_USE_THEIRS", + "comments": "

For unmerged files, checkout stage 3 from index

\n", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH", + "comments": "

Treat pathspec as simple list of exact match file paths

\n", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES", + "comments": "

Ignore directories in use, they will be left empty

\n", + "value": 262144 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DONT_OVERWRITE_IGNORED", + "comments": "

Don't overwrite ignored files that exist in the checkout target

\n", + "value": 524288 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_CONFLICT_STYLE_MERGE", + "comments": "

Write normal merge files for conflicts

\n", + "value": 1048576 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_CONFLICT_STYLE_DIFF3", + "comments": "

Include common ancestor data in diff3 format files for conflicts

\n", + "value": 2097152 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DONT_REMOVE_EXISTING", + "comments": "

Don't overwrite existing files or folders

\n", + "value": 4194304 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DONT_WRITE_INDEX", + "comments": "

Normally checkout writes the index upon completion; this prevents that.

\n", + "value": 8388608 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DRY_RUN", + "comments": "

Show what would be done by a checkout. Stop after sending\n notifications; don't update the working directory or index.

\n", + "value": 16777216 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3", + "comments": "

Include common ancestor data in zdiff3 format for conflicts

\n", + "value": 33554432 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_UPDATE_SUBMODULES", + "comments": "

Recursively checkout submodules with same options (NOT IMPLEMENTED)

\n", + "value": 65536 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", + "comments": "

Recursively checkout submodules if HEAD moved in super repo (NOT IMPLEMENTED)

\n", + "value": 131072 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_cherrypick_options", + { + "decl": [ + "unsigned int version", + "unsigned int mainline", + "git_merge_options merge_opts", + "git_checkout_options checkout_opts" + ], + "type": "struct", + "value": "git_cherrypick_options", + "file": "git2/cherrypick.h", + "line": 26, + "lineto": 34, + "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", + "tdef": "typedef", + "description": " Cherry-pick options", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "unsigned int", + "name": "mainline", + "comments": " For merge commits, the \"mainline\" is treated as the parent. " + }, + { + "type": "git_merge_options", + "name": "merge_opts", + "comments": " Options for the merging " + }, + { + "type": "git_checkout_options", + "name": "checkout_opts", + "comments": " Options for the checkout " + } + ], + "used": { + "returns": [], + "needs": [ + "git_cherrypick", + "git_cherrypick_options_init" + ] + } + } + ], + [ + "git_clone_local_t", + { + "decl": [ + "GIT_CLONE_LOCAL_AUTO", + "GIT_CLONE_LOCAL", + "GIT_CLONE_NO_LOCAL", + "GIT_CLONE_LOCAL_NO_LINKS" + ], + "type": "enum", + "file": "git2/clone.h", + "line": 33, + "lineto": 53, + "block": "GIT_CLONE_LOCAL_AUTO\nGIT_CLONE_LOCAL\nGIT_CLONE_NO_LOCAL\nGIT_CLONE_LOCAL_NO_LINKS", + "tdef": "typedef", + "description": " Options for bypassing the git-aware transport on clone. Bypassing\n it means that instead of a fetch, libgit2 will copy the object\n database directory instead of figuring out what it needs, which is\n faster. If possible, it will hardlink the files to save space.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_CLONE_LOCAL_AUTO", + "comments": "

Auto-detect (default), libgit2 will bypass the git-aware\n transport for local paths, but use a normal fetch for\n file:// urls.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CLONE_LOCAL", + "comments": "

Bypass the git-aware transport even for a file:// url.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CLONE_NO_LOCAL", + "comments": "

Do no bypass the git-aware transport

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CLONE_LOCAL_NO_LINKS", + "comments": "

Bypass the git-aware transport, but do not try to use\n hardlinks.

\n", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_clone_options", + { + "decl": [ + "unsigned int version", + "git_checkout_options checkout_opts", + "git_fetch_options fetch_opts", + "int bare", + "git_clone_local_t local", + "const char * checkout_branch", + "git_repository_create_cb repository_cb", + "void * repository_cb_payload", + "git_remote_create_cb remote_cb", + "void * remote_cb_payload" + ], + "type": "struct", + "value": "git_clone_options", + "file": "git2/clone.h", + "line": 103, + "lineto": 164, + "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint bare\ngit_clone_local_t local\nconst char * checkout_branch\ngit_repository_create_cb repository_cb\nvoid * repository_cb_payload\ngit_remote_create_cb remote_cb\nvoid * remote_cb_payload", + "tdef": "typedef", + "description": " Clone options structure", + "comments": "

Initialize with GIT_CLONE_OPTIONS_INIT. Alternatively, you can use git_clone_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "git_checkout_options", + "name": "checkout_opts", + "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`." + }, + { + "type": "git_fetch_options", + "name": "fetch_opts", + "comments": " Options which control the fetch, including callbacks.\n\n The callbacks are used for reporting fetch progress, and for acquiring\n credentials in the event they are needed." + }, + { + "type": "int", + "name": "bare", + "comments": " Set to zero (false) to create a standard repo, or non-zero\n for a bare repo" + }, + { + "type": "git_clone_local_t", + "name": "local", + "comments": " Whether to use a fetch or copy the object database." + }, + { + "type": "const char *", + "name": "checkout_branch", + "comments": " The name of the branch to checkout. NULL means use the\n remote's default branch." + }, + { + "type": "git_repository_create_cb", + "name": "repository_cb", + "comments": " A callback used to create the new repository into which to\n clone. If NULL, the 'bare' field will be used to determine\n whether to create a bare repository." + }, + { + "type": "void *", + "name": "repository_cb_payload", + "comments": " An opaque payload to pass to the git_repository creation callback.\n This parameter is ignored unless repository_cb is non-NULL." + }, + { + "type": "git_remote_create_cb", + "name": "remote_cb", + "comments": " A callback used to create the git_remote, prior to its being\n used to perform the clone operation. See the documentation for\n git_remote_create_cb for details. This parameter may be NULL,\n indicating that git_clone should provide default behavior." + }, + { + "type": "void *", + "name": "remote_cb_payload", + "comments": " An opaque payload to pass to the git_remote creation callback.\n This parameter is ignored unless remote_cb is non-NULL." + } + ], + "used": { + "returns": [], + "needs": [ + "git_clone", + "git_clone_options_init" + ] + } + } + ], + [ + "git_commit", + { + "decl": "git_commit", + "type": "struct", + "value": "git_commit", + "file": "git2/types.h", + "line": 136, + "lineto": 136, + "tdef": "typedef", + "description": " Parsed representation of a commit object. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_branch_create", + "git_cherrypick", + "git_cherrypick_commit", + "git_commit_amend", + "git_commit_author", + "git_commit_author_with_mailmap", + "git_commit_body", + "git_commit_committer", + "git_commit_committer_with_mailmap", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_cb", + "git_commit_dup", + "git_commit_free", + "git_commit_header_field", + "git_commit_id", + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_commit_message", + "git_commit_message_encoding", + "git_commit_message_raw", + "git_commit_nth_gen_ancestor", + "git_commit_owner", + "git_commit_parent", + "git_commit_parent_id", + "git_commit_parentcount", + "git_commit_raw_header", + "git_commit_summary", + "git_commit_time", + "git_commit_time_offset", + "git_commit_tree", + "git_commit_tree_id", + "git_diff_commit_as_email", + "git_merge_commits", + "git_note_commit_create", + "git_note_commit_iterator_new", + "git_note_commit_read", + "git_note_commit_remove", + "git_odb_set_commit_graph", + "git_revert", + "git_revert_commit" + ] + } + } + ], + [ + "git_commit_graph", + { + "decl": "git_commit_graph", + "type": "struct", + "value": "git_commit_graph", + "file": "git2/types.h", + "line": 109, + "lineto": 109, + "tdef": "typedef", + "description": " A git commit-graph ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_odb_set_commit_graph" + ] + } + } + ], + [ + "git_commit_graph_split_strategy_t", + { + "decl": [ + "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE" + ], + "type": "enum", + "file": "git2/sys/commit_graph.h", + "line": 102, + "lineto": 108, + "block": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", + "tdef": "typedef", + "description": " The strategy to use when adding a new set of commits to a pre-existing\n commit-graph chain.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", + "comments": "

Do not split commit-graph files. The other split strategy-related option\n fields are ignored.

\n", + "value": 0 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_commit_graph_writer", + { + "decl": "git_commit_graph_writer", + "type": "struct", + "value": "git_commit_graph_writer", + "file": "git2/types.h", + "line": 112, + "lineto": 112, + "tdef": "typedef", + "description": " a writer for commit-graph files. ", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_config", + { + "decl": "git_config", + "type": "struct", + "value": "git_config", + "file": "git2/types.h", + "line": 157, + "lineto": 157, + "tdef": "typedef", + "description": " Memory representation of a set of config files ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_config_add_file_ondisk", + "git_config_backend_foreach_match", + "git_config_delete_entry", + "git_config_delete_multivar", + "git_config_entry_free", + "git_config_foreach", + "git_config_foreach_cb", + "git_config_foreach_match", + "git_config_free", + "git_config_get_bool", + "git_config_get_entry", + "git_config_get_int32", + "git_config_get_int64", + "git_config_get_mapped", + "git_config_get_multivar_foreach", + "git_config_get_path", + "git_config_get_string", + "git_config_get_string_buf", + "git_config_iterator_free", + "git_config_iterator_glob_new", + "git_config_iterator_new", + "git_config_lock", + "git_config_lookup_map_value", + "git_config_multivar_iterator_new", + "git_config_new", + "git_config_next", + "git_config_open_default", + "git_config_open_global", + "git_config_open_level", + "git_config_open_ondisk", + "git_config_set_bool", + "git_config_set_int32", + "git_config_set_int64", + "git_config_set_multivar", + "git_config_set_string", + "git_config_snapshot", + "git_repository_config", + "git_repository_config_snapshot" + ] + } + } + ], + [ + "git_config_backend", + { + "decl": "git_config_backend", + "type": "struct", + "value": "git_config_backend", + "file": "git2/types.h", + "line": 160, + "lineto": 160, + "tdef": "typedef", + "description": " Interface to access a configuration file ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_config_backend_foreach_match" + ] + } + } + ], + [ + "git_config_entry", + { + "decl": [ + "const char * name", + "const char * value", + "unsigned int include_depth", + "git_config_level_t level", + "void (*)(struct git_config_entry *) free", + "void * payload" + ], + "type": "struct", + "value": "git_config_entry", + "file": "git2/config.h", + "line": 64, + "lineto": 71, + "block": "const char * name\nconst char * value\nunsigned int include_depth\ngit_config_level_t level\nvoid (*)(struct git_config_entry *) free\nvoid * payload", + "tdef": "typedef", + "description": " An entry in a configuration file", + "comments": "", + "fields": [ + { + "type": "const char *", + "name": "name", + "comments": " Name of the entry (normalised) " + }, + { + "type": "const char *", + "name": "value", + "comments": " String value of the entry " + }, + { + "type": "unsigned int", + "name": "include_depth", + "comments": " Depth of includes where this variable was found " + }, + { + "type": "git_config_level_t", + "name": "level", + "comments": " Which config file this was found in " + }, + { + "type": "void (*)(struct git_config_entry *)", + "name": "free", + "comments": "" + }, + { + "type": "void *", + "name": "payload", + "comments": " Opaque value for the free function. Do not read or write " + } + ], + "used": { + "returns": [], + "needs": [ + "git_config_entry_free", + "git_config_foreach_cb", + "git_config_get_entry", + "git_config_next" + ] + } + } + ], + [ + "git_config_iterator", + { + "decl": "git_config_iterator", + "type": "struct", + "value": "git_config_iterator", + "file": "git2/config.h", + "line": 92, + "lineto": 92, + "tdef": "typedef", + "description": " An opaque structure for a configuration iterator", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_config_iterator_free", + "git_config_iterator_glob_new", + "git_config_iterator_new", + "git_config_multivar_iterator_new", + "git_config_next" + ] + } + } + ], + [ + "git_config_level_t", + { + "decl": [ + "GIT_CONFIG_LEVEL_PROGRAMDATA", + "GIT_CONFIG_LEVEL_SYSTEM", + "GIT_CONFIG_LEVEL_XDG", + "GIT_CONFIG_LEVEL_GLOBAL", + "GIT_CONFIG_LEVEL_LOCAL", + "GIT_CONFIG_LEVEL_APP", + "GIT_CONFIG_HIGHEST_LEVEL" + ], + "type": "enum", + "file": "git2/config.h", + "line": 31, + "lineto": 59, + "block": "GIT_CONFIG_LEVEL_PROGRAMDATA\nGIT_CONFIG_LEVEL_SYSTEM\nGIT_CONFIG_LEVEL_XDG\nGIT_CONFIG_LEVEL_GLOBAL\nGIT_CONFIG_LEVEL_LOCAL\nGIT_CONFIG_LEVEL_APP\nGIT_CONFIG_HIGHEST_LEVEL", + "tdef": "typedef", + "description": " Priority level of a config file.\n These priority levels correspond to the natural escalation logic\n (from higher to lower) when searching for config entries in git.git.", + "comments": "

git_config_open_default() and git_repository_config() honor those priority levels as well.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_PROGRAMDATA", + "comments": "

System-wide on Windows, for compatibility with portable git

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_SYSTEM", + "comments": "

System-wide configuration file; /etc/gitconfig on Linux systems

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_XDG", + "comments": "

XDG compatible configuration file; typically ~/.config/git/config

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_GLOBAL", + "comments": "

User-specific configuration file (also called Global configuration\n file); typically ~/.gitconfig

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_LOCAL", + "comments": "

Repository specific configuration file; $WORK_DIR/.git/config on\n non-bare repos

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_APP", + "comments": "

Application specific configuration file; freely defined by applications

\n", + "value": 6 + }, + { + "type": "int", + "name": "GIT_CONFIG_HIGHEST_LEVEL", + "comments": "

Represents the highest level available config file (i.e. the most\n specific config file available that actually is loaded)

\n", + "value": -1 + } + ], + "used": { + "returns": [], + "needs": [ + "git_config_add_file_ondisk", + "git_config_open_level" + ] + } + } + ], + [ + "git_configmap", + { + "decl": [ + "git_configmap_t type", + "const char * str_match", + "int map_value" + ], + "type": "struct", + "value": "git_configmap", + "file": "git2/config.h", + "line": 107, + "lineto": 111, + "block": "git_configmap_t type\nconst char * str_match\nint map_value", + "tdef": "typedef", + "description": " Mapping from config variables to values.", + "comments": "", + "fields": [ + { + "type": "git_configmap_t", + "name": "type", + "comments": "" + }, + { + "type": "const char *", + "name": "str_match", + "comments": "" + }, + { + "type": "int", + "name": "map_value", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_config_get_mapped", + "git_config_lookup_map_value" + ] + } + } + ], + [ + "git_configmap_t", + { + "decl": [ + "GIT_CONFIGMAP_FALSE", + "GIT_CONFIGMAP_TRUE", + "GIT_CONFIGMAP_INT32", + "GIT_CONFIGMAP_STRING" + ], + "type": "enum", + "file": "git2/config.h", + "line": 97, + "lineto": 102, + "block": "GIT_CONFIGMAP_FALSE\nGIT_CONFIGMAP_TRUE\nGIT_CONFIGMAP_INT32\nGIT_CONFIGMAP_STRING", + "tdef": "typedef", + "description": " Config var type", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_CONFIGMAP_FALSE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CONFIGMAP_TRUE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CONFIGMAP_INT32", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CONFIGMAP_STRING", + "comments": "", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_credential", + { + "decl": "git_credential", + "type": "struct", + "value": "git_credential", + "file": "git2/credential.h", + "line": 84, + "lineto": 84, + "tdef": "typedef", + "description": " The base structure for all credential types", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_credential_acquire_cb", + "git_credential_default_new", + "git_credential_free", + "git_credential_get_username", + "git_credential_has_username", + "git_credential_ssh_custom_new", + "git_credential_ssh_interactive_new", + "git_credential_ssh_key_from_agent", + "git_credential_ssh_key_memory_new", + "git_credential_ssh_key_new", + "git_credential_username_new", + "git_credential_userpass", + "git_credential_userpass_plaintext_new" + ] + } + } + ], + [ + "git_credential_default", + { + "decl": "git_credential_default", + "type": "struct", + "value": "git_credential_default", + "file": "git2/credential.h", + "line": 92, + "lineto": 92, + "tdef": "typedef", + "description": " A key for NTLM/Kerberos \"default\" credentials ", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_credential_ssh_custom", + { + "decl": "git_credential_ssh_custom", + "type": "struct", + "value": "git_credential_ssh_custom", + "file": "git2/credential.h", + "line": 107, + "lineto": 107, + "tdef": "typedef", + "description": " A key with a custom signature function", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_credential_ssh_interactive", + { + "decl": "git_credential_ssh_interactive", + "type": "struct", + "value": "git_credential_ssh_interactive", + "file": "git2/credential.h", + "line": 102, + "lineto": 102, + "tdef": "typedef", + "description": " Keyboard-interactive based ssh authentication", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_credential_ssh_interactive_new" + ] + } + } + ], + [ + "git_credential_ssh_key", + { + "decl": "git_credential_ssh_key", + "type": "struct", + "value": "git_credential_ssh_key", + "file": "git2/credential.h", + "line": 97, + "lineto": 97, + "tdef": "typedef", + "description": " A ssh key from disk", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_credential_t", + { + "decl": [ + "GIT_CREDENTIAL_USERPASS_PLAINTEXT", + "GIT_CREDENTIAL_SSH_KEY", + "GIT_CREDENTIAL_SSH_CUSTOM", + "GIT_CREDENTIAL_DEFAULT", + "GIT_CREDENTIAL_SSH_INTERACTIVE", + "GIT_CREDENTIAL_USERNAME", + "GIT_CREDENTIAL_SSH_MEMORY" + ], + "type": "enum", + "file": "git2/credential.h", + "line": 27, + "lineto": 79, + "block": "GIT_CREDENTIAL_USERPASS_PLAINTEXT\nGIT_CREDENTIAL_SSH_KEY\nGIT_CREDENTIAL_SSH_CUSTOM\nGIT_CREDENTIAL_DEFAULT\nGIT_CREDENTIAL_SSH_INTERACTIVE\nGIT_CREDENTIAL_USERNAME\nGIT_CREDENTIAL_SSH_MEMORY", + "tdef": "typedef", + "description": " Supported credential types", + "comments": "

This represents the various types of authentication methods supported by the library.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_CREDENTIAL_USERPASS_PLAINTEXT", + "comments": "

A vanilla user/password request

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_SSH_KEY", + "comments": "

An SSH key-based authentication request

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_SSH_CUSTOM", + "comments": "

An SSH key-based authentication request, with a custom signature

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_DEFAULT", + "comments": "

An NTLM/Negotiate-based authentication request.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_SSH_INTERACTIVE", + "comments": "

An SSH interactive authentication request

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_USERNAME", + "comments": "

Username-only authentication request

\n\n

Used as a pre-authentication step if the underlying transport\n (eg. SSH, with no username in its URL) does not know which username\n to use.

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_SSH_MEMORY", + "comments": "

An SSH key-based authentication request

\n\n

Allows credentials to be read from memory instead of files.\n Note that because of differences in crypto backend support, it might\n not be functional.

\n", + "value": 64 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_credential_username", + { + "decl": "git_credential_username", + "type": "struct", + "value": "git_credential_username", + "file": "git2/credential.h", + "line": 89, + "lineto": 89, + "tdef": "typedef", + "description": " Username-only credential information ", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_credential_userpass_payload", + { + "decl": [ + "const char * username", + "const char * password" + ], + "type": "struct", + "value": "git_credential_userpass_payload", + "file": "git2/credential_helpers.h", + "line": 24, + "lineto": 27, + "block": "const char * username\nconst char * password", + "tdef": "typedef", + "description": " Payload for git_credential_userpass_plaintext.", + "comments": "", + "fields": [ + { + "type": "const char *", + "name": "username", + "comments": "" + }, + { + "type": "const char *", + "name": "password", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_delta_t", + { + "decl": [ + "GIT_DELTA_UNMODIFIED", + "GIT_DELTA_ADDED", + "GIT_DELTA_DELETED", + "GIT_DELTA_MODIFIED", + "GIT_DELTA_RENAMED", + "GIT_DELTA_COPIED", + "GIT_DELTA_IGNORED", + "GIT_DELTA_UNTRACKED", + "GIT_DELTA_TYPECHANGE", + "GIT_DELTA_UNREADABLE", + "GIT_DELTA_CONFLICTED" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 224, + "lineto": 236, + "block": "GIT_DELTA_UNMODIFIED\nGIT_DELTA_ADDED\nGIT_DELTA_DELETED\nGIT_DELTA_MODIFIED\nGIT_DELTA_RENAMED\nGIT_DELTA_COPIED\nGIT_DELTA_IGNORED\nGIT_DELTA_UNTRACKED\nGIT_DELTA_TYPECHANGE\nGIT_DELTA_UNREADABLE\nGIT_DELTA_CONFLICTED", + "tdef": "typedef", + "description": " What type of change is described by a git_diff_delta?", + "comments": "

GIT_DELTA_RENAMED and GIT_DELTA_COPIED will only show up if you run git_diff_find_similar() on the diff object.

\n\n

GIT_DELTA_TYPECHANGE only shows up given GIT_DIFF_INCLUDE_TYPECHANGE in the option flags (otherwise type changes will be split into ADDED / DELETED pairs).

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DELTA_UNMODIFIED", + "comments": "

no changes

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DELTA_ADDED", + "comments": "

entry does not exist in old version

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DELTA_DELETED", + "comments": "

entry does not exist in new version

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DELTA_MODIFIED", + "comments": "

entry content changed between old and new

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_DELTA_RENAMED", + "comments": "

entry was renamed between old and new

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DELTA_COPIED", + "comments": "

entry was copied from another old entry

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_DELTA_IGNORED", + "comments": "

entry is ignored item in workdir

\n", + "value": 6 + }, + { + "type": "int", + "name": "GIT_DELTA_UNTRACKED", + "comments": "

entry is untracked item in workdir

\n", + "value": 7 + }, + { + "type": "int", + "name": "GIT_DELTA_TYPECHANGE", + "comments": "

type of entry changed between old and new

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_DELTA_UNREADABLE", + "comments": "

entry is unreadable

\n", + "value": 9 + }, + { + "type": "int", + "name": "GIT_DELTA_CONFLICTED", + "comments": "

entry in the index is conflicted

\n", + "value": 10 + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_num_deltas_of_type", + "git_diff_status_char" + ] + } + } + ], + [ + "git_describe_format_options", + { + "decl": [ + "unsigned int version", + "unsigned int abbreviated_size", + "int always_use_long_format", + "const char * dirty_suffix" + ], + "type": "struct", + "value": "git_describe_format_options", + "file": "git2/describe.h", + "line": 91, + "lineto": 111, + "block": "unsigned int version\nunsigned int abbreviated_size\nint always_use_long_format\nconst char * dirty_suffix", + "tdef": "typedef", + "description": " Describe format options structure", + "comments": "

Initialize with GIT_DESCRIBE_FORMAT_OPTIONS_INIT. Alternatively, you can use git_describe_format_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "unsigned int", + "name": "abbreviated_size", + "comments": " Size of the abbreviated commit id to use. This value is the\n lower bound for the length of the abbreviated string. The\n default is 7." + }, + { + "type": "int", + "name": "always_use_long_format", + "comments": " Set to use the long format even when a shorter name could be used." + }, + { + "type": "const char *", + "name": "dirty_suffix", + "comments": " If the workdir is dirty and this is set, this string will\n be appended to the description string." + } + ], + "used": { + "returns": [], + "needs": [ + "git_describe_format", + "git_describe_format_options_init" + ] + } + } + ], + [ + "git_describe_options", + { + "decl": [ + "unsigned int version", + "unsigned int max_candidates_tags", + "unsigned int describe_strategy", + "const char * pattern", + "int only_follow_first_parent", + "int show_commit_oid_as_fallback" + ], + "type": "struct", + "value": "git_describe_options", + "file": "git2/describe.h", + "line": 43, + "lineto": 61, + "block": "unsigned int version\nunsigned int max_candidates_tags\nunsigned int describe_strategy\nconst char * pattern\nint only_follow_first_parent\nint show_commit_oid_as_fallback", + "tdef": "typedef", + "description": " Describe options structure", + "comments": "

Initialize with GIT_DESCRIBE_OPTIONS_INIT. Alternatively, you can use git_describe_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "unsigned int", + "name": "max_candidates_tags", + "comments": " default: 10 " + }, + { + "type": "unsigned int", + "name": "describe_strategy", + "comments": " default: GIT_DESCRIBE_DEFAULT " + }, + { + "type": "const char *", + "name": "pattern", + "comments": "" + }, + { + "type": "int", + "name": "only_follow_first_parent", + "comments": " When calculating the distance from the matching tag or\n reference, only walk down the first-parent ancestry." + }, + { + "type": "int", + "name": "show_commit_oid_as_fallback", + "comments": " If no matching tag or reference is found, the describe\n operation would normally fail. If this option is set, it\n will instead fall back to showing the full id of the\n commit." + } + ], + "used": { + "returns": [], + "needs": [ + "git_describe_commit", + "git_describe_options_init", + "git_describe_workdir" + ] + } + } + ], + [ + "git_describe_result", + { + "decl": "git_describe_result", + "type": "struct", + "value": "git_describe_result", + "file": "git2/describe.h", + "line": 134, + "lineto": 134, + "tdef": "typedef", + "description": " A struct that stores the result of a describe operation.", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_describe_commit", + "git_describe_format", + "git_describe_result_free", + "git_describe_workdir" + ] + } + } + ], + [ + "git_describe_strategy_t", + { + "decl": [ + "GIT_DESCRIBE_DEFAULT", + "GIT_DESCRIBE_TAGS", + "GIT_DESCRIBE_ALL" + ], + "type": "enum", + "file": "git2/describe.h", + "line": 30, + "lineto": 34, + "block": "GIT_DESCRIBE_DEFAULT\nGIT_DESCRIBE_TAGS\nGIT_DESCRIBE_ALL", + "tdef": "typedef", + "description": " Reference lookup strategy", + "comments": "

These behave like the --tags and --all options to git-describe, namely they say to look for any reference in either refs/tags/ or refs/ respectively.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DESCRIBE_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DESCRIBE_TAGS", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DESCRIBE_ALL", + "comments": "", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff", + { + "decl": "git_diff", + "type": "struct", + "value": "git_diff", + "file": "git2/diff.h", + "line": 196, + "lineto": 196, + "tdef": "typedef", + "description": " The diff object that contains all individual file deltas.", + "comments": "

A diff represents the cumulative list of differences between two snapshots of a repository (possibly filtered by a set of file name patterns).

\n\n

Calculating diffs is generally done in two phases: building a list of diffs then traversing it. This makes is easier to share logic across the various types of diffs (tree vs tree, workdir vs index, etc.), and also allows you to insert optional diff post-processing phases, such as rename detection, in between the steps. When you are done with a diff object, it must be freed.

\n\n

This is an opaque structure which will be allocated by one of the diff generator functions below (such as git_diff_tree_to_tree). You are responsible for releasing the object memory when done, using the git_diff_free() function.

\n", + "used": { + "returns": [ + "git_diff_get_delta", + "git_patch_get_delta", + "git_pathspec_match_list_diff_entry" + ], + "needs": [ + "git_apply", + "git_apply_delta_cb", + "git_apply_hunk_cb", + "git_apply_to_tree", + "git_checkout_notify_cb", + "git_diff_binary_cb", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_commit_as_email", + "git_diff_file_cb", + "git_diff_find_options_init", + "git_diff_find_similar", + "git_diff_foreach", + "git_diff_format_email", + "git_diff_format_email_options_init", + "git_diff_free", + "git_diff_from_buffer", + "git_diff_get_delta", + "git_diff_get_stats", + "git_diff_hunk_cb", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_is_sorted_icase", + "git_diff_line_cb", + "git_diff_merge", + "git_diff_notify_cb", + "git_diff_num_deltas", + "git_diff_num_deltas_of_type", + "git_diff_options_init", + "git_diff_patchid", + "git_diff_patchid_options_init", + "git_diff_print", + "git_diff_progress_cb", + "git_diff_stats_deletions", + "git_diff_stats_files_changed", + "git_diff_stats_free", + "git_diff_stats_insertions", + "git_diff_stats_to_buf", + "git_diff_to_buf", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs", + "git_patch_from_buffers", + "git_patch_from_diff", + "git_patch_get_hunk", + "git_patch_get_line_in_hunk", + "git_patch_print", + "git_pathspec_match_diff" + ] + } + } + ], + [ + "git_diff_binary", + { + "decl": [ + "unsigned int contains_data", + "git_diff_binary_file old_file", + "git_diff_binary_file new_file" + ], + "type": "struct", + "value": "git_diff_binary", + "file": "git2/diff.h", + "line": 544, + "lineto": 556, + "block": "unsigned int contains_data\ngit_diff_binary_file old_file\ngit_diff_binary_file new_file", + "tdef": "typedef", + "description": " Structure describing the binary contents of a diff.", + "comments": "

A binary file / delta is a file (or pair) for which no text diffs should be generated. A diff can contain delta entries that are binary, but no diff content will be output for those files. There is a base heuristic for binary detection and you can further tune the behavior with git attributes or diff flags and option settings.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "contains_data", + "comments": " Whether there is data in this binary structure or not.\n\n If this is `1`, then this was produced and included binary content.\n If this is `0` then this was generated knowing only that a binary\n file changed but without providing the data, probably from a patch\n that said `Binary files a/file.txt and b/file.txt differ`." + }, + { + "type": "git_diff_binary_file", + "name": "old_file", + "comments": " The contents of the old file. " + }, + { + "type": "git_diff_binary_file", + "name": "new_file", + "comments": " The contents of the new file. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_binary_cb", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_foreach" + ] + } + } + ], + [ + "git_diff_binary_file", + { + "decl": [ + "git_diff_binary_t type", + "const char * data", + "size_t datalen", + "size_t inflatedlen" + ], + "type": "struct", + "value": "git_diff_binary_file", + "file": "git2/diff.h", + "line": 521, + "lineto": 533, + "block": "git_diff_binary_t type\nconst char * data\nsize_t datalen\nsize_t inflatedlen", + "tdef": "typedef", + "description": " The contents of one of the files in a binary diff. ", + "comments": "", + "fields": [ + { + "type": "git_diff_binary_t", + "name": "type", + "comments": " The type of binary data for this file. " + }, + { + "type": "const char *", + "name": "data", + "comments": " The binary data, deflated. " + }, + { + "type": "size_t", + "name": "datalen", + "comments": " The length of the binary data. " + }, + { + "type": "size_t", + "name": "inflatedlen", + "comments": " The length of the binary data after inflation. " + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_binary_t", + { + "decl": [ + "GIT_DIFF_BINARY_NONE", + "GIT_DIFF_BINARY_LITERAL", + "GIT_DIFF_BINARY_DELTA" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 509, + "lineto": 518, + "block": "GIT_DIFF_BINARY_NONE\nGIT_DIFF_BINARY_LITERAL\nGIT_DIFF_BINARY_DELTA", + "tdef": "typedef", + "description": " When producing a binary diff, the binary data returned will be\n either the deflated full (\"literal\") contents of the file, or\n the deflated binary delta between the two sides (whichever is\n smaller).", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_BINARY_NONE", + "comments": "

There is no binary delta.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_BINARY_LITERAL", + "comments": "

The binary data is the literal contents of the file.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_BINARY_DELTA", + "comments": "

The binary data is the delta from one side to the other.

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_delta", + { + "decl": [ + "git_delta_t status", + "uint32_t flags", + "uint16_t similarity", + "uint16_t nfiles", + "git_diff_file old_file", + "git_diff_file new_file" + ], + "type": "struct", + "value": "git_diff_delta", + "file": "git2/diff.h", + "line": 324, + "lineto": 331, + "block": "git_delta_t status\nuint32_t flags\nuint16_t similarity\nuint16_t nfiles\ngit_diff_file old_file\ngit_diff_file new_file", + "tdef": "typedef", + "description": " Description of changes to one entry.", + "comments": "

A delta is a file pair with an old and new revision. The old version may be absent if the file was just created and the new version may be absent if the file was deleted. A diff is mostly just a list of deltas.

\n\n

When iterating over a diff, this will be passed to most callbacks and you can use the contents to understand exactly what has changed.

\n\n

The old_file represents the "from" side of the diff and the new_file represents to "to" side of the diff. What those means depend on the function that was used to generate the diff and will be documented below. You can also use the GIT_DIFF_REVERSE flag to flip it around.

\n\n

Although the two sides of the delta are named "old_file" and "new_file", they actually may correspond to entries that represent a file, a symbolic link, a submodule commit id, or even a tree (if you are tracking type changes or ignored/untracked directories).

\n\n

Under some circumstances, in the name of efficiency, not all fields will be filled in, but we generally try to fill in as much as possible. One example is that the "flags" field may not have either the BINARY or the NOT_BINARY flag set to avoid examining file contents if you do not pass in hunk and/or line callbacks to the diff foreach iteration function. It will just use the git attributes for those files.

\n\n

The similarity score is zero unless you call git_diff_find_similar() which does a similarity analysis of files in the diff. Use that function to do rename and copy detection, and to split heavily modified files in add/delete pairs. After that call, deltas with a status of GIT_DELTA_RENAMED or GIT_DELTA_COPIED will have a similarity score between 0 and 100 indicating how similar the old and new sides are.

\n\n

If you ask git_diff_find_similar to find heavily modified files to break, but to not actually break the records, then GIT_DELTA_MODIFIED records may have a non-zero similarity score if the self-similarity is below the split threshold. To display this value like core Git, invert the score (a la printf("M%03d", 100 - delta->similarity)).

\n", + "fields": [ + { + "type": "git_delta_t", + "name": "status", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " git_diff_flag_t values " + }, + { + "type": "uint16_t", + "name": "similarity", + "comments": " for RENAMED and COPIED, value 0-100 " + }, + { + "type": "uint16_t", + "name": "nfiles", + "comments": " number of files in this delta " + }, + { + "type": "git_diff_file", + "name": "old_file", + "comments": "" + }, + { + "type": "git_diff_file", + "name": "new_file", + "comments": "" + } + ], + "used": { + "returns": [ + "git_diff_get_delta", + "git_patch_get_delta", + "git_pathspec_match_list_diff_entry" + ], + "needs": [ + "git_apply_delta_cb", + "git_diff_binary_cb", + "git_diff_file_cb", + "git_diff_hunk_cb", + "git_diff_line_cb", + "git_diff_notify_cb" + ] + } + } + ], + [ + "git_diff_file", + { + "decl": [ + "git_oid id", + "const char * path", + "git_object_size_t size", + "uint32_t flags", + "uint16_t mode", + "uint16_t id_abbrev" + ], + "type": "struct", + "value": "git_diff_file", + "file": "git2/diff.h", + "line": 245, + "lineto": 282, + "block": "git_oid id\nconst char * path\ngit_object_size_t size\nuint32_t flags\nuint16_t mode\nuint16_t id_abbrev", + "tdef": "typedef", + "description": " Description of one side of a delta.", + "comments": "

Although this is called a "file", it could represent a file, a symbolic link, a submodule commit id, or even a tree (although that only if you are tracking type changes or ignored/untracked directories).

\n", + "fields": [ + { + "type": "git_oid", + "name": "id", + "comments": " The `git_oid` of the item. If the entry represents an\n absent side of a diff (e.g. the `old_file` of a `GIT_DELTA_ADDED` delta),\n then the oid will be zeroes." + }, + { + "type": "const char *", + "name": "path", + "comments": " The NUL-terminated path to the entry relative to the working\n directory of the repository." + }, + { + "type": "git_object_size_t", + "name": "size", + "comments": " The size of the entry in bytes." + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of the `git_diff_flag_t` types" + }, + { + "type": "uint16_t", + "name": "mode", + "comments": " Roughly, the stat() `st_mode` value for the item. This will\n be restricted to one of the `git_filemode_t` values." + }, + { + "type": "uint16_t", + "name": "id_abbrev", + "comments": " Represents the known length of the `id` field, when\n converted to a hex string. It is generally `GIT_OID_SHA1_HEXSIZE`, unless this\n delta was created from reading a patch file, in which case it may be\n abbreviated to something reasonable, like 7 characters." + } + ], + "used": { + "returns": [], + "needs": [ + "git_checkout_notify_cb", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_foreach" + ] + } + } + ], + [ + "git_diff_find_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "uint16_t rename_threshold", + "uint16_t rename_from_rewrite_threshold", + "uint16_t copy_threshold", + "uint16_t break_rewrite_threshold", + "size_t rename_limit", + "git_diff_similarity_metric * metric" + ], + "type": "struct", + "value": "git_diff_find_options", + "file": "git2/diff.h", + "line": 749, + "lineto": 803, + "block": "unsigned int version\nuint32_t flags\nuint16_t rename_threshold\nuint16_t rename_from_rewrite_threshold\nuint16_t copy_threshold\nuint16_t break_rewrite_threshold\nsize_t rename_limit\ngit_diff_similarity_metric * metric", + "tdef": "typedef", + "description": " Control behavior of rename and copy detection", + "comments": "

These options mostly mimic parameters that can be passed to git-diff.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " Combination of git_diff_find_t values (default GIT_DIFF_FIND_BY_CONFIG).\n NOTE: if you don't explicitly set this, `diff.renames` could be set\n to false, resulting in `git_diff_find_similar` doing nothing." + }, + { + "type": "uint16_t", + "name": "rename_threshold", + "comments": " Threshold above which similar files will be considered renames.\n This is equivalent to the -M option. Defaults to 50." + }, + { + "type": "uint16_t", + "name": "rename_from_rewrite_threshold", + "comments": " Threshold below which similar files will be eligible to be a rename source.\n This is equivalent to the first part of the -B option. Defaults to 50." + }, + { + "type": "uint16_t", + "name": "copy_threshold", + "comments": " Threshold above which similar files will be considered copies.\n This is equivalent to the -C option. Defaults to 50." + }, + { + "type": "uint16_t", + "name": "break_rewrite_threshold", + "comments": " Threshold below which similar files will be split into a delete/add pair.\n This is equivalent to the last part of the -B option. Defaults to 60." + }, + { + "type": "size_t", + "name": "rename_limit", + "comments": " Maximum number of matches to consider for a particular file.\n\n This is a little different from the `-l` option from Git because we\n will still process up to this many matches before abandoning the search.\n Defaults to 1000." + }, + { + "type": "git_diff_similarity_metric *", + "name": "metric", + "comments": " The `metric` option allows you to plug in a custom similarity metric.\n\n Set it to NULL to use the default internal metric.\n\n The default metric is based on sampling hashes of ranges of data in\n the file, which is a pretty good similarity approximation that should\n work fairly well for both text and binary data while still being\n pretty fast with a fixed memory overhead." + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_find_options_init", + "git_diff_find_similar" + ] + } + } + ], + [ + "git_diff_find_t", + { + "decl": [ + "GIT_DIFF_FIND_BY_CONFIG", + "GIT_DIFF_FIND_RENAMES", + "GIT_DIFF_FIND_RENAMES_FROM_REWRITES", + "GIT_DIFF_FIND_COPIES", + "GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED", + "GIT_DIFF_FIND_REWRITES", + "GIT_DIFF_BREAK_REWRITES", + "GIT_DIFF_FIND_AND_BREAK_REWRITES", + "GIT_DIFF_FIND_FOR_UNTRACKED", + "GIT_DIFF_FIND_ALL", + "GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE", + "GIT_DIFF_FIND_IGNORE_WHITESPACE", + "GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE", + "GIT_DIFF_FIND_EXACT_MATCH_ONLY", + "GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY", + "GIT_DIFF_FIND_REMOVE_UNMODIFIED" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 658, + "lineto": 727, + "block": "GIT_DIFF_FIND_BY_CONFIG\nGIT_DIFF_FIND_RENAMES\nGIT_DIFF_FIND_RENAMES_FROM_REWRITES\nGIT_DIFF_FIND_COPIES\nGIT_DIFF_FIND_COPIES_FROM_UNMODIFIED\nGIT_DIFF_FIND_REWRITES\nGIT_DIFF_BREAK_REWRITES\nGIT_DIFF_FIND_AND_BREAK_REWRITES\nGIT_DIFF_FIND_FOR_UNTRACKED\nGIT_DIFF_FIND_ALL\nGIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE\nGIT_DIFF_FIND_IGNORE_WHITESPACE\nGIT_DIFF_FIND_DONT_IGNORE_WHITESPACE\nGIT_DIFF_FIND_EXACT_MATCH_ONLY\nGIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY\nGIT_DIFF_FIND_REMOVE_UNMODIFIED", + "tdef": "typedef", + "description": " Flags to control the behavior of diff rename/copy detection.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_FIND_BY_CONFIG", + "comments": "

Obey diff.renames. Overridden by any other GIT_DIFF_FIND_... flag.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_RENAMES", + "comments": "

Look for renames? (--find-renames)

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_RENAMES_FROM_REWRITES", + "comments": "

Consider old side of MODIFIED for renames? (--break-rewrites=N)

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_COPIES", + "comments": "

Look for copies? (a la --find-copies).

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED", + "comments": "

Consider UNMODIFIED as copy sources? (--find-copies-harder).

\n\n

For this to work correctly, use GIT_DIFF_INCLUDE_UNMODIFIED when\n the initial git_diff is being generated.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_REWRITES", + "comments": "

Mark significant rewrites for split (--break-rewrites=/M)

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_DIFF_BREAK_REWRITES", + "comments": "

Actually split large rewrites into delete/add pairs

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_AND_BREAK_REWRITES", + "comments": "

Mark rewrites for split and break into delete/add pairs

\n", + "value": 48 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_FOR_UNTRACKED", + "comments": "

Find renames/copies for UNTRACKED items in working directory.

\n\n

For this to work correctly, use GIT_DIFF_INCLUDE_UNTRACKED when the\n initial git_diff is being generated (and obviously the diff must\n be against the working directory for this to make sense).

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_ALL", + "comments": "

Turn on all finding features.

\n", + "value": 255 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE", + "comments": "

Measure similarity ignoring leading whitespace (default)

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_IGNORE_WHITESPACE", + "comments": "

Measure similarity ignoring all whitespace

\n", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE", + "comments": "

Measure similarity including all data

\n", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_EXACT_MATCH_ONLY", + "comments": "

Measure similarity only by comparing SHAs (fast and cheap)

\n", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY", + "comments": "

Do not break rewrites unless they contribute to a rename.

\n\n

Normally, GIT_DIFF_FIND_AND_BREAK_REWRITES will measure the self-\n similarity of modified files and split the ones that have changed a\n lot into a DELETE / ADD pair. Then the sides of that pair will be\n considered candidates for rename and copy detection.

\n\n

If you add this flag in and the split pair is not used for an\n actual rename or copy, then the modified record will be restored to\n a regular MODIFIED record instead of being split.

\n", + "value": 32768 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_REMOVE_UNMODIFIED", + "comments": "

Remove any UNMODIFIED deltas after find_similar is done.

\n\n

Using GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED to emulate the\n --find-copies-harder behavior requires building a diff with the\n GIT_DIFF_INCLUDE_UNMODIFIED flag. If you do not want UNMODIFIED\n records in the final result, pass this flag to have them removed.

\n", + "value": 65536 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_flag_t", + { + "decl": [ + "GIT_DIFF_FLAG_BINARY", + "GIT_DIFF_FLAG_NOT_BINARY", + "GIT_DIFF_FLAG_VALID_ID", + "GIT_DIFF_FLAG_EXISTS", + "GIT_DIFF_FLAG_VALID_SIZE" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 206, + "lineto": 212, + "block": "GIT_DIFF_FLAG_BINARY\nGIT_DIFF_FLAG_NOT_BINARY\nGIT_DIFF_FLAG_VALID_ID\nGIT_DIFF_FLAG_EXISTS\nGIT_DIFF_FLAG_VALID_SIZE", + "tdef": "typedef", + "description": " Flags for the delta object and the file objects on each side.", + "comments": "

These flags are used for both the flags value of the git_diff_delta and the flags for the git_diff_file objects representing the old and new sides of the delta. Values outside of this public range should be considered reserved for internal or future use.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_FLAG_BINARY", + "comments": "

file(s) treated as binary data

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_FLAG_NOT_BINARY", + "comments": "

file(s) treated as text data

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_FLAG_VALID_ID", + "comments": "

id value is known correct

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_FLAG_EXISTS", + "comments": "

file exists at this side of the delta

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_DIFF_FLAG_VALID_SIZE", + "comments": "

file size value is known correct

\n", + "value": 16 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_format_email_flags_t", + { + "decl": [ + "GIT_DIFF_FORMAT_EMAIL_NONE", + "GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER" + ], + "type": "enum", + "file": "git2/deprecated.h", + "line": 311, + "lineto": 318, + "block": "GIT_DIFF_FORMAT_EMAIL_NONE\nGIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", + "tdef": "typedef", + "description": " Formatting options for diff e-mail generation", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_FORMAT_EMAIL_NONE", + "comments": "

Normal patch, the default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", + "comments": "

Don't insert "[PATCH]" in the subject header

\n", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_format_email_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "size_t patch_no", + "size_t total_patches", + "const git_oid * id", + "const char * summary", + "const char * body", + "const git_signature * author" + ], + "type": "struct", + "value": "git_diff_format_email_options", + "file": "git2/deprecated.h", + "line": 323, + "lineto": 346, + "block": "unsigned int version\nuint32_t flags\nsize_t patch_no\nsize_t total_patches\nconst git_oid * id\nconst char * summary\nconst char * body\nconst git_signature * author", + "tdef": "typedef", + "description": " Options for controlling the formatting of the generated e-mail.", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " see `git_diff_format_email_flags_t` above " + }, + { + "type": "size_t", + "name": "patch_no", + "comments": " This patch number " + }, + { + "type": "size_t", + "name": "total_patches", + "comments": " Total number of patches in this series " + }, + { + "type": "const git_oid *", + "name": "id", + "comments": " id to use for the commit " + }, + { + "type": "const char *", + "name": "summary", + "comments": " Summary of the change " + }, + { + "type": "const char *", + "name": "body", + "comments": " Commit message's body " + }, + { + "type": "const git_signature *", + "name": "author", + "comments": " Author of the change " + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_format_email", + "git_diff_format_email_options_init" + ] + } + } + ], + [ + "git_diff_format_t", + { + "decl": [ + "GIT_DIFF_FORMAT_PATCH", + "GIT_DIFF_FORMAT_PATCH_HEADER", + "GIT_DIFF_FORMAT_RAW", + "GIT_DIFF_FORMAT_NAME_ONLY", + "GIT_DIFF_FORMAT_NAME_STATUS", + "GIT_DIFF_FORMAT_PATCH_ID" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 1128, + "lineto": 1135, + "block": "GIT_DIFF_FORMAT_PATCH\nGIT_DIFF_FORMAT_PATCH_HEADER\nGIT_DIFF_FORMAT_RAW\nGIT_DIFF_FORMAT_NAME_ONLY\nGIT_DIFF_FORMAT_NAME_STATUS\nGIT_DIFF_FORMAT_PATCH_ID", + "tdef": "typedef", + "description": " Possible output formats for diff data", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_FORMAT_PATCH", + "comments": "

full git diff

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_PATCH_HEADER", + "comments": "

just the file headers of patch

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_RAW", + "comments": "

like git diff --raw

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_NAME_ONLY", + "comments": "

like git diff --name-only

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_NAME_STATUS", + "comments": "

like git diff --name-status

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_PATCH_ID", + "comments": "

git diff as used by git patch-id

\n", + "value": 6 + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_print", + "git_diff_to_buf" + ] + } + } + ], + [ + "git_diff_hunk", + { + "decl": [ + "int old_start", + "int old_lines", + "int new_start", + "int new_lines", + "size_t header_len", + "char [128] header" + ], + "type": "struct", + "value": "git_diff_hunk", + "file": "git2/diff.h", + "line": 576, + "lineto": 583, + "block": "int old_start\nint old_lines\nint new_start\nint new_lines\nsize_t header_len\nchar [128] header", + "tdef": "typedef", + "description": " Structure describing a hunk of a diff.", + "comments": "

A hunk is a span of modified lines in a delta along with some stable surrounding context. You can configure the amount of context and other properties of how hunks are generated. Each hunk also comes with a header that described where it starts and ends in both the old and new versions in the delta.

\n", + "fields": [ + { + "type": "int", + "name": "old_start", + "comments": " Starting line number in old_file " + }, + { + "type": "int", + "name": "old_lines", + "comments": " Number of lines in old_file " + }, + { + "type": "int", + "name": "new_start", + "comments": " Starting line number in new_file " + }, + { + "type": "int", + "name": "new_lines", + "comments": " Number of lines in new_file " + }, + { + "type": "size_t", + "name": "header_len", + "comments": " Number of bytes in header text " + }, + { + "type": "char [128]", + "name": "header", + "comments": " Header text, NUL-byte terminated " + } + ], + "used": { + "returns": [], + "needs": [ + "git_apply_hunk_cb", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_foreach", + "git_diff_hunk_cb", + "git_diff_line_cb", + "git_patch_get_hunk" + ] + } + } + ], + [ + "git_diff_line", + { + "decl": [ + "char origin", + "int old_lineno", + "int new_lineno", + "int num_lines", + "size_t content_len", + "git_off_t content_offset", + "const char * content" + ], + "type": "struct", + "value": "git_diff_line", + "file": "git2/diff.h", + "line": 631, + "lineto": 639, + "block": "char origin\nint old_lineno\nint new_lineno\nint num_lines\nsize_t content_len\ngit_off_t content_offset\nconst char * content", + "tdef": "typedef", + "description": " Structure describing a line (or data span) of a diff.", + "comments": "

A line is a range of characters inside a hunk. It could be a context line (i.e. in both old and new versions), an added line (i.e. only in the new version), or a removed line (i.e. only in the old version). Unfortunately, we don't know anything about the encoding of data in the file being diffed, so we cannot tell you much about the line content. Line data will not be NUL-byte terminated, however, because it will be just a span of bytes inside the larger file.

\n", + "fields": [ + { + "type": "char", + "name": "origin", + "comments": " A git_diff_line_t value " + }, + { + "type": "int", + "name": "old_lineno", + "comments": " Line number in old file or -1 for added line " + }, + { + "type": "int", + "name": "new_lineno", + "comments": " Line number in new file or -1 for deleted line " + }, + { + "type": "int", + "name": "num_lines", + "comments": " Number of newline characters in content " + }, + { + "type": "size_t", + "name": "content_len", + "comments": " Number of bytes of data " + }, + { + "type": "git_off_t", + "name": "content_offset", + "comments": " Offset in the original file to the content " + }, + { + "type": "const char *", + "name": "content", + "comments": " Pointer to diff text, not NUL-byte terminated " + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_foreach", + "git_diff_line_cb", + "git_diff_print", + "git_patch_get_line_in_hunk", + "git_patch_print" + ] + } + } + ], + [ + "git_diff_line_t", + { + "decl": [ + "GIT_DIFF_LINE_CONTEXT", + "GIT_DIFF_LINE_ADDITION", + "GIT_DIFF_LINE_DELETION", + "GIT_DIFF_LINE_CONTEXT_EOFNL", + "GIT_DIFF_LINE_ADD_EOFNL", + "GIT_DIFF_LINE_DEL_EOFNL", + "GIT_DIFF_LINE_FILE_HDR", + "GIT_DIFF_LINE_HUNK_HDR", + "GIT_DIFF_LINE_BINARY" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 602, + "lineto": 618, + "block": "GIT_DIFF_LINE_CONTEXT\nGIT_DIFF_LINE_ADDITION\nGIT_DIFF_LINE_DELETION\nGIT_DIFF_LINE_CONTEXT_EOFNL\nGIT_DIFF_LINE_ADD_EOFNL\nGIT_DIFF_LINE_DEL_EOFNL\nGIT_DIFF_LINE_FILE_HDR\nGIT_DIFF_LINE_HUNK_HDR\nGIT_DIFF_LINE_BINARY", + "tdef": "typedef", + "description": " Line origin constants.", + "comments": "

These values describe where a line came from and will be passed to the git_diff_line_cb when iterating over a diff. There are some special origin constants at the end that are used for the text output callbacks to demarcate lines that are actually part of the file or hunk headers.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_LINE_CONTEXT", + "comments": "", + "value": 32 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_ADDITION", + "comments": "", + "value": 43 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_DELETION", + "comments": "", + "value": 45 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_CONTEXT_EOFNL", + "comments": "

Both files have no LF at end

\n", + "value": 61 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_ADD_EOFNL", + "comments": "

Old has no LF at end, new does

\n", + "value": 62 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_DEL_EOFNL", + "comments": "

Old has LF at end, new does not

\n", + "value": 60 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_FILE_HDR", + "comments": "", + "value": 70 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_HUNK_HDR", + "comments": "", + "value": 72 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_BINARY", + "comments": "

For "Binary files x and y differ"

\n", + "value": 66 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_option_t", + { + "decl": [ + "GIT_DIFF_NORMAL", + "GIT_DIFF_REVERSE", + "GIT_DIFF_INCLUDE_IGNORED", + "GIT_DIFF_RECURSE_IGNORED_DIRS", + "GIT_DIFF_INCLUDE_UNTRACKED", + "GIT_DIFF_RECURSE_UNTRACKED_DIRS", + "GIT_DIFF_INCLUDE_UNMODIFIED", + "GIT_DIFF_INCLUDE_TYPECHANGE", + "GIT_DIFF_INCLUDE_TYPECHANGE_TREES", + "GIT_DIFF_IGNORE_FILEMODE", + "GIT_DIFF_IGNORE_SUBMODULES", + "GIT_DIFF_IGNORE_CASE", + "GIT_DIFF_INCLUDE_CASECHANGE", + "GIT_DIFF_DISABLE_PATHSPEC_MATCH", + "GIT_DIFF_SKIP_BINARY_CHECK", + "GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS", + "GIT_DIFF_UPDATE_INDEX", + "GIT_DIFF_INCLUDE_UNREADABLE", + "GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED", + "GIT_DIFF_INDENT_HEURISTIC", + "GIT_DIFF_IGNORE_BLANK_LINES", + "GIT_DIFF_FORCE_TEXT", + "GIT_DIFF_FORCE_BINARY", + "GIT_DIFF_IGNORE_WHITESPACE", + "GIT_DIFF_IGNORE_WHITESPACE_CHANGE", + "GIT_DIFF_IGNORE_WHITESPACE_EOL", + "GIT_DIFF_SHOW_UNTRACKED_CONTENT", + "GIT_DIFF_SHOW_UNMODIFIED", + "GIT_DIFF_PATIENCE", + "GIT_DIFF_MINIMAL", + "GIT_DIFF_SHOW_BINARY" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 28, + "lineto": 174, + "block": "GIT_DIFF_NORMAL\nGIT_DIFF_REVERSE\nGIT_DIFF_INCLUDE_IGNORED\nGIT_DIFF_RECURSE_IGNORED_DIRS\nGIT_DIFF_INCLUDE_UNTRACKED\nGIT_DIFF_RECURSE_UNTRACKED_DIRS\nGIT_DIFF_INCLUDE_UNMODIFIED\nGIT_DIFF_INCLUDE_TYPECHANGE\nGIT_DIFF_INCLUDE_TYPECHANGE_TREES\nGIT_DIFF_IGNORE_FILEMODE\nGIT_DIFF_IGNORE_SUBMODULES\nGIT_DIFF_IGNORE_CASE\nGIT_DIFF_INCLUDE_CASECHANGE\nGIT_DIFF_DISABLE_PATHSPEC_MATCH\nGIT_DIFF_SKIP_BINARY_CHECK\nGIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS\nGIT_DIFF_UPDATE_INDEX\nGIT_DIFF_INCLUDE_UNREADABLE\nGIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED\nGIT_DIFF_INDENT_HEURISTIC\nGIT_DIFF_IGNORE_BLANK_LINES\nGIT_DIFF_FORCE_TEXT\nGIT_DIFF_FORCE_BINARY\nGIT_DIFF_IGNORE_WHITESPACE\nGIT_DIFF_IGNORE_WHITESPACE_CHANGE\nGIT_DIFF_IGNORE_WHITESPACE_EOL\nGIT_DIFF_SHOW_UNTRACKED_CONTENT\nGIT_DIFF_SHOW_UNMODIFIED\nGIT_DIFF_PATIENCE\nGIT_DIFF_MINIMAL\nGIT_DIFF_SHOW_BINARY", + "tdef": "typedef", + "description": " Flags for diff options. A combination of these flags can be passed\n in via the `flags` value in the `git_diff_options`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_NORMAL", + "comments": "

Normal diff, the default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_REVERSE", + "comments": "

Reverse the sides of the diff

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_IGNORED", + "comments": "

Include ignored files in the diff

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_RECURSE_IGNORED_DIRS", + "comments": "

Even with GIT_DIFF_INCLUDE_IGNORED, an entire ignored directory\n will be marked with only a single entry in the diff; this flag\n adds all files under the directory as IGNORED entries, too.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_UNTRACKED", + "comments": "

Include untracked files in the diff

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_DIFF_RECURSE_UNTRACKED_DIRS", + "comments": "

Even with GIT_DIFF_INCLUDE_UNTRACKED, an entire untracked\n directory will be marked with only a single entry in the diff\n (a la what core Git does in git status); this flag adds all\n files under untracked directories as UNTRACKED entries, too.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_UNMODIFIED", + "comments": "

Include unmodified files in the diff

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_TYPECHANGE", + "comments": "

Normally, a type change between files will be converted into a\n DELETED record for the old and an ADDED record for the new; this\n options enabled the generation of TYPECHANGE delta records.

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_TYPECHANGE_TREES", + "comments": "

Even with GIT_DIFF_INCLUDE_TYPECHANGE, blob->tree changes still\n generally show as a DELETED blob. This flag tries to correctly\n label blob->tree transitions as TYPECHANGE records with new_file's\n mode set to tree. Note: the tree SHA will not be available.

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_FILEMODE", + "comments": "

Ignore file mode changes

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_SUBMODULES", + "comments": "

Treat all submodules as unmodified

\n", + "value": 512 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_CASE", + "comments": "

Use case insensitive filename comparisons

\n", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_CASECHANGE", + "comments": "

May be combined with GIT_DIFF_IGNORE_CASE to specify that a file\n that has changed case will be returned as an add/delete pair.

\n", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_DIFF_DISABLE_PATHSPEC_MATCH", + "comments": "

If the pathspec is set in the diff options, this flags indicates\n that the paths will be treated as literal paths instead of\n fnmatch patterns. Each path in the list must either be a full\n path to a file or a directory. (A trailing slash indicates that\n the path will only match a directory). If a directory is\n specified, all children will be included.

\n", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_DIFF_SKIP_BINARY_CHECK", + "comments": "

Disable updating of the binary flag in delta records. This is\n useful when iterating over a diff if you don't need hunk and data\n callbacks and want to avoid having to load file completely.

\n", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS", + "comments": "

When diff finds an untracked directory, to match the behavior of\n core Git, it scans the contents for IGNORED and UNTRACKED files.\n If all contents are IGNORED, then the directory is IGNORED; if\n any contents are not IGNORED, then the directory is UNTRACKED.\n This is extra work that may not matter in many cases. This flag\n turns off that scan and immediately labels an untracked directory\n as UNTRACKED (changing the behavior to not match core Git).

\n", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_DIFF_UPDATE_INDEX", + "comments": "

When diff finds a file in the working directory with stat\n information different from the index, but the OID ends up being the\n same, write the correct stat information into the index. Note:\n without this flag, diff will always leave the index untouched.

\n", + "value": 32768 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_UNREADABLE", + "comments": "

Include unreadable files in the diff

\n", + "value": 65536 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED", + "comments": "

Include unreadable files in the diff

\n", + "value": 131072 + }, + { + "type": "int", + "name": "GIT_DIFF_INDENT_HEURISTIC", + "comments": "

Use a heuristic that takes indentation and whitespace into account\n which generally can produce better diffs when dealing with ambiguous\n diff hunks.

\n", + "value": 262144 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_BLANK_LINES", + "comments": "

Ignore blank lines

\n", + "value": 524288 + }, + { + "type": "int", + "name": "GIT_DIFF_FORCE_TEXT", + "comments": "

Treat all files as text, disabling binary attributes \n&\n detection

\n", + "value": 1048576 + }, + { + "type": "int", + "name": "GIT_DIFF_FORCE_BINARY", + "comments": "

Treat all files as binary, disabling text diffs

\n", + "value": 2097152 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_WHITESPACE", + "comments": "

Ignore all whitespace

\n", + "value": 4194304 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_WHITESPACE_CHANGE", + "comments": "

Ignore changes in amount of whitespace

\n", + "value": 8388608 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_WHITESPACE_EOL", + "comments": "

Ignore whitespace at end of line

\n", + "value": 16777216 + }, + { + "type": "int", + "name": "GIT_DIFF_SHOW_UNTRACKED_CONTENT", + "comments": "

When generating patch text, include the content of untracked\n files. This automatically turns on GIT_DIFF_INCLUDE_UNTRACKED but\n it does not turn on GIT_DIFF_RECURSE_UNTRACKED_DIRS. Add that\n flag if you want the content of every single UNTRACKED file.

\n", + "value": 33554432 + }, + { + "type": "int", + "name": "GIT_DIFF_SHOW_UNMODIFIED", + "comments": "

When generating output, include the names of unmodified files if\n they are included in the git_diff. Normally these are skipped in\n the formats that list files (e.g. name-only, name-status, raw).\n Even with this, these will not be included in patch format.

\n", + "value": 67108864 + }, + { + "type": "int", + "name": "GIT_DIFF_PATIENCE", + "comments": "

Use the "patience diff" algorithm

\n", + "value": 268435456 + }, + { + "type": "int", + "name": "GIT_DIFF_MINIMAL", + "comments": "

Take extra time to find minimal diff

\n", + "value": 536870912 + }, + { + "type": "int", + "name": "GIT_DIFF_SHOW_BINARY", + "comments": "

Include the necessary deflate / delta information so that git-apply\n can apply given diff information to binary files.

\n", + "value": 1073741824 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "git_submodule_ignore_t ignore_submodules", + "git_strarray pathspec", + "git_diff_notify_cb notify_cb", + "git_diff_progress_cb progress_cb", + "void * payload", + "uint32_t context_lines", + "uint32_t interhunk_lines", + "git_oid_t oid_type", + "uint16_t id_abbrev", + "git_off_t max_size", + "const char * old_prefix", + "const char * new_prefix" + ], + "type": "struct", + "value": "git_diff_options", + "file": "git2/diff.h", + "line": 376, + "lineto": 464, + "block": "unsigned int version\nuint32_t flags\ngit_submodule_ignore_t ignore_submodules\ngit_strarray pathspec\ngit_diff_notify_cb notify_cb\ngit_diff_progress_cb progress_cb\nvoid * payload\nuint32_t context_lines\nuint32_t interhunk_lines\ngit_oid_t oid_type\nuint16_t id_abbrev\ngit_off_t max_size\nconst char * old_prefix\nconst char * new_prefix", + "tdef": "typedef", + "description": " Structure describing options about how the diff should be executed.", + "comments": "

Setting all values of the structure to zero will yield the default values. Similarly, passing NULL for the options structure will give the defaults. The default values are marked below.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " version for the struct " + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of `git_diff_option_t` values above.\n Defaults to GIT_DIFF_NORMAL" + }, + { + "type": "git_submodule_ignore_t", + "name": "ignore_submodules", + "comments": " Overrides the submodule ignore setting for all submodules in the diff. " + }, + { + "type": "git_strarray", + "name": "pathspec", + "comments": " An array of paths / fnmatch patterns to constrain diff.\n All paths are included by default." + }, + { + "type": "git_diff_notify_cb", + "name": "notify_cb", + "comments": " An optional callback function, notifying the consumer of changes to\n the diff as new deltas are added." + }, + { + "type": "git_diff_progress_cb", + "name": "progress_cb", + "comments": " An optional callback function, notifying the consumer of which files\n are being examined as the diff is generated." + }, + { + "type": "void *", + "name": "payload", + "comments": " The payload to pass to the callback functions. " + }, + { + "type": "uint32_t", + "name": "context_lines", + "comments": " The number of unchanged lines that define the boundary of a hunk\n (and to display before and after). Defaults to 3." + }, + { + "type": "uint32_t", + "name": "interhunk_lines", + "comments": " The maximum number of unchanged lines between hunk boundaries before\n the hunks will be merged into one. Defaults to 0." + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": " The object ID type to emit in diffs; this is used by functions\n that operate without a repository - namely `git_diff_buffers`,\n or `git_diff_blobs` and `git_diff_blob_to_buffer` when one blob\n is `NULL`.\n\n This may be omitted (set to `0`). If a repository is available,\n the object ID format of the repository will be used. If no\n repository is available then the default is `GIT_OID_SHA`.\n\n If this is specified and a repository is available, then the\n specified `oid_type` must match the repository's object ID\n format." + }, + { + "type": "uint16_t", + "name": "id_abbrev", + "comments": " The abbreviation length to use when formatting object ids.\n Defaults to the value of 'core.abbrev' from the config, or 7 if unset." + }, + { + "type": "git_off_t", + "name": "max_size", + "comments": " A size (in bytes) above which a blob will be marked as binary\n automatically; pass a negative value to disable.\n Defaults to 512MB." + }, + { + "type": "const char *", + "name": "old_prefix", + "comments": " The virtual \"directory\" prefix for old file names in hunk headers.\n Default is \"a\"." + }, + { + "type": "const char *", + "name": "new_prefix", + "comments": " The virtual \"directory\" prefix for new file names in hunk headers.\n Defaults to \"b\"." + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_commit_as_email", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_options_init", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs", + "git_patch_from_buffers" + ] + } + } + ], + [ + "git_diff_parse_options", + { + "decl": [ + "unsigned int version", + "git_oid_t oid_type" + ], + "type": "struct", + "value": "git_diff_parse_options", + "file": "git2/diff.h", + "line": 1294, + "lineto": 1297, + "block": "unsigned int version\ngit_oid_t oid_type", + "tdef": "typedef", + "description": " Options for parsing a diff / patch file.", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_patchid_options", + { + "decl": [ + "unsigned int version" + ], + "type": "struct", + "value": "git_diff_patchid_options", + "file": "git2/diff.h", + "line": 1431, + "lineto": 1433, + "block": "unsigned int version", + "tdef": "typedef", + "description": " Patch ID options structure", + "comments": "

Initialize with GIT_PATCHID_OPTIONS_INIT. Alternatively, you can use git_diff_patchid_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_patchid", + "git_diff_patchid_options_init" + ] + } + } + ], + [ + "git_diff_similarity_metric", + { + "decl": [ + "int (*)(void **, const git_diff_file *, const char *, void *) file_signature", + "int (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature", + "void (*)(void *, void *) free_signature", + "int (*)(int *, void *, void *, void *) similarity", + "void * payload" + ], + "type": "struct", + "value": "git_diff_similarity_metric", + "file": "git2/diff.h", + "line": 732, + "lineto": 742, + "block": "int (*)(void **, const git_diff_file *, const char *, void *) file_signature\nint (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature\nvoid (*)(void *, void *) free_signature\nint (*)(int *, void *, void *, void *) similarity\nvoid * payload", + "tdef": "typedef", + "description": " Pluggable similarity metric", + "comments": "", + "fields": [ + { + "type": "int (*)(void **, const git_diff_file *, const char *, void *)", + "name": "file_signature", + "comments": "" + }, + { + "type": "int (*)(void **, const git_diff_file *, const char *, size_t, void *)", + "name": "buffer_signature", + "comments": "" + }, + { + "type": "void (*)(void *, void *)", + "name": "free_signature", + "comments": "" + }, + { + "type": "int (*)(int *, void *, void *, void *)", + "name": "similarity", + "comments": "" + }, + { + "type": "void *", + "name": "payload", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_diff_stats", + { + "decl": "git_diff_stats", + "type": "struct", + "value": "git_diff_stats", + "file": "git2/diff.h", + "line": 1341, + "lineto": 1341, + "tdef": "typedef", + "description": " This is an opaque structure which is allocated by `git_diff_get_stats`.\n You are responsible for releasing the object memory when done, using the\n `git_diff_stats_free()` function.", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_diff_get_stats", + "git_diff_stats_deletions", + "git_diff_stats_files_changed", + "git_diff_stats_free", + "git_diff_stats_insertions", + "git_diff_stats_to_buf" + ] + } + } + ], + [ + "git_diff_stats_format_t", + { + "decl": [ + "GIT_DIFF_STATS_NONE", + "GIT_DIFF_STATS_FULL", + "GIT_DIFF_STATS_SHORT", + "GIT_DIFF_STATS_NUMBER", + "GIT_DIFF_STATS_INCLUDE_SUMMARY" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 1346, + "lineto": 1361, + "block": "GIT_DIFF_STATS_NONE\nGIT_DIFF_STATS_FULL\nGIT_DIFF_STATS_SHORT\nGIT_DIFF_STATS_NUMBER\nGIT_DIFF_STATS_INCLUDE_SUMMARY", + "tdef": "typedef", + "description": " Formatting options for diff stats", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_STATS_NONE", + "comments": "

No stats

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_STATS_FULL", + "comments": "

Full statistics, equivalent of --stat

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_STATS_SHORT", + "comments": "

Short statistics, equivalent of --shortstat

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_STATS_NUMBER", + "comments": "

Number statistics, equivalent of --numstat

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_STATS_INCLUDE_SUMMARY", + "comments": "

Extended header information such as creations, renames and mode changes, equivalent of --summary

\n", + "value": 8 + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_stats_to_buf" + ] + } + } + ], + [ + "git_direction", + { + "decl": [ + "GIT_DIRECTION_FETCH", + "GIT_DIRECTION_PUSH" + ], + "type": "enum", + "file": "git2/net.h", + "line": 31, + "lineto": 34, + "block": "GIT_DIRECTION_FETCH\nGIT_DIRECTION_PUSH", + "tdef": "typedef", + "description": " Direction of the connection.", + "comments": "

We need this because we need to know whether we should call git-upload-pack or git-receive-pack on the remote end when get_refs gets called.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DIRECTION_FETCH", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIRECTION_PUSH", + "comments": "", + "value": 1 + } + ], + "used": { + "returns": [ + "git_refspec_direction" + ], + "needs": [ + "git_remote_connect", + "git_remote_connect_ext" + ] + } + } + ], + [ + "git_email_create_flags_t", + { + "decl": [ + "GIT_EMAIL_CREATE_DEFAULT", + "GIT_EMAIL_CREATE_OMIT_NUMBERS", + "GIT_EMAIL_CREATE_ALWAYS_NUMBER", + "GIT_EMAIL_CREATE_NO_RENAMES" + ], + "type": "enum", + "file": "git2/email.h", + "line": 23, + "lineto": 38, + "block": "GIT_EMAIL_CREATE_DEFAULT\nGIT_EMAIL_CREATE_OMIT_NUMBERS\nGIT_EMAIL_CREATE_ALWAYS_NUMBER\nGIT_EMAIL_CREATE_NO_RENAMES", + "tdef": "typedef", + "description": " Formatting options for diff e-mail generation", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_EMAIL_CREATE_DEFAULT", + "comments": "

Normal patch, the default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_EMAIL_CREATE_OMIT_NUMBERS", + "comments": "

Do not include patch numbers in the subject prefix.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_EMAIL_CREATE_ALWAYS_NUMBER", + "comments": "

Include numbers in the subject prefix even when the\n patch is for a single commit (1/1).

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_EMAIL_CREATE_NO_RENAMES", + "comments": "

Do not perform rename or similarity detection.

\n", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_error", + { + "decl": [ + "char * message", + "int klass" + ], + "type": "struct", + "value": "git_error", + "file": "git2/errors.h", + "line": 71, + "lineto": 74, + "block": "char * message\nint klass", + "tdef": "typedef", + "description": " Structure to store extra details of the last error that occurred.", + "comments": "

This is kept on a per-thread basis if GIT_THREADS was defined when the library was build, otherwise one is kept globally for the library

\n", + "fields": [ + { + "type": "char *", + "name": "message", + "comments": "" + }, + { + "type": "int", + "name": "klass", + "comments": "" + } + ], + "used": { + "returns": [ + "git_error_last", + "giterr_last" + ], + "needs": [] + } + } + ], + [ + "git_error_code", + { + "decl": [ + "GIT_OK", + "GIT_ERROR", + "GIT_ENOTFOUND", + "GIT_EEXISTS", + "GIT_EAMBIGUOUS", + "GIT_EBUFS", + "GIT_EUSER", + "GIT_EBAREREPO", + "GIT_EUNBORNBRANCH", + "GIT_EUNMERGED", + "GIT_ENONFASTFORWARD", + "GIT_EINVALIDSPEC", + "GIT_ECONFLICT", + "GIT_ELOCKED", + "GIT_EMODIFIED", + "GIT_EAUTH", + "GIT_ECERTIFICATE", + "GIT_EAPPLIED", + "GIT_EPEEL", + "GIT_EEOF", + "GIT_EINVALID", + "GIT_EUNCOMMITTED", + "GIT_EDIRECTORY", + "GIT_EMERGECONFLICT", + "GIT_PASSTHROUGH", + "GIT_ITEROVER", + "GIT_RETRY", + "GIT_EMISMATCH", + "GIT_EINDEXDIRTY", + "GIT_EAPPLYFAIL", + "GIT_EOWNER", + "GIT_TIMEOUT" + ], + "type": "enum", + "file": "git2/errors.h", + "line": 21, + "lineto": 63, + "block": "GIT_OK\nGIT_ERROR\nGIT_ENOTFOUND\nGIT_EEXISTS\nGIT_EAMBIGUOUS\nGIT_EBUFS\nGIT_EUSER\nGIT_EBAREREPO\nGIT_EUNBORNBRANCH\nGIT_EUNMERGED\nGIT_ENONFASTFORWARD\nGIT_EINVALIDSPEC\nGIT_ECONFLICT\nGIT_ELOCKED\nGIT_EMODIFIED\nGIT_EAUTH\nGIT_ECERTIFICATE\nGIT_EAPPLIED\nGIT_EPEEL\nGIT_EEOF\nGIT_EINVALID\nGIT_EUNCOMMITTED\nGIT_EDIRECTORY\nGIT_EMERGECONFLICT\nGIT_PASSTHROUGH\nGIT_ITEROVER\nGIT_RETRY\nGIT_EMISMATCH\nGIT_EINDEXDIRTY\nGIT_EAPPLYFAIL\nGIT_EOWNER\nGIT_TIMEOUT", + "tdef": "typedef", + "description": " Generic return codes ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_OK", + "comments": "

No error

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_ERROR", + "comments": "

Generic error

\n", + "value": -1 + }, + { + "type": "int", + "name": "GIT_ENOTFOUND", + "comments": "

Requested object could not be found

\n", + "value": -3 + }, + { + "type": "int", + "name": "GIT_EEXISTS", + "comments": "

Object exists preventing operation

\n", + "value": -4 + }, + { + "type": "int", + "name": "GIT_EAMBIGUOUS", + "comments": "

More than one object matches

\n", + "value": -5 + }, + { + "type": "int", + "name": "GIT_EBUFS", + "comments": "

Output buffer too short to hold data

\n", + "value": -6 + }, + { + "type": "int", + "name": "GIT_EUSER", + "comments": "

GIT_EUSER is a special error that is never generated by libgit2\n code. You can return it from a callback (e.g to stop an iteration)\n to know that it was generated by the callback and not by libgit2.

\n", + "value": -7 + }, + { + "type": "int", + "name": "GIT_EBAREREPO", + "comments": "

Operation not allowed on bare repository

\n", + "value": -8 + }, + { + "type": "int", + "name": "GIT_EUNBORNBRANCH", + "comments": "

HEAD refers to branch with no commits

\n", + "value": -9 + }, + { + "type": "int", + "name": "GIT_EUNMERGED", + "comments": "

Merge in progress prevented operation

\n", + "value": -10 + }, + { + "type": "int", + "name": "GIT_ENONFASTFORWARD", + "comments": "

Reference was not fast-forwardable

\n", + "value": -11 + }, + { + "type": "int", + "name": "GIT_EINVALIDSPEC", + "comments": "

Name/ref spec was not in a valid format

\n", + "value": -12 + }, + { + "type": "int", + "name": "GIT_ECONFLICT", + "comments": "

Checkout conflicts prevented operation

\n", + "value": -13 + }, + { + "type": "int", + "name": "GIT_ELOCKED", + "comments": "

Lock file prevented operation

\n", + "value": -14 + }, + { + "type": "int", + "name": "GIT_EMODIFIED", + "comments": "

Reference value does not match expected

\n", + "value": -15 + }, + { + "type": "int", + "name": "GIT_EAUTH", + "comments": "

Authentication error

\n", + "value": -16 + }, + { + "type": "int", + "name": "GIT_ECERTIFICATE", + "comments": "

Server certificate is invalid

\n", + "value": -17 + }, + { + "type": "int", + "name": "GIT_EAPPLIED", + "comments": "

Patch/merge has already been applied

\n", + "value": -18 + }, + { + "type": "int", + "name": "GIT_EPEEL", + "comments": "

The requested peel operation is not possible

\n", + "value": -19 + }, + { + "type": "int", + "name": "GIT_EEOF", + "comments": "

Unexpected EOF

\n", + "value": -20 + }, + { + "type": "int", + "name": "GIT_EINVALID", + "comments": "

Invalid operation or input

\n", + "value": -21 + }, + { + "type": "int", + "name": "GIT_EUNCOMMITTED", + "comments": "

Uncommitted changes in index prevented operation

\n", + "value": -22 + }, + { + "type": "int", + "name": "GIT_EDIRECTORY", + "comments": "

The operation is not valid for a directory

\n", + "value": -23 + }, + { + "type": "int", + "name": "GIT_EMERGECONFLICT", + "comments": "

A merge conflict exists and cannot continue

\n", + "value": -24 + }, + { + "type": "int", + "name": "GIT_PASSTHROUGH", + "comments": "

A user-configured callback refused to act

\n", + "value": -30 + }, + { + "type": "int", + "name": "GIT_ITEROVER", + "comments": "

Signals end of iteration with iterator

\n", + "value": -31 + }, + { + "type": "int", + "name": "GIT_RETRY", + "comments": "

Internal only

\n", + "value": -32 + }, + { + "type": "int", + "name": "GIT_EMISMATCH", + "comments": "

Hashsum mismatch in object

\n", + "value": -33 + }, + { + "type": "int", + "name": "GIT_EINDEXDIRTY", + "comments": "

Unsaved changes in the index would be overwritten

\n", + "value": -34 + }, + { + "type": "int", + "name": "GIT_EAPPLYFAIL", + "comments": "

Patch application failed

\n", + "value": -35 + }, + { + "type": "int", + "name": "GIT_EOWNER", + "comments": "

The object is not owned by the current user

\n", + "value": -36 + }, + { + "type": "int", + "name": "GIT_TIMEOUT", + "comments": "

The operation timed out

\n", + "value": -37 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_error_t", + { + "decl": [ + "GIT_ERROR_NONE", + "GIT_ERROR_NOMEMORY", + "GIT_ERROR_OS", + "GIT_ERROR_INVALID", + "GIT_ERROR_REFERENCE", + "GIT_ERROR_ZLIB", + "GIT_ERROR_REPOSITORY", + "GIT_ERROR_CONFIG", + "GIT_ERROR_REGEX", + "GIT_ERROR_ODB", + "GIT_ERROR_INDEX", + "GIT_ERROR_OBJECT", + "GIT_ERROR_NET", + "GIT_ERROR_TAG", + "GIT_ERROR_TREE", + "GIT_ERROR_INDEXER", + "GIT_ERROR_SSL", + "GIT_ERROR_SUBMODULE", + "GIT_ERROR_THREAD", + "GIT_ERROR_STASH", + "GIT_ERROR_CHECKOUT", + "GIT_ERROR_FETCHHEAD", + "GIT_ERROR_MERGE", + "GIT_ERROR_SSH", + "GIT_ERROR_FILTER", + "GIT_ERROR_REVERT", + "GIT_ERROR_CALLBACK", + "GIT_ERROR_CHERRYPICK", + "GIT_ERROR_DESCRIBE", + "GIT_ERROR_REBASE", + "GIT_ERROR_FILESYSTEM", + "GIT_ERROR_PATCH", + "GIT_ERROR_WORKTREE", + "GIT_ERROR_SHA", + "GIT_ERROR_HTTP", + "GIT_ERROR_INTERNAL", + "GIT_ERROR_GRAFTS" + ], + "type": "enum", + "file": "git2/errors.h", + "line": 77, + "lineto": 115, + "block": "GIT_ERROR_NONE\nGIT_ERROR_NOMEMORY\nGIT_ERROR_OS\nGIT_ERROR_INVALID\nGIT_ERROR_REFERENCE\nGIT_ERROR_ZLIB\nGIT_ERROR_REPOSITORY\nGIT_ERROR_CONFIG\nGIT_ERROR_REGEX\nGIT_ERROR_ODB\nGIT_ERROR_INDEX\nGIT_ERROR_OBJECT\nGIT_ERROR_NET\nGIT_ERROR_TAG\nGIT_ERROR_TREE\nGIT_ERROR_INDEXER\nGIT_ERROR_SSL\nGIT_ERROR_SUBMODULE\nGIT_ERROR_THREAD\nGIT_ERROR_STASH\nGIT_ERROR_CHECKOUT\nGIT_ERROR_FETCHHEAD\nGIT_ERROR_MERGE\nGIT_ERROR_SSH\nGIT_ERROR_FILTER\nGIT_ERROR_REVERT\nGIT_ERROR_CALLBACK\nGIT_ERROR_CHERRYPICK\nGIT_ERROR_DESCRIBE\nGIT_ERROR_REBASE\nGIT_ERROR_FILESYSTEM\nGIT_ERROR_PATCH\nGIT_ERROR_WORKTREE\nGIT_ERROR_SHA\nGIT_ERROR_HTTP\nGIT_ERROR_INTERNAL\nGIT_ERROR_GRAFTS", + "tdef": "typedef", + "description": " Error classes ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_ERROR_NONE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_ERROR_NOMEMORY", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_ERROR_OS", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_ERROR_INVALID", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_ERROR_REFERENCE", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_ERROR_ZLIB", + "comments": "", + "value": 5 + }, + { + "type": "int", + "name": "GIT_ERROR_REPOSITORY", + "comments": "", + "value": 6 + }, + { + "type": "int", + "name": "GIT_ERROR_CONFIG", + "comments": "", + "value": 7 + }, + { + "type": "int", + "name": "GIT_ERROR_REGEX", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_ERROR_ODB", + "comments": "", + "value": 9 + }, + { + "type": "int", + "name": "GIT_ERROR_INDEX", + "comments": "", + "value": 10 + }, + { + "type": "int", + "name": "GIT_ERROR_OBJECT", + "comments": "", + "value": 11 + }, + { + "type": "int", + "name": "GIT_ERROR_NET", + "comments": "", + "value": 12 + }, + { + "type": "int", + "name": "GIT_ERROR_TAG", + "comments": "", + "value": 13 + }, + { + "type": "int", + "name": "GIT_ERROR_TREE", + "comments": "", + "value": 14 + }, + { + "type": "int", + "name": "GIT_ERROR_INDEXER", + "comments": "", + "value": 15 + }, + { + "type": "int", + "name": "GIT_ERROR_SSL", + "comments": "", + "value": 16 + }, + { + "type": "int", + "name": "GIT_ERROR_SUBMODULE", + "comments": "", + "value": 17 + }, + { + "type": "int", + "name": "GIT_ERROR_THREAD", + "comments": "", + "value": 18 + }, + { + "type": "int", + "name": "GIT_ERROR_STASH", + "comments": "", + "value": 19 + }, + { + "type": "int", + "name": "GIT_ERROR_CHECKOUT", + "comments": "", + "value": 20 + }, + { + "type": "int", + "name": "GIT_ERROR_FETCHHEAD", + "comments": "", + "value": 21 + }, + { + "type": "int", + "name": "GIT_ERROR_MERGE", + "comments": "", + "value": 22 + }, + { + "type": "int", + "name": "GIT_ERROR_SSH", + "comments": "", + "value": 23 + }, + { + "type": "int", + "name": "GIT_ERROR_FILTER", + "comments": "", + "value": 24 + }, + { + "type": "int", + "name": "GIT_ERROR_REVERT", + "comments": "", + "value": 25 + }, + { + "type": "int", + "name": "GIT_ERROR_CALLBACK", + "comments": "", + "value": 26 + }, + { + "type": "int", + "name": "GIT_ERROR_CHERRYPICK", + "comments": "", + "value": 27 + }, + { + "type": "int", + "name": "GIT_ERROR_DESCRIBE", + "comments": "", + "value": 28 + }, + { + "type": "int", + "name": "GIT_ERROR_REBASE", + "comments": "", + "value": 29 + }, + { + "type": "int", + "name": "GIT_ERROR_FILESYSTEM", + "comments": "", + "value": 30 + }, + { + "type": "int", + "name": "GIT_ERROR_PATCH", + "comments": "", + "value": 31 + }, + { + "type": "int", + "name": "GIT_ERROR_WORKTREE", + "comments": "", + "value": 32 + }, + { + "type": "int", + "name": "GIT_ERROR_SHA", + "comments": "", + "value": 33 + }, + { + "type": "int", + "name": "GIT_ERROR_HTTP", + "comments": "", + "value": 34 + }, + { + "type": "int", + "name": "GIT_ERROR_INTERNAL", + "comments": "", + "value": 35 + }, + { + "type": "int", + "name": "GIT_ERROR_GRAFTS", + "comments": "", + "value": 36 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_feature_t", + { + "decl": [ + "GIT_FEATURE_THREADS", + "GIT_FEATURE_HTTPS", + "GIT_FEATURE_SSH", + "GIT_FEATURE_NSEC" + ], + "type": "enum", + "file": "git2/common.h", + "line": 134, + "lineto": 157, + "block": "GIT_FEATURE_THREADS\nGIT_FEATURE_HTTPS\nGIT_FEATURE_SSH\nGIT_FEATURE_NSEC", + "tdef": "typedef", + "description": " Combinations of these values describe the features with which libgit2\n was compiled", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FEATURE_THREADS", + "comments": "

If set, libgit2 was built thread-aware and can be safely used from multiple\n threads.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_FEATURE_HTTPS", + "comments": "

If set, libgit2 was built with and linked against a TLS implementation.\n Custom TLS streams may still be added by the user to support HTTPS\n regardless of this.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_FEATURE_SSH", + "comments": "

If set, libgit2 was built with and linked against libssh2. A custom\n transport may still be added by the user to support libssh2 regardless of\n this.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_FEATURE_NSEC", + "comments": "

If set, libgit2 was built with support for sub-second resolution in file\n modification times.

\n", + "value": 8 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_fetch_depth_t", + { + "decl": [ + "GIT_FETCH_DEPTH_FULL", + "GIT_FETCH_DEPTH_UNSHALLOW" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 706, + "lineto": 712, + "block": "GIT_FETCH_DEPTH_FULL\nGIT_FETCH_DEPTH_UNSHALLOW", + "tdef": "typedef", + "description": " Constants for fetch depth (shallowness of fetch). ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FETCH_DEPTH_FULL", + "comments": "

The fetch is "full" (not shallow). This is the default.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FETCH_DEPTH_UNSHALLOW", + "comments": "

The fetch should "unshallow" and fetch missing data.

\n", + "value": 2147483647 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_fetch_options", + { + "decl": [ + "int version", + "git_remote_callbacks callbacks", + "git_fetch_prune_t prune", + "int update_fetchhead", + "git_remote_autotag_option_t download_tags", + "git_proxy_options proxy_opts", + "int depth", + "git_remote_redirect_t follow_redirects", + "git_strarray custom_headers" + ], + "type": "struct", + "value": "git_fetch_options", + "file": "git2/remote.h", + "line": 722, + "lineto": 775, + "block": "int version\ngit_remote_callbacks callbacks\ngit_fetch_prune_t prune\nint update_fetchhead\ngit_remote_autotag_option_t download_tags\ngit_proxy_options proxy_opts\nint depth\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", + "tdef": "typedef", + "description": " Fetch options structure.", + "comments": "

Zero out for defaults. Initialize with GIT_FETCH_OPTIONS_INIT macro to correctly set the version field. E.g.

\n\n
    git_fetch_options opts = GIT_FETCH_OPTIONS_INIT;\n
\n", + "fields": [ + { + "type": "int", + "name": "version", + "comments": "" + }, + { + "type": "git_remote_callbacks", + "name": "callbacks", + "comments": " Callbacks to use for this fetch operation" + }, + { + "type": "git_fetch_prune_t", + "name": "prune", + "comments": " Whether to perform a prune after the fetch" + }, + { + "type": "int", + "name": "update_fetchhead", + "comments": " Whether to write the results to FETCH_HEAD. Defaults to\n on. Leave this default in order to behave like git." + }, + { + "type": "git_remote_autotag_option_t", + "name": "download_tags", + "comments": " Determines how to behave regarding tags on the remote, such\n as auto-downloading tags for objects we're downloading or\n downloading all of them.\n\n The default is to auto-follow tags." + }, + { + "type": "git_proxy_options", + "name": "proxy_opts", + "comments": " Proxy options to use, by default no proxy is used." + }, + { + "type": "int", + "name": "depth", + "comments": " Depth of the fetch to perform, or `GIT_FETCH_DEPTH_FULL`\n (or `0`) for full history, or `GIT_FETCH_DEPTH_UNSHALLOW`\n to \"unshallow\" a shallow repository.\n\n The default is full (`GIT_FETCH_DEPTH_FULL` or `0`)." + }, + { + "type": "git_remote_redirect_t", + "name": "follow_redirects", + "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." + }, + { + "type": "git_strarray", + "name": "custom_headers", + "comments": " Extra headers for this fetch operation" + } + ], + "used": { + "returns": [], + "needs": [ + "git_fetch_options_init", + "git_remote_download", + "git_remote_fetch" + ] + } + } + ], + [ + "git_fetch_prune_t", + { + "decl": [ + "GIT_FETCH_PRUNE_UNSPECIFIED", + "GIT_FETCH_PRUNE", + "GIT_FETCH_NO_PRUNE" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 665, + "lineto": 678, + "block": "GIT_FETCH_PRUNE_UNSPECIFIED\nGIT_FETCH_PRUNE\nGIT_FETCH_NO_PRUNE", + "tdef": "typedef", + "description": " Acceptable prune settings when fetching ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FETCH_PRUNE_UNSPECIFIED", + "comments": "

Use the setting from the configuration

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FETCH_PRUNE", + "comments": "

Force pruning on

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_FETCH_NO_PRUNE", + "comments": "

Force pruning off

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_filemode_t", + { + "decl": [ + "GIT_FILEMODE_UNREADABLE", + "GIT_FILEMODE_TREE", + "GIT_FILEMODE_BLOB", + "GIT_FILEMODE_BLOB_EXECUTABLE", + "GIT_FILEMODE_LINK", + "GIT_FILEMODE_COMMIT" + ], + "type": "enum", + "file": "git2/types.h", + "line": 222, + "lineto": 229, + "block": "GIT_FILEMODE_UNREADABLE\nGIT_FILEMODE_TREE\nGIT_FILEMODE_BLOB\nGIT_FILEMODE_BLOB_EXECUTABLE\nGIT_FILEMODE_LINK\nGIT_FILEMODE_COMMIT", + "tdef": "typedef", + "description": " Valid modes for index and tree entries. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FILEMODE_UNREADABLE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FILEMODE_TREE", + "comments": "", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_FILEMODE_BLOB", + "comments": "", + "value": 33188 + }, + { + "type": "int", + "name": "GIT_FILEMODE_BLOB_EXECUTABLE", + "comments": "", + "value": 33261 + }, + { + "type": "int", + "name": "GIT_FILEMODE_LINK", + "comments": "", + "value": 40960 + }, + { + "type": "int", + "name": "GIT_FILEMODE_COMMIT", + "comments": "", + "value": 57344 + } + ], + "used": { + "returns": [ + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw" + ], + "needs": [ + "git_treebuilder_insert" + ] + } + } + ], + [ + "git_filter", + { + "decl": "git_filter", + "type": "struct", + "value": "git_filter", + "file": "git2/filter.h", + "line": 100, + "lineto": 100, + "tdef": "typedef", + "description": " A filter that can transform file data", + "comments": "

This represents a filter that can be used to transform or even replace file data. Libgit2 includes one built in filter and it is possible to write your own (see git2/sys/filter.h for information on that).

\n\n

The two builtin filters are:

\n\n
    \n
  • "crlf" which uses the complex rules with the "text", "eol", and "crlf" file attributes to decide how to convert between LF and CRLF line endings * "ident" which replaces "$Id$" in a blob with "$Id: $" upon checkout and replaced "$Id: $" with "$Id$" on checkin.
  • \n
\n", + "used": { + "returns": [], + "needs": [ + "git_filter_list_apply_to_blob", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_data", + "git_filter_list_apply_to_file", + "git_filter_list_contains", + "git_filter_list_free", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_data", + "git_filter_list_stream_file" + ] + } + } + ], + [ + "git_filter_flag_t", + { + "decl": [ + "GIT_FILTER_DEFAULT", + "GIT_FILTER_ALLOW_UNSAFE", + "GIT_FILTER_NO_SYSTEM_ATTRIBUTES", + "GIT_FILTER_ATTRIBUTES_FROM_HEAD", + "GIT_FILTER_ATTRIBUTES_FROM_COMMIT" + ], + "type": "enum", + "file": "git2/filter.h", + "line": 41, + "lineto": 58, + "block": "GIT_FILTER_DEFAULT\nGIT_FILTER_ALLOW_UNSAFE\nGIT_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_FILTER_ATTRIBUTES_FROM_COMMIT", + "tdef": "typedef", + "description": " Filter option flags.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FILTER_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FILTER_ALLOW_UNSAFE", + "comments": "

Don't error for safecrlf violations, allow them to continue.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_FILTER_NO_SYSTEM_ATTRIBUTES", + "comments": "

Don't load /etc/gitattributes (or the system equivalent)

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_FILTER_ATTRIBUTES_FROM_HEAD", + "comments": "

Load attributes from .gitattributes in the root of HEAD

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_FILTER_ATTRIBUTES_FROM_COMMIT", + "comments": "

Load attributes from .gitattributes in a given commit.\n This can only be specified in a git_filter_options.

\n", + "value": 8 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_filter_list", + { + "decl": "git_filter_list", + "type": "struct", + "value": "git_filter_list", + "file": "git2/filter.h", + "line": 112, + "lineto": 112, + "tdef": "typedef", + "description": " List of filters to be applied", + "comments": "

This represents a list of filters to be applied to a file / blob. You can build the list with one call, apply it with another, and dispose it with a third. In typical usage, there are not many occasions where a git_filter_list is needed directly since the library will generally handle conversions for you, but it can be convenient to be able to build and apply the list sometimes.

\n", + "used": { + "returns": [], + "needs": [ + "git_filter_list_apply_to_blob", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_data", + "git_filter_list_apply_to_file", + "git_filter_list_contains", + "git_filter_list_free", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_data", + "git_filter_list_stream_file" + ] + } + } + ], + [ + "git_filter_mode_t", + { + "decl": [ + "GIT_FILTER_TO_WORKTREE", + "GIT_FILTER_SMUDGE", + "GIT_FILTER_TO_ODB", + "GIT_FILTER_CLEAN" + ], + "type": "enum", + "file": "git2/filter.h", + "line": 31, + "lineto": 36, + "block": "GIT_FILTER_TO_WORKTREE\nGIT_FILTER_SMUDGE\nGIT_FILTER_TO_ODB\nGIT_FILTER_CLEAN", + "tdef": "typedef", + "description": " Filters are applied in one of two directions: smudging - which is\n exporting a file from the Git object database to the working directory,\n and cleaning - which is importing a file from the working directory to\n the Git object database. These values control which direction of\n change is being applied.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FILTER_TO_WORKTREE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FILTER_SMUDGE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FILTER_TO_ODB", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_FILTER_CLEAN", + "comments": "", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": [ + "git_filter_list_load", + "git_filter_list_load_ext" + ] + } + } + ], + [ + "git_filter_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "git_oid * commit_id", + "git_oid attr_commit_id" + ], + "type": "struct", + "value": "git_filter_options", + "file": "git2/filter.h", + "line": 63, + "lineto": 80, + "block": "unsigned int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", + "tdef": "typedef", + "description": " Filtering options", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " See `git_filter_flag_t` above " + }, + { + "type": "git_oid *", + "name": "commit_id", + "comments": "" + }, + { + "type": "git_oid", + "name": "attr_commit_id", + "comments": " The commit to load attributes from, when\n `GIT_FILTER_ATTRIBUTES_FROM_COMMIT` is specified." + } + ], + "used": { + "returns": [], + "needs": [ + "git_filter_list_load_ext" + ] + } + } + ], + [ + "git_filter_source", + { + "decl": "git_filter_source", + "type": "struct", + "value": "git_filter_source", + "file": "git2/sys/filter.h", + "line": 95, + "lineto": 95, + "tdef": "typedef", + "description": " A filter source represents a file/blob to be processed", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_hashsig_option_t", + { + "decl": [ + "GIT_HASHSIG_NORMAL", + "GIT_HASHSIG_IGNORE_WHITESPACE", + "GIT_HASHSIG_SMART_WHITESPACE", + "GIT_HASHSIG_ALLOW_SMALL_FILES" + ], + "type": "enum", + "file": "git2/sys/hashsig.h", + "line": 25, + "lineto": 45, + "block": "GIT_HASHSIG_NORMAL\nGIT_HASHSIG_IGNORE_WHITESPACE\nGIT_HASHSIG_SMART_WHITESPACE\nGIT_HASHSIG_ALLOW_SMALL_FILES", + "tdef": "typedef", + "description": " Options for hashsig computation", + "comments": "

The options GIT_HASHSIG_NORMAL, GIT_HASHSIG_IGNORE_WHITESPACE, GIT_HASHSIG_SMART_WHITESPACE are exclusive and should not be combined.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_HASHSIG_NORMAL", + "comments": "

Use all data

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_HASHSIG_IGNORE_WHITESPACE", + "comments": "

Ignore whitespace

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_HASHSIG_SMART_WHITESPACE", + "comments": "

Ignore

\n\n

and all space after

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_HASHSIG_ALLOW_SMALL_FILES", + "comments": "

Allow hashing of small files

\n", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_index", + { + "decl": "git_index", + "type": "struct", + "value": "git_index", + "file": "git2/types.h", + "line": 148, + "lineto": 148, + "tdef": "typedef", + "description": " Memory representation of an index file. ", + "comments": "", + "used": { + "returns": [ + "git_index_get_byindex", + "git_index_get_bypath", + "git_remote_stats" + ], + "needs": [ + "git_apply_to_tree", + "git_checkout_index", + "git_cherrypick_commit", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_tree_to_index", + "git_index_add", + "git_index_add_all", + "git_index_add_bypath", + "git_index_add_from_buffer", + "git_index_caps", + "git_index_checksum", + "git_index_clear", + "git_index_conflict_add", + "git_index_conflict_cleanup", + "git_index_conflict_get", + "git_index_conflict_iterator_free", + "git_index_conflict_iterator_new", + "git_index_conflict_next", + "git_index_conflict_remove", + "git_index_entry_is_conflict", + "git_index_entry_stage", + "git_index_entrycount", + "git_index_find", + "git_index_find_prefix", + "git_index_free", + "git_index_get_byindex", + "git_index_get_bypath", + "git_index_has_conflicts", + "git_index_iterator_free", + "git_index_iterator_new", + "git_index_iterator_next", + "git_index_owner", + "git_index_path", + "git_index_read", + "git_index_read_tree", + "git_index_remove", + "git_index_remove_all", + "git_index_remove_bypath", + "git_index_remove_directory", + "git_index_set_caps", + "git_index_set_version", + "git_index_update_all", + "git_index_version", + "git_index_write", + "git_index_write_tree", + "git_index_write_tree_to", + "git_indexer_append", + "git_indexer_commit", + "git_indexer_free", + "git_indexer_hash", + "git_indexer_name", + "git_indexer_new", + "git_indexer_options_init", + "git_indexer_progress_cb", + "git_merge_commits", + "git_merge_file_from_index", + "git_merge_trees", + "git_odb_write_pack", + "git_packbuilder_write", + "git_pathspec_match_index", + "git_rebase_inmemory_index", + "git_repository_index", + "git_revert_commit" + ] + } + } + ], + [ + "git_index_add_option_t", + { + "decl": [ + "GIT_INDEX_ADD_DEFAULT", + "GIT_INDEX_ADD_FORCE", + "GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH", + "GIT_INDEX_ADD_CHECK_PATHSPEC" + ], + "type": "enum", + "file": "git2/index.h", + "line": 139, + "lineto": 144, + "block": "GIT_INDEX_ADD_DEFAULT\nGIT_INDEX_ADD_FORCE\nGIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH\nGIT_INDEX_ADD_CHECK_PATHSPEC", + "tdef": "typedef", + "description": " Flags for APIs that add files matching pathspec ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_ADD_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_INDEX_ADD_FORCE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_INDEX_ADD_CHECK_PATHSPEC", + "comments": "", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_index_capability_t", + { + "decl": [ + "GIT_INDEX_CAPABILITY_IGNORE_CASE", + "GIT_INDEX_CAPABILITY_NO_FILEMODE", + "GIT_INDEX_CAPABILITY_NO_SYMLINKS", + "GIT_INDEX_CAPABILITY_FROM_OWNER" + ], + "type": "enum", + "file": "git2/index.h", + "line": 126, + "lineto": 131, + "block": "GIT_INDEX_CAPABILITY_IGNORE_CASE\nGIT_INDEX_CAPABILITY_NO_FILEMODE\nGIT_INDEX_CAPABILITY_NO_SYMLINKS\nGIT_INDEX_CAPABILITY_FROM_OWNER", + "tdef": "typedef", + "description": " Capabilities of system that affect index actions. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_CAPABILITY_IGNORE_CASE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_INDEX_CAPABILITY_NO_FILEMODE", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_INDEX_CAPABILITY_NO_SYMLINKS", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_INDEX_CAPABILITY_FROM_OWNER", + "comments": "", + "value": -1 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_index_conflict_iterator", + { + "decl": "git_index_conflict_iterator", + "type": "struct", + "value": "git_index_conflict_iterator", + "file": "git2/types.h", + "line": 154, + "lineto": 154, + "tdef": "typedef", + "description": " An iterator for conflicts in the index. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_index_conflict_iterator_free", + "git_index_conflict_iterator_new", + "git_index_conflict_next" + ] + } + } + ], + [ + "git_index_entry", + { + "decl": [ + "git_index_time ctime", + "git_index_time mtime", + "uint32_t dev", + "uint32_t ino", + "uint32_t mode", + "uint32_t uid", + "uint32_t gid", + "uint32_t file_size", + "git_oid id", + "uint16_t flags", + "uint16_t flags_extended", + "const char * path" + ], + "type": "struct", + "value": "git_index_entry", + "file": "git2/index.h", + "line": 53, + "lineto": 70, + "block": "git_index_time ctime\ngit_index_time mtime\nuint32_t dev\nuint32_t ino\nuint32_t mode\nuint32_t uid\nuint32_t gid\nuint32_t file_size\ngit_oid id\nuint16_t flags\nuint16_t flags_extended\nconst char * path", + "tdef": "typedef", + "description": " In-memory representation of a file entry in the index.", + "comments": "

This is a public structure that represents a file entry in the index. The meaning of the fields corresponds to core Git's documentation (in "Documentation/technical/index-format.txt").

\n\n

The flags field consists of a number of bit fields which can be accessed via the first set of GIT_INDEX_ENTRY_... bitmasks below. These flags are all read from and persisted to disk.

\n\n

The flags_extended field also has a number of bit fields which can be accessed via the later GIT_INDEX_ENTRY_... bitmasks below. Some of these flags are read from and written to disk, but some are set aside for in-memory only reference.

\n\n

Note that the time and size fields are truncated to 32 bits. This is enough to detect changes, which is enough for the index to function as a cache, but it should not be taken as an authoritative source for that data.

\n", + "fields": [ + { + "type": "git_index_time", + "name": "ctime", + "comments": "" + }, + { + "type": "git_index_time", + "name": "mtime", + "comments": "" + }, + { + "type": "uint32_t", + "name": "dev", + "comments": "" + }, + { + "type": "uint32_t", + "name": "ino", + "comments": "" + }, + { + "type": "uint32_t", + "name": "mode", + "comments": "" + }, + { + "type": "uint32_t", + "name": "uid", + "comments": "" + }, + { + "type": "uint32_t", + "name": "gid", + "comments": "" + }, + { + "type": "uint32_t", + "name": "file_size", + "comments": "" + }, + { + "type": "git_oid", + "name": "id", + "comments": "" + }, + { + "type": "uint16_t", + "name": "flags", + "comments": "" + }, + { + "type": "uint16_t", + "name": "flags_extended", + "comments": "" + }, + { + "type": "const char *", + "name": "path", + "comments": "" + } + ], + "used": { + "returns": [ + "git_index_get_byindex", + "git_index_get_bypath" + ], + "needs": [ + "git_index_add", + "git_index_add_from_buffer", + "git_index_conflict_add", + "git_index_conflict_get", + "git_index_conflict_next", + "git_index_entry_is_conflict", + "git_index_entry_stage", + "git_index_iterator_next", + "git_merge_file_from_index" + ] + } + } + ], + [ + "git_index_entry_extended_flag_t", + { + "decl": [ + "GIT_INDEX_ENTRY_INTENT_TO_ADD", + "GIT_INDEX_ENTRY_SKIP_WORKTREE", + "GIT_INDEX_ENTRY_EXTENDED_FLAGS", + "GIT_INDEX_ENTRY_UPTODATE" + ], + "type": "enum", + "file": "git2/index.h", + "line": 116, + "lineto": 123, + "block": "GIT_INDEX_ENTRY_INTENT_TO_ADD\nGIT_INDEX_ENTRY_SKIP_WORKTREE\nGIT_INDEX_ENTRY_EXTENDED_FLAGS\nGIT_INDEX_ENTRY_UPTODATE", + "tdef": "typedef", + "description": " Bitmasks for on-disk fields of `git_index_entry`'s `flags_extended`", + "comments": "

In memory, the flags_extended fields are divided into two parts: the fields that are read from and written to disk, and other fields that in-memory only and used by libgit2. Only the flags in GIT_INDEX_ENTRY_EXTENDED_FLAGS will get saved on-disk.

\n\n

Thee first three bitmasks match the three fields in the git_index_entry flags_extended value that belong on disk. You can use them to interpret the data in the flags_extended.

\n\n

The rest of the bitmasks match the other fields in the git_index_entry flags_extended value that are only used in-memory by libgit2. You can use them to interpret the data in the flags_extended.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_ENTRY_INTENT_TO_ADD", + "comments": "", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_INDEX_ENTRY_SKIP_WORKTREE", + "comments": "", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_INDEX_ENTRY_EXTENDED_FLAGS", + "comments": "", + "value": 24576 + }, + { + "type": "int", + "name": "GIT_INDEX_ENTRY_UPTODATE", + "comments": "", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_index_entry_flag_t", + { + "decl": [ + "GIT_INDEX_ENTRY_EXTENDED", + "GIT_INDEX_ENTRY_VALID" + ], + "type": "enum", + "file": "git2/index.h", + "line": 87, + "lineto": 90, + "block": "GIT_INDEX_ENTRY_EXTENDED\nGIT_INDEX_ENTRY_VALID", + "tdef": "typedef", + "description": " Flags for index entries", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_ENTRY_EXTENDED", + "comments": "", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_INDEX_ENTRY_VALID", + "comments": "", + "value": 32768 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_index_iterator", + { + "decl": "git_index_iterator", + "type": "struct", + "value": "git_index_iterator", + "file": "git2/types.h", + "line": 151, + "lineto": 151, + "tdef": "typedef", + "description": " An iterator for entries in the index. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_index_iterator_free", + "git_index_iterator_new", + "git_index_iterator_next" + ] + } + } + ], + [ + "git_index_stage_t", + { + "decl": [ + "GIT_INDEX_STAGE_ANY", + "GIT_INDEX_STAGE_NORMAL", + "GIT_INDEX_STAGE_ANCESTOR", + "GIT_INDEX_STAGE_OURS", + "GIT_INDEX_STAGE_THEIRS" + ], + "type": "enum", + "file": "git2/index.h", + "line": 147, + "lineto": 167, + "block": "GIT_INDEX_STAGE_ANY\nGIT_INDEX_STAGE_NORMAL\nGIT_INDEX_STAGE_ANCESTOR\nGIT_INDEX_STAGE_OURS\nGIT_INDEX_STAGE_THEIRS", + "tdef": "typedef", + "description": " Git index stage states ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_STAGE_ANY", + "comments": "

Match any index stage.

\n\n

Some index APIs take a stage to match; pass this value to match\n any entry matching the path regardless of stage.

\n", + "value": -1 + }, + { + "type": "int", + "name": "GIT_INDEX_STAGE_NORMAL", + "comments": "

A normal staged file in the index.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_INDEX_STAGE_ANCESTOR", + "comments": "

The ancestor side of a conflict.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_INDEX_STAGE_OURS", + "comments": "

The "ours" side of a conflict.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_INDEX_STAGE_THEIRS", + "comments": "

The "theirs" side of a conflict.

\n", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_index_time", + { + "decl": [ + "int32_t seconds", + "uint32_t nanoseconds" + ], + "type": "struct", + "value": "git_index_time", + "file": "git2/index.h", + "line": 26, + "lineto": 30, + "block": "int32_t seconds\nuint32_t nanoseconds", + "tdef": "typedef", + "description": " Time structure used in a git index entry ", + "comments": "", + "fields": [ + { + "type": "int32_t", + "name": "seconds", + "comments": "" + }, + { + "type": "uint32_t", + "name": "nanoseconds", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_indexer", + { + "decl": "git_indexer", + "type": "struct", + "value": "git_indexer", + "file": "git2/indexer.h", + "line": 17, + "lineto": 17, + "tdef": "typedef", + "description": " A git indexer object ", + "comments": "", + "used": { + "returns": [ + "git_remote_stats" + ], + "needs": [ + "git_indexer_append", + "git_indexer_commit", + "git_indexer_free", + "git_indexer_hash", + "git_indexer_name", + "git_indexer_new", + "git_indexer_options_init", + "git_indexer_progress_cb", + "git_odb_write_pack", + "git_packbuilder_write" + ] + } + } + ], + [ + "git_indexer_options", + { + "decl": [ + "unsigned int version", + "git_indexer_progress_cb progress_cb", + "void * progress_cb_payload", + "unsigned char verify" + ], + "type": "struct", + "value": "git_indexer_options", + "file": "git2/indexer.h", + "line": 62, + "lineto": 86, + "block": "unsigned int version\ngit_indexer_progress_cb progress_cb\nvoid * progress_cb_payload\nunsigned char verify", + "tdef": "typedef", + "description": " Options for indexer configuration", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "git_indexer_progress_cb", + "name": "progress_cb", + "comments": " progress_cb function to call with progress information " + }, + { + "type": "void *", + "name": "progress_cb_payload", + "comments": " progress_cb_payload payload for the progress callback " + }, + { + "type": "unsigned char", + "name": "verify", + "comments": " Do connectivity checks for the received pack " + } + ], + "used": { + "returns": [], + "needs": [ + "git_indexer_new", + "git_indexer_options_init" + ] + } + } + ], + [ + "git_indexer_progress", + { + "decl": [ + "unsigned int total_objects", + "unsigned int indexed_objects", + "unsigned int received_objects", + "unsigned int local_objects", + "unsigned int total_deltas", + "unsigned int indexed_deltas", + "size_t received_bytes" + ], + "type": "struct", + "value": "git_indexer_progress", + "file": "git2/indexer.h", + "line": 24, + "lineto": 48, + "block": "unsigned int total_objects\nunsigned int indexed_objects\nunsigned int received_objects\nunsigned int local_objects\nunsigned int total_deltas\nunsigned int indexed_deltas\nsize_t received_bytes", + "tdef": "typedef", + "description": " This structure is used to provide callers information about the\n progress of indexing a packfile, either directly or part of a\n fetch or clone that downloads a packfile.", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "total_objects", + "comments": " number of objects in the packfile being indexed " + }, + { + "type": "unsigned int", + "name": "indexed_objects", + "comments": " received objects that have been hashed " + }, + { + "type": "unsigned int", + "name": "received_objects", + "comments": " received_objects: objects which have been downloaded " + }, + { + "type": "unsigned int", + "name": "local_objects", + "comments": " locally-available objects that have been injected in order\n to fix a thin pack" + }, + { + "type": "unsigned int", + "name": "total_deltas", + "comments": " number of deltas in the packfile being indexed " + }, + { + "type": "unsigned int", + "name": "indexed_deltas", + "comments": " received deltas that have been indexed " + }, + { + "type": "size_t", + "name": "received_bytes", + "comments": " size of the packfile received up to now " + } + ], + "used": { + "returns": [ + "git_remote_stats" + ], + "needs": [ + "git_indexer_append", + "git_indexer_commit", + "git_indexer_progress_cb", + "git_odb_write_pack", + "git_packbuilder_write" + ] + } + } + ], + [ + "git_libgit2_opt_t", + { + "decl": [ + "GIT_OPT_GET_MWINDOW_SIZE", + "GIT_OPT_SET_MWINDOW_SIZE", + "GIT_OPT_GET_MWINDOW_MAPPED_LIMIT", + "GIT_OPT_SET_MWINDOW_MAPPED_LIMIT", + "GIT_OPT_GET_SEARCH_PATH", + "GIT_OPT_SET_SEARCH_PATH", + "GIT_OPT_SET_CACHE_OBJECT_LIMIT", + "GIT_OPT_SET_CACHE_MAX_SIZE", + "GIT_OPT_ENABLE_CACHING", + "GIT_OPT_GET_CACHED_MEMORY", + "GIT_OPT_GET_TEMPLATE_PATH", + "GIT_OPT_SET_TEMPLATE_PATH", + "GIT_OPT_SET_SSL_CERT_LOCATIONS", + "GIT_OPT_SET_USER_AGENT", + "GIT_OPT_ENABLE_STRICT_OBJECT_CREATION", + "GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION", + "GIT_OPT_SET_SSL_CIPHERS", + "GIT_OPT_GET_USER_AGENT", + "GIT_OPT_ENABLE_OFS_DELTA", + "GIT_OPT_ENABLE_FSYNC_GITDIR", + "GIT_OPT_GET_WINDOWS_SHAREMODE", + "GIT_OPT_SET_WINDOWS_SHAREMODE", + "GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION", + "GIT_OPT_SET_ALLOCATOR", + "GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY", + "GIT_OPT_GET_PACK_MAX_OBJECTS", + "GIT_OPT_SET_PACK_MAX_OBJECTS", + "GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS", + "GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE", + "GIT_OPT_GET_MWINDOW_FILE_LIMIT", + "GIT_OPT_SET_MWINDOW_FILE_LIMIT", + "GIT_OPT_SET_ODB_PACKED_PRIORITY", + "GIT_OPT_SET_ODB_LOOSE_PRIORITY", + "GIT_OPT_GET_EXTENSIONS", + "GIT_OPT_SET_EXTENSIONS", + "GIT_OPT_GET_OWNER_VALIDATION", + "GIT_OPT_SET_OWNER_VALIDATION", + "GIT_OPT_GET_HOMEDIR", + "GIT_OPT_SET_HOMEDIR", + "GIT_OPT_SET_SERVER_CONNECT_TIMEOUT", + "GIT_OPT_GET_SERVER_CONNECT_TIMEOUT", + "GIT_OPT_SET_SERVER_TIMEOUT", + "GIT_OPT_GET_SERVER_TIMEOUT" + ], + "type": "enum", + "file": "git2/common.h", + "line": 188, + "lineto": 232, + "block": "GIT_OPT_GET_MWINDOW_SIZE\nGIT_OPT_SET_MWINDOW_SIZE\nGIT_OPT_GET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_SET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_GET_SEARCH_PATH\nGIT_OPT_SET_SEARCH_PATH\nGIT_OPT_SET_CACHE_OBJECT_LIMIT\nGIT_OPT_SET_CACHE_MAX_SIZE\nGIT_OPT_ENABLE_CACHING\nGIT_OPT_GET_CACHED_MEMORY\nGIT_OPT_GET_TEMPLATE_PATH\nGIT_OPT_SET_TEMPLATE_PATH\nGIT_OPT_SET_SSL_CERT_LOCATIONS\nGIT_OPT_SET_USER_AGENT\nGIT_OPT_ENABLE_STRICT_OBJECT_CREATION\nGIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION\nGIT_OPT_SET_SSL_CIPHERS\nGIT_OPT_GET_USER_AGENT\nGIT_OPT_ENABLE_OFS_DELTA\nGIT_OPT_ENABLE_FSYNC_GITDIR\nGIT_OPT_GET_WINDOWS_SHAREMODE\nGIT_OPT_SET_WINDOWS_SHAREMODE\nGIT_OPT_ENABLE_STRICT_HASH_VERIFICATION\nGIT_OPT_SET_ALLOCATOR\nGIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY\nGIT_OPT_GET_PACK_MAX_OBJECTS\nGIT_OPT_SET_PACK_MAX_OBJECTS\nGIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS\nGIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE\nGIT_OPT_GET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_ODB_PACKED_PRIORITY\nGIT_OPT_SET_ODB_LOOSE_PRIORITY\nGIT_OPT_GET_EXTENSIONS\nGIT_OPT_SET_EXTENSIONS\nGIT_OPT_GET_OWNER_VALIDATION\nGIT_OPT_SET_OWNER_VALIDATION\nGIT_OPT_GET_HOMEDIR\nGIT_OPT_SET_HOMEDIR\nGIT_OPT_SET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_GET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_SET_SERVER_TIMEOUT\nGIT_OPT_GET_SERVER_TIMEOUT", + "tdef": "typedef", + "description": " Global library options", + "comments": "

These are used to select which global option to set or get and are used in git_libgit2_opts().

\n", + "fields": [ + { + "type": "int", + "name": "GIT_OPT_GET_MWINDOW_SIZE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_OPT_SET_MWINDOW_SIZE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_OPT_GET_MWINDOW_MAPPED_LIMIT", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_OPT_SET_MWINDOW_MAPPED_LIMIT", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_OPT_GET_SEARCH_PATH", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SEARCH_PATH", + "comments": "", + "value": 5 + }, + { + "type": "int", + "name": "GIT_OPT_SET_CACHE_OBJECT_LIMIT", + "comments": "", + "value": 6 + }, + { + "type": "int", + "name": "GIT_OPT_SET_CACHE_MAX_SIZE", + "comments": "", + "value": 7 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_CACHING", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_OPT_GET_CACHED_MEMORY", + "comments": "", + "value": 9 + }, + { + "type": "int", + "name": "GIT_OPT_GET_TEMPLATE_PATH", + "comments": "", + "value": 10 + }, + { + "type": "int", + "name": "GIT_OPT_SET_TEMPLATE_PATH", + "comments": "", + "value": 11 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SSL_CERT_LOCATIONS", + "comments": "", + "value": 12 + }, + { + "type": "int", + "name": "GIT_OPT_SET_USER_AGENT", + "comments": "", + "value": 13 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_STRICT_OBJECT_CREATION", + "comments": "", + "value": 14 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION", + "comments": "", + "value": 15 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SSL_CIPHERS", + "comments": "", + "value": 16 + }, + { + "type": "int", + "name": "GIT_OPT_GET_USER_AGENT", + "comments": "", + "value": 17 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_OFS_DELTA", + "comments": "", + "value": 18 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_FSYNC_GITDIR", + "comments": "", + "value": 19 + }, + { + "type": "int", + "name": "GIT_OPT_GET_WINDOWS_SHAREMODE", + "comments": "", + "value": 20 + }, + { + "type": "int", + "name": "GIT_OPT_SET_WINDOWS_SHAREMODE", + "comments": "", + "value": 21 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION", + "comments": "", + "value": 22 + }, + { + "type": "int", + "name": "GIT_OPT_SET_ALLOCATOR", + "comments": "", + "value": 23 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY", + "comments": "", + "value": 24 + }, + { + "type": "int", + "name": "GIT_OPT_GET_PACK_MAX_OBJECTS", + "comments": "", + "value": 25 + }, + { + "type": "int", + "name": "GIT_OPT_SET_PACK_MAX_OBJECTS", + "comments": "", + "value": 26 + }, + { + "type": "int", + "name": "GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS", + "comments": "", + "value": 27 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE", + "comments": "", + "value": 28 + }, + { + "type": "int", + "name": "GIT_OPT_GET_MWINDOW_FILE_LIMIT", + "comments": "", + "value": 29 + }, + { + "type": "int", + "name": "GIT_OPT_SET_MWINDOW_FILE_LIMIT", + "comments": "", + "value": 30 + }, + { + "type": "int", + "name": "GIT_OPT_SET_ODB_PACKED_PRIORITY", + "comments": "", + "value": 31 + }, + { + "type": "int", + "name": "GIT_OPT_SET_ODB_LOOSE_PRIORITY", + "comments": "", + "value": 32 + }, + { + "type": "int", + "name": "GIT_OPT_GET_EXTENSIONS", + "comments": "", + "value": 33 + }, + { + "type": "int", + "name": "GIT_OPT_SET_EXTENSIONS", + "comments": "", + "value": 34 + }, + { + "type": "int", + "name": "GIT_OPT_GET_OWNER_VALIDATION", + "comments": "", + "value": 35 + }, + { + "type": "int", + "name": "GIT_OPT_SET_OWNER_VALIDATION", + "comments": "", + "value": 36 + }, + { + "type": "int", + "name": "GIT_OPT_GET_HOMEDIR", + "comments": "", + "value": 37 + }, + { + "type": "int", + "name": "GIT_OPT_SET_HOMEDIR", + "comments": "", + "value": 38 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SERVER_CONNECT_TIMEOUT", + "comments": "", + "value": 39 + }, + { + "type": "int", + "name": "GIT_OPT_GET_SERVER_CONNECT_TIMEOUT", + "comments": "", + "value": 40 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SERVER_TIMEOUT", + "comments": "", + "value": 41 + }, + { + "type": "int", + "name": "GIT_OPT_GET_SERVER_TIMEOUT", + "comments": "", + "value": 42 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_mailmap", + { + "decl": "git_mailmap", + "type": "struct", + "value": "git_mailmap", + "file": "git2/types.h", + "line": 366, + "lineto": 366, + "tdef": "typedef", + "description": " Representation of .mailmap file state. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_commit_author_with_mailmap", + "git_commit_committer_with_mailmap", + "git_mailmap_add_entry", + "git_mailmap_free", + "git_mailmap_from_buffer", + "git_mailmap_from_repository", + "git_mailmap_new", + "git_mailmap_resolve", + "git_mailmap_resolve_signature" + ] + } + } + ], + [ + "git_merge_analysis_t", + { + "decl": [ + "GIT_MERGE_ANALYSIS_NONE", + "GIT_MERGE_ANALYSIS_NORMAL", + "GIT_MERGE_ANALYSIS_UP_TO_DATE", + "GIT_MERGE_ANALYSIS_FASTFORWARD", + "GIT_MERGE_ANALYSIS_UNBORN" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 334, + "lineto": 363, + "block": "GIT_MERGE_ANALYSIS_NONE\nGIT_MERGE_ANALYSIS_NORMAL\nGIT_MERGE_ANALYSIS_UP_TO_DATE\nGIT_MERGE_ANALYSIS_FASTFORWARD\nGIT_MERGE_ANALYSIS_UNBORN", + "tdef": "typedef", + "description": " The results of `git_merge_analysis` indicate the merge opportunities.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_NONE", + "comments": "

No merge is possible. (Unused.)

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_NORMAL", + "comments": "

A "normal" merge; both HEAD and the given merge input have diverged\n from their common ancestor. The divergent commits must be merged.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_UP_TO_DATE", + "comments": "

All given merge inputs are reachable from HEAD, meaning the\n repository is up-to-date and no merge needs to be performed.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_FASTFORWARD", + "comments": "

The given merge input is a fast-forward from HEAD and no merge\n needs to be performed. Instead, the client can check out the\n given merge input.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_UNBORN", + "comments": "

The HEAD of the current repository is "unborn" and does not point to\n a valid commit. No merge can be performed, but the caller may wish\n to simply set HEAD to the target commit(s).

\n", + "value": 8 + } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_analysis", + "git_merge_analysis_for_ref" + ] + } + } + ], + [ + "git_merge_driver_source", + { + "decl": "git_merge_driver_source", + "type": "struct", + "value": "git_merge_driver_source", + "file": "git2/sys/merge.h", + "line": 41, + "lineto": 41, + "tdef": "typedef", + "description": " A merge driver source represents the file to be merged", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_merge_file_favor_t", + { + "decl": [ + "GIT_MERGE_FILE_FAVOR_NORMAL", + "GIT_MERGE_FILE_FAVOR_OURS", + "GIT_MERGE_FILE_FAVOR_THEIRS", + "GIT_MERGE_FILE_FAVOR_UNION" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 109, + "lineto": 139, + "block": "GIT_MERGE_FILE_FAVOR_NORMAL\nGIT_MERGE_FILE_FAVOR_OURS\nGIT_MERGE_FILE_FAVOR_THEIRS\nGIT_MERGE_FILE_FAVOR_UNION", + "tdef": "typedef", + "description": " Merge file favor options for `git_merge_options` instruct the file-level\n merging functionality how to deal with conflicting regions of the files.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_FILE_FAVOR_NORMAL", + "comments": "

When a region of a file is changed in both branches, a conflict\n will be recorded in the index so that git_checkout can produce\n a merge file with conflict markers in the working directory.\n This is the default.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_FAVOR_OURS", + "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain the "ours" side of any conflicting\n region. The index will not record a conflict.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_FAVOR_THEIRS", + "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain the "theirs" side of any conflicting\n region. The index will not record a conflict.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_FAVOR_UNION", + "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain each unique line from each side,\n which has the result of combining both files. The index will not\n record a conflict.

\n", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_merge_file_flag_t", + { + "decl": [ + "GIT_MERGE_FILE_DEFAULT", + "GIT_MERGE_FILE_STYLE_MERGE", + "GIT_MERGE_FILE_STYLE_DIFF3", + "GIT_MERGE_FILE_SIMPLIFY_ALNUM", + "GIT_MERGE_FILE_IGNORE_WHITESPACE", + "GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE", + "GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL", + "GIT_MERGE_FILE_DIFF_PATIENCE", + "GIT_MERGE_FILE_DIFF_MINIMAL", + "GIT_MERGE_FILE_STYLE_ZDIFF3", + "GIT_MERGE_FILE_ACCEPT_CONFLICTS" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 144, + "lineto": 181, + "block": "GIT_MERGE_FILE_DEFAULT\nGIT_MERGE_FILE_STYLE_MERGE\nGIT_MERGE_FILE_STYLE_DIFF3\nGIT_MERGE_FILE_SIMPLIFY_ALNUM\nGIT_MERGE_FILE_IGNORE_WHITESPACE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_EOL\nGIT_MERGE_FILE_DIFF_PATIENCE\nGIT_MERGE_FILE_DIFF_MINIMAL\nGIT_MERGE_FILE_STYLE_ZDIFF3\nGIT_MERGE_FILE_ACCEPT_CONFLICTS", + "tdef": "typedef", + "description": " File merging flags", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_FILE_DEFAULT", + "comments": "

Defaults

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_STYLE_MERGE", + "comments": "

Create standard conflicted merge files

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_STYLE_DIFF3", + "comments": "

Create diff3-style files

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_SIMPLIFY_ALNUM", + "comments": "

Condense non-alphanumeric regions for simplified diff file

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE", + "comments": "

Ignore all whitespace

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE", + "comments": "

Ignore changes in amount of whitespace

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL", + "comments": "

Ignore whitespace at end of line

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_DIFF_PATIENCE", + "comments": "

Use the "patience diff" algorithm

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_DIFF_MINIMAL", + "comments": "

Take extra time to find minimal diff

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_STYLE_ZDIFF3", + "comments": "

Create zdiff3 ("zealous diff3")-style files

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_ACCEPT_CONFLICTS", + "comments": "

Do not produce file conflicts when common regions have\n changed; keep the conflict markers in the file and accept\n that as the merge result.

\n", + "value": 512 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_merge_file_input", + { + "decl": [ + "unsigned int version", + "const char * ptr", + "size_t size", + "const char * path", + "unsigned int mode" + ], + "type": "struct", + "value": "git_merge_file_input", + "file": "git2/merge.h", + "line": 32, + "lineto": 46, + "block": "unsigned int version\nconst char * ptr\nsize_t size\nconst char * path\nunsigned int mode", + "tdef": "typedef", + "description": " The file inputs to `git_merge_file`. Callers should populate the\n `git_merge_file_input` structure with descriptions of the files in\n each side of the conflict for use in producing the merge file.", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "const char *", + "name": "ptr", + "comments": " Pointer to the contents of the file. " + }, + { + "type": "size_t", + "name": "size", + "comments": " Size of the contents pointed to in `ptr`. " + }, + { + "type": "const char *", + "name": "path", + "comments": " File name of the conflicted file, or `NULL` to not merge the path. " + }, + { + "type": "unsigned int", + "name": "mode", + "comments": " File mode of the conflicted file, or `0` to not merge the mode. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_file", + "git_merge_file_input_init" + ] + } + } + ], + [ + "git_merge_file_options", + { + "decl": [ + "unsigned int version", + "const char * ancestor_label", + "const char * our_label", + "const char * their_label", + "git_merge_file_favor_t favor", + "uint32_t flags", + "unsigned short marker_size" + ], + "type": "struct", + "value": "git_merge_file_options", + "file": "git2/merge.h", + "line": 188, + "lineto": 218, + "block": "unsigned int version\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_merge_file_favor_t favor\nuint32_t flags\nunsigned short marker_size", + "tdef": "typedef", + "description": " Options for merging a file", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "const char *", + "name": "ancestor_label", + "comments": " Label for the ancestor file side of the conflict which will be prepended\n to labels in diff3-format merge files." + }, + { + "type": "const char *", + "name": "our_label", + "comments": " Label for our file side of the conflict which will be prepended\n to labels in merge files." + }, + { + "type": "const char *", + "name": "their_label", + "comments": " Label for their file side of the conflict which will be prepended\n to labels in merge files." + }, + { + "type": "git_merge_file_favor_t", + "name": "favor", + "comments": " The file to favor in region conflicts. " + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " see `git_merge_file_flag_t` above " + }, + { + "type": "unsigned short", + "name": "marker_size", + "comments": " The size of conflict markers (eg, \"\n<\n<\n<\n<\n<\n<\n<\n\"). Default is\n GIT_MERGE_CONFLICT_MARKER_SIZE. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_file", + "git_merge_file_from_index", + "git_merge_file_options_init" + ] + } + } + ], + [ + "git_merge_file_result", + { + "decl": [ + "unsigned int automergeable", + "const char * path", + "unsigned int mode", + "const char * ptr", + "size_t len" + ], + "type": "struct", + "value": "git_merge_file_result", + "file": "git2/merge.h", + "line": 238, + "lineto": 259, + "block": "unsigned int automergeable\nconst char * path\nunsigned int mode\nconst char * ptr\nsize_t len", + "tdef": "typedef", + "description": " Information about file-level merging", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "automergeable", + "comments": " True if the output was automerged, false if the output contains\n conflict markers." + }, + { + "type": "const char *", + "name": "path", + "comments": " The path that the resultant merge file should use, or NULL if a\n filename conflict would occur." + }, + { + "type": "unsigned int", + "name": "mode", + "comments": " The mode that the resultant merge file should use. " + }, + { + "type": "const char *", + "name": "ptr", + "comments": " The contents of the merge. " + }, + { + "type": "size_t", + "name": "len", + "comments": " The length of the merge contents. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_file", + "git_merge_file_from_index", + "git_merge_file_result_free" + ] + } + } + ], + [ + "git_merge_flag_t", + { + "decl": [ + "GIT_MERGE_FIND_RENAMES", + "GIT_MERGE_FAIL_ON_CONFLICT", + "GIT_MERGE_SKIP_REUC", + "GIT_MERGE_NO_RECURSIVE", + "GIT_MERGE_VIRTUAL_BASE" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 68, + "lineto": 103, + "block": "GIT_MERGE_FIND_RENAMES\nGIT_MERGE_FAIL_ON_CONFLICT\nGIT_MERGE_SKIP_REUC\nGIT_MERGE_NO_RECURSIVE\nGIT_MERGE_VIRTUAL_BASE", + "tdef": "typedef", + "description": " Flags for `git_merge` options. A combination of these flags can be\n passed in via the `flags` value in the `git_merge_options`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_FIND_RENAMES", + "comments": "

Detect renames that occur between the common ancestor and the "ours"\n side or the common ancestor and the "theirs" side. This will enable\n the ability to merge between a modified and renamed file.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_FAIL_ON_CONFLICT", + "comments": "

If a conflict occurs, exit immediately instead of attempting to\n continue resolving conflicts. The merge operation will fail with\n GIT_EMERGECONFLICT and no index will be returned.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_MERGE_SKIP_REUC", + "comments": "

Do not write the REUC extension on the generated index

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_MERGE_NO_RECURSIVE", + "comments": "

If the commits being merged have multiple merge bases, do not build\n a recursive merge base (by merging the multiple merge bases),\n instead simply use the first base. This flag provides a similar\n merge base to git-merge-resolve.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_MERGE_VIRTUAL_BASE", + "comments": "

Treat this merge as if it is to produce the virtual base\n of a recursive merge. This will ensure that there are\n no conflicts, any conflicting regions will keep conflict\n markers in the merge result.

\n", + "value": 16 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_merge_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "unsigned int rename_threshold", + "unsigned int target_limit", + "git_diff_similarity_metric * metric", + "unsigned int recursion_limit", + "const char * default_driver", + "git_merge_file_favor_t file_favor", + "uint32_t file_flags" + ], + "type": "struct", + "value": "git_merge_options", + "file": "git2/merge.h", + "line": 264, + "lineto": 313, + "block": "unsigned int version\nuint32_t flags\nunsigned int rename_threshold\nunsigned int target_limit\ngit_diff_similarity_metric * metric\nunsigned int recursion_limit\nconst char * default_driver\ngit_merge_file_favor_t file_favor\nuint32_t file_flags", + "tdef": "typedef", + "description": " Merging options", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " See `git_merge_flag_t` above " + }, + { + "type": "unsigned int", + "name": "rename_threshold", + "comments": " Similarity to consider a file renamed (default 50). If\n `GIT_MERGE_FIND_RENAMES` is enabled, added files will be compared\n with deleted files to determine their similarity. Files that are\n more similar than the rename threshold (percentage-wise) will be\n treated as a rename." + }, + { + "type": "unsigned int", + "name": "target_limit", + "comments": " Maximum similarity sources to examine for renames (default 200).\n If the number of rename candidates (add / delete pairs) is greater\n than this value, inexact rename detection is aborted.\n\n This setting overrides the `merge.renameLimit` configuration value." + }, + { + "type": "git_diff_similarity_metric *", + "name": "metric", + "comments": " Pluggable similarity metric; pass NULL to use internal metric " + }, + { + "type": "unsigned int", + "name": "recursion_limit", + "comments": " Maximum number of times to merge common ancestors to build a\n virtual merge base when faced with criss-cross merges. When this\n limit is reached, the next ancestor will simply be used instead of\n attempting to merge it. The default is unlimited." + }, + { + "type": "const char *", + "name": "default_driver", + "comments": " Default merge driver to be used when both sides of a merge have\n changed. The default is the `text` driver." + }, + { + "type": "git_merge_file_favor_t", + "name": "file_favor", + "comments": " Flags for handling conflicting content, to be used with the standard\n (`text`) merge driver." + }, + { + "type": "uint32_t", + "name": "file_flags", + "comments": " see `git_merge_file_flag_t` above " + } + ], + "used": { + "returns": [], + "needs": [ + "git_cherrypick_commit", + "git_merge", + "git_merge_commits", + "git_merge_options_init", + "git_merge_trees", + "git_revert_commit" + ] + } + } + ], + [ + "git_merge_preference_t", + { + "decl": [ + "GIT_MERGE_PREFERENCE_NONE", + "GIT_MERGE_PREFERENCE_NO_FASTFORWARD", + "GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 368, + "lineto": 386, + "block": "GIT_MERGE_PREFERENCE_NONE\nGIT_MERGE_PREFERENCE_NO_FASTFORWARD\nGIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", + "tdef": "typedef", + "description": " The user's stated preference for merges.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_PREFERENCE_NONE", + "comments": "

No configuration was found that suggests a preferred behavior for\n merge.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_MERGE_PREFERENCE_NO_FASTFORWARD", + "comments": "

There is a merge.ff=false configuration setting, suggesting that\n the user does not want to allow a fast-forward merge.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", + "comments": "

There is a merge.ff=only configuration setting, suggesting that\n the user only wants fast-forward merges.

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_analysis", + "git_merge_analysis_for_ref" + ] + } + } + ], + [ + "git_message_trailer", + { + "decl": [ + "const char * key", + "const char * value" + ], + "type": "struct", + "value": "git_message_trailer", + "file": "git2/message.h", + "line": 43, + "lineto": 46, + "block": "const char * key\nconst char * value", + "tdef": "typedef", + "description": " Represents a single git message trailer.", + "comments": "", + "fields": [ + { + "type": "const char *", + "name": "key", + "comments": "" + }, + { + "type": "const char *", + "name": "value", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_message_trailer_array_free", + "git_message_trailers" + ] + } + } + ], + [ + "git_message_trailer_array", + { + "decl": [ + "git_message_trailer * trailers", + "size_t count", + "char * _trailer_block" + ], + "type": "struct", + "value": "git_message_trailer_array", + "file": "git2/message.h", + "line": 54, + "lineto": 60, + "block": "git_message_trailer * trailers\nsize_t count\nchar * _trailer_block", + "tdef": "typedef", + "description": " Represents an array of git message trailers.", + "comments": "

Struct members under the private comment are private, subject to change and should not be used by callers.

\n", + "fields": [ + { + "type": "git_message_trailer *", + "name": "trailers", + "comments": "" + }, + { + "type": "size_t", + "name": "count", + "comments": "" + }, + { + "type": "char *", + "name": "_trailer_block", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_message_trailer_array_free", + "git_message_trailers" + ] + } + } + ], + [ + "git_midx_writer", + { + "decl": "git_midx_writer", + "type": "struct", + "value": "git_midx_writer", + "file": "git2/types.h", + "line": 100, + "lineto": 100, + "tdef": "typedef", + "description": " a writer for multi-pack-index files. ", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_note", + { + "decl": "git_note", + "type": "struct", + "value": "git_note", + "file": "git2/types.h", + "line": 169, + "lineto": 169, + "tdef": "typedef", + "description": " Representation of a git note ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_note_author", + "git_note_commit_iterator_new", + "git_note_commit_read", + "git_note_committer", + "git_note_foreach", + "git_note_free", + "git_note_id", + "git_note_iterator_free", + "git_note_iterator_new", + "git_note_message", + "git_note_next", + "git_note_read" + ] + } + } + ], + [ + "git_note_iterator", + { + "decl": "git_note_iterator", + "type": "struct", + "value": "git_note_iterator", + "file": "git2/notes.h", + "line": 35, + "lineto": 35, + "tdef": "typedef", + "description": " note iterator", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_note_commit_iterator_new", + "git_note_iterator_free", + "git_note_iterator_new", + "git_note_next" + ] + } + } + ], + [ + "git_object", + { + "decl": "git_object", + "type": "struct", + "value": "git_object", + "file": "git2/types.h", + "line": 124, + "lineto": 124, + "tdef": "typedef", + "description": " Representation of a generic object in a repository ", + "comments": "", + "used": { + "returns": [ + "git_blob_rawsize", + "git_object_string2type", + "git_object_type", + "git_odb_object_type", + "git_tag_target_type", + "git_tree_entry_type" + ], + "needs": [ + "git_checkout_tree", + "git_describe_commit", + "git_object__size", + "git_object_dup", + "git_object_free", + "git_object_id", + "git_object_lookup", + "git_object_lookup_bypath", + "git_object_lookup_prefix", + "git_object_owner", + "git_object_peel", + "git_object_rawcontent_is_valid", + "git_object_short_id", + "git_object_type", + "git_object_type2string", + "git_object_typeisloose", + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_read_header", + "git_odb_write", + "git_reference_peel", + "git_repository_hashfile", + "git_reset", + "git_reset_default", + "git_revparse_ext", + "git_revparse_single", + "git_tag_annotation_create", + "git_tag_create", + "git_tag_create_lightweight", + "git_tag_peel", + "git_tag_target", + "git_tree_entry_to_object" + ] + } + } + ], + [ + "git_object_t", + { + "decl": [ + "GIT_OBJECT_ANY", + "GIT_OBJECT_INVALID", + "GIT_OBJECT_COMMIT", + "GIT_OBJECT_TREE", + "GIT_OBJECT_BLOB", + "GIT_OBJECT_TAG", + "GIT_OBJECT_OFS_DELTA", + "GIT_OBJECT_REF_DELTA" + ], + "type": "enum", + "file": "git2/types.h", + "line": 73, + "lineto": 82, + "block": "GIT_OBJECT_ANY\nGIT_OBJECT_INVALID\nGIT_OBJECT_COMMIT\nGIT_OBJECT_TREE\nGIT_OBJECT_BLOB\nGIT_OBJECT_TAG\nGIT_OBJECT_OFS_DELTA\nGIT_OBJECT_REF_DELTA", + "tdef": "typedef", + "description": " Basic type (loose or packed) of any Git object. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_OBJECT_ANY", + "comments": "

Object can be any of the following

\n", + "value": -2 + }, + { + "type": "int", + "name": "GIT_OBJECT_INVALID", + "comments": "

Object is invalid.

\n", + "value": -1 + }, + { + "type": "int", + "name": "GIT_OBJECT_COMMIT", + "comments": "

A commit object.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_OBJECT_TREE", + "comments": "

A tree (directory listing) object.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_OBJECT_BLOB", + "comments": "

A file revision object.

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_OBJECT_TAG", + "comments": "

An annotated tag object.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_OBJECT_OFS_DELTA", + "comments": "

A delta, base is given by an offset.

\n", + "value": 6 + }, + { + "type": "int", + "name": "GIT_OBJECT_REF_DELTA", + "comments": "

A delta, base is given by object id.

\n", + "value": 7 + } + ], + "used": { + "returns": [ + "git_object_string2type", + "git_object_type", + "git_odb_object_type", + "git_tag_target_type", + "git_tree_entry_type" + ], + "needs": [ + "git_object__size", + "git_object_lookup", + "git_object_lookup_bypath", + "git_object_lookup_prefix", + "git_object_peel", + "git_object_rawcontent_is_valid", + "git_object_type2string", + "git_object_typeisloose", + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_read_header", + "git_odb_write", + "git_reference_peel", + "git_repository_hashfile" + ] + } + } + ], + [ + "git_odb", + { + "decl": "git_odb", + "type": "struct", + "value": "git_odb", + "file": "git2/types.h", + "line": 85, + "lineto": 85, + "tdef": "typedef", + "description": " An open object database handle. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_indexer_new", + "git_odb_add_alternate", + "git_odb_add_backend", + "git_odb_add_disk_alternate", + "git_odb_exists", + "git_odb_exists_ext", + "git_odb_exists_prefix", + "git_odb_expand_ids", + "git_odb_foreach", + "git_odb_free", + "git_odb_get_backend", + "git_odb_num_backends", + "git_odb_object_data", + "git_odb_object_dup", + "git_odb_object_free", + "git_odb_object_id", + "git_odb_object_size", + "git_odb_object_type", + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_read", + "git_odb_read_header", + "git_odb_read_prefix", + "git_odb_refresh", + "git_odb_set_commit_graph", + "git_odb_stream_finalize_write", + "git_odb_stream_free", + "git_odb_stream_read", + "git_odb_stream_write", + "git_odb_write", + "git_odb_write_multi_pack_index", + "git_odb_write_pack", + "git_repository_odb" + ] + } + } + ], + [ + "git_odb_backend", + { + "decl": "git_odb_backend", + "type": "struct", + "value": "git_odb_backend", + "file": "git2/types.h", + "line": 88, + "lineto": 88, + "tdef": "typedef", + "description": " A custom backend in an ODB ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_odb_add_alternate", + "git_odb_add_backend", + "git_odb_get_backend" + ] + } + } + ], + [ + "git_odb_backend_loose_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "int compression_level", + "unsigned int dir_mode", + "unsigned int file_mode", + "git_oid_t oid_type" + ], + "type": "struct", + "value": "git_odb_backend_loose_options", + "file": "git2/odb_backend.h", + "line": 93, + "lineto": 119, + "block": "unsigned int version\nuint32_t flags\nint compression_level\nunsigned int dir_mode\nunsigned int file_mode\ngit_oid_t oid_type", + "tdef": "typedef", + "description": " Options for configuring a loose object backend. ", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " version for the struct " + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of the `git_odb_backend_loose_flag_t` types. " + }, + { + "type": "int", + "name": "compression_level", + "comments": " zlib compression level to use (0-9), where 1 is the fastest\n at the expense of larger files, and 9 produces the best\n compression at the expense of speed. 0 indicates that no\n compression should be performed. -1 is the default (currently\n optimizing for speed)." + }, + { + "type": "unsigned int", + "name": "dir_mode", + "comments": " Permissions to use creating a directory or 0 for defaults " + }, + { + "type": "unsigned int", + "name": "file_mode", + "comments": " Permissions to use creating a file or 0 for defaults " + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_odb_backend_pack_options", + { + "decl": [ + "unsigned int version", + "git_oid_t oid_type" + ], + "type": "struct", + "value": "git_odb_backend_pack_options", + "file": "git2/odb_backend.h", + "line": 28, + "lineto": 36, + "block": "unsigned int version\ngit_oid_t oid_type", + "tdef": "typedef", + "description": " Options for configuring a packfile object backend. ", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " version for the struct " + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_odb_expand_id", + { + "decl": [ + "git_oid id", + "unsigned short length", + "git_object_t type" + ], + "type": "struct", + "value": "git_odb_expand_id", + "file": "git2/odb.h", + "line": 230, + "lineto": 245, + "block": "git_oid id\nunsigned short length\ngit_object_t type", + "tdef": "typedef", + "description": " The information about object IDs to query in `git_odb_expand_ids`,\n which will be populated upon return.", + "comments": "", + "fields": [ + { + "type": "git_oid", + "name": "id", + "comments": " The object ID to expand " + }, + { + "type": "unsigned short", + "name": "length", + "comments": " The length of the object ID (in nibbles, or packets of 4 bits; the\n number of hex characters)" + }, + { + "type": "git_object_t", + "name": "type", + "comments": " The (optional) type of the object to search for; leave as `0` or set\n to `GIT_OBJECT_ANY` to query for any object matching the ID." + } + ], + "used": { + "returns": [], + "needs": [ + "git_odb_expand_ids" + ] + } + } + ], + [ + "git_odb_lookup_flags_t", + { + "decl": [ + "GIT_ODB_LOOKUP_NO_REFRESH" + ], + "type": "enum", + "file": "git2/odb.h", + "line": 26, + "lineto": 34, + "block": "GIT_ODB_LOOKUP_NO_REFRESH", + "tdef": "typedef", + "description": " Flags controlling the behavior of ODB lookup operations ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_ODB_LOOKUP_NO_REFRESH", + "comments": "

Don't call git_odb_refresh if the lookup fails. Useful when doing\n a batch of lookup operations for objects that may legitimately not\n exist. When using this flag, you may wish to manually call\n git_odb_refresh before processing a batch of objects.

\n", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_odb_object", + { + "decl": "git_odb_object", + "type": "struct", + "value": "git_odb_object", + "file": "git2/types.h", + "line": 91, + "lineto": 91, + "tdef": "typedef", + "description": " An object read from the ODB ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_odb_object_data", + "git_odb_object_dup", + "git_odb_object_free", + "git_odb_object_id", + "git_odb_object_size", + "git_odb_object_type", + "git_odb_read", + "git_odb_read_prefix" + ] + } + } + ], + [ + "git_odb_options", + { + "decl": [ + "unsigned int version", + "git_oid_t oid_type" + ], + "type": "struct", + "value": "git_odb_options", + "file": "git2/odb.h", + "line": 42, + "lineto": 50, + "block": "unsigned int version\ngit_oid_t oid_type", + "tdef": "typedef", + "description": " Options for configuring a loose object backend. ", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " version for the struct " + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_odb_stream", + { + "decl": "git_odb_stream", + "type": "struct", + "value": "git_odb_stream", + "file": "git2/types.h", + "line": 94, + "lineto": 94, + "block": "git_odb_backend * backend\nunsigned int mode\nvoid * hash_ctx\ngit_object_size_t declared_size\ngit_object_size_t received_bytes\nint (*)(git_odb_stream *, char *, size_t) read\nint (*)(git_odb_stream *, const char *, size_t) write\nint (*)(git_odb_stream *, const git_oid *) finalize_write\nvoid (*)(git_odb_stream *) free", + "tdef": "typedef", + "description": " A stream to read/write from the ODB ", + "comments": "", + "fields": [ + { + "type": "git_odb_backend *", + "name": "backend", + "comments": "" + }, + { + "type": "unsigned int", + "name": "mode", + "comments": "" + }, + { + "type": "void *", + "name": "hash_ctx", + "comments": "" + }, + { + "type": "git_object_size_t", + "name": "declared_size", + "comments": "" + }, + { + "type": "git_object_size_t", + "name": "received_bytes", + "comments": "" + }, + { + "type": "int (*)(git_odb_stream *, char *, size_t)", + "name": "read", + "comments": "" + }, + { + "type": "int (*)(git_odb_stream *, const char *, size_t)", + "name": "write", + "comments": "" + }, + { + "type": "int (*)(git_odb_stream *, const git_oid *)", + "name": "finalize_write", + "comments": "" + }, + { + "type": "void (*)(git_odb_stream *)", + "name": "free", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_stream_finalize_write", + "git_odb_stream_free", + "git_odb_stream_read", + "git_odb_stream_write" + ] + } + } + ], + [ + "git_odb_stream_t", + { + "decl": [ + "GIT_STREAM_RDONLY", + "GIT_STREAM_WRONLY", + "GIT_STREAM_RW" + ], + "type": "enum", + "file": "git2/odb_backend.h", + "line": 155, + "lineto": 159, + "block": "GIT_STREAM_RDONLY\nGIT_STREAM_WRONLY\nGIT_STREAM_RW", + "tdef": "typedef", + "description": " Streaming mode ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STREAM_RDONLY", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STREAM_WRONLY", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STREAM_RW", + "comments": "", + "value": 6 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_odb_writepack", + { + "decl": "git_odb_writepack", + "type": "struct", + "value": "git_odb_writepack", + "file": "git2/types.h", + "line": 97, + "lineto": 97, + "block": "git_odb_backend * backend\nint (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *) append\nint (*)(git_odb_writepack *, git_indexer_progress *) commit\nvoid (*)(git_odb_writepack *) free", + "tdef": "typedef", + "description": " A stream to write a packfile to the ODB ", + "comments": "", + "fields": [ + { + "type": "git_odb_backend *", + "name": "backend", + "comments": "" + }, + { + "type": "int (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *)", + "name": "append", + "comments": "" + }, + { + "type": "int (*)(git_odb_writepack *, git_indexer_progress *)", + "name": "commit", + "comments": "" + }, + { + "type": "void (*)(git_odb_writepack *)", + "name": "free", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_odb_write_pack" + ] + } + } + ], + [ + "git_oid", + { + "decl": [ + "unsigned char [20] id" + ], + "type": "struct", + "value": "git_oid", + "file": "git2/oid.h", + "line": 99, + "lineto": 108, + "block": "unsigned char [20] id", + "tdef": "typedef", + "description": " Unique identity of any object (commit, tree, blob, tag). ", + "comments": "", + "fields": [ + { + "type": "unsigned char [20]", + "name": "id", + "comments": " raw binary formatted id " + } + ], + "used": { + "returns": [ + "git_annotated_commit_id", + "git_blob_id", + "git_commit_id", + "git_commit_parent_id", + "git_commit_tree_id", + "git_index_checksum", + "git_indexer_hash", + "git_note_id", + "git_object_id", + "git_odb_object_id", + "git_oid_shorten_new", + "git_packbuilder_hash", + "git_rebase_onto_id", + "git_rebase_orig_head_id", + "git_reference_target", + "git_reference_target_peel", + "git_reflog_entry_id_new", + "git_reflog_entry_id_old", + "git_repository_oid_type", + "git_submodule_head_id", + "git_submodule_index_id", + "git_submodule_wd_id", + "git_tag_id", + "git_tag_target_id", + "git_tree_entry_id", + "git_tree_id" + ], + "needs": [ + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_lookup", + "git_blob_create_from_buffer", + "git_blob_create_from_disk", + "git_blob_create_from_stream_commit", + "git_blob_create_from_workdir", + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_commit_amend", + "git_commit_create", + "git_commit_create_cb", + "git_commit_create_v", + "git_commit_create_with_signature", + "git_commit_extract_signature", + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_diff_patchid", + "git_graph_ahead_behind", + "git_graph_descendant_of", + "git_graph_reachable_from_any", + "git_index_write_tree", + "git_index_write_tree_to", + "git_merge_base", + "git_merge_base_many", + "git_merge_base_octopus", + "git_merge_bases", + "git_merge_bases_many", + "git_note_commit_create", + "git_note_commit_read", + "git_note_commit_remove", + "git_note_create", + "git_note_foreach_cb", + "git_note_next", + "git_note_read", + "git_note_remove", + "git_object_lookup", + "git_object_lookup_prefix", + "git_odb_exists", + "git_odb_exists_ext", + "git_odb_exists_prefix", + "git_odb_foreach_cb", + "git_odb_open_rstream", + "git_odb_read", + "git_odb_read_header", + "git_odb_read_prefix", + "git_odb_stream_finalize_write", + "git_odb_write", + "git_oid_cmp", + "git_oid_cpy", + "git_oid_equal", + "git_oid_fmt", + "git_oid_is_zero", + "git_oid_ncmp", + "git_oid_nfmt", + "git_oid_pathfmt", + "git_oid_shorten_add", + "git_oid_shorten_free", + "git_oid_strcmp", + "git_oid_streq", + "git_oid_tostr", + "git_oid_tostr_s", + "git_oidarray_dispose", + "git_oidarray_free", + "git_packbuilder_insert", + "git_packbuilder_insert_commit", + "git_packbuilder_insert_recur", + "git_packbuilder_insert_tree", + "git_rebase_commit", + "git_reference_create", + "git_reference_create_matching", + "git_reference_name_to_id", + "git_reference_set_target", + "git_reflog_append", + "git_repository_fetchhead_foreach_cb", + "git_repository_hashfile", + "git_repository_mergehead_foreach_cb", + "git_repository_set_head_detached", + "git_revwalk_hide", + "git_revwalk_hide_cb", + "git_revwalk_next", + "git_revwalk_push", + "git_stash_cb", + "git_stash_save", + "git_stash_save_with_opts", + "git_tag_annotation_create", + "git_tag_create", + "git_tag_create_from_buffer", + "git_tag_create_lightweight", + "git_tag_foreach_cb", + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_transaction_set_target", + "git_tree_create_updated", + "git_tree_entry_byid", + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_treebuilder_insert", + "git_treebuilder_write", + "git_treebuilder_write_with_buffer" + ] + } + } + ], + [ + "git_oid_shorten", + { + "decl": "git_oid_shorten", + "type": "struct", + "value": "git_oid_shorten", + "file": "git2/oid.h", + "line": 320, + "lineto": 320, + "tdef": "typedef", + "description": " OID Shortener object", + "comments": "", + "used": { + "returns": [ + "git_oid_shorten_new" + ], + "needs": [ + "git_oid_shorten_add", + "git_oid_shorten_free" + ] + } + } + ], + [ + "git_oid_t", + { + "decl": [ + "GIT_OID_SHA1" + ], + "type": "enum", + "file": "git2/oid.h", + "line": 24, + "lineto": 33, + "block": "GIT_OID_SHA1", + "tdef": "typedef", + "description": " The type of object id. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_OID_SHA1", + "comments": "

SHA1

\n", + "value": 1 + } + ], + "used": { + "returns": [ + "git_repository_oid_type" + ], + "needs": [] + } + } + ], + [ + "git_oidarray", + { + "decl": [ + "git_oid * ids", + "size_t count" + ], + "type": "struct", + "value": "git_oidarray", + "file": "git2/oidarray.h", + "line": 16, + "lineto": 19, + "block": "git_oid * ids\nsize_t count", + "tdef": "typedef", + "description": " Array of object ids ", + "comments": "", + "fields": [ + { + "type": "git_oid *", + "name": "ids", + "comments": "" + }, + { + "type": "size_t", + "name": "count", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_bases", + "git_merge_bases_many", + "git_oidarray_dispose", + "git_oidarray_free" + ] + } + } + ], + [ + "git_packbuilder", + { + "decl": "git_packbuilder", + "type": "struct", + "value": "git_packbuilder", + "file": "git2/types.h", + "line": 172, + "lineto": 172, + "tdef": "typedef", + "description": " Representation of a git packbuilder ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_packbuilder_foreach", + "git_packbuilder_free", + "git_packbuilder_hash", + "git_packbuilder_insert", + "git_packbuilder_insert_commit", + "git_packbuilder_insert_recur", + "git_packbuilder_insert_tree", + "git_packbuilder_insert_walk", + "git_packbuilder_name", + "git_packbuilder_new", + "git_packbuilder_object_count", + "git_packbuilder_set_callbacks", + "git_packbuilder_set_threads", + "git_packbuilder_write", + "git_packbuilder_write_buf", + "git_packbuilder_written" + ] + } + } + ], + [ + "git_packbuilder_stage_t", + { + "decl": [ + "GIT_PACKBUILDER_ADDING_OBJECTS", + "GIT_PACKBUILDER_DELTAFICATION" + ], + "type": "enum", + "file": "git2/pack.h", + "line": 52, + "lineto": 55, + "block": "GIT_PACKBUILDER_ADDING_OBJECTS\nGIT_PACKBUILDER_DELTAFICATION", + "tdef": "typedef", + "description": " Stages that are reported by the packbuilder progress callback.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_PACKBUILDER_ADDING_OBJECTS", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_PACKBUILDER_DELTAFICATION", + "comments": "", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_patch", + { + "decl": "git_patch", + "type": "struct", + "value": "git_patch", + "file": "git2/patch.h", + "line": 29, + "lineto": 29, + "tdef": "typedef", + "description": " The diff patch is used to store all the text diffs for a delta.", + "comments": "

You can easily loop over the content of patches and get information about them.

\n", + "used": { + "returns": [], + "needs": [ + "git_patch_free", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs", + "git_patch_from_buffers", + "git_patch_from_diff", + "git_patch_get_delta", + "git_patch_get_hunk", + "git_patch_get_line_in_hunk", + "git_patch_line_stats", + "git_patch_num_hunks", + "git_patch_num_lines_in_hunk", + "git_patch_owner", + "git_patch_print", + "git_patch_size", + "git_patch_to_buf" + ] + } + } + ], + [ + "git_path_fs", + { + "decl": [ + "GIT_PATH_FS_GENERIC", + "GIT_PATH_FS_NTFS", + "GIT_PATH_FS_HFS" + ], + "type": "enum", + "file": "git2/sys/path.h", + "line": 34, + "lineto": 41, + "block": "GIT_PATH_FS_GENERIC\nGIT_PATH_FS_NTFS\nGIT_PATH_FS_HFS", + "tdef": "typedef", + "description": " The kinds of checks to perform according to which filesystem we are trying to\n protect.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_PATH_FS_GENERIC", + "comments": "

Do both NTFS- and HFS-specific checks

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_PATH_FS_NTFS", + "comments": "

Do NTFS-specific checks only

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_PATH_FS_HFS", + "comments": "

Do HFS-specific checks only

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_pathspec", + { + "decl": "git_pathspec", + "type": "struct", + "value": "git_pathspec", + "file": "git2/pathspec.h", + "line": 20, + "lineto": 20, + "tdef": "typedef", + "description": " Compiled pathspec", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_pathspec_free", + "git_pathspec_match_diff", + "git_pathspec_match_index", + "git_pathspec_match_list_diff_entry", + "git_pathspec_match_list_entry", + "git_pathspec_match_list_entrycount", + "git_pathspec_match_list_failed_entry", + "git_pathspec_match_list_failed_entrycount", + "git_pathspec_match_list_free", + "git_pathspec_match_tree", + "git_pathspec_match_workdir", + "git_pathspec_matches_path", + "git_pathspec_new" + ] + } + } + ], + [ + "git_pathspec_flag_t", + { + "decl": [ + "GIT_PATHSPEC_DEFAULT", + "GIT_PATHSPEC_IGNORE_CASE", + "GIT_PATHSPEC_USE_CASE", + "GIT_PATHSPEC_NO_GLOB", + "GIT_PATHSPEC_NO_MATCH_ERROR", + "GIT_PATHSPEC_FIND_FAILURES", + "GIT_PATHSPEC_FAILURES_ONLY" + ], + "type": "enum", + "file": "git2/pathspec.h", + "line": 30, + "lineto": 73, + "block": "GIT_PATHSPEC_DEFAULT\nGIT_PATHSPEC_IGNORE_CASE\nGIT_PATHSPEC_USE_CASE\nGIT_PATHSPEC_NO_GLOB\nGIT_PATHSPEC_NO_MATCH_ERROR\nGIT_PATHSPEC_FIND_FAILURES\nGIT_PATHSPEC_FAILURES_ONLY", + "tdef": "typedef", + "description": " Options controlling how pathspec match should be executed", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_PATHSPEC_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_IGNORE_CASE", + "comments": "

GIT_PATHSPEC_IGNORE_CASE forces match to ignore case; otherwise\n match will use native case sensitivity of platform filesystem

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_USE_CASE", + "comments": "

GIT_PATHSPEC_USE_CASE forces case sensitive match; otherwise\n match will use native case sensitivity of platform filesystem

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_NO_GLOB", + "comments": "

GIT_PATHSPEC_NO_GLOB disables glob patterns and just uses simple\n string comparison for matching

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_NO_MATCH_ERROR", + "comments": "

GIT_PATHSPEC_NO_MATCH_ERROR means the match functions return error\n code GIT_ENOTFOUND if no matches are found; otherwise no matches is\n still success (return 0) but git_pathspec_match_list_entrycount\n will indicate 0 matches.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_FIND_FAILURES", + "comments": "

GIT_PATHSPEC_FIND_FAILURES means that the git_pathspec_match_list\n should track which patterns matched which files so that at the end of\n the match we can identify patterns that did not match any files.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_FAILURES_ONLY", + "comments": "

GIT_PATHSPEC_FAILURES_ONLY means that the git_pathspec_match_list\n does not need to keep the actual matching filenames. Use this to\n just test if there were any matches at all or in combination with\n GIT_PATHSPEC_FIND_FAILURES to validate a pathspec.

\n", + "value": 32 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_pathspec_match_list", + { + "decl": "git_pathspec_match_list", + "type": "struct", + "value": "git_pathspec_match_list", + "file": "git2/pathspec.h", + "line": 25, + "lineto": 25, + "tdef": "typedef", + "description": " List of filenames matching a pathspec", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_pathspec_match_diff", + "git_pathspec_match_index", + "git_pathspec_match_list_diff_entry", + "git_pathspec_match_list_entry", + "git_pathspec_match_list_entrycount", + "git_pathspec_match_list_failed_entry", + "git_pathspec_match_list_failed_entrycount", + "git_pathspec_match_list_free", + "git_pathspec_match_tree", + "git_pathspec_match_workdir" + ] + } + } + ], + [ + "git_proxy_options", + { + "decl": [ + "unsigned int version", + "git_proxy_t type", + "const char * url", + "git_credential_acquire_cb credentials", + "git_transport_certificate_check_cb certificate_check", + "void * payload" + ], + "type": "struct", + "value": "git_proxy_options", + "file": "git2/proxy.h", + "line": 44, + "lineto": 79, + "block": "unsigned int version\ngit_proxy_t type\nconst char * url\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\nvoid * payload", + "tdef": "typedef", + "description": " Options for connecting through a proxy", + "comments": "

Note that not all types may be supported, depending on the platform and compilation options.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "git_proxy_t", + "name": "type", + "comments": " The type of proxy to use, by URL, auto-detect." + }, + { + "type": "const char *", + "name": "url", + "comments": " The URL of the proxy." + }, + { + "type": "git_credential_acquire_cb", + "name": "credentials", + "comments": " This will be called if the remote host requires\n authentication in order to connect to it.\n\n Returning GIT_PASSTHROUGH will make libgit2 behave as\n though this field isn't set." + }, + { + "type": "git_transport_certificate_check_cb", + "name": "certificate_check", + "comments": " If cert verification fails, this will be called to let the\n user make the final decision of whether to allow the\n connection to proceed. Returns 0 to allow the connection\n or a negative value to indicate an error." + }, + { + "type": "void *", + "name": "payload", + "comments": " Payload to be provided to the credentials and certificate\n check callbacks." + } + ], + "used": { + "returns": [], + "needs": [ + "git_proxy_options_init", + "git_remote_connect" + ] + } + } + ], + [ + "git_proxy_t", + { + "decl": [ + "GIT_PROXY_NONE", + "GIT_PROXY_AUTO", + "GIT_PROXY_SPECIFIED" + ], + "type": "enum", + "file": "git2/proxy.h", + "line": 20, + "lineto": 36, + "block": "GIT_PROXY_NONE\nGIT_PROXY_AUTO\nGIT_PROXY_SPECIFIED", + "tdef": "typedef", + "description": " The type of proxy to use.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_PROXY_NONE", + "comments": "

Do not attempt to connect through a proxy

\n\n

If built against libcurl, it itself may attempt to connect\n to a proxy if the environment variables specify it.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_PROXY_AUTO", + "comments": "

Try to auto-detect the proxy from the git configuration.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_PROXY_SPECIFIED", + "comments": "

Connect via the URL given in the options

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_push", + { + "decl": "git_push", + "type": "struct", + "value": "git_push", + "file": "git2/types.h", + "line": 253, + "lineto": 253, + "tdef": "typedef", + "description": " Preparation for a push operation. Can be used to configure what to\n push and the level of parallelism of the packfile builder.", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_push_negotiation", + "git_push_options_init", + "git_remote_push", + "git_remote_upload" + ] + } + } + ], + [ + "git_push_options", + { + "decl": [ + "unsigned int version", + "unsigned int pb_parallelism", + "git_remote_callbacks callbacks", + "git_proxy_options proxy_opts", + "git_remote_redirect_t follow_redirects", + "git_strarray custom_headers" + ], + "type": "struct", + "value": "git_push_options", + "file": "git2/remote.h", + "line": 799, + "lineto": 833, + "block": "unsigned int version\nunsigned int pb_parallelism\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", + "tdef": "typedef", + "description": " Controls the behavior of a git_push object.", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "unsigned int", + "name": "pb_parallelism", + "comments": " If the transport being used to push to the remote requires the creation\n of a pack file, this controls the number of worker threads used by\n the packbuilder when creating that pack file to be sent to the remote.\n\n If set to 0, the packbuilder will auto-detect the number of threads\n to create. The default value is 1." + }, + { + "type": "git_remote_callbacks", + "name": "callbacks", + "comments": " Callbacks to use for this push operation" + }, + { + "type": "git_proxy_options", + "name": "proxy_opts", + "comments": " Proxy options to use, by default no proxy is used." + }, + { + "type": "git_remote_redirect_t", + "name": "follow_redirects", + "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." + }, + { + "type": "git_strarray", + "name": "custom_headers", + "comments": " Extra headers for this push operation" + } + ], + "used": { + "returns": [], + "needs": [ + "git_push_options_init", + "git_remote_push", + "git_remote_upload" + ] + } + } + ], + [ + "git_push_update", + { + "decl": [ + "char * src_refname", + "char * dst_refname", + "git_oid src", + "git_oid dst" + ], + "type": "struct", + "value": "git_push_update", + "file": "git2/remote.h", + "line": 468, + "lineto": 485, + "block": "char * src_refname\nchar * dst_refname\ngit_oid src\ngit_oid dst", + "tdef": "typedef", + "description": " Represents an update which will be performed on the remote during push", + "comments": "", + "fields": [ + { + "type": "char *", + "name": "src_refname", + "comments": " The source name of the reference" + }, + { + "type": "char *", + "name": "dst_refname", + "comments": " The name of the reference to update on the server" + }, + { + "type": "git_oid", + "name": "src", + "comments": " The current target of the reference" + }, + { + "type": "git_oid", + "name": "dst", + "comments": " The new target for the reference" + } + ], + "used": { + "returns": [], + "needs": [ + "git_push_negotiation" + ] + } + } + ], + [ + "git_rebase", + { + "decl": "git_rebase", + "type": "struct", + "value": "git_rebase", + "file": "git2/types.h", + "line": 204, + "lineto": 204, + "tdef": "typedef", + "description": " Representation of a rebase ", + "comments": "", + "used": { + "returns": [ + "git_rebase_operation_byindex" + ], + "needs": [ + "git_rebase_abort", + "git_rebase_commit", + "git_rebase_finish", + "git_rebase_free", + "git_rebase_init", + "git_rebase_inmemory_index", + "git_rebase_next", + "git_rebase_onto_id", + "git_rebase_onto_name", + "git_rebase_open", + "git_rebase_operation_byindex", + "git_rebase_operation_current", + "git_rebase_operation_entrycount", + "git_rebase_options_init", + "git_rebase_orig_head_id", + "git_rebase_orig_head_name" + ] + } + } + ], + [ + "git_rebase_operation", + { + "decl": [ + "git_rebase_operation_t type", + "const git_oid id", + "const char * exec" + ], + "type": "struct", + "value": "git_rebase_operation", + "file": "git2/rebase.h", + "line": 172, + "lineto": 187, + "block": "git_rebase_operation_t type\nconst git_oid id\nconst char * exec", + "tdef": "typedef", + "description": " A rebase operation", + "comments": "

Describes a single instruction/operation to be performed during the rebase.

\n", + "fields": [ + { + "type": "git_rebase_operation_t", + "name": "type", + "comments": " The type of rebase operation. " + }, + { + "type": "const git_oid", + "name": "id", + "comments": " The commit ID being cherry-picked. This will be populated for\n all operations except those of type `GIT_REBASE_OPERATION_EXEC`." + }, + { + "type": "const char *", + "name": "exec", + "comments": " The executable the user has requested be run. This will only\n be populated for operations of type `GIT_REBASE_OPERATION_EXEC`." + } + ], + "used": { + "returns": [ + "git_rebase_operation_byindex" + ], + "needs": [ + "git_rebase_next" + ] + } + } + ], + [ + "git_rebase_operation_t", + { + "decl": [ + "GIT_REBASE_OPERATION_PICK", + "GIT_REBASE_OPERATION_REWORD", + "GIT_REBASE_OPERATION_EDIT", + "GIT_REBASE_OPERATION_SQUASH", + "GIT_REBASE_OPERATION_FIXUP", + "GIT_REBASE_OPERATION_EXEC" + ], + "type": "enum", + "file": "git2/rebase.h", + "line": 120, + "lineto": 156, + "block": "GIT_REBASE_OPERATION_PICK\nGIT_REBASE_OPERATION_REWORD\nGIT_REBASE_OPERATION_EDIT\nGIT_REBASE_OPERATION_SQUASH\nGIT_REBASE_OPERATION_FIXUP\nGIT_REBASE_OPERATION_EXEC", + "tdef": "typedef", + "description": " Type of rebase operation in-progress after calling `git_rebase_next`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REBASE_OPERATION_PICK", + "comments": "

The given commit is to be cherry-picked. The client should commit\n the changes and continue if there are no conflicts.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_REWORD", + "comments": "

The given commit is to be cherry-picked, but the client should prompt\n the user to provide an updated commit message.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_EDIT", + "comments": "

The given commit is to be cherry-picked, but the client should stop\n to allow the user to edit the changes before committing them.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_SQUASH", + "comments": "

The given commit is to be squashed into the previous commit. The\n commit message will be merged with the previous message.

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_FIXUP", + "comments": "

The given commit is to be squashed into the previous commit. The\n commit message from this commit will be discarded.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_EXEC", + "comments": "

No commit will be cherry-picked. The client should run the given\n command and (if successful) continue.

\n", + "value": 5 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_rebase_options", + { + "decl": [ + "unsigned int version", + "int quiet", + "int inmemory", + "const char * rewrite_notes_ref", + "git_merge_options merge_options", + "git_checkout_options checkout_options", + "git_commit_create_cb commit_create_cb", + "int (*)(git_buf *, git_buf *, const char *, void *) signing_cb", + "void * payload" + ], + "type": "struct", + "value": "git_rebase_options", + "file": "git2/rebase.h", + "line": 32, + "lineto": 115, + "block": "unsigned int version\nint quiet\nint inmemory\nconst char * rewrite_notes_ref\ngit_merge_options merge_options\ngit_checkout_options checkout_options\ngit_commit_create_cb commit_create_cb\nint (*)(git_buf *, git_buf *, const char *, void *) signing_cb\nvoid * payload", + "tdef": "typedef", + "description": " Rebase options", + "comments": "

Use to tell the rebase machinery how to operate.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "int", + "name": "quiet", + "comments": " Used by `git_rebase_init`, this will instruct other clients working\n on this rebase that you want a quiet rebase experience, which they\n may choose to provide in an application-specific manner. This has no\n effect upon libgit2 directly, but is provided for interoperability\n between Git tools." + }, + { + "type": "int", + "name": "inmemory", + "comments": " Used by `git_rebase_init`, this will begin an in-memory rebase,\n which will allow callers to step through the rebase operations and\n commit the rebased changes, but will not rewind HEAD or update the\n repository to be in a rebasing state. This will not interfere with\n the working directory (if there is one)." + }, + { + "type": "const char *", + "name": "rewrite_notes_ref", + "comments": " Used by `git_rebase_finish`, this is the name of the notes reference\n used to rewrite notes for rebased commits when finishing the rebase;\n if NULL, the contents of the configuration option `notes.rewriteRef`\n is examined, unless the configuration option `notes.rewrite.rebase`\n is set to false. If `notes.rewriteRef` is also NULL, notes will\n not be rewritten." + }, + { + "type": "git_merge_options", + "name": "merge_options", + "comments": " Options to control how trees are merged during `git_rebase_next`." + }, + { + "type": "git_checkout_options", + "name": "checkout_options", + "comments": " Options to control how files are written during `git_rebase_init`,\n `git_rebase_next` and `git_rebase_abort`. Note that a minimum\n strategy of `GIT_CHECKOUT_SAFE` is defaulted in `init` and `next`,\n and a minimum strategy of `GIT_CHECKOUT_FORCE` is defaulted in\n `abort` to match git semantics." + }, + { + "type": "git_commit_create_cb", + "name": "commit_create_cb", + "comments": " Optional callback that allows users to override commit\n creation in `git_rebase_commit`. If specified, users can\n create their own commit and provide the commit ID, which\n may be useful for signing commits or otherwise customizing\n the commit creation.\n\n If this callback returns `GIT_PASSTHROUGH`, then\n `git_rebase_commit` will continue to create the commit." + }, + { + "type": "int (*)(git_buf *, git_buf *, const char *, void *)", + "name": "signing_cb", + "comments": " If provided, this will be called with the commit content, allowing\n a signature to be added to the rebase commit. Can be skipped with\n GIT_PASSTHROUGH. If GIT_PASSTHROUGH is returned, a commit will be made\n without a signature.\n\n This field is only used when performing git_rebase_commit.\n\n This callback is not invoked if a `git_commit_create_cb` is\n specified.\n\n This callback is deprecated; users should provide a\n creation callback as `commit_create_cb` that produces a\n commit buffer, signs it, and commits it." + }, + { + "type": "void *", + "name": "payload", + "comments": " This will be passed to each of the callbacks in this struct\n as the last parameter." + } + ], + "used": { + "returns": [], + "needs": [ + "git_rebase_init", + "git_rebase_open", + "git_rebase_options_init" + ] + } + } + ], + [ + "git_refdb", + { + "decl": "git_refdb", + "type": "struct", + "value": "git_refdb", + "file": "git2/types.h", + "line": 103, + "lineto": 103, + "tdef": "typedef", + "description": " An open refs database handle. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_refdb_compress", + "git_refdb_free", + "git_refdb_new", + "git_refdb_open", + "git_repository_refdb" + ] + } + } + ], + [ + "git_refdb_backend", + { + "decl": "git_refdb_backend", + "type": "struct", + "value": "git_refdb_backend", + "file": "git2/types.h", + "line": 106, + "lineto": 106, + "tdef": "typedef", + "description": " A custom backend for refs ", + "comments": "", + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_reference", + { + "decl": "git_reference", + "type": "struct", + "value": "git_reference", + "file": "git2/types.h", + "line": 189, + "lineto": 189, + "tdef": "typedef", + "description": " In-memory representation of a reference. ", + "comments": "", + "used": { + "returns": [ + "git_reference_type" + ], + "needs": [ + "git_annotated_commit_from_ref", + "git_branch_create", + "git_branch_create_from_annotated", + "git_branch_delete", + "git_branch_is_checked_out", + "git_branch_is_head", + "git_branch_lookup", + "git_branch_move", + "git_branch_name", + "git_branch_next", + "git_branch_set_upstream", + "git_branch_upstream", + "git_merge_analysis_for_ref", + "git_reference_cmp", + "git_reference_create", + "git_reference_create_matching", + "git_reference_delete", + "git_reference_dup", + "git_reference_dwim", + "git_reference_foreach", + "git_reference_foreach_cb", + "git_reference_foreach_glob", + "git_reference_foreach_name", + "git_reference_free", + "git_reference_is_branch", + "git_reference_is_note", + "git_reference_is_remote", + "git_reference_is_tag", + "git_reference_iterator_free", + "git_reference_iterator_glob_new", + "git_reference_iterator_new", + "git_reference_lookup", + "git_reference_name", + "git_reference_next", + "git_reference_next_name", + "git_reference_owner", + "git_reference_peel", + "git_reference_rename", + "git_reference_resolve", + "git_reference_set_target", + "git_reference_shorthand", + "git_reference_symbolic_create", + "git_reference_symbolic_create_matching", + "git_reference_symbolic_set_target", + "git_reference_symbolic_target", + "git_reference_target", + "git_reference_target_peel", + "git_reference_type", + "git_repository_head", + "git_repository_head_for_worktree", + "git_revparse_ext" + ] + } + } + ], + [ + "git_reference_format_t", + { + "decl": [ + "GIT_REFERENCE_FORMAT_NORMAL", + "GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL", + "GIT_REFERENCE_FORMAT_REFSPEC_PATTERN", + "GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND" + ], + "type": "enum", + "file": "git2/refs.h", + "line": 661, + "lineto": 690, + "block": "GIT_REFERENCE_FORMAT_NORMAL\nGIT_REFERENCE_FORMAT_ALLOW_ONELEVEL\nGIT_REFERENCE_FORMAT_REFSPEC_PATTERN\nGIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", + "tdef": "typedef", + "description": " Normalization options for reference lookup", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REFERENCE_FORMAT_NORMAL", + "comments": "

No particular normalization.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL", + "comments": "

Control whether one-level refnames are accepted\n (i.e., refnames that do not contain multiple /-separated\n components). Those are expected to be written only using\n uppercase letters and underscore (FETCH_HEAD, ...)

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REFERENCE_FORMAT_REFSPEC_PATTERN", + "comments": "

Interpret the provided name as a reference pattern for a\n refspec (as used with remote repositories). If this option\n is enabled, the name is allowed to contain a single * (\n<star

\n\n
\n

)\n in place of a one full pathname component\n (e.g., foo/\n<star\n/bar but not foo/bar\n<star\n).

\n
\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", + "comments": "

Interpret the name as part of a refspec in shorthand form\n so the ONELEVEL naming rules aren't enforced and 'master'\n becomes a valid name.

\n", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_reference_iterator", + { + "decl": "git_reference_iterator", + "type": "struct", + "value": "git_reference_iterator", + "file": "git2/types.h", + "line": 192, + "lineto": 192, + "tdef": "typedef", + "description": " Iterator for references ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_reference_iterator_free", + "git_reference_iterator_glob_new", + "git_reference_iterator_new", + "git_reference_next", + "git_reference_next_name" + ] + } + } + ], + [ + "git_reference_t", + { + "decl": [ + "GIT_REFERENCE_INVALID", + "GIT_REFERENCE_DIRECT", + "GIT_REFERENCE_SYMBOLIC", + "GIT_REFERENCE_ALL" + ], + "type": "enum", + "file": "git2/types.h", + "line": 207, + "lineto": 212, + "block": "GIT_REFERENCE_INVALID\nGIT_REFERENCE_DIRECT\nGIT_REFERENCE_SYMBOLIC\nGIT_REFERENCE_ALL", + "tdef": "typedef", + "description": " Basic type of any Git reference. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REFERENCE_INVALID", + "comments": "

Invalid reference

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REFERENCE_DIRECT", + "comments": "

A reference that points at an object id

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REFERENCE_SYMBOLIC", + "comments": "

A reference that points at another reference

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REFERENCE_ALL", + "comments": "", + "value": 3 + } + ], + "used": { + "returns": [ + "git_reference_type" + ], + "needs": [] + } + } + ], + [ + "git_reflog", + { + "decl": "git_reflog", + "type": "struct", + "value": "git_reflog", + "file": "git2/types.h", + "line": 166, + "lineto": 166, + "tdef": "typedef", + "description": " Representation of a reference log ", + "comments": "", + "used": { + "returns": [ + "git_reflog_entry_byindex" + ], + "needs": [ + "git_reflog_append", + "git_reflog_drop", + "git_reflog_entry_byindex", + "git_reflog_entry_committer", + "git_reflog_entry_id_new", + "git_reflog_entry_id_old", + "git_reflog_entry_message", + "git_reflog_entrycount", + "git_reflog_free", + "git_reflog_read", + "git_reflog_write", + "git_transaction_set_reflog" + ] + } + } + ], + [ + "git_reflog_entry", + { + "decl": "git_reflog_entry", + "type": "struct", + "value": "git_reflog_entry", + "file": "git2/types.h", + "line": 163, + "lineto": 163, + "tdef": "typedef", + "description": " Representation of a reference log entry ", + "comments": "", + "used": { + "returns": [ + "git_reflog_entry_byindex" + ], + "needs": [ + "git_reflog_entry_committer", + "git_reflog_entry_id_new", + "git_reflog_entry_id_old", + "git_reflog_entry_message" + ] + } + } + ], + [ + "git_refspec", + { + "decl": "git_refspec", + "type": "struct", + "value": "git_refspec", + "file": "git2/types.h", + "line": 235, + "lineto": 235, + "tdef": "typedef", + "description": " A refspec specifies the mapping between remote and local reference\n names when fetch or pushing.", + "comments": "", + "used": { + "returns": [ + "git_remote_get_refspec" + ], + "needs": [ + "git_refspec_direction", + "git_refspec_dst", + "git_refspec_dst_matches", + "git_refspec_force", + "git_refspec_free", + "git_refspec_parse", + "git_refspec_rtransform", + "git_refspec_src", + "git_refspec_src_matches", + "git_refspec_string", + "git_refspec_transform" + ] + } + } + ], + [ + "git_remote", + { + "decl": "git_remote", + "type": "struct", + "value": "git_remote", + "file": "git2/types.h", + "line": 241, + "lineto": 241, + "tdef": "typedef", + "description": " Git's idea of a remote repository. A remote can be anonymous (in\n which case it does not have backing configuration entries).", + "comments": "", + "used": { + "returns": [ + "git_remote_autotag" + ], + "needs": [ + "git_headlist_cb", + "git_remote_autotag", + "git_remote_connect", + "git_remote_connect_ext", + "git_remote_connect_options_init", + "git_remote_connected", + "git_remote_create", + "git_remote_create_anonymous", + "git_remote_create_cb", + "git_remote_create_detached", + "git_remote_create_options_init", + "git_remote_create_with_fetchspec", + "git_remote_create_with_opts", + "git_remote_default_branch", + "git_remote_disconnect", + "git_remote_download", + "git_remote_dup", + "git_remote_fetch", + "git_remote_free", + "git_remote_get_fetch_refspecs", + "git_remote_get_push_refspecs", + "git_remote_get_refspec", + "git_remote_init_callbacks", + "git_remote_lookup", + "git_remote_ls", + "git_remote_name", + "git_remote_owner", + "git_remote_prune", + "git_remote_prune_refs", + "git_remote_push", + "git_remote_pushurl", + "git_remote_ready_cb", + "git_remote_refspec_count", + "git_remote_set_autotag", + "git_remote_set_instance_pushurl", + "git_remote_set_instance_url", + "git_remote_stats", + "git_remote_stop", + "git_remote_update_tips", + "git_remote_upload", + "git_remote_url", + "git_transport_cb" + ] + } + } + ], + [ + "git_remote_autotag_option_t", + { + "decl": [ + "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED", + "GIT_REMOTE_DOWNLOAD_TAGS_AUTO", + "GIT_REMOTE_DOWNLOAD_TAGS_NONE", + "GIT_REMOTE_DOWNLOAD_TAGS_ALL" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 685, + "lineto": 703, + "block": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED\nGIT_REMOTE_DOWNLOAD_TAGS_AUTO\nGIT_REMOTE_DOWNLOAD_TAGS_NONE\nGIT_REMOTE_DOWNLOAD_TAGS_ALL", + "tdef": "typedef", + "description": " Automatic tag following option", + "comments": "

Lets us select the --tags option to use.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED", + "comments": "

Use the setting from the configuration.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REMOTE_DOWNLOAD_TAGS_AUTO", + "comments": "

Ask the server for tags pointing to objects we're already\n downloading.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_DOWNLOAD_TAGS_NONE", + "comments": "

Don't ask for any tags beyond the refspecs.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REMOTE_DOWNLOAD_TAGS_ALL", + "comments": "

Ask for the all the tags.

\n", + "value": 3 + } + ], + "used": { + "returns": [ + "git_remote_autotag" + ], + "needs": [ + "git_remote_set_autotag", + "git_remote_update_tips" + ] + } + } + ], + [ + "git_remote_callbacks", + { + "decl": [ + "unsigned int version", + "git_transport_message_cb sideband_progress", + "int (*)(git_remote_completion_t, void *) completion", + "git_credential_acquire_cb credentials", + "git_transport_certificate_check_cb certificate_check", + "git_indexer_progress_cb transfer_progress", + "int (*)(const char *, const git_oid *, const git_oid *, void *) update_tips", + "git_packbuilder_progress pack_progress", + "git_push_transfer_progress_cb push_transfer_progress", + "git_push_update_reference_cb push_update_reference", + "git_push_negotiation push_negotiation", + "git_transport_cb transport", + "git_remote_ready_cb remote_ready", + "void * payload", + "git_url_resolve_cb resolve_url" + ], + "type": "struct", + "value": "git_remote_callbacks", + "file": "git2/remote.h", + "line": 546, + "lineto": 647, + "block": "unsigned int version\ngit_transport_message_cb sideband_progress\nint (*)(git_remote_completion_t, void *) completion\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\ngit_indexer_progress_cb transfer_progress\nint (*)(const char *, const git_oid *, const git_oid *, void *) update_tips\ngit_packbuilder_progress pack_progress\ngit_push_transfer_progress_cb push_transfer_progress\ngit_push_update_reference_cb push_update_reference\ngit_push_negotiation push_negotiation\ngit_transport_cb transport\ngit_remote_ready_cb remote_ready\nvoid * payload\ngit_url_resolve_cb resolve_url", + "tdef": null, + "description": " The callback settings structure", + "comments": "

Set the callbacks to be called by the remote when informing the user about the progress of the network operations.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " The version " + }, + { + "type": "git_transport_message_cb", + "name": "sideband_progress", + "comments": " Textual progress from the remote. Text send over the\n progress side-band will be passed to this function (this is\n the 'counting objects' output)." + }, + { + "type": "int (*)(git_remote_completion_t, void *)", + "name": "completion", + "comments": "" + }, + { + "type": "git_credential_acquire_cb", + "name": "credentials", + "comments": " This will be called if the remote host requires\n authentication in order to connect to it.\n\n Returning GIT_PASSTHROUGH will make libgit2 behave as\n though this field isn't set." + }, + { + "type": "git_transport_certificate_check_cb", + "name": "certificate_check", + "comments": " If cert verification fails, this will be called to let the\n user make the final decision of whether to allow the\n connection to proceed. Returns 0 to allow the connection\n or a negative value to indicate an error." + }, + { + "type": "git_indexer_progress_cb", + "name": "transfer_progress", + "comments": " During the download of new data, this will be regularly\n called with the current count of progress done by the\n indexer." + }, + { + "type": "int (*)(const char *, const git_oid *, const git_oid *, void *)", + "name": "update_tips", + "comments": "" + }, + { + "type": "git_packbuilder_progress", + "name": "pack_progress", + "comments": " Function to call with progress information during pack\n building. Be aware that this is called inline with pack\n building operations, so performance may be affected." + }, + { + "type": "git_push_transfer_progress_cb", + "name": "push_transfer_progress", + "comments": " Function to call with progress information during the\n upload portion of a push. Be aware that this is called\n inline with pack building operations, so performance may be\n affected." + }, + { + "type": "git_push_update_reference_cb", + "name": "push_update_reference", + "comments": " See documentation of git_push_update_reference_cb" + }, + { + "type": "git_push_negotiation", + "name": "push_negotiation", + "comments": " Called once between the negotiation step and the upload. It\n provides information about what updates will be performed." + }, + { + "type": "git_transport_cb", + "name": "transport", + "comments": " Create the transport to use for this operation. Leave NULL\n to auto-detect." + }, + { + "type": "git_remote_ready_cb", + "name": "remote_ready", + "comments": " Callback when the remote is ready to connect." + }, + { + "type": "void *", + "name": "payload", + "comments": " This will be passed to each of the callbacks in this struct\n as the last parameter." + }, + { + "type": "git_url_resolve_cb", + "name": "resolve_url", + "comments": " Resolve URL before connecting to remote.\n The returned URL will be used to connect to the remote instead.\n\n This callback is deprecated; users should use\n git_remote_ready_cb and configure the instance URL instead." + } + ], + "used": { + "returns": [], + "needs": [ + "git_remote_connect", + "git_remote_init_callbacks", + "git_remote_prune", + "git_remote_update_tips" + ] + } + } + ], + [ + "git_remote_completion_t", + { + "decl": [ + "GIT_REMOTE_COMPLETION_DOWNLOAD", + "GIT_REMOTE_COMPLETION_INDEXING", + "GIT_REMOTE_COMPLETION_ERROR" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 452, + "lineto": 456, + "block": "GIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR\nGIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR", + "tdef": "typedef", + "description": " Argument to the completion callback which tells it which operation\n finished.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_COMPLETION_DOWNLOAD", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REMOTE_COMPLETION_INDEXING", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_COMPLETION_ERROR", + "comments": "", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_remote_connect_options", + { + "decl": [ + "unsigned int version", + "git_remote_callbacks callbacks", + "git_proxy_options proxy_opts", + "git_remote_redirect_t follow_redirects", + "git_strarray custom_headers" + ], + "type": "struct", + "value": "git_remote_connect_options", + "file": "git2/remote.h", + "line": 859, + "lineto": 877, + "block": "unsigned int version\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", + "tdef": "typedef", + "description": " Remote creation options structure", + "comments": "

Initialize with GIT_REMOTE_CREATE_OPTIONS_INIT. Alternatively, you can use git_remote_create_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "git_remote_callbacks", + "name": "callbacks", + "comments": " Callbacks to use for this connection " + }, + { + "type": "git_proxy_options", + "name": "proxy_opts", + "comments": " HTTP Proxy settings " + }, + { + "type": "git_remote_redirect_t", + "name": "follow_redirects", + "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." + }, + { + "type": "git_strarray", + "name": "custom_headers", + "comments": " Extra HTTP headers to use in this connection " + } + ], + "used": { + "returns": [], + "needs": [ + "git_remote_connect_ext", + "git_remote_connect_options_init" + ] + } + } + ], + [ + "git_remote_create_flags", + { + "decl": [ + "GIT_REMOTE_CREATE_SKIP_INSTEADOF", + "GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 71, + "lineto": 77, + "block": "GIT_REMOTE_CREATE_SKIP_INSTEADOF\nGIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC", + "tdef": "typedef", + "description": " Remote creation options flags", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_CREATE_SKIP_INSTEADOF", + "comments": "

Ignore the repository apply.insteadOf configuration

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC", + "comments": "

Don't build a fetchspec from the name if none is set

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_remote_create_options", + { + "decl": [ + "unsigned int version", + "git_repository * repository", + "const char * name", + "const char * fetchspec", + "unsigned int flags" + ], + "type": "struct", + "value": "git_remote_create_options", + "file": "git2/remote.h", + "line": 86, + "lineto": 106, + "block": "unsigned int version\ngit_repository * repository\nconst char * name\nconst char * fetchspec\nunsigned int flags", + "tdef": "typedef", + "description": " Remote creation options structure", + "comments": "

Initialize with GIT_REMOTE_CREATE_OPTIONS_INIT. Alternatively, you can use git_remote_create_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "git_repository *", + "name": "repository", + "comments": " The repository that should own the remote.\n Setting this to NULL results in a detached remote." + }, + { + "type": "const char *", + "name": "name", + "comments": " The remote's name.\n Setting this to NULL results in an in-memory/anonymous remote." + }, + { + "type": "const char *", + "name": "fetchspec", + "comments": " The fetchspec the remote should use. " + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " Additional flags for the remote. See git_remote_create_flags. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_remote_create_options_init", + "git_remote_create_with_opts" + ] + } + } + ], + [ + "git_remote_head", + { + "decl": [ + "int local", + "git_oid oid", + "git_oid loid", + "char * name", + "char * symref_target" + ], + "type": "struct", + "value": "git_remote_head", + "file": "git2/net.h", + "line": 40, + "lineto": 50, + "block": "int local\ngit_oid oid\ngit_oid loid\nchar * name\nchar * symref_target", + "tdef": null, + "description": " Description of a reference advertised by a remote server, given out\n on `ls` calls.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "local", + "comments": "" + }, + { + "type": "git_oid", + "name": "oid", + "comments": "" + }, + { + "type": "git_oid", + "name": "loid", + "comments": "" + }, + { + "type": "char *", + "name": "name", + "comments": "" + }, + { + "type": "char *", + "name": "symref_target", + "comments": " If the server send a symref mapping for this ref, this will\n point to the target." + } + ], + "used": { + "returns": [], + "needs": [ + "git_headlist_cb", + "git_remote_ls" + ] + } + } + ], + [ + "git_remote_redirect_t", + { + "decl": [ + "GIT_REMOTE_REDIRECT_NONE", + "GIT_REMOTE_REDIRECT_INITIAL", + "GIT_REMOTE_REDIRECT_ALL" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 49, + "lineto": 66, + "block": "GIT_REMOTE_REDIRECT_NONE\nGIT_REMOTE_REDIRECT_INITIAL\nGIT_REMOTE_REDIRECT_ALL", + "tdef": "typedef", + "description": " Remote redirection settings; whether redirects to another host\n are permitted. By default, git will follow a redirect on the\n initial request (`/info/refs`), but not subsequent requests.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_REDIRECT_NONE", + "comments": "

Do not follow any off-site redirects at any stage of\n the fetch or push.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_REDIRECT_INITIAL", + "comments": "

Allow off-site redirects only upon the initial request.\n This is the default.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REMOTE_REDIRECT_ALL", + "comments": "

Allow redirects at any stage in the fetch or push.

\n", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_repository", + { + "decl": "git_repository", + "type": "struct", + "value": "git_repository", + "file": "git2/types.h", + "line": 118, + "lineto": 118, + "tdef": "typedef", + "description": " Representation of an existing git repository,\n including all its object contents", + "comments": "", + "used": { + "returns": [ + "git_blob_owner", + "git_commit_owner", + "git_index_owner", + "git_object_owner", + "git_patch_owner", + "git_reference_owner", + "git_remote_owner", + "git_revwalk_repository", + "git_submodule_owner", + "git_tag_owner", + "git_tree_owner" + ], + "needs": [ + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_from_ref", + "git_annotated_commit_from_revspec", + "git_annotated_commit_lookup", + "git_apply", + "git_apply_to_tree", + "git_attr_add_macro", + "git_attr_cache_flush", + "git_attr_foreach", + "git_attr_foreach_ext", + "git_attr_get", + "git_attr_get_ext", + "git_attr_get_many", + "git_attr_get_many_ext", + "git_blame_file", + "git_blob_create_from_buffer", + "git_blob_create_from_disk", + "git_blob_create_from_stream", + "git_blob_create_from_workdir", + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_branch_create", + "git_branch_create_from_annotated", + "git_branch_iterator_new", + "git_branch_lookup", + "git_branch_remote_name", + "git_branch_upstream_merge", + "git_branch_upstream_name", + "git_branch_upstream_remote", + "git_checkout_head", + "git_checkout_index", + "git_checkout_tree", + "git_cherrypick", + "git_cherrypick_commit", + "git_clone", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_v", + "git_commit_create_with_signature", + "git_commit_extract_signature", + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_config_add_file_ondisk", + "git_describe_workdir", + "git_diff_commit_as_email", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_filter_list_apply_to_file", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_file", + "git_graph_ahead_behind", + "git_graph_descendant_of", + "git_graph_reachable_from_any", + "git_ignore_add_rule", + "git_ignore_clear_internal_rules", + "git_ignore_path_is_ignored", + "git_index_write_tree_to", + "git_mailmap_from_repository", + "git_merge", + "git_merge_analysis", + "git_merge_analysis_for_ref", + "git_merge_base", + "git_merge_base_many", + "git_merge_base_octopus", + "git_merge_bases", + "git_merge_bases_many", + "git_merge_commits", + "git_merge_file_from_index", + "git_merge_trees", + "git_note_commit_create", + "git_note_commit_read", + "git_note_commit_remove", + "git_note_create", + "git_note_default_ref", + "git_note_foreach", + "git_note_iterator_new", + "git_note_read", + "git_note_remove", + "git_object_lookup", + "git_object_lookup_prefix", + "git_packbuilder_new", + "git_pathspec_match_workdir", + "git_rebase_init", + "git_rebase_open", + "git_refdb_new", + "git_refdb_open", + "git_reference_create", + "git_reference_create_matching", + "git_reference_dwim", + "git_reference_ensure_log", + "git_reference_foreach", + "git_reference_foreach_glob", + "git_reference_foreach_name", + "git_reference_has_log", + "git_reference_iterator_glob_new", + "git_reference_iterator_new", + "git_reference_list", + "git_reference_lookup", + "git_reference_name_to_id", + "git_reference_remove", + "git_reference_symbolic_create", + "git_reference_symbolic_create_matching", + "git_reflog_delete", + "git_reflog_read", + "git_reflog_rename", + "git_remote_add_fetch", + "git_remote_add_push", + "git_remote_create", + "git_remote_create_anonymous", + "git_remote_create_cb", + "git_remote_create_with_fetchspec", + "git_remote_delete", + "git_remote_list", + "git_remote_lookup", + "git_remote_rename", + "git_remote_set_autotag", + "git_remote_set_pushurl", + "git_remote_set_url", + "git_repository_commondir", + "git_repository_config", + "git_repository_config_snapshot", + "git_repository_create_cb", + "git_repository_detach_head", + "git_repository_fetchhead_foreach", + "git_repository_free", + "git_repository_get_namespace", + "git_repository_hashfile", + "git_repository_head", + "git_repository_head_detached", + "git_repository_head_detached_for_worktree", + "git_repository_head_for_worktree", + "git_repository_head_unborn", + "git_repository_ident", + "git_repository_index", + "git_repository_init", + "git_repository_init_ext", + "git_repository_init_options_init", + "git_repository_is_bare", + "git_repository_is_empty", + "git_repository_is_shallow", + "git_repository_is_worktree", + "git_repository_item_path", + "git_repository_mergehead_foreach", + "git_repository_message", + "git_repository_message_remove", + "git_repository_odb", + "git_repository_oid_type", + "git_repository_open", + "git_repository_open_bare", + "git_repository_open_ext", + "git_repository_open_from_worktree", + "git_repository_path", + "git_repository_refdb", + "git_repository_set_head", + "git_repository_set_head_detached", + "git_repository_set_head_detached_from_annotated", + "git_repository_set_ident", + "git_repository_set_namespace", + "git_repository_set_workdir", + "git_repository_state", + "git_repository_state_cleanup", + "git_repository_workdir", + "git_reset", + "git_reset_default", + "git_reset_from_annotated", + "git_revert", + "git_revert_commit", + "git_revparse", + "git_revparse_ext", + "git_revparse_single", + "git_revwalk_new", + "git_signature_default", + "git_stash_apply", + "git_stash_drop", + "git_stash_foreach", + "git_stash_pop", + "git_stash_save", + "git_stash_save_with_opts", + "git_status_file", + "git_status_foreach", + "git_status_foreach_ext", + "git_status_list_new", + "git_status_should_ignore", + "git_submodule_add_setup", + "git_submodule_clone", + "git_submodule_foreach", + "git_submodule_lookup", + "git_submodule_open", + "git_submodule_repo_init", + "git_submodule_resolve_url", + "git_submodule_set_branch", + "git_submodule_set_fetch_recurse_submodules", + "git_submodule_set_ignore", + "git_submodule_set_update", + "git_submodule_set_url", + "git_submodule_status", + "git_tag_annotation_create", + "git_tag_create", + "git_tag_create_from_buffer", + "git_tag_create_lightweight", + "git_tag_delete", + "git_tag_foreach", + "git_tag_list", + "git_tag_list_match", + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_transaction_new", + "git_tree_create_updated", + "git_tree_entry_to_object", + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_treebuilder_new", + "git_worktree_add", + "git_worktree_list", + "git_worktree_lookup", + "git_worktree_open_from_repository" + ] + } + } + ], + [ + "git_repository_init_flag_t", + { + "decl": [ + "GIT_REPOSITORY_INIT_BARE", + "GIT_REPOSITORY_INIT_NO_REINIT", + "GIT_REPOSITORY_INIT_NO_DOTGIT_DIR", + "GIT_REPOSITORY_INIT_MKDIR", + "GIT_REPOSITORY_INIT_MKPATH", + "GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE", + "GIT_REPOSITORY_INIT_RELATIVE_GITLINK" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 235, + "lineto": 281, + "block": "GIT_REPOSITORY_INIT_BARE\nGIT_REPOSITORY_INIT_NO_REINIT\nGIT_REPOSITORY_INIT_NO_DOTGIT_DIR\nGIT_REPOSITORY_INIT_MKDIR\nGIT_REPOSITORY_INIT_MKPATH\nGIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE\nGIT_REPOSITORY_INIT_RELATIVE_GITLINK", + "tdef": "typedef", + "description": " Option flags for `git_repository_init_ext`.", + "comments": "

These flags configure extra behaviors to git_repository_init_ext. In every case, the default behavior is the zero value (i.e. flag is not set). Just OR the flag values together for the flags parameter when initializing a new repo.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_BARE", + "comments": "

Create a bare repository with no working directory.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_NO_REINIT", + "comments": "

Return an GIT_EEXISTS error if the repo_path appears to already be\n an git repository.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_NO_DOTGIT_DIR", + "comments": "

Normally a "/.git/" will be appended to the repo path for\n non-bare repos (if it is not already there), but passing this flag\n prevents that behavior.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_MKDIR", + "comments": "

Make the repo_path (and workdir_path) as needed. Init is always willing\n to create the ".git" directory even without this flag. This flag tells\n init to create the trailing component of the repo and workdir paths\n as needed.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_MKPATH", + "comments": "

Recursively make all components of the repo and workdir paths as\n necessary.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE", + "comments": "

libgit2 normally uses internal templates to initialize a new repo.\n This flags enables external templates, looking the "template_path" from\n the options if set, or the init.templatedir global config if not,\n or falling back on "/usr/share/git-core/templates" if it exists.

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_RELATIVE_GITLINK", + "comments": "

If an alternate workdir is specified, use relative paths for the gitdir\n and core.worktree.

\n", + "value": 64 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_repository_init_mode_t", + { + "decl": [ + "GIT_REPOSITORY_INIT_SHARED_UMASK", + "GIT_REPOSITORY_INIT_SHARED_GROUP", + "GIT_REPOSITORY_INIT_SHARED_ALL" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 290, + "lineto": 306, + "block": "GIT_REPOSITORY_INIT_SHARED_UMASK\nGIT_REPOSITORY_INIT_SHARED_GROUP\nGIT_REPOSITORY_INIT_SHARED_ALL", + "tdef": "typedef", + "description": " Mode options for `git_repository_init_ext`.", + "comments": "

Set the mode field of the git_repository_init_options structure either to the custom mode that you would like, or to one of the defined modes.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_SHARED_UMASK", + "comments": "

Use permissions configured by umask - the default.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_SHARED_GROUP", + "comments": "

Use "--shared=group" behavior, chmod'ing the new repo to be group\n writable and "g+sx" for sticky group assignment.

\n", + "value": 1533 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_SHARED_ALL", + "comments": "

Use "--shared=all" behavior, adding world readability.

\n", + "value": 1535 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_repository_init_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "uint32_t mode", + "const char * workdir_path", + "const char * description", + "const char * template_path", + "const char * initial_head", + "const char * origin_url" + ], + "type": "struct", + "value": "git_repository_init_options", + "file": "git2/repository.h", + "line": 314, + "lineto": 373, + "block": "unsigned int version\nuint32_t flags\nuint32_t mode\nconst char * workdir_path\nconst char * description\nconst char * template_path\nconst char * initial_head\nconst char * origin_url", + "tdef": "typedef", + "description": " Extended options structure for `git_repository_init_ext`.", + "comments": "

This contains extra options for git_repository_init_ext that enable additional initialization features.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " Combination of GIT_REPOSITORY_INIT flags above." + }, + { + "type": "uint32_t", + "name": "mode", + "comments": " Set to one of the standard GIT_REPOSITORY_INIT_SHARED_... constants\n above, or to a custom value that you would like." + }, + { + "type": "const char *", + "name": "workdir_path", + "comments": " The path to the working dir or NULL for default (i.e. repo_path parent\n on non-bare repos). IF THIS IS RELATIVE PATH, IT WILL BE EVALUATED\n RELATIVE TO THE REPO_PATH. If this is not the \"natural\" working\n directory, a .git gitlink file will be created here linking to the\n repo_path." + }, + { + "type": "const char *", + "name": "description", + "comments": " If set, this will be used to initialize the \"description\" file in the\n repository, instead of using the template content." + }, + { + "type": "const char *", + "name": "template_path", + "comments": " When GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE is set, this contains\n the path to use for the template directory. If this is NULL, the config\n or default directory options will be used instead." + }, + { + "type": "const char *", + "name": "initial_head", + "comments": " The name of the head to point HEAD at. If NULL, then this will be\n treated as \"master\" and the HEAD ref will be set to \"refs/heads/master\".\n If this begins with \"refs/\" it will be used verbatim;\n otherwise \"refs/heads/\" will be prefixed." + }, + { + "type": "const char *", + "name": "origin_url", + "comments": " If this is non-NULL, then after the rest of the repository\n initialization is completed, an \"origin\" remote will be added\n pointing to this URL." + } + ], + "used": { + "returns": [], + "needs": [ + "git_repository_init_ext", + "git_repository_init_options_init" + ] + } + } + ], + [ + "git_repository_item_t", + { + "decl": [ + "GIT_REPOSITORY_ITEM_GITDIR", + "GIT_REPOSITORY_ITEM_WORKDIR", + "GIT_REPOSITORY_ITEM_COMMONDIR", + "GIT_REPOSITORY_ITEM_INDEX", + "GIT_REPOSITORY_ITEM_OBJECTS", + "GIT_REPOSITORY_ITEM_REFS", + "GIT_REPOSITORY_ITEM_PACKED_REFS", + "GIT_REPOSITORY_ITEM_REMOTES", + "GIT_REPOSITORY_ITEM_CONFIG", + "GIT_REPOSITORY_ITEM_INFO", + "GIT_REPOSITORY_ITEM_HOOKS", + "GIT_REPOSITORY_ITEM_LOGS", + "GIT_REPOSITORY_ITEM_MODULES", + "GIT_REPOSITORY_ITEM_WORKTREES", + "GIT_REPOSITORY_ITEM__LAST" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 491, + "lineto": 507, + "block": "GIT_REPOSITORY_ITEM_GITDIR\nGIT_REPOSITORY_ITEM_WORKDIR\nGIT_REPOSITORY_ITEM_COMMONDIR\nGIT_REPOSITORY_ITEM_INDEX\nGIT_REPOSITORY_ITEM_OBJECTS\nGIT_REPOSITORY_ITEM_REFS\nGIT_REPOSITORY_ITEM_PACKED_REFS\nGIT_REPOSITORY_ITEM_REMOTES\nGIT_REPOSITORY_ITEM_CONFIG\nGIT_REPOSITORY_ITEM_INFO\nGIT_REPOSITORY_ITEM_HOOKS\nGIT_REPOSITORY_ITEM_LOGS\nGIT_REPOSITORY_ITEM_MODULES\nGIT_REPOSITORY_ITEM_WORKTREES\nGIT_REPOSITORY_ITEM__LAST", + "tdef": "typedef", + "description": " List of items which belong to the git repository layout", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_GITDIR", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_WORKDIR", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_COMMONDIR", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_INDEX", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_OBJECTS", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_REFS", + "comments": "", + "value": 5 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_PACKED_REFS", + "comments": "", + "value": 6 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_REMOTES", + "comments": "", + "value": 7 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_CONFIG", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_INFO", + "comments": "", + "value": 9 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_HOOKS", + "comments": "", + "value": 10 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_LOGS", + "comments": "", + "value": 11 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_MODULES", + "comments": "", + "value": 12 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_WORKTREES", + "comments": "", + "value": 13 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM__LAST", + "comments": "", + "value": 14 + } + ], + "used": { + "returns": [], + "needs": [ + "git_repository_item_path" + ] + } + } + ], + [ + "git_repository_open_flag_t", + { + "decl": [ + "GIT_REPOSITORY_OPEN_NO_SEARCH", + "GIT_REPOSITORY_OPEN_CROSS_FS", + "GIT_REPOSITORY_OPEN_BARE", + "GIT_REPOSITORY_OPEN_NO_DOTGIT", + "GIT_REPOSITORY_OPEN_FROM_ENV" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 108, + "lineto": 155, + "block": "GIT_REPOSITORY_OPEN_NO_SEARCH\nGIT_REPOSITORY_OPEN_CROSS_FS\nGIT_REPOSITORY_OPEN_BARE\nGIT_REPOSITORY_OPEN_NO_DOTGIT\nGIT_REPOSITORY_OPEN_FROM_ENV", + "tdef": "typedef", + "description": " Option flags for `git_repository_open_ext`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_NO_SEARCH", + "comments": "

Only open the repository if it can be immediately found in the\n start_path. Do not walk up from the start_path looking at parent\n directories.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_CROSS_FS", + "comments": "

Unless this flag is set, open will not continue searching across\n filesystem boundaries (i.e. when st_dev changes from the stat\n system call). For example, searching in a user's home directory at\n "/home/user/source/" will not return "/.git/" as the found repo if\n "/" is a different filesystem than "/home".

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_BARE", + "comments": "

Open repository as a bare repo regardless of core.bare config, and\n defer loading config file for faster setup.\n Unlike git_repository_open_bare, this can follow gitlinks.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_NO_DOTGIT", + "comments": "

Do not check for a repository by appending /.git to the start_path;\n only open the repository if start_path itself points to the git\n directory.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_FROM_ENV", + "comments": "

Find and open a git repository, respecting the environment variables\n used by the git command-line tools.\n If set, git_repository_open_ext will ignore the other flags and\n the ceiling_dirs argument, and will allow a NULL path to use\n GIT_DIR or search from the current directory.\n The search for a repository will respect $GIT_CEILING_DIRECTORIES and\n $GIT_DISCOVERY_ACROSS_FILESYSTEM. The opened repository will\n respect $GIT_INDEX_FILE, $GIT_NAMESPACE, $GIT_OBJECT_DIRECTORY, and\n $GIT_ALTERNATE_OBJECT_DIRECTORIES.\n In the future, this flag will also cause git_repository_open_ext\n to respect $GIT_WORK_TREE and $GIT_COMMON_DIR; currently,\n git_repository_open_ext with this flag will error out if either\n $GIT_WORK_TREE or $GIT_COMMON_DIR is set.

\n", + "value": 16 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_repository_state_t", + { + "decl": [ + "GIT_REPOSITORY_STATE_NONE", + "GIT_REPOSITORY_STATE_MERGE", + "GIT_REPOSITORY_STATE_REVERT", + "GIT_REPOSITORY_STATE_REVERT_SEQUENCE", + "GIT_REPOSITORY_STATE_CHERRYPICK", + "GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE", + "GIT_REPOSITORY_STATE_BISECT", + "GIT_REPOSITORY_STATE_REBASE", + "GIT_REPOSITORY_STATE_REBASE_INTERACTIVE", + "GIT_REPOSITORY_STATE_REBASE_MERGE", + "GIT_REPOSITORY_STATE_APPLY_MAILBOX", + "GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 891, + "lineto": 904, + "block": "GIT_REPOSITORY_STATE_NONE\nGIT_REPOSITORY_STATE_MERGE\nGIT_REPOSITORY_STATE_REVERT\nGIT_REPOSITORY_STATE_REVERT_SEQUENCE\nGIT_REPOSITORY_STATE_CHERRYPICK\nGIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE\nGIT_REPOSITORY_STATE_BISECT\nGIT_REPOSITORY_STATE_REBASE\nGIT_REPOSITORY_STATE_REBASE_INTERACTIVE\nGIT_REPOSITORY_STATE_REBASE_MERGE\nGIT_REPOSITORY_STATE_APPLY_MAILBOX\nGIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", + "tdef": "typedef", + "description": " Repository state", + "comments": "

These values represent possible states for the repository to be in, based on the current operation which is ongoing.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_NONE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_MERGE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REVERT", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REVERT_SEQUENCE", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_CHERRYPICK", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE", + "comments": "", + "value": 5 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_BISECT", + "comments": "", + "value": 6 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REBASE", + "comments": "", + "value": 7 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REBASE_INTERACTIVE", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REBASE_MERGE", + "comments": "", + "value": 9 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_APPLY_MAILBOX", + "comments": "", + "value": 10 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", + "comments": "", + "value": 11 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_reset_t", + { + "decl": [ + "GIT_RESET_SOFT", + "GIT_RESET_MIXED", + "GIT_RESET_HARD" + ], + "type": "enum", + "file": "git2/reset.h", + "line": 26, + "lineto": 30, + "block": "GIT_RESET_SOFT\nGIT_RESET_MIXED\nGIT_RESET_HARD", + "tdef": "typedef", + "description": " Kinds of reset operation", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_RESET_SOFT", + "comments": "

Move the head to the given commit

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_RESET_MIXED", + "comments": "

SOFT plus reset index to the commit

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_RESET_HARD", + "comments": "

MIXED plus changes in working tree discarded

\n", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": [ + "git_reset", + "git_reset_from_annotated" + ] + } + } + ], + [ + "git_revert_options", + { + "decl": [ + "unsigned int version", + "unsigned int mainline", + "git_merge_options merge_opts", + "git_checkout_options checkout_opts" + ], + "type": "struct", + "value": "git_revert_options", + "file": "git2/revert.h", + "line": 26, + "lineto": 34, + "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", + "tdef": "typedef", + "description": " Options for revert", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "unsigned int", + "name": "mainline", + "comments": " For merge commits, the \"mainline\" is treated as the parent. " + }, + { + "type": "git_merge_options", + "name": "merge_opts", + "comments": " Options for the merging " + }, + { + "type": "git_checkout_options", + "name": "checkout_opts", + "comments": " Options for the checkout " + } + ], + "used": { + "returns": [], + "needs": [ + "git_revert", + "git_revert_options_init" + ] + } + } + ], + [ + "git_revspec", + { + "decl": [ + "git_object * from", + "git_object * to", + "unsigned int flags" + ], + "type": "struct", + "value": "git_revspec", + "file": "git2/revparse.h", + "line": 83, + "lineto": 90, + "block": "git_object * from\ngit_object * to\nunsigned int flags", + "tdef": "typedef", + "description": " Git Revision Spec: output of a `git_revparse` operation", + "comments": "", + "fields": [ + { + "type": "git_object *", + "name": "from", + "comments": " The left element of the revspec; must be freed by the user " + }, + { + "type": "git_object *", + "name": "to", + "comments": " The right element of the revspec; must be freed by the user " + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " The intent of the revspec (i.e. `git_revspec_mode_t` flags) " + } + ], + "used": { + "returns": [], + "needs": [ + "git_revparse" + ] + } + } + ], + [ + "git_revspec_t", + { + "decl": [ + "GIT_REVSPEC_SINGLE", + "GIT_REVSPEC_RANGE", + "GIT_REVSPEC_MERGE_BASE" + ], + "type": "enum", + "file": "git2/revparse.h", + "line": 71, + "lineto": 78, + "block": "GIT_REVSPEC_SINGLE\nGIT_REVSPEC_RANGE\nGIT_REVSPEC_MERGE_BASE", + "tdef": "typedef", + "description": " Revparse flags. These indicate the intended behavior of the spec passed to\n git_revparse.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REVSPEC_SINGLE", + "comments": "

The spec targeted a single object.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REVSPEC_RANGE", + "comments": "

The spec targeted a range of commits.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REVSPEC_MERGE_BASE", + "comments": "

The spec used the '...' operator, which invokes special semantics.

\n", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_revwalk", + { + "decl": "git_revwalk", + "type": "struct", + "value": "git_revwalk", + "file": "git2/types.h", + "line": 127, + "lineto": 127, + "tdef": "typedef", + "description": " Representation of an in-progress walk through the commits in a repo ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_packbuilder_insert_walk", + "git_revwalk_add_hide_cb", + "git_revwalk_free", + "git_revwalk_hide", + "git_revwalk_hide_glob", + "git_revwalk_hide_head", + "git_revwalk_hide_ref", + "git_revwalk_new", + "git_revwalk_next", + "git_revwalk_push", + "git_revwalk_push_glob", + "git_revwalk_push_head", + "git_revwalk_push_range", + "git_revwalk_push_ref", + "git_revwalk_repository", + "git_revwalk_reset", + "git_revwalk_simplify_first_parent", + "git_revwalk_sorting" + ] + } + } + ], + [ + "git_signature", + { + "decl": [ + "char * name", + "char * email", + "git_time when" + ], + "type": "struct", + "value": "git_signature", + "file": "git2/types.h", + "line": 182, + "lineto": 186, + "block": "char * name\nchar * email\ngit_time when", + "tdef": "typedef", + "description": " An action signature (e.g. for committers, taggers, etc) ", + "comments": "", + "fields": [ + { + "type": "char *", + "name": "name", + "comments": " full name of the author " + }, + { + "type": "char *", + "name": "email", + "comments": " email of the author " + }, + { + "type": "git_time", + "name": "when", + "comments": " time when the action happened " + } + ], + "used": { + "returns": [ + "git_commit_author", + "git_commit_committer", + "git_note_author", + "git_note_committer", + "git_reflog_entry_committer", + "git_tag_tagger" + ], + "needs": [ + "git_commit_amend", + "git_commit_author_with_mailmap", + "git_commit_committer_with_mailmap", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_cb", + "git_commit_create_v", + "git_mailmap_resolve_signature", + "git_note_commit_create", + "git_note_commit_remove", + "git_note_create", + "git_note_remove", + "git_rebase_commit", + "git_rebase_finish", + "git_reflog_append", + "git_signature_default", + "git_signature_dup", + "git_signature_free", + "git_signature_from_buffer", + "git_signature_new", + "git_signature_now", + "git_stash_save", + "git_tag_annotation_create", + "git_tag_create", + "git_transaction_set_symbolic_target", + "git_transaction_set_target" + ] + } + } + ], + [ + "git_smart_service_t", + { + "decl": [ + "GIT_SERVICE_UPLOADPACK_LS", + "GIT_SERVICE_UPLOADPACK", + "GIT_SERVICE_RECEIVEPACK_LS", + "GIT_SERVICE_RECEIVEPACK" + ], + "type": "enum", + "file": "git2/sys/transport.h", + "line": 313, + "lineto": 318, + "block": "GIT_SERVICE_UPLOADPACK_LS\nGIT_SERVICE_UPLOADPACK\nGIT_SERVICE_RECEIVEPACK_LS\nGIT_SERVICE_RECEIVEPACK", + "tdef": "typedef", + "description": " Actions that the smart transport can ask a subtransport to perform ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_SERVICE_UPLOADPACK_LS", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SERVICE_UPLOADPACK", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SERVICE_RECEIVEPACK_LS", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_SERVICE_RECEIVEPACK", + "comments": "", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_sort_t", + { + "decl": [ + "GIT_SORT_NONE", + "GIT_SORT_TOPOLOGICAL", + "GIT_SORT_TIME", + "GIT_SORT_REVERSE" + ], + "type": "enum", + "file": "git2/revwalk.h", + "line": 26, + "lineto": 53, + "block": "GIT_SORT_NONE\nGIT_SORT_TOPOLOGICAL\nGIT_SORT_TIME\nGIT_SORT_REVERSE", + "tdef": "typedef", + "description": " Flags to specify the sorting which a revwalk should perform.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_SORT_NONE", + "comments": "

Sort the output with the same default method from git: reverse\n chronological order. This is the default sorting for new walkers.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_SORT_TOPOLOGICAL", + "comments": "

Sort the repository contents in topological order (no parents before\n all of its children are shown); this sorting mode can be combined\n with time sorting to produce git's --date-order`.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SORT_TIME", + "comments": "

Sort the repository contents by commit time;\n this sorting mode can be combined with\n topological sorting.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SORT_REVERSE", + "comments": "

Iterate through the repository contents in reverse\n order; this sorting mode can be combined with\n any of the above.

\n", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_stash_apply_flags", + { + "decl": [ + "GIT_STASH_APPLY_DEFAULT", + "GIT_STASH_APPLY_REINSTATE_INDEX" + ], + "type": "enum", + "file": "git2/stash.h", + "line": 129, + "lineto": 136, + "block": "GIT_STASH_APPLY_DEFAULT\nGIT_STASH_APPLY_REINSTATE_INDEX", + "tdef": "typedef", + "description": " Stash application flags. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STASH_APPLY_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_REINSTATE_INDEX", + "comments": "", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_stash_apply_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "git_checkout_options checkout_options", + "git_stash_apply_progress_cb progress_cb", + "void * progress_payload" + ], + "type": "struct", + "value": "git_stash_apply_options", + "file": "git2/stash.h", + "line": 180, + "lineto": 192, + "block": "unsigned int version\nuint32_t flags\ngit_checkout_options checkout_options\ngit_stash_apply_progress_cb progress_cb\nvoid * progress_payload", + "tdef": "typedef", + "description": " Stash application options structure", + "comments": "

Initialize with GIT_STASH_APPLY_OPTIONS_INIT. Alternatively, you can use git_stash_apply_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " See `git_stash_apply_flags`, above. " + }, + { + "type": "git_checkout_options", + "name": "checkout_options", + "comments": " Options to use when writing files to the working directory. " + }, + { + "type": "git_stash_apply_progress_cb", + "name": "progress_cb", + "comments": " Optional callback to notify the consumer of application progress. " + }, + { + "type": "void *", + "name": "progress_payload", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_stash_apply", + "git_stash_apply_options_init", + "git_stash_pop" + ] + } + } + ], + [ + "git_stash_apply_progress_t", + { + "decl": [ + "GIT_STASH_APPLY_PROGRESS_NONE", + "GIT_STASH_APPLY_PROGRESS_LOADING_STASH", + "GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX", + "GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED", + "GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED", + "GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED", + "GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED", + "GIT_STASH_APPLY_PROGRESS_DONE" + ], + "type": "enum", + "file": "git2/stash.h", + "line": 139, + "lineto": 162, + "block": "GIT_STASH_APPLY_PROGRESS_NONE\nGIT_STASH_APPLY_PROGRESS_LOADING_STASH\nGIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX\nGIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED\nGIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED\nGIT_STASH_APPLY_PROGRESS_DONE", + "tdef": "typedef", + "description": " Stash apply progression states ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_NONE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_LOADING_STASH", + "comments": "

Loading the stashed data from the object database.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX", + "comments": "

The stored index is being analyzed.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED", + "comments": "

The modified files are being analyzed.

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED", + "comments": "

The untracked and ignored files are being analyzed.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED", + "comments": "

The untracked files are being written to disk.

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED", + "comments": "

The modified files are being written to disk.

\n", + "value": 6 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_DONE", + "comments": "

The stash was applied successfully.

\n", + "value": 7 + } + ], + "used": { + "returns": [], + "needs": [ + "git_stash_apply_progress_cb" + ] + } + } + ], + [ + "git_stash_flags", + { + "decl": [ + "GIT_STASH_DEFAULT", + "GIT_STASH_KEEP_INDEX", + "GIT_STASH_INCLUDE_UNTRACKED", + "GIT_STASH_INCLUDE_IGNORED", + "GIT_STASH_KEEP_ALL" + ], + "type": "enum", + "file": "git2/stash.h", + "line": 25, + "lineto": 53, + "block": "GIT_STASH_DEFAULT\nGIT_STASH_KEEP_INDEX\nGIT_STASH_INCLUDE_UNTRACKED\nGIT_STASH_INCLUDE_IGNORED\nGIT_STASH_KEEP_ALL", + "tdef": "typedef", + "description": " Stash flags", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STASH_DEFAULT", + "comments": "

No option, default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STASH_KEEP_INDEX", + "comments": "

All changes already added to the index are left intact in\n the working directory

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STASH_INCLUDE_UNTRACKED", + "comments": "

All untracked files are also stashed and then cleaned up\n from the working directory

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STASH_INCLUDE_IGNORED", + "comments": "

All ignored files are also stashed and then cleaned up from\n the working directory

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STASH_KEEP_ALL", + "comments": "

All changes in the index and working directory are left intact

\n", + "value": 8 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_stash_save_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "const git_signature * stasher", + "const char * message", + "git_strarray paths" + ], + "type": "struct", + "value": "git_stash_save_options", + "file": "git2/stash.h", + "line": 81, + "lineto": 95, + "block": "unsigned int version\nuint32_t flags\nconst git_signature * stasher\nconst char * message\ngit_strarray paths", + "tdef": "typedef", + "description": " Stash save options structure", + "comments": "

Initialize with GIT_STASH_SAVE_OPTIONS_INIT. Alternatively, you can use git_stash_save_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " Flags to control the stashing process. (see GIT_STASH_* above) " + }, + { + "type": "const git_signature *", + "name": "stasher", + "comments": " The identity of the person performing the stashing. " + }, + { + "type": "const char *", + "name": "message", + "comments": " Optional description along with the stashed state. " + }, + { + "type": "git_strarray", + "name": "paths", + "comments": " Optional paths that control which files are stashed. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_stash_save_options_init", + "git_stash_save_with_opts" + ] + } + } + ], + [ + "git_status_entry", + { + "decl": [ + "git_status_t status", + "git_diff_delta * head_to_index", + "git_diff_delta * index_to_workdir" + ], + "type": "struct", + "value": "git_status_entry", + "file": "git2/status.h", + "line": 295, + "lineto": 299, + "block": "git_status_t status\ngit_diff_delta * head_to_index\ngit_diff_delta * index_to_workdir", + "tdef": "typedef", + "description": " A status entry, providing the differences between the file as it exists\n in HEAD and the index, and providing the differences between the index\n and the working directory.", + "comments": "

The status value provides the status flags for this file.

\n\n

The head_to_index value provides detailed information about the differences between the file in HEAD and the file in the index.

\n\n

The index_to_workdir value provides detailed information about the differences between the file in the index and the file in the working directory.

\n", + "fields": [ + { + "type": "git_status_t", + "name": "status", + "comments": "" + }, + { + "type": "git_diff_delta *", + "name": "head_to_index", + "comments": "" + }, + { + "type": "git_diff_delta *", + "name": "index_to_workdir", + "comments": "" + } + ], + "used": { + "returns": [ + "git_status_byindex" + ], + "needs": [] + } + } + ], + [ + "git_status_list", + { + "decl": "git_status_list", + "type": "struct", + "value": "git_status_list", + "file": "git2/types.h", + "line": 201, + "lineto": 201, + "tdef": "typedef", + "description": " Representation of a status collection ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_status_byindex", + "git_status_list_entrycount", + "git_status_list_free", + "git_status_list_new" + ] + } + } + ], + [ + "git_status_opt_t", + { + "decl": [ + "GIT_STATUS_OPT_INCLUDE_UNTRACKED", + "GIT_STATUS_OPT_INCLUDE_IGNORED", + "GIT_STATUS_OPT_INCLUDE_UNMODIFIED", + "GIT_STATUS_OPT_EXCLUDE_SUBMODULES", + "GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS", + "GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH", + "GIT_STATUS_OPT_RECURSE_IGNORED_DIRS", + "GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX", + "GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR", + "GIT_STATUS_OPT_SORT_CASE_SENSITIVELY", + "GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY", + "GIT_STATUS_OPT_RENAMES_FROM_REWRITES", + "GIT_STATUS_OPT_NO_REFRESH", + "GIT_STATUS_OPT_UPDATE_INDEX", + "GIT_STATUS_OPT_INCLUDE_UNREADABLE", + "GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED" + ], + "type": "enum", + "file": "git2/status.h", + "line": 101, + "lineto": 208, + "block": "GIT_STATUS_OPT_INCLUDE_UNTRACKED\nGIT_STATUS_OPT_INCLUDE_IGNORED\nGIT_STATUS_OPT_INCLUDE_UNMODIFIED\nGIT_STATUS_OPT_EXCLUDE_SUBMODULES\nGIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS\nGIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH\nGIT_STATUS_OPT_RECURSE_IGNORED_DIRS\nGIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX\nGIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR\nGIT_STATUS_OPT_SORT_CASE_SENSITIVELY\nGIT_STATUS_OPT_SORT_CASE_INSENSITIVELY\nGIT_STATUS_OPT_RENAMES_FROM_REWRITES\nGIT_STATUS_OPT_NO_REFRESH\nGIT_STATUS_OPT_UPDATE_INDEX\nGIT_STATUS_OPT_INCLUDE_UNREADABLE\nGIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", + "tdef": "typedef", + "description": " Flags to control status callbacks", + "comments": "

Calling git_status_foreach() is like calling the extended version with: GIT_STATUS_OPT_INCLUDE_IGNORED, GIT_STATUS_OPT_INCLUDE_UNTRACKED, and GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS. Those options are bundled together as GIT_STATUS_OPT_DEFAULTS if you want them as a baseline.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_UNTRACKED", + "comments": "

Says that callbacks should be made on untracked files.\n These will only be made if the workdir files are included in the status\n "show" option.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_IGNORED", + "comments": "

Says that ignored files get callbacks.\n Again, these callbacks will only be made if the workdir files are\n included in the status "show" option.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_UNMODIFIED", + "comments": "

Indicates that callback should be made even on unmodified files.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_EXCLUDE_SUBMODULES", + "comments": "

Indicates that submodules should be skipped.\n This only applies if there are no pending typechanges to the submodule\n (either from or to another type).

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS", + "comments": "

Indicates that all files in untracked directories should be included.\n Normally if an entire directory is new, then just the top-level\n directory is included (with a trailing slash on the entry name).\n This flag says to include all of the individual files in the directory\n instead.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH", + "comments": "

Indicates that the given path should be treated as a literal path,\n and not as a pathspec pattern.

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RECURSE_IGNORED_DIRS", + "comments": "

Indicates that the contents of ignored directories should be included\n in the status. This is like doing git ls-files -o -i --exclude-standard\n with core git.

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX", + "comments": "

Indicates that rename detection should be processed between the head and\n the index and enables the GIT_STATUS_INDEX_RENAMED as a possible status\n flag.

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR", + "comments": "

Indicates that rename detection should be run between the index and the\n working directory and enabled GIT_STATUS_WT_RENAMED as a possible status\n flag.

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_SORT_CASE_SENSITIVELY", + "comments": "

Overrides the native case sensitivity for the file system and forces\n the output to be in case-sensitive order.

\n", + "value": 512 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY", + "comments": "

Overrides the native case sensitivity for the file system and forces\n the output to be in case-insensitive order.

\n", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RENAMES_FROM_REWRITES", + "comments": "

Iindicates that rename detection should include rewritten files.

\n", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_NO_REFRESH", + "comments": "

Bypasses the default status behavior of doing a "soft" index reload\n (i.e. reloading the index data if the file on disk has been modified\n outside libgit2).

\n", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_UPDATE_INDEX", + "comments": "

Tells libgit2 to refresh the stat cache in the index for files that are\n unchanged but have out of date stat einformation in the index.\n It will result in less work being done on subsequent calls to get status.\n This is mutually exclusive with the NO_REFRESH option.

\n", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_UNREADABLE", + "comments": "

Normally files that cannot be opened or read are ignored as\n these are often transient files; this option will return\n unreadable files as GIT_STATUS_WT_UNREADABLE.

\n", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", + "comments": "

Unreadable files will be detected and given the status\n untracked instead of unreadable.

\n", + "value": 32768 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_status_options", + { + "decl": [ + "unsigned int version", + "git_status_show_t show", + "unsigned int flags", + "git_strarray pathspec", + "git_tree * baseline", + "uint16_t rename_threshold" + ], + "type": "struct", + "value": "git_status_options", + "file": "git2/status.h", + "line": 222, + "lineto": 262, + "block": "unsigned int version\ngit_status_show_t show\nunsigned int flags\ngit_strarray pathspec\ngit_tree * baseline\nuint16_t rename_threshold", + "tdef": "typedef", + "description": " Options to control how `git_status_foreach_ext()` will issue callbacks.", + "comments": "

Initialize with GIT_STATUS_OPTIONS_INIT. Alternatively, you can use git_status_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " The struct version; pass `GIT_STATUS_OPTIONS_VERSION`." + }, + { + "type": "git_status_show_t", + "name": "show", + "comments": " The `show` value is one of the `git_status_show_t` constants that\n control which files to scan and in what order. The default is\n `GIT_STATUS_SHOW_INDEX_AND_WORKDIR`." + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " The `flags` value is an OR'ed combination of the\n `git_status_opt_t` values above. The default is\n `GIT_STATUS_OPT_DEFAULTS`, which matches git's default\n behavior." + }, + { + "type": "git_strarray", + "name": "pathspec", + "comments": " The `pathspec` is an array of path patterns to match (using\n fnmatch-style matching), or just an array of paths to match\n exactly if `GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH` is specified\n in the flags." + }, + { + "type": "git_tree *", + "name": "baseline", + "comments": " The `baseline` is the tree to be used for comparison to the\n working directory and index; defaults to HEAD." + }, + { + "type": "uint16_t", + "name": "rename_threshold", + "comments": " Threshold above which similar files will be considered renames.\n This is equivalent to the -M option. Defaults to 50." + } + ], + "used": { + "returns": [], + "needs": [ + "git_status_foreach_ext", + "git_status_list_new", + "git_status_options_init" + ] + } + } + ], + [ + "git_status_show_t", + { + "decl": [ + "GIT_STATUS_SHOW_INDEX_AND_WORKDIR", + "GIT_STATUS_SHOW_INDEX_ONLY", + "GIT_STATUS_SHOW_WORKDIR_ONLY" + ], + "type": "enum", + "file": "git2/status.h", + "line": 73, + "lineto": 91, + "block": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR\nGIT_STATUS_SHOW_INDEX_ONLY\nGIT_STATUS_SHOW_WORKDIR_ONLY", + "tdef": "typedef", + "description": " Select the files on which to report status.", + "comments": "

With git_status_foreach_ext, this will control which changes get callbacks. With git_status_list_new, these will control which changes are included in the list.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR", + "comments": "

The default. This roughly matches git status --porcelain regarding\n which files are included and in what order.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STATUS_SHOW_INDEX_ONLY", + "comments": "

Only gives status based on HEAD to index comparison, not looking at\n working directory changes.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STATUS_SHOW_WORKDIR_ONLY", + "comments": "

Only gives status based on index to working directory comparison,\n not comparing the index to the HEAD.

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_status_t", + { + "decl": [ + "GIT_STATUS_CURRENT", + "GIT_STATUS_INDEX_NEW", + "GIT_STATUS_INDEX_MODIFIED", + "GIT_STATUS_INDEX_DELETED", + "GIT_STATUS_INDEX_RENAMED", + "GIT_STATUS_INDEX_TYPECHANGE", + "GIT_STATUS_WT_NEW", + "GIT_STATUS_WT_MODIFIED", + "GIT_STATUS_WT_DELETED", + "GIT_STATUS_WT_TYPECHANGE", + "GIT_STATUS_WT_RENAMED", + "GIT_STATUS_WT_UNREADABLE", + "GIT_STATUS_IGNORED", + "GIT_STATUS_CONFLICTED" + ], + "type": "enum", + "file": "git2/status.h", + "line": 34, + "lineto": 52, + "block": "GIT_STATUS_CURRENT\nGIT_STATUS_INDEX_NEW\nGIT_STATUS_INDEX_MODIFIED\nGIT_STATUS_INDEX_DELETED\nGIT_STATUS_INDEX_RENAMED\nGIT_STATUS_INDEX_TYPECHANGE\nGIT_STATUS_WT_NEW\nGIT_STATUS_WT_MODIFIED\nGIT_STATUS_WT_DELETED\nGIT_STATUS_WT_TYPECHANGE\nGIT_STATUS_WT_RENAMED\nGIT_STATUS_WT_UNREADABLE\nGIT_STATUS_IGNORED\nGIT_STATUS_CONFLICTED", + "tdef": "typedef", + "description": " Status flags for a single file.", + "comments": "

A combination of these values will be returned to indicate the status of a file. Status compares the working directory, the index, and the current HEAD of the repository. The GIT_STATUS_INDEX set of flags represents the status of file in the index relative to the HEAD, and the GIT_STATUS_WT set of flags represent the status of the file in the working directory relative to the index.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_STATUS_CURRENT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_NEW", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_MODIFIED", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_DELETED", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_RENAMED", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_TYPECHANGE", + "comments": "", + "value": 16 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_NEW", + "comments": "", + "value": 128 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_MODIFIED", + "comments": "", + "value": 256 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_DELETED", + "comments": "", + "value": 512 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_TYPECHANGE", + "comments": "", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_RENAMED", + "comments": "", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_UNREADABLE", + "comments": "", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_STATUS_IGNORED", + "comments": "", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_STATUS_CONFLICTED", + "comments": "", + "value": 32768 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_strarray", + { + "decl": [ + "char ** strings", + "size_t count" + ], + "type": "struct", + "value": "git_strarray", + "file": "git2/strarray.h", + "line": 22, + "lineto": 25, + "block": "char ** strings\nsize_t count", + "tdef": "typedef", + "description": " Array of strings ", + "comments": "", + "fields": [ + { + "type": "char **", + "name": "strings", + "comments": "" + }, + { + "type": "size_t", + "name": "count", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_index_add_all", + "git_index_remove_all", + "git_index_update_all", + "git_pathspec_new", + "git_reference_list", + "git_remote_connect", + "git_remote_download", + "git_remote_fetch", + "git_remote_get_fetch_refspecs", + "git_remote_get_push_refspecs", + "git_remote_list", + "git_remote_push", + "git_remote_rename", + "git_remote_upload", + "git_reset_default", + "git_strarray_copy", + "git_strarray_dispose", + "git_strarray_free", + "git_tag_list", + "git_tag_list_match", + "git_worktree_list" + ] + } + } + ], + [ + "git_stream_t", + { + "decl": [ + "GIT_STREAM_STANDARD", + "GIT_STREAM_TLS" + ], + "type": "enum", + "file": "git2/sys/stream.h", + "line": 91, + "lineto": 97, + "block": "GIT_STREAM_STANDARD\nGIT_STREAM_TLS", + "tdef": "typedef", + "description": " The type of stream to register.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STREAM_STANDARD", + "comments": "

A standard (non-TLS) socket.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STREAM_TLS", + "comments": "

A TLS-encrypted socket.

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_submodule", + { + "decl": "git_submodule", + "type": "struct", + "value": "git_submodule", + "file": "git2/types.h", + "line": 267, + "lineto": 267, + "tdef": "typedef", + "description": " Opaque structure representing a submodule.", + "comments": "", + "used": { + "returns": [ + "git_submodule_fetch_recurse_submodules", + "git_submodule_ignore", + "git_submodule_update_strategy" + ], + "needs": [ + "git_submodule_add_finalize", + "git_submodule_add_setup", + "git_submodule_add_to_index", + "git_submodule_branch", + "git_submodule_cb", + "git_submodule_clone", + "git_submodule_dup", + "git_submodule_fetch_recurse_submodules", + "git_submodule_foreach", + "git_submodule_free", + "git_submodule_head_id", + "git_submodule_ignore", + "git_submodule_index_id", + "git_submodule_init", + "git_submodule_location", + "git_submodule_lookup", + "git_submodule_name", + "git_submodule_open", + "git_submodule_owner", + "git_submodule_path", + "git_submodule_reload", + "git_submodule_repo_init", + "git_submodule_set_fetch_recurse_submodules", + "git_submodule_set_ignore", + "git_submodule_set_update", + "git_submodule_status", + "git_submodule_sync", + "git_submodule_update", + "git_submodule_update_options_init", + "git_submodule_update_strategy", + "git_submodule_url", + "git_submodule_wd_id" + ] + } + } + ], + [ + "git_submodule_ignore_t", + { + "decl": [ + "GIT_SUBMODULE_IGNORE_UNSPECIFIED", + "GIT_SUBMODULE_IGNORE_NONE", + "GIT_SUBMODULE_IGNORE_UNTRACKED", + "GIT_SUBMODULE_IGNORE_DIRTY", + "GIT_SUBMODULE_IGNORE_ALL" + ], + "type": "enum", + "file": "git2/types.h", + "line": 331, + "lineto": 338, + "block": "GIT_SUBMODULE_IGNORE_UNSPECIFIED\nGIT_SUBMODULE_IGNORE_NONE\nGIT_SUBMODULE_IGNORE_UNTRACKED\nGIT_SUBMODULE_IGNORE_DIRTY\nGIT_SUBMODULE_IGNORE_ALL", + "tdef": "typedef", + "description": " Submodule ignore values", + "comments": "

These values represent settings for the submodule.$name.ignore configuration value which says how deeply to look at the working directory when getting submodule status.

\n\n

You can override this value in memory on a per-submodule basis with git_submodule_set_ignore() and can write the changed value to disk with git_submodule_save(). If you have overwritten the value, you can revert to the on disk value by using GIT_SUBMODULE_IGNORE_RESET.

\n\n

The values are:

\n\n
    \n
  • GIT_SUBMODULE_IGNORE_UNSPECIFIED: use the submodule's configuration - GIT_SUBMODULE_IGNORE_NONE: don't ignore any change - i.e. even an untracked file, will mark the submodule as dirty. Ignored files are still ignored, of course. - GIT_SUBMODULE_IGNORE_UNTRACKED: ignore untracked files; only changes to tracked files, or the index or the HEAD commit will matter. - GIT_SUBMODULE_IGNORE_DIRTY: ignore changes in the working directory, only considering changes if the HEAD of submodule has moved from the value in the superproject. - GIT_SUBMODULE_IGNORE_ALL: never check if the submodule is dirty - GIT_SUBMODULE_IGNORE_DEFAULT: not used except as static initializer when we don't want any particular ignore rule to be specified.
  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_UNSPECIFIED", + "comments": "

use the submodule's configuration

\n", + "value": -1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_NONE", + "comments": "

any change or untracked == dirty

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_UNTRACKED", + "comments": "

dirty if tracked files change

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_DIRTY", + "comments": "

only dirty if HEAD moved

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_ALL", + "comments": "

never dirty

\n", + "value": 4 + } + ], + "used": { + "returns": [ + "git_submodule_ignore" + ], + "needs": [ + "git_submodule_set_ignore", + "git_submodule_status" + ] + } + } + ], + [ + "git_submodule_recurse_t", + { + "decl": [ + "GIT_SUBMODULE_RECURSE_NO", + "GIT_SUBMODULE_RECURSE_YES", + "GIT_SUBMODULE_RECURSE_ONDEMAND" + ], + "type": "enum", + "file": "git2/types.h", + "line": 350, + "lineto": 354, + "block": "GIT_SUBMODULE_RECURSE_NO\nGIT_SUBMODULE_RECURSE_YES\nGIT_SUBMODULE_RECURSE_ONDEMAND", + "tdef": "typedef", + "description": " Options for submodule recurse.", + "comments": "

Represent the value of submodule.$name.fetchRecurseSubmodules

\n\n
    \n
  • GIT_SUBMODULE_RECURSE_NO - do no recurse into submodules * GIT_SUBMODULE_RECURSE_YES - recurse into submodules * GIT_SUBMODULE_RECURSE_ONDEMAND - recurse into submodules only when commit not already in local clone
  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_SUBMODULE_RECURSE_NO", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_RECURSE_YES", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_RECURSE_ONDEMAND", + "comments": "", + "value": 2 + } + ], + "used": { + "returns": [ + "git_submodule_fetch_recurse_submodules" + ], + "needs": [ + "git_submodule_set_fetch_recurse_submodules" + ] + } + } + ], + [ + "git_submodule_status_t", + { + "decl": [ + "GIT_SUBMODULE_STATUS_IN_HEAD", + "GIT_SUBMODULE_STATUS_IN_INDEX", + "GIT_SUBMODULE_STATUS_IN_CONFIG", + "GIT_SUBMODULE_STATUS_IN_WD", + "GIT_SUBMODULE_STATUS_INDEX_ADDED", + "GIT_SUBMODULE_STATUS_INDEX_DELETED", + "GIT_SUBMODULE_STATUS_INDEX_MODIFIED", + "GIT_SUBMODULE_STATUS_WD_UNINITIALIZED", + "GIT_SUBMODULE_STATUS_WD_ADDED", + "GIT_SUBMODULE_STATUS_WD_DELETED", + "GIT_SUBMODULE_STATUS_WD_MODIFIED", + "GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED", + "GIT_SUBMODULE_STATUS_WD_WD_MODIFIED", + "GIT_SUBMODULE_STATUS_WD_UNTRACKED" + ], + "type": "enum", + "file": "git2/submodule.h", + "line": 74, + "lineto": 89, + "block": "GIT_SUBMODULE_STATUS_IN_HEAD\nGIT_SUBMODULE_STATUS_IN_INDEX\nGIT_SUBMODULE_STATUS_IN_CONFIG\nGIT_SUBMODULE_STATUS_IN_WD\nGIT_SUBMODULE_STATUS_INDEX_ADDED\nGIT_SUBMODULE_STATUS_INDEX_DELETED\nGIT_SUBMODULE_STATUS_INDEX_MODIFIED\nGIT_SUBMODULE_STATUS_WD_UNINITIALIZED\nGIT_SUBMODULE_STATUS_WD_ADDED\nGIT_SUBMODULE_STATUS_WD_DELETED\nGIT_SUBMODULE_STATUS_WD_MODIFIED\nGIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED\nGIT_SUBMODULE_STATUS_WD_WD_MODIFIED\nGIT_SUBMODULE_STATUS_WD_UNTRACKED", + "tdef": "typedef", + "description": " Return codes for submodule status.", + "comments": "

A combination of these flags will be returned to describe the status of a submodule. Depending on the "ignore" property of the submodule, some of the flags may never be returned because they indicate changes that are supposed to be ignored.

\n\n

Submodule info is contained in 4 places: the HEAD tree, the index, config files (both .git/config and .gitmodules), and the working directory. Any or all of those places might be missing information about the submodule depending on what state the repo is in. We consider all four places to build the combination of status flags.

\n\n

There are four values that are not really status, but give basic info about what sources of submodule data are available. These will be returned even if ignore is set to "ALL".

\n\n
    \n
  • IN_HEAD - superproject head contains submodule * IN_INDEX - superproject index contains submodule * IN_CONFIG - superproject gitmodules has submodule * IN_WD - superproject workdir has submodule
  • \n
\n\n

The following values will be returned so long as ignore is not "ALL".

\n\n
    \n
  • INDEX_ADDED - in index, not in head * INDEX_DELETED - in head, not in index * INDEX_MODIFIED - index and head don't match * WD_UNINITIALIZED - workdir contains empty directory * WD_ADDED - in workdir, not index * WD_DELETED - in index, not workdir * WD_MODIFIED - index and workdir head don't match
  • \n
\n\n

The following can only be returned if ignore is "NONE" or "UNTRACKED".

\n\n
    \n
  • WD_INDEX_MODIFIED - submodule workdir index is dirty * WD_WD_MODIFIED - submodule workdir has modified files
  • \n
\n\n

Lastly, the following will only be returned for ignore "NONE".

\n\n
    \n
  • WD_UNTRACKED - wd contains untracked files
  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_IN_HEAD", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_IN_INDEX", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_IN_CONFIG", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_IN_WD", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_INDEX_ADDED", + "comments": "", + "value": 16 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_INDEX_DELETED", + "comments": "", + "value": 32 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_INDEX_MODIFIED", + "comments": "", + "value": 64 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_UNINITIALIZED", + "comments": "", + "value": 128 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_ADDED", + "comments": "", + "value": 256 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_DELETED", + "comments": "", + "value": 512 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_MODIFIED", + "comments": "", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED", + "comments": "", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_WD_MODIFIED", + "comments": "", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_UNTRACKED", + "comments": "", + "value": 8192 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_submodule_update_options", + { + "decl": [ + "unsigned int version", + "git_checkout_options checkout_opts", + "git_fetch_options fetch_opts", + "int allow_fetch" + ], + "type": "struct", + "value": "git_submodule_update_options", + "file": "git2/submodule.h", + "line": 128, + "lineto": 153, + "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint allow_fetch", + "tdef": "typedef", + "description": " Submodule update options structure", + "comments": "

Initialize with GIT_SUBMODULE_UPDATE_OPTIONS_INIT. Alternatively, you can use git_submodule_update_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "git_checkout_options", + "name": "checkout_opts", + "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`. Generally you will want the use\n GIT_CHECKOUT_SAFE to update files in the working\n directory." + }, + { + "type": "git_fetch_options", + "name": "fetch_opts", + "comments": " Options which control the fetch, including callbacks.\n\n The callbacks to use for reporting fetch progress, and for acquiring\n credentials in the event they are needed." + }, + { + "type": "int", + "name": "allow_fetch", + "comments": " Allow fetching from the submodule's default remote if the target\n commit isn't found. Enabled by default." + } + ], + "used": { + "returns": [], + "needs": [ + "git_submodule_clone", + "git_submodule_update", + "git_submodule_update_options_init" + ] + } + } + ], + [ + "git_submodule_update_t", + { + "decl": [ + "GIT_SUBMODULE_UPDATE_CHECKOUT", + "GIT_SUBMODULE_UPDATE_REBASE", + "GIT_SUBMODULE_UPDATE_MERGE", + "GIT_SUBMODULE_UPDATE_NONE", + "GIT_SUBMODULE_UPDATE_DEFAULT" + ], + "type": "enum", + "file": "git2/types.h", + "line": 295, + "lineto": 302, + "block": "GIT_SUBMODULE_UPDATE_CHECKOUT\nGIT_SUBMODULE_UPDATE_REBASE\nGIT_SUBMODULE_UPDATE_MERGE\nGIT_SUBMODULE_UPDATE_NONE\nGIT_SUBMODULE_UPDATE_DEFAULT", + "tdef": "typedef", + "description": " Submodule update values", + "comments": "

These values represent settings for the submodule.$name.update configuration value which says how to handle git submodule update for this submodule. The value is usually set in the ".gitmodules" file and copied to ".git/config" when the submodule is initialized.

\n\n

You can override this setting on a per-submodule basis with git_submodule_set_update() and write the changed value to disk using git_submodule_save(). If you have overwritten the value, you can revert it by passing GIT_SUBMODULE_UPDATE_RESET to the set function.

\n\n

The values are:

\n\n
    \n
  • GIT_SUBMODULE_UPDATE_CHECKOUT: the default; when a submodule is updated, checkout the new detached HEAD to the submodule directory. - GIT_SUBMODULE_UPDATE_REBASE: update by rebasing the current checked out branch onto the commit from the superproject. - GIT_SUBMODULE_UPDATE_MERGE: update by merging the commit in the superproject into the current checkout out branch of the submodule. - GIT_SUBMODULE_UPDATE_NONE: do not update this submodule even when the commit in the superproject is updated. - GIT_SUBMODULE_UPDATE_DEFAULT: not used except as static initializer when we don't want any particular update rule to be specified.
  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_CHECKOUT", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_REBASE", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_MERGE", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_NONE", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_DEFAULT", + "comments": "", + "value": 0 + } + ], + "used": { + "returns": [ + "git_submodule_update_strategy" + ], + "needs": [ + "git_submodule_set_update" + ] + } + } + ], + [ + "git_tag", + { + "decl": "git_tag", + "type": "struct", + "value": "git_tag", + "file": "git2/types.h", + "line": 130, + "lineto": 130, + "tdef": "typedef", + "description": " Parsed representation of a tag object. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_tag_dup", + "git_tag_foreach", + "git_tag_free", + "git_tag_id", + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_tag_message", + "git_tag_name", + "git_tag_owner", + "git_tag_peel", + "git_tag_tagger", + "git_tag_target", + "git_tag_target_id", + "git_tag_target_type" + ] + } + } + ], + [ + "git_time", + { + "decl": [ + "git_time_t time", + "int offset", + "char sign" + ], + "type": "struct", + "value": "git_time", + "file": "git2/types.h", + "line": 175, + "lineto": 179, + "block": "git_time_t time\nint offset\nchar sign", + "tdef": "typedef", + "description": " Time in a signature ", + "comments": "", + "fields": [ + { + "type": "git_time_t", + "name": "time", + "comments": " time in seconds from epoch " + }, + { + "type": "int", + "name": "offset", + "comments": " timezone offset, in minutes " + }, + { + "type": "char", + "name": "sign", + "comments": " indicator for questionable '-0000' offsets in signature " + } + ], + "used": { + "returns": [ + "git_commit_time" + ], + "needs": [ + "git_signature_new" + ] + } + } + ], + [ + "git_trace_level_t", + { + "decl": [ + "GIT_TRACE_NONE", + "GIT_TRACE_FATAL", + "GIT_TRACE_ERROR", + "GIT_TRACE_WARN", + "GIT_TRACE_INFO", + "GIT_TRACE_DEBUG", + "GIT_TRACE_TRACE" + ], + "type": "enum", + "file": "git2/trace.h", + "line": 26, + "lineto": 47, + "block": "GIT_TRACE_NONE\nGIT_TRACE_FATAL\nGIT_TRACE_ERROR\nGIT_TRACE_WARN\nGIT_TRACE_INFO\nGIT_TRACE_DEBUG\nGIT_TRACE_TRACE", + "tdef": "typedef", + "description": " Available tracing levels. When tracing is set to a particular level,\n callers will be provided tracing at the given level and all lower levels.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_TRACE_NONE", + "comments": "

No tracing will be performed.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_TRACE_FATAL", + "comments": "

Severe errors that may impact the program's execution

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_TRACE_ERROR", + "comments": "

Errors that do not impact the program's execution

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_TRACE_WARN", + "comments": "

Warnings that suggest abnormal data

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_TRACE_INFO", + "comments": "

Informational messages about program execution

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_TRACE_DEBUG", + "comments": "

Detailed data that allows for debugging

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_TRACE_TRACE", + "comments": "

Exceptionally detailed debugging data

\n", + "value": 6 + } + ], + "used": { + "returns": [], + "needs": [ + "git_trace_cb", + "git_trace_set" + ] + } + } + ], + [ + "git_transaction", + { + "decl": "git_transaction", + "type": "struct", + "value": "git_transaction", + "file": "git2/types.h", + "line": 195, + "lineto": 195, + "tdef": "typedef", + "description": " Transactional interface to references ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_config_lock", + "git_transaction_commit", + "git_transaction_free", + "git_transaction_lock_ref", + "git_transaction_new", + "git_transaction_remove", + "git_transaction_set_reflog", + "git_transaction_set_symbolic_target", + "git_transaction_set_target" + ] + } + } + ], + [ + "git_transport", + { + "decl": "git_transport", + "type": "struct", + "value": "git_transport", + "file": "git2/types.h", + "line": 247, + "lineto": 247, + "tdef": "typedef", + "description": " Interface which represents a transport to communicate with a\n remote.", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_transport_cb" + ] + } + } + ], + [ + "git_tree", + { + "decl": "git_tree", + "type": "struct", + "value": "git_tree", + "file": "git2/types.h", + "line": 142, + "lineto": 142, + "tdef": "typedef", + "description": " Representation of a tree object. ", + "comments": "", + "used": { + "returns": [ + "git_tree_entry_byid", + "git_tree_entry_byindex", + "git_tree_entry_byname", + "git_treebuilder_get" + ], + "needs": [ + "git_apply_to_tree", + "git_commit_amend", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_cb", + "git_commit_create_v", + "git_commit_tree", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_index_read_tree", + "git_merge_trees", + "git_pathspec_match_tree", + "git_tree_create_updated", + "git_tree_dup", + "git_tree_entry_byid", + "git_tree_entry_byindex", + "git_tree_entry_byname", + "git_tree_entry_bypath", + "git_tree_entry_cmp", + "git_tree_entry_dup", + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw", + "git_tree_entry_free", + "git_tree_entry_id", + "git_tree_entry_name", + "git_tree_entry_to_object", + "git_tree_entry_type", + "git_tree_entrycount", + "git_tree_free", + "git_tree_id", + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_tree_owner", + "git_tree_walk", + "git_treebuilder_clear", + "git_treebuilder_entrycount", + "git_treebuilder_filter", + "git_treebuilder_filter_cb", + "git_treebuilder_free", + "git_treebuilder_get", + "git_treebuilder_insert", + "git_treebuilder_new", + "git_treebuilder_remove", + "git_treebuilder_write", + "git_treebuilder_write_with_buffer", + "git_treewalk_cb" + ] + } + } + ], + [ + "git_tree_entry", + { + "decl": "git_tree_entry", + "type": "struct", + "value": "git_tree_entry", + "file": "git2/types.h", + "line": 139, + "lineto": 139, + "tdef": "typedef", + "description": " Representation of each one of the entries in a tree object. ", + "comments": "", + "used": { + "returns": [ + "git_tree_entry_byid", + "git_tree_entry_byindex", + "git_tree_entry_byname", + "git_treebuilder_get" + ], + "needs": [ + "git_tree_entry_bypath", + "git_tree_entry_cmp", + "git_tree_entry_dup", + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw", + "git_tree_entry_free", + "git_tree_entry_id", + "git_tree_entry_name", + "git_tree_entry_to_object", + "git_tree_entry_type", + "git_treebuilder_filter_cb", + "git_treebuilder_insert", + "git_treewalk_cb" + ] + } + } + ], + [ + "git_tree_update", + { + "decl": [ + "git_tree_update_t action", + "git_oid id", + "git_filemode_t filemode", + "const char * path" + ], + "type": "struct", + "value": "git_tree_update", + "file": "git2/tree.h", + "line": 438, + "lineto": 447, + "block": "git_tree_update_t action\ngit_oid id\ngit_filemode_t filemode\nconst char * path", + "tdef": "typedef", + "description": " An action to perform during the update of a tree", + "comments": "", + "fields": [ + { + "type": "git_tree_update_t", + "name": "action", + "comments": " Update action. If it's an removal, only the path is looked at " + }, + { + "type": "git_oid", + "name": "id", + "comments": " The entry's id " + }, + { + "type": "git_filemode_t", + "name": "filemode", + "comments": " The filemode/kind of object " + }, + { + "type": "const char *", + "name": "path", + "comments": " The full path from the root tree " + } + ], + "used": { + "returns": [], + "needs": [ + "git_tree_create_updated" + ] + } + } + ], + [ + "git_tree_update_t", + { + "decl": [ + "GIT_TREE_UPDATE_UPSERT", + "GIT_TREE_UPDATE_REMOVE" + ], + "type": "enum", + "file": "git2/tree.h", + "line": 428, + "lineto": 433, + "block": "GIT_TREE_UPDATE_UPSERT\nGIT_TREE_UPDATE_REMOVE", + "tdef": "typedef", + "description": " The kind of update to perform", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_TREE_UPDATE_UPSERT", + "comments": "

Update or insert an entry at the specified path

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_TREE_UPDATE_REMOVE", + "comments": "

Remove an entry from the specified path

\n", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_treebuilder", + { + "decl": "git_treebuilder", + "type": "struct", + "value": "git_treebuilder", + "file": "git2/types.h", + "line": 145, + "lineto": 145, + "tdef": "typedef", + "description": " Constructor for in-memory trees ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_treebuilder_clear", + "git_treebuilder_entrycount", + "git_treebuilder_filter", + "git_treebuilder_free", + "git_treebuilder_get", + "git_treebuilder_insert", + "git_treebuilder_new", + "git_treebuilder_remove", + "git_treebuilder_write", + "git_treebuilder_write_with_buffer" + ] + } + } + ], + [ + "git_treewalk_mode", + { + "decl": [ + "GIT_TREEWALK_PRE", + "GIT_TREEWALK_POST" + ], + "type": "enum", + "file": "git2/tree.h", + "line": 387, + "lineto": 390, + "block": "GIT_TREEWALK_PRE\nGIT_TREEWALK_POST", + "tdef": "typedef", + "description": " Tree traversal modes ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_TREEWALK_PRE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_TREEWALK_POST", + "comments": "", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": [ + "git_tree_walk" + ] + } + } + ], + [ + "git_worktree", + { + "decl": "git_worktree", + "type": "struct", + "value": "git_worktree", + "file": "git2/types.h", + "line": 121, + "lineto": 121, + "tdef": "typedef", + "description": " Representation of a working tree ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_repository_open_from_worktree", + "git_worktree_add", + "git_worktree_add_options_init", + "git_worktree_free", + "git_worktree_is_locked", + "git_worktree_is_prunable", + "git_worktree_lock", + "git_worktree_lookup", + "git_worktree_name", + "git_worktree_open_from_repository", + "git_worktree_path", + "git_worktree_prune", + "git_worktree_prune_options_init", + "git_worktree_unlock", + "git_worktree_validate" + ] + } + } + ], + [ + "git_worktree_prune_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags" + ], + "type": "struct", + "value": "git_worktree_prune_options", + "file": "git2/worktree.h", + "line": 204, + "lineto": 209, + "block": "unsigned int version\nuint32_t flags", + "tdef": "typedef", + "description": " Worktree prune options structure", + "comments": "

Initialize with GIT_WORKTREE_PRUNE_OPTIONS_INIT. Alternatively, you can use git_worktree_prune_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": "" + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of `git_worktree_prune_t` " + } + ], + "used": { + "returns": [], + "needs": [ + "git_worktree_is_prunable", + "git_worktree_prune", + "git_worktree_prune_options_init" + ] + } + } + ], + [ + "git_worktree_prune_t", + { + "decl": [ + "GIT_WORKTREE_PRUNE_VALID", + "GIT_WORKTREE_PRUNE_LOCKED", + "GIT_WORKTREE_PRUNE_WORKING_TREE" + ], + "type": "enum", + "file": "git2/worktree.h", + "line": 188, + "lineto": 195, + "block": "GIT_WORKTREE_PRUNE_VALID\nGIT_WORKTREE_PRUNE_LOCKED\nGIT_WORKTREE_PRUNE_WORKING_TREE", + "tdef": "typedef", + "description": " Flags which can be passed to git_worktree_prune to alter its\n behavior.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_WORKTREE_PRUNE_VALID", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_WORKTREE_PRUNE_LOCKED", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_WORKTREE_PRUNE_WORKING_TREE", + "comments": "", + "value": 4 + } + ], + "used": { + "returns": [], + "needs": [] + } + } + ], + [ + "git_writestream", + { + "decl": [ + "int (*)(git_writestream *, const char *, size_t) write", + "int (*)(git_writestream *) close", + "void (*)(git_writestream *) free" + ], + "type": "struct", + "value": "git_writestream", + "file": "git2/types.h", + "line": 359, + "lineto": 363, + "tdef": null, + "description": " A type to write in a streaming fashion, for example, for filters. ", + "comments": "", + "fields": [ + { + "type": "int (*)(git_writestream *, const char *, size_t)", + "name": "write", + "comments": "" + }, + { + "type": "int (*)(git_writestream *)", + "name": "close", + "comments": "" + }, + { + "type": "void (*)(git_writestream *)", + "name": "free", + "comments": "" + } + ], + "block": "int (*)(git_writestream *, const char *, size_t) write\nint (*)(git_writestream *) close\nvoid (*)(git_writestream *) free", + "used": { + "returns": [], + "needs": [ + "git_blob_create_from_stream", + "git_blob_create_from_stream_commit", + "git_filter_list_stream_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_data", + "git_filter_list_stream_file" + ] + } + } + ] ], - [ - "status.c", - "ex/v1.3.1/status.html" + "prefix": "include", + "groups": [ + [ + "annotated", + [ + "git_annotated_commit_free", + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_from_ref", + "git_annotated_commit_from_revspec", + "git_annotated_commit_id", + "git_annotated_commit_lookup", + "git_annotated_commit_ref" + ] + ], + [ + "apply", + [ + "git_apply", + "git_apply_options_init", + "git_apply_to_tree" + ] + ], + [ + "attr", + [ + "git_attr_add_macro", + "git_attr_cache_flush", + "git_attr_foreach", + "git_attr_foreach_ext", + "git_attr_get", + "git_attr_get_ext", + "git_attr_get_many", + "git_attr_get_many_ext", + "git_attr_value" + ] + ], + [ + "blame", + [ + "git_blame_buffer", + "git_blame_file", + "git_blame_free", + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline", + "git_blame_get_hunk_count", + "git_blame_init_options", + "git_blame_options_init" + ] + ], + [ + "blob", + [ + "git_blob_create_from_buffer", + "git_blob_create_from_disk", + "git_blob_create_from_stream", + "git_blob_create_from_stream_commit", + "git_blob_create_from_workdir", + "git_blob_data_is_binary", + "git_blob_dup", + "git_blob_filter", + "git_blob_filter_options_init", + "git_blob_filtered_content", + "git_blob_free", + "git_blob_id", + "git_blob_is_binary", + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_blob_owner", + "git_blob_rawcontent", + "git_blob_rawsize" + ] + ], + [ + "branch", + [ + "git_branch_create", + "git_branch_create_from_annotated", + "git_branch_delete", + "git_branch_is_checked_out", + "git_branch_is_head", + "git_branch_iterator_free", + "git_branch_iterator_new", + "git_branch_lookup", + "git_branch_move", + "git_branch_name", + "git_branch_name_is_valid", + "git_branch_next", + "git_branch_remote_name", + "git_branch_set_upstream", + "git_branch_upstream", + "git_branch_upstream_merge", + "git_branch_upstream_name", + "git_branch_upstream_remote" + ] + ], + [ + "buf", + [ + "git_buf_contains_nul", + "git_buf_dispose", + "git_buf_free", + "git_buf_grow", + "git_buf_is_binary", + "git_buf_set" + ] + ], + [ + "checkout", + [ + "git_checkout_head", + "git_checkout_index", + "git_checkout_options_init", + "git_checkout_tree" + ] + ], + [ + "cherrypick", + [ + "git_cherrypick", + "git_cherrypick_commit", + "git_cherrypick_options_init" + ] + ], + [ + "clone", + [ + "git_clone", + "git_clone_options_init" + ] + ], + [ + "commit", + [ + "git_commit_amend", + "git_commit_author", + "git_commit_author_with_mailmap", + "git_commit_body", + "git_commit_committer", + "git_commit_committer_with_mailmap", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_v", + "git_commit_create_with_signature", + "git_commit_dup", + "git_commit_extract_signature", + "git_commit_free", + "git_commit_header_field", + "git_commit_id", + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_commit_message", + "git_commit_message_encoding", + "git_commit_message_raw", + "git_commit_nth_gen_ancestor", + "git_commit_owner", + "git_commit_parent", + "git_commit_parent_id", + "git_commit_parentcount", + "git_commit_raw_header", + "git_commit_summary", + "git_commit_time", + "git_commit_time_offset", + "git_commit_tree", + "git_commit_tree_id" + ] + ], + [ + "config", + [ + "git_config_add_file_ondisk", + "git_config_backend_foreach_match", + "git_config_delete_entry", + "git_config_delete_multivar", + "git_config_entry_free", + "git_config_find_global", + "git_config_find_programdata", + "git_config_find_system", + "git_config_find_xdg", + "git_config_foreach", + "git_config_foreach_match", + "git_config_free", + "git_config_get_bool", + "git_config_get_entry", + "git_config_get_int32", + "git_config_get_int64", + "git_config_get_mapped", + "git_config_get_multivar_foreach", + "git_config_get_path", + "git_config_get_string", + "git_config_get_string_buf", + "git_config_iterator_free", + "git_config_iterator_glob_new", + "git_config_iterator_new", + "git_config_lock", + "git_config_lookup_map_value", + "git_config_multivar_iterator_new", + "git_config_new", + "git_config_next", + "git_config_open_default", + "git_config_open_global", + "git_config_open_level", + "git_config_open_ondisk", + "git_config_parse_bool", + "git_config_parse_int32", + "git_config_parse_int64", + "git_config_parse_path", + "git_config_set_bool", + "git_config_set_int32", + "git_config_set_int64", + "git_config_set_multivar", + "git_config_set_string", + "git_config_snapshot" + ] + ], + [ + "credential", + [ + "git_credential_default_new", + "git_credential_free", + "git_credential_get_username", + "git_credential_has_username", + "git_credential_ssh_custom_new", + "git_credential_ssh_interactive_new", + "git_credential_ssh_key_from_agent", + "git_credential_ssh_key_memory_new", + "git_credential_ssh_key_new", + "git_credential_username_new", + "git_credential_userpass", + "git_credential_userpass_plaintext_new" + ] + ], + [ + "describe", + [ + "git_describe_commit", + "git_describe_format", + "git_describe_format_options_init", + "git_describe_options_init", + "git_describe_result_free", + "git_describe_workdir" + ] + ], + [ + "diff", + [ + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_commit_as_email", + "git_diff_find_options_init", + "git_diff_find_similar", + "git_diff_foreach", + "git_diff_format_email", + "git_diff_format_email_options_init", + "git_diff_free", + "git_diff_from_buffer", + "git_diff_get_delta", + "git_diff_get_stats", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_is_sorted_icase", + "git_diff_merge", + "git_diff_num_deltas", + "git_diff_num_deltas_of_type", + "git_diff_options_init", + "git_diff_patchid", + "git_diff_patchid_options_init", + "git_diff_print", + "git_diff_stats_deletions", + "git_diff_stats_files_changed", + "git_diff_stats_free", + "git_diff_stats_insertions", + "git_diff_stats_to_buf", + "git_diff_status_char", + "git_diff_to_buf", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index" + ] + ], + [ + "error", + [ + "git_error_clear", + "git_error_last", + "git_error_set", + "git_error_set_oom", + "git_error_set_str" + ] + ], + [ + "fetch", + [ + "git_fetch_options_init" + ] + ], + [ + "filter", + [ + "git_filter_list_apply_to_blob", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_data", + "git_filter_list_apply_to_file", + "git_filter_list_contains", + "git_filter_list_free", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_data", + "git_filter_list_stream_file" + ] + ], + [ + "giterr", + [ + "giterr_clear", + "giterr_last", + "giterr_set_oom", + "giterr_set_str" + ] + ], + [ + "graph", + [ + "git_graph_ahead_behind", + "git_graph_descendant_of", + "git_graph_reachable_from_any" + ] + ], + [ + "ignore", + [ + "git_ignore_add_rule", + "git_ignore_clear_internal_rules", + "git_ignore_path_is_ignored" + ] + ], + [ + "index", + [ + "git_index_add", + "git_index_add_all", + "git_index_add_bypath", + "git_index_add_from_buffer", + "git_index_caps", + "git_index_checksum", + "git_index_clear", + "git_index_conflict_add", + "git_index_conflict_cleanup", + "git_index_conflict_get", + "git_index_conflict_iterator_free", + "git_index_conflict_iterator_new", + "git_index_conflict_next", + "git_index_conflict_remove", + "git_index_entry_is_conflict", + "git_index_entry_stage", + "git_index_entrycount", + "git_index_find", + "git_index_find_prefix", + "git_index_free", + "git_index_get_byindex", + "git_index_get_bypath", + "git_index_has_conflicts", + "git_index_iterator_free", + "git_index_iterator_new", + "git_index_iterator_next", + "git_index_owner", + "git_index_path", + "git_index_read", + "git_index_read_tree", + "git_index_remove", + "git_index_remove_all", + "git_index_remove_bypath", + "git_index_remove_directory", + "git_index_set_caps", + "git_index_set_version", + "git_index_update_all", + "git_index_version", + "git_index_write", + "git_index_write_tree", + "git_index_write_tree_to" + ] + ], + [ + "indexer", + [ + "git_indexer_append", + "git_indexer_commit", + "git_indexer_free", + "git_indexer_hash", + "git_indexer_name", + "git_indexer_new", + "git_indexer_options_init" + ] + ], + [ + "libgit2", + [ + "git_libgit2_features", + "git_libgit2_init", + "git_libgit2_opts", + "git_libgit2_prerelease", + "git_libgit2_shutdown", + "git_libgit2_version" + ] + ], + [ + "mailmap", + [ + "git_mailmap_add_entry", + "git_mailmap_free", + "git_mailmap_from_buffer", + "git_mailmap_from_repository", + "git_mailmap_new", + "git_mailmap_resolve", + "git_mailmap_resolve_signature" + ] + ], + [ + "merge", + [ + "git_merge", + "git_merge_analysis", + "git_merge_analysis_for_ref", + "git_merge_base", + "git_merge_base_many", + "git_merge_base_octopus", + "git_merge_bases", + "git_merge_bases_many", + "git_merge_commits", + "git_merge_file", + "git_merge_file_from_index", + "git_merge_file_input_init", + "git_merge_file_options_init", + "git_merge_file_result_free", + "git_merge_options_init", + "git_merge_trees" + ] + ], + [ + "message", + [ + "git_message_prettify", + "git_message_trailer_array_free", + "git_message_trailers" + ] + ], + [ + "note", + [ + "git_note_author", + "git_note_commit_create", + "git_note_commit_iterator_new", + "git_note_commit_read", + "git_note_commit_remove", + "git_note_committer", + "git_note_create", + "git_note_default_ref", + "git_note_foreach", + "git_note_free", + "git_note_id", + "git_note_iterator_free", + "git_note_iterator_new", + "git_note_message", + "git_note_next", + "git_note_read", + "git_note_remove" + ] + ], + [ + "object", + [ + "git_object__size", + "git_object_dup", + "git_object_free", + "git_object_id", + "git_object_lookup", + "git_object_lookup_bypath", + "git_object_lookup_prefix", + "git_object_owner", + "git_object_peel", + "git_object_rawcontent_is_valid", + "git_object_short_id", + "git_object_string2type", + "git_object_type", + "git_object_type2string", + "git_object_typeisloose" + ] + ], + [ + "odb", + [ + "git_odb_add_alternate", + "git_odb_add_backend", + "git_odb_add_disk_alternate", + "git_odb_exists", + "git_odb_exists_ext", + "git_odb_exists_prefix", + "git_odb_expand_ids", + "git_odb_foreach", + "git_odb_free", + "git_odb_get_backend", + "git_odb_num_backends", + "git_odb_object_data", + "git_odb_object_dup", + "git_odb_object_free", + "git_odb_object_id", + "git_odb_object_size", + "git_odb_object_type", + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_read", + "git_odb_read_header", + "git_odb_read_prefix", + "git_odb_refresh", + "git_odb_set_commit_graph", + "git_odb_stream_finalize_write", + "git_odb_stream_free", + "git_odb_stream_read", + "git_odb_stream_write", + "git_odb_write", + "git_odb_write_multi_pack_index", + "git_odb_write_pack" + ] + ], + [ + "oid", + [ + "git_oid_cmp", + "git_oid_cpy", + "git_oid_equal", + "git_oid_fmt", + "git_oid_is_zero", + "git_oid_ncmp", + "git_oid_nfmt", + "git_oid_pathfmt", + "git_oid_shorten_add", + "git_oid_shorten_free", + "git_oid_shorten_new", + "git_oid_strcmp", + "git_oid_streq", + "git_oid_tostr", + "git_oid_tostr_s" + ] + ], + [ + "oidarray", + [ + "git_oidarray_dispose", + "git_oidarray_free" + ] + ], + [ + "packbuilder", + [ + "git_packbuilder_foreach", + "git_packbuilder_free", + "git_packbuilder_hash", + "git_packbuilder_insert", + "git_packbuilder_insert_commit", + "git_packbuilder_insert_recur", + "git_packbuilder_insert_tree", + "git_packbuilder_insert_walk", + "git_packbuilder_name", + "git_packbuilder_new", + "git_packbuilder_object_count", + "git_packbuilder_set_callbacks", + "git_packbuilder_set_threads", + "git_packbuilder_write", + "git_packbuilder_write_buf", + "git_packbuilder_written" + ] + ], + [ + "patch", + [ + "git_patch_free", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs", + "git_patch_from_buffers", + "git_patch_from_diff", + "git_patch_get_delta", + "git_patch_get_hunk", + "git_patch_get_line_in_hunk", + "git_patch_line_stats", + "git_patch_num_hunks", + "git_patch_num_lines_in_hunk", + "git_patch_owner", + "git_patch_print", + "git_patch_size", + "git_patch_to_buf" + ] + ], + [ + "pathspec", + [ + "git_pathspec_free", + "git_pathspec_match_diff", + "git_pathspec_match_index", + "git_pathspec_match_list_diff_entry", + "git_pathspec_match_list_entry", + "git_pathspec_match_list_entrycount", + "git_pathspec_match_list_failed_entry", + "git_pathspec_match_list_failed_entrycount", + "git_pathspec_match_list_free", + "git_pathspec_match_tree", + "git_pathspec_match_workdir", + "git_pathspec_matches_path", + "git_pathspec_new" + ] + ], + [ + "proxy", + [ + "git_proxy_options_init" + ] + ], + [ + "push", + [ + "git_push_options_init" + ] + ], + [ + "rebase", + [ + "git_rebase_abort", + "git_rebase_commit", + "git_rebase_finish", + "git_rebase_free", + "git_rebase_init", + "git_rebase_inmemory_index", + "git_rebase_next", + "git_rebase_onto_id", + "git_rebase_onto_name", + "git_rebase_open", + "git_rebase_operation_byindex", + "git_rebase_operation_current", + "git_rebase_operation_entrycount", + "git_rebase_options_init", + "git_rebase_orig_head_id", + "git_rebase_orig_head_name" + ] + ], + [ + "refdb", + [ + "git_refdb_compress", + "git_refdb_free", + "git_refdb_new", + "git_refdb_open" + ] + ], + [ + "reference", + [ + "git_reference_cmp", + "git_reference_create", + "git_reference_create_matching", + "git_reference_delete", + "git_reference_dup", + "git_reference_dwim", + "git_reference_ensure_log", + "git_reference_foreach", + "git_reference_foreach_glob", + "git_reference_foreach_name", + "git_reference_free", + "git_reference_has_log", + "git_reference_is_branch", + "git_reference_is_note", + "git_reference_is_remote", + "git_reference_is_tag", + "git_reference_is_valid_name", + "git_reference_iterator_free", + "git_reference_iterator_glob_new", + "git_reference_iterator_new", + "git_reference_list", + "git_reference_lookup", + "git_reference_name", + "git_reference_name_is_valid", + "git_reference_name_to_id", + "git_reference_next", + "git_reference_next_name", + "git_reference_normalize_name", + "git_reference_owner", + "git_reference_peel", + "git_reference_remove", + "git_reference_rename", + "git_reference_resolve", + "git_reference_set_target", + "git_reference_shorthand", + "git_reference_symbolic_create", + "git_reference_symbolic_create_matching", + "git_reference_symbolic_set_target", + "git_reference_symbolic_target", + "git_reference_target", + "git_reference_target_peel", + "git_reference_type" + ] + ], + [ + "reflog", + [ + "git_reflog_append", + "git_reflog_delete", + "git_reflog_drop", + "git_reflog_entry_byindex", + "git_reflog_entry_committer", + "git_reflog_entry_id_new", + "git_reflog_entry_id_old", + "git_reflog_entry_message", + "git_reflog_entrycount", + "git_reflog_free", + "git_reflog_read", + "git_reflog_rename", + "git_reflog_write" + ] + ], + [ + "refspec", + [ + "git_refspec_direction", + "git_refspec_dst", + "git_refspec_dst_matches", + "git_refspec_force", + "git_refspec_free", + "git_refspec_parse", + "git_refspec_rtransform", + "git_refspec_src", + "git_refspec_src_matches", + "git_refspec_string", + "git_refspec_transform" + ] + ], + [ + "remote", + [ + "git_remote_add_fetch", + "git_remote_add_push", + "git_remote_autotag", + "git_remote_connect", + "git_remote_connect_ext", + "git_remote_connect_options_init", + "git_remote_connected", + "git_remote_create", + "git_remote_create_anonymous", + "git_remote_create_detached", + "git_remote_create_options_init", + "git_remote_create_with_fetchspec", + "git_remote_create_with_opts", + "git_remote_default_branch", + "git_remote_delete", + "git_remote_disconnect", + "git_remote_download", + "git_remote_dup", + "git_remote_fetch", + "git_remote_free", + "git_remote_get_fetch_refspecs", + "git_remote_get_push_refspecs", + "git_remote_get_refspec", + "git_remote_init_callbacks", + "git_remote_is_valid_name", + "git_remote_list", + "git_remote_lookup", + "git_remote_ls", + "git_remote_name", + "git_remote_name_is_valid", + "git_remote_owner", + "git_remote_prune", + "git_remote_prune_refs", + "git_remote_push", + "git_remote_pushurl", + "git_remote_refspec_count", + "git_remote_rename", + "git_remote_set_autotag", + "git_remote_set_instance_pushurl", + "git_remote_set_instance_url", + "git_remote_set_pushurl", + "git_remote_set_url", + "git_remote_stats", + "git_remote_stop", + "git_remote_update_tips", + "git_remote_upload", + "git_remote_url" + ] + ], + [ + "repository", + [ + "git_repository_commondir", + "git_repository_config", + "git_repository_config_snapshot", + "git_repository_detach_head", + "git_repository_discover", + "git_repository_fetchhead_foreach", + "git_repository_free", + "git_repository_get_namespace", + "git_repository_hashfile", + "git_repository_head", + "git_repository_head_detached", + "git_repository_head_detached_for_worktree", + "git_repository_head_for_worktree", + "git_repository_head_unborn", + "git_repository_ident", + "git_repository_index", + "git_repository_init", + "git_repository_init_ext", + "git_repository_init_options_init", + "git_repository_is_bare", + "git_repository_is_empty", + "git_repository_is_shallow", + "git_repository_is_worktree", + "git_repository_item_path", + "git_repository_mergehead_foreach", + "git_repository_message", + "git_repository_message_remove", + "git_repository_odb", + "git_repository_oid_type", + "git_repository_open", + "git_repository_open_bare", + "git_repository_open_ext", + "git_repository_open_from_worktree", + "git_repository_path", + "git_repository_refdb", + "git_repository_set_head", + "git_repository_set_head_detached", + "git_repository_set_head_detached_from_annotated", + "git_repository_set_ident", + "git_repository_set_namespace", + "git_repository_set_workdir", + "git_repository_state", + "git_repository_state_cleanup", + "git_repository_workdir" + ] + ], + [ + "reset", + [ + "git_reset", + "git_reset_default", + "git_reset_from_annotated" + ] + ], + [ + "revert", + [ + "git_revert", + "git_revert_commit", + "git_revert_options_init" + ] + ], + [ + "revparse", + [ + "git_revparse", + "git_revparse_ext", + "git_revparse_single" + ] + ], + [ + "revwalk", + [ + "git_revwalk_add_hide_cb", + "git_revwalk_free", + "git_revwalk_hide", + "git_revwalk_hide_glob", + "git_revwalk_hide_head", + "git_revwalk_hide_ref", + "git_revwalk_new", + "git_revwalk_next", + "git_revwalk_push", + "git_revwalk_push_glob", + "git_revwalk_push_head", + "git_revwalk_push_range", + "git_revwalk_push_ref", + "git_revwalk_repository", + "git_revwalk_reset", + "git_revwalk_simplify_first_parent", + "git_revwalk_sorting" + ] + ], + [ + "signature", + [ + "git_signature_default", + "git_signature_dup", + "git_signature_free", + "git_signature_from_buffer", + "git_signature_new", + "git_signature_now" + ] + ], + [ + "stash", + [ + "git_stash_apply", + "git_stash_apply_options_init", + "git_stash_drop", + "git_stash_foreach", + "git_stash_pop", + "git_stash_save", + "git_stash_save_options_init", + "git_stash_save_with_opts" + ] + ], + [ + "status", + [ + "git_status_byindex", + "git_status_file", + "git_status_foreach", + "git_status_foreach_ext", + "git_status_list_entrycount", + "git_status_list_free", + "git_status_list_new", + "git_status_options_init", + "git_status_should_ignore" + ] + ], + [ + "strarray", + [ + "git_strarray_copy", + "git_strarray_dispose", + "git_strarray_free" + ] + ], + [ + "submodule", + [ + "git_submodule_add_finalize", + "git_submodule_add_setup", + "git_submodule_add_to_index", + "git_submodule_branch", + "git_submodule_clone", + "git_submodule_dup", + "git_submodule_fetch_recurse_submodules", + "git_submodule_foreach", + "git_submodule_free", + "git_submodule_head_id", + "git_submodule_ignore", + "git_submodule_index_id", + "git_submodule_init", + "git_submodule_location", + "git_submodule_lookup", + "git_submodule_name", + "git_submodule_open", + "git_submodule_owner", + "git_submodule_path", + "git_submodule_reload", + "git_submodule_repo_init", + "git_submodule_resolve_url", + "git_submodule_set_branch", + "git_submodule_set_fetch_recurse_submodules", + "git_submodule_set_ignore", + "git_submodule_set_update", + "git_submodule_set_url", + "git_submodule_status", + "git_submodule_sync", + "git_submodule_update", + "git_submodule_update_options_init", + "git_submodule_update_strategy", + "git_submodule_url", + "git_submodule_wd_id" + ] + ], + [ + "tag", + [ + "git_tag_annotation_create", + "git_tag_create", + "git_tag_create_from_buffer", + "git_tag_create_lightweight", + "git_tag_delete", + "git_tag_dup", + "git_tag_foreach", + "git_tag_free", + "git_tag_id", + "git_tag_list", + "git_tag_list_match", + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_tag_message", + "git_tag_name", + "git_tag_name_is_valid", + "git_tag_owner", + "git_tag_peel", + "git_tag_tagger", + "git_tag_target", + "git_tag_target_id", + "git_tag_target_type" + ] + ], + [ + "trace", + [ + "git_trace_set" + ] + ], + [ + "transaction", + [ + "git_transaction_commit", + "git_transaction_free", + "git_transaction_lock_ref", + "git_transaction_new", + "git_transaction_remove", + "git_transaction_set_reflog", + "git_transaction_set_symbolic_target", + "git_transaction_set_target" + ] + ], + [ + "tree", + [ + "git_tree_create_updated", + "git_tree_dup", + "git_tree_entry_byid", + "git_tree_entry_byindex", + "git_tree_entry_byname", + "git_tree_entry_bypath", + "git_tree_entry_cmp", + "git_tree_entry_dup", + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw", + "git_tree_entry_free", + "git_tree_entry_id", + "git_tree_entry_name", + "git_tree_entry_to_object", + "git_tree_entry_type", + "git_tree_entrycount", + "git_tree_free", + "git_tree_id", + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_tree_owner", + "git_tree_walk" + ] + ], + [ + "treebuilder", + [ + "git_treebuilder_clear", + "git_treebuilder_entrycount", + "git_treebuilder_filter", + "git_treebuilder_free", + "git_treebuilder_get", + "git_treebuilder_insert", + "git_treebuilder_new", + "git_treebuilder_remove", + "git_treebuilder_write", + "git_treebuilder_write_with_buffer" + ] + ], + [ + "worktree", + [ + "git_worktree_add", + "git_worktree_add_options_init", + "git_worktree_free", + "git_worktree_is_locked", + "git_worktree_is_prunable", + "git_worktree_list", + "git_worktree_lock", + "git_worktree_lookup", + "git_worktree_name", + "git_worktree_open_from_repository", + "git_worktree_path", + "git_worktree_prune", + "git_worktree_prune_options_init", + "git_worktree_unlock", + "git_worktree_validate" + ] + ] ], - [ - "tag.c", - "ex/v1.3.1/tag.html" + "examples": [ + [ + "add.c", + "ex/v1.7.2/add.html" + ], + [ + "args.c", + "ex/v1.7.2/args.html" + ], + [ + "blame.c", + "ex/v1.7.2/blame.html" + ], + [ + "cat-file.c", + "ex/v1.7.2/cat-file.html" + ], + [ + "checkout.c", + "ex/v1.7.2/checkout.html" + ], + [ + "clone.c", + "ex/v1.7.2/clone.html" + ], + [ + "commit.c", + "ex/v1.7.2/commit.html" + ], + [ + "common.c", + "ex/v1.7.2/common.html" + ], + [ + "config.c", + "ex/v1.7.2/config.html" + ], + [ + "describe.c", + "ex/v1.7.2/describe.html" + ], + [ + "diff.c", + "ex/v1.7.2/diff.html" + ], + [ + "fetch.c", + "ex/v1.7.2/fetch.html" + ], + [ + "for-each-ref.c", + "ex/v1.7.2/for-each-ref.html" + ], + [ + "general.c", + "ex/v1.7.2/general.html" + ], + [ + "index-pack.c", + "ex/v1.7.2/index-pack.html" + ], + [ + "init.c", + "ex/v1.7.2/init.html" + ], + [ + "lg2.c", + "ex/v1.7.2/lg2.html" + ], + [ + "log.c", + "ex/v1.7.2/log.html" + ], + [ + "ls-files.c", + "ex/v1.7.2/ls-files.html" + ], + [ + "ls-remote.c", + "ex/v1.7.2/ls-remote.html" + ], + [ + "merge.c", + "ex/v1.7.2/merge.html" + ], + [ + "push.c", + "ex/v1.7.2/push.html" + ], + [ + "remote.c", + "ex/v1.7.2/remote.html" + ], + [ + "rev-list.c", + "ex/v1.7.2/rev-list.html" + ], + [ + "rev-parse.c", + "ex/v1.7.2/rev-parse.html" + ], + [ + "show-index.c", + "ex/v1.7.2/show-index.html" + ], + [ + "stash.c", + "ex/v1.7.2/stash.html" + ], + [ + "status.c", + "ex/v1.7.2/status.html" + ], + [ + "tag.c", + "ex/v1.7.2/tag.html" + ] ] - ] } \ No newline at end of file diff --git a/vendor/libgit2 b/vendor/libgit2 index 0ac7af7cd..efdaa4ac7 160000 --- a/vendor/libgit2 +++ b/vendor/libgit2 @@ -1 +1 @@ -Subproject commit 0ac7af7cd914316e2d3c7d7337ae78618c19c2a2 +Subproject commit efdaa4ac71e067f0c178e94a0c7d4e197bded48d diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index 4767545bc..1c5d1c876 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -22,7 +22,8 @@ "GIT_SSH", "GIT_SSH_MEMORY_CREDENTIALS", "LIBGIT2_NO_FEATURES_H", - "GIT_SHA1_COLLISIONDETECT", + "GIT_SHA1_OPENSSL", + "GIT_SHA256_OPENSSL", "GIT_USE_NSEC", "GIT_HTTPS", # Node's util.h may be accidentally included so use this to guard @@ -35,294 +36,160 @@ "libssh2" ], "sources": [ - "libgit2/include/git2/sys/hashsig.h", - "libgit2/include/git2/sys/merge.h", - "libgit2/include/git2/worktree.h", - "libgit2/src/allocators/failalloc.c", - "libgit2/src/allocators/failalloc.h", - "libgit2/src/allocators/stdalloc.c", - "libgit2/src/allocators/stdalloc.h", - "libgit2/src/commit.c", - "libgit2/src/commit.h", - "libgit2/src/commit_graph.c", - "libgit2/src/commit_graph.h", - "libgit2/src/custom_tls.c", - "libgit2/src/custom_tls.h", - "libgit2/src/alloc.c", - "libgit2/src/alloc.h", - "libgit2/src/annotated_commit.c", - "libgit2/src/annotated_commit.h", - "libgit2/src/apply.c", - "libgit2/src/apply.h", - "libgit2/src/array.h", - "libgit2/src/assert_safe.h", - "libgit2/src/attr_file.c", - "libgit2/src/attr_file.h", - "libgit2/src/attr.c", - "libgit2/src/attr.h", - "libgit2/src/attrcache.c", - "libgit2/src/attrcache.h", - "libgit2/src/bitvec.h", - "libgit2/src/blame_git.c", - "libgit2/src/blame_git.h", - "libgit2/src/blame.c", - "libgit2/src/blame.h", - "libgit2/src/blob.c", - "libgit2/src/blob.h", - "libgit2/src/branch.c", - "libgit2/src/branch.h", - "libgit2/src/buffer.c", - "libgit2/src/buffer.h", - "libgit2/src/cache.c", - "libgit2/src/cache.h", - "libgit2/src/cc-compat.h", - "libgit2/src/checkout.c", - "libgit2/src/checkout.h", - "libgit2/src/cherrypick.c", - "libgit2/src/clone.c", - "libgit2/src/clone.h", - "libgit2/src/commit_list.c", - "libgit2/src/commit_list.h", - "libgit2/src/common.h", - "libgit2/src/config_backend.h", - "libgit2/src/config_cache.c", - "libgit2/src/config_entries.c", - "libgit2/src/config_entries.h", - "libgit2/src/config_file.c", - "libgit2/src/config_mem.c", - "libgit2/src/config_parse.c", - "libgit2/src/config_parse.h", - "libgit2/src/config_snapshot.c", - "libgit2/src/config.c", - "libgit2/src/config.h", - "libgit2/src/crlf.c", - "libgit2/src/date.c", - "libgit2/src/delta.c", - "libgit2/src/delta.h", - "libgit2/src/diff_driver.c", - "libgit2/src/diff_driver.h", - "libgit2/src/diff_file.c", - "libgit2/src/diff_file.h", - "libgit2/src/diff_generate.c", - "libgit2/src/diff_generate.h", - "libgit2/src/diff_parse.c", - "libgit2/src/diff_parse.h", - "libgit2/src/diff_print.c", - "libgit2/src/diff_stats.c", - "libgit2/src/diff_tform.c", - "libgit2/src/diff_tform.h", - "libgit2/src/diff_xdiff.c", - "libgit2/src/diff_xdiff.h", - "libgit2/src/diff.c", - "libgit2/src/diff.h", - "libgit2/src/errors.c", - "libgit2/src/errors.h", - "libgit2/src/email.c", - "libgit2/src/email.h", - "libgit2/src/fetch.c", - "libgit2/src/fetch.h", - "libgit2/src/fetchhead.c", - "libgit2/src/fetchhead.h", - "libgit2/src/filebuf.c", - "libgit2/src/filebuf.h", - "libgit2/src/futils.c", - "libgit2/src/futils.h", - "libgit2/src/filter.c", - "libgit2/src/filter.h", - "libgit2/src/global.h", - "libgit2/src/graph.c", - "libgit2/src/hash.c", - "libgit2/src/hash.h", - "libgit2/src/hash/sha1.h", - "libgit2/src/hash/sha1/sha1dc/sha1.c", - "libgit2/src/hash/sha1/sha1dc/sha1.h", - "libgit2/src/hash/sha1/sha1dc/ubc_check.c", - "libgit2/src/hash/sha1/sha1dc/ubc_check.h", - "libgit2/src/hash/sha1/collisiondetect.c", - "libgit2/src/hash/sha1/collisiondetect.h", - "libgit2/src/hashsig.c", - "libgit2/src/ident.c", - "libgit2/src/idxmap.c", - "libgit2/src/ignore.c", - "libgit2/src/ignore.h", - "libgit2/src/index.c", - "libgit2/src/index.h", - "libgit2/src/indexer.c", - "libgit2/src/indexer.h", - "libgit2/src/iterator.c", - "libgit2/src/iterator.h", - "libgit2/src/khash.h", - "libgit2/src/libgit2.c", - "libgit2/src/libgit2.h", - "libgit2/src/mailmap.c", - "libgit2/src/mailmap.h", - "libgit2/src/map.h", - "libgit2/src/midx.c", - "libgit2/src/midx.h", - "libgit2/src/merge_driver.c", - "libgit2/src/merge_file.c", - "libgit2/src/merge.c", - "libgit2/src/merge.h", - "libgit2/src/message.c", - "libgit2/src/message.h", - "libgit2/src/mwindow.c", - "libgit2/src/mwindow.h", - "libgit2/src/net.c", - "libgit2/src/net.h", - "libgit2/src/netops.c", - "libgit2/src/netops.h", - "libgit2/src/notes.c", - "libgit2/src/notes.h", - "libgit2/src/object_api.c", - "libgit2/src/object.c", - "libgit2/src/object.h", - "libgit2/src/odb_loose.c", - "libgit2/src/odb_mempack.c", - "libgit2/src/odb_pack.c", - "libgit2/src/odb.c", - "libgit2/src/odb.h", - "libgit2/src/offmap.c", - "libgit2/src/offmap.h", - "libgit2/src/oid.c", - "libgit2/src/oid.h", - "libgit2/src/oidarray.c", - "libgit2/src/oidarray.h", - "libgit2/src/oidmap.c", - "libgit2/src/oidmap.h", - "libgit2/src/pack-objects.c", - "libgit2/src/pack-objects.h", - "libgit2/src/pack.c", - "libgit2/src/pack.h", - "libgit2/src/parse.c", - "libgit2/src/parse.h", - "libgit2/src/patch_generate.c", - "libgit2/src/patch_generate.h", - "libgit2/src/patch_parse.c", - "libgit2/src/patch_parse.h", - "libgit2/src/patch.c", - "libgit2/src/patch.h", - "libgit2/src/path.c", - "libgit2/src/path.h", - "libgit2/src/pathspec.c", - "libgit2/src/pathspec.h", - "libgit2/src/pool.c", - "libgit2/src/pool.h", - "libgit2/src/posix.c", - "libgit2/src/posix.h", - "libgit2/src/pqueue.c", - "libgit2/src/pqueue.h", - "libgit2/src/proxy.c", - "libgit2/src/push.c", - "libgit2/src/push.h", - "libgit2/src/reader.c", - "libgit2/src/reader.h", - "libgit2/src/rebase.c", - "libgit2/src/refdb_fs.c", - "libgit2/src/refdb.c", - "libgit2/src/refdb.h", - "libgit2/src/reflog.c", - "libgit2/src/reflog.h", - "libgit2/src/refs.c", - "libgit2/src/refs.h", - "libgit2/src/refspec.c", - "libgit2/src/refspec.h", - "libgit2/src/regexp.c", - "libgit2/src/regexp.h", - "libgit2/src/remote.c", - "libgit2/src/remote.h", - "libgit2/src/repo_template.h", - "libgit2/src/repository.c", - "libgit2/src/repository.h", - "libgit2/src/reset.c", - "libgit2/src/revert.c", - "libgit2/src/revparse.c", - "libgit2/src/revwalk.c", - "libgit2/src/revwalk.h", - "libgit2/src/runtime.c", - "libgit2/src/runtime.h", - "libgit2/src/settings.h", - "libgit2/src/signature.c", - "libgit2/src/signature.h", - "libgit2/src/streams/socket.c", - "libgit2/src/streams/socket.h", - "libgit2/src/streams/openssl_legacy.c", - "libgit2/src/streams/openssl_legacy.h", - "libgit2/src/sortedcache.c", - "libgit2/src/sortedcache.h", - "libgit2/src/stash.c", - "libgit2/src/status.c", - "libgit2/src/status.h", - "libgit2/src/strarray.c", - "libgit2/src/streams/mbedtls.c", - "libgit2/src/streams/mbedtls.h", - "libgit2/src/streams/openssl.c", - "libgit2/src/streams/openssl.h", - "libgit2/src/streams/registry.c", - "libgit2/src/streams/registry.h", - "libgit2/src/strmap.c", - "libgit2/src/strmap.h", - "libgit2/src/strnlen.h", - "libgit2/src/submodule.c", - "libgit2/src/submodule.h", - "libgit2/src/sysdir.c", - "libgit2/src/sysdir.h", - "libgit2/src/tag.c", - "libgit2/src/tag.h", - "libgit2/src/thread.c", - "libgit2/src/thread.h", - "libgit2/src/threadstate.c", - "libgit2/src/threadstate.h", - "libgit2/src/trace.c", - "libgit2/src/trace.h", - "libgit2/src/trailer.c", - "libgit2/src/transaction.c", - "libgit2/src/transport.c", - "libgit2/src/transports/credential_helpers.c", - "libgit2/src/transports/credential.c", - "libgit2/src/transports/git.c", - "libgit2/src/transports/local.c", - "libgit2/src/transports/httpclient.h", - "libgit2/src/transports/httpclient.c", - "libgit2/src/transports/smart_pkt.c", - "libgit2/src/transports/smart_protocol.c", - "libgit2/src/transports/smart.c", - "libgit2/src/transports/smart.h", - "libgit2/src/transports/ssh.c", - "libgit2/src/tree-cache.c", - "libgit2/src/tree-cache.h", - "libgit2/src/tree.c", - "libgit2/src/tree.h", - "libgit2/src/tsort.c", - "libgit2/src/userdiff.h", - "libgit2/src/util.c", - "libgit2/src/util.h", - "libgit2/src/utf8.c", - "libgit2/src/utf8.h", - "libgit2/src/varint.c", - "libgit2/src/varint.h", - "libgit2/src/vector.c", - "libgit2/src/vector.h", - "libgit2/src/wildmatch.c", - "libgit2/src/wildmatch.h", - "libgit2/src/worktree.c", - "libgit2/src/worktree.h", - "libgit2/src/xdiff/xdiff.h", - "libgit2/src/xdiff/xdiffi.c", - "libgit2/src/xdiff/xdiffi.h", - "libgit2/src/xdiff/xemit.c", - "libgit2/src/xdiff/xemit.h", - "libgit2/src/xdiff/xhistogram.c", - "libgit2/src/xdiff/xinclude.h", - "libgit2/src/xdiff/xmacros.h", - "libgit2/src/xdiff/xmerge.c", - "libgit2/src/xdiff/xpatience.c", - "libgit2/src/xdiff/xprepare.c", - "libgit2/src/xdiff/xprepare.h", - "libgit2/src/xdiff/xtypes.h", - "libgit2/src/xdiff/xutils.c", - "libgit2/src/xdiff/xutils.h", - "libgit2/src/zstream.c", - "libgit2/src/zstream.h" + "libgit2/src/libgit2/annotated_commit.c", + "libgit2/src/libgit2/apply.c", + "libgit2/src/libgit2/attr.c", + "libgit2/src/libgit2/attr_file.c", + "libgit2/src/libgit2/attrcache.c", + "libgit2/src/libgit2/blame.c", + "libgit2/src/libgit2/blame_git.c", + "libgit2/src/libgit2/blob.c", + "libgit2/src/libgit2/branch.c", + "libgit2/src/libgit2/buf.c", + "libgit2/src/libgit2/cache.c", + "libgit2/src/libgit2/checkout.c", + "libgit2/src/libgit2/cherrypick.c", + "libgit2/src/libgit2/clone.c", + "libgit2/src/libgit2/commit.c", + "libgit2/src/libgit2/commit_graph.c", + "libgit2/src/libgit2/commit_list.c", + "libgit2/src/libgit2/config.c", + "libgit2/src/libgit2/config_cache.c", + "libgit2/src/libgit2/config_entries.c", + "libgit2/src/libgit2/config_file.c", + "libgit2/src/libgit2/config_mem.c", + "libgit2/src/libgit2/config_parse.c", + "libgit2/src/libgit2/config_snapshot.c", + "libgit2/src/libgit2/crlf.c", + "libgit2/src/libgit2/delta.c", + "libgit2/src/libgit2/diff.c", + "libgit2/src/libgit2/diff_driver.c", + "libgit2/src/libgit2/diff_file.c", + "libgit2/src/libgit2/diff_generate.c", + "libgit2/src/libgit2/diff_parse.c", + "libgit2/src/libgit2/diff_print.c", + "libgit2/src/libgit2/diff_stats.c", + "libgit2/src/libgit2/diff_tform.c", + "libgit2/src/libgit2/diff_xdiff.c", + "libgit2/src/libgit2/email.c", + "libgit2/src/libgit2/errors.c", + "libgit2/src/libgit2/fetch.c", + "libgit2/src/libgit2/fetchhead.c", + "libgit2/src/libgit2/filter.c", + "libgit2/src/libgit2/graph.c", + "libgit2/src/libgit2/hashsig.c", + "libgit2/src/libgit2/ident.c", + "libgit2/src/libgit2/idxmap.c", + "libgit2/src/libgit2/ignore.c", + "libgit2/src/libgit2/index.c", + "libgit2/src/libgit2/indexer.c", + "libgit2/src/libgit2/iterator.c", + "libgit2/src/libgit2/libgit2.c", + "libgit2/src/libgit2/mailmap.c", + "libgit2/src/libgit2/merge.c", + "libgit2/src/libgit2/merge_driver.c", + "libgit2/src/libgit2/merge_file.c", + "libgit2/src/libgit2/message.c", + "libgit2/src/libgit2/midx.c", + "libgit2/src/libgit2/mwindow.c", + "libgit2/src/libgit2/notes.c", + "libgit2/src/libgit2/object.c", + "libgit2/src/libgit2/object_api.c", + "libgit2/src/libgit2/odb.c", + "libgit2/src/libgit2/odb_loose.c", + "libgit2/src/libgit2/odb_mempack.c", + "libgit2/src/libgit2/odb_pack.c", + "libgit2/src/libgit2/offmap.c", + "libgit2/src/libgit2/oid.c", + "libgit2/src/libgit2/oidarray.c", + "libgit2/src/libgit2/oidmap.c", + "libgit2/src/libgit2/pack-objects.c", + "libgit2/src/libgit2/pack.c", + "libgit2/src/libgit2/parse.c", + "libgit2/src/libgit2/patch.c", + "libgit2/src/libgit2/patch_generate.c", + "libgit2/src/libgit2/patch_parse.c", + "libgit2/src/libgit2/path.c", + "libgit2/src/libgit2/pathspec.c", + "libgit2/src/libgit2/proxy.c", + "libgit2/src/libgit2/push.c", + "libgit2/src/libgit2/reader.c", + "libgit2/src/libgit2/rebase.c", + "libgit2/src/libgit2/refdb.c", + "libgit2/src/libgit2/refdb_fs.c", + "libgit2/src/libgit2/reflog.c", + "libgit2/src/libgit2/refs.c", + "libgit2/src/libgit2/refspec.c", + "libgit2/src/libgit2/remote.c", + "libgit2/src/libgit2/repository.c", + "libgit2/src/libgit2/reset.c", + "libgit2/src/libgit2/revert.c", + "libgit2/src/libgit2/revparse.c", + "libgit2/src/libgit2/revwalk.c", + "libgit2/src/libgit2/signature.c", + "libgit2/src/libgit2/stash.c", + "libgit2/src/libgit2/status.c", + "libgit2/src/libgit2/strarray.c", + "libgit2/src/libgit2/streams/mbedtls.c", + "libgit2/src/libgit2/streams/openssl.c", + "libgit2/src/libgit2/streams/openssl_legacy.c", + "libgit2/src/libgit2/streams/registry.c", + "libgit2/src/libgit2/streams/socket.c", + "libgit2/src/libgit2/submodule.c", + "libgit2/src/libgit2/sysdir.c", + "libgit2/src/libgit2/tag.c", + "libgit2/src/libgit2/threadstate.c", + "libgit2/src/libgit2/trace.c", + "libgit2/src/libgit2/trailer.c", + "libgit2/src/libgit2/transaction.c", + "libgit2/src/libgit2/transport.c", + "libgit2/src/libgit2/transports/credential.c", + "libgit2/src/libgit2/transports/credential_helpers.c", + "libgit2/src/libgit2/transports/git.c", + "libgit2/src/libgit2/transports/httpclient.c", + "libgit2/src/libgit2/transports/local.c", + "libgit2/src/libgit2/transports/smart.c", + "libgit2/src/libgit2/transports/smart_pkt.c", + "libgit2/src/libgit2/transports/smart_protocol.c", + "libgit2/src/libgit2/transports/ssh.c", + "libgit2/src/libgit2/tree-cache.c", + "libgit2/src/libgit2/tree.c", + "libgit2/src/libgit2/worktree.c", + "libgit2/deps/xdiff/xdiffi.c", + "libgit2/deps/xdiff/xemit.c", + "libgit2/deps/xdiff/xhistogram.c", + "libgit2/deps/xdiff/xmerge.c", + "libgit2/deps/xdiff/xpatience.c", + "libgit2/deps/xdiff/xprepare.c", + "libgit2/deps/xdiff/xutils.c", + "libgit2/src/util/alloc.c", + "libgit2/src/util/allocators/failalloc.c", + "libgit2/src/util/allocators/stdalloc.c", + "libgit2/src/util/custom_tls.c", + "libgit2/src/util/date.c", + "libgit2/src/util/filebuf.c", + "libgit2/src/util/fs_path.c", + "libgit2/src/util/futils.c", + "libgit2/src/util/hash.c", + "libgit2/src/util/hash/openssl.c", + "libgit2/src/util/net.c", + "libgit2/src/util/pool.c", + "libgit2/src/util/posix.c", + "libgit2/src/util/pqueue.c", + "libgit2/src/util/rand.c", + "libgit2/src/util/regexp.c", + "libgit2/src/util/runtime.c", + "libgit2/src/util/sortedcache.c", + "libgit2/src/util/str.c", + "libgit2/src/util/strmap.c", + "libgit2/src/util/thread.c", + "libgit2/src/util/tsort.c", + "libgit2/src/util/utf8.c", + "libgit2/src/util/util.c", + "libgit2/src/util/varint.c", + "libgit2/src/util/vector.c", + "libgit2/src/util/wildmatch.c", + "libgit2/src/util/zstream.c", ], "conditions": [ ["target_arch=='x64'", { @@ -342,8 +209,7 @@ "GIT_USE_ICONV" ], "sources": [ - "libgit2/src/streams/stransport.c", - "libgit2/src/streams/stransport.h" + "libgit2/src/libgit2/streams/stransport.c", ], "libraries": [ "-liconv", @@ -368,22 +234,18 @@ "dependencies": [ "ntlmclient" ], - "include_dirs": ["libgit2/deps/ntlmclient"], + "include_dirs": [ + "libgit2/deps/ntlmclient" + ], "defines": [ "GIT_NTLM", - "GIT_GSSAPI" + "GIT_GSSAPI", + "GIT_IO_POLL" # theres a chance this breaks bsd ], "sources": [ - "libgit2/src/transports/http.c", - "libgit2/src/transports/http.h", - "libgit2/src/transports/auth.h", - "libgit2/src/transports/auth.c", - "libgit2/src/transports/auth_negotiate.c", - "libgit2/src/transports/auth_negotiate.h", - "libgit2/src/transports/auth_ntlm.c", - "libgit2/src/transports/auth_ntlm.h", - "libgit2/src/streams/tls.c", - "libgit2/src/streams/tls.h" + "libgit2/src/libgit2/streams/tls.c", + "libgit2/src/libgit2/transports/auth.c", + "libgit2/src/libgit2/transports/http.c", ], "cflags": [ " Date: Wed, 7 Feb 2024 12:52:20 -0700 Subject: [PATCH 010/103] remove partial-stash supplement definitions this has been upstreamed --- generate/input/libgit2-supplement.json | 112 ------------------------- 1 file changed, 112 deletions(-) diff --git a/generate/input/libgit2-supplement.json b/generate/input/libgit2-supplement.json index 98f8eb8d8..557410cfc 100644 --- a/generate/input/libgit2-supplement.json +++ b/generate/input/libgit2-supplement.json @@ -1014,44 +1014,6 @@ }, "group": "status_list" }, - "git_stash_save_options_init": { - "file": "git2/stash.h", - "args": [ - { - "name": "opts", - "type": "git_stash_save_options *" - }, - { - "name": "version", - "type": "unsigned int" - } - ], - "return": { - "type": "int" - }, - "group": "stash" - }, - "git_stash_save_with_opts": { - "file": "git2/stash.h", - "args": [ - { - "name": "out", - "type": "git_oid *" - }, - { - "name": "repo", - "type": "git_repository *" - }, - { - "name": "opts", - "type": "git_stash_save_options *" - } - ], - "return": { - "type": "int" - }, - "group": "stash" - }, "git_tree_get_all_filepaths": { "args": [ { @@ -1278,13 +1240,6 @@ "git_revwalk_file_history_walk" ] ], - [ - "stash", - [ - "git_stash_save_options_init", - "git_stash_save_with_opts" - ] - ], [ "status_list", [ @@ -1899,73 +1854,6 @@ } } ], - [ - "git_stash_flags", - { - "type": "enum", - "fields": [ - { - "type": "unsigned int", - "name": "GIT_STASH_DEFAULT", - "value": 0 - }, - { - "type": "unsigned int", - "name": "GIT_STASH_KEEP_INDEX", - "value": 1 - }, - { - "type": "unsigned int", - "name": "GIT_STASH_INCLUDE_UNTRACKED", - "value": 2 - }, - { - "type": "unsigned int", - "name": "GIT_STASH_INCLUDE_IGNORED", - "value": 4 - }, - { - "type": "unsigned int", - "name": "GIT_STASH_KEEP_ALL", - "value": 8 - } - ] - } - ], - [ - "git_stash_save_options", - { - "type": "struct", - "fields": [ - { - "type": "unsigned int", - "name": "version" - }, - { - "type": "const git_signature *", - "name": "stasher" - }, - { - "type": "const char *", - "name": "message" - }, - { - "type": "uint32_t", - "name": "flags" - }, - { - "type": "git_strarray", - "name": "paths" - } - ], - "used": { - "needs": [ - "git_stash_save_with_opts", - "git_stash_save_options_init" - ] - } - } - ], [ "git_status_options", { From ca3720e6855f226236dfb3306cae7040006aa5ea Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 7 Feb 2024 12:53:05 -0700 Subject: [PATCH 011/103] fix nodegit post-upgrade build errors --- generate/input/descriptor.json | 21 ++++++++++++++++--- .../templates/manual/src/git_buf_converter.cc | 2 +- generate/templates/partials/async_function.cc | 2 +- vendor/libgit2.gyp | 3 +++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index c43cb8fee..48e32ba8e 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -70,6 +70,10 @@ "owner": "Object", "removeString": "OBJ_" }, + "oid": { + "JsName": "TYPE", + "owner": "Oid" + }, "proxy": { "JsName": "PROXY", "isMask": false @@ -158,6 +162,9 @@ "return": { "isErrorCode": true } + }, + "git_apply_options_init": { + "ignore": true } } }, @@ -3399,6 +3406,12 @@ "isErrorCode": true } }, + "git_remote_connect_ext": { + "isAsync": true + }, + "git_remote_connect_options_init": { + "ignore": true + }, "git_remote_disconnect": { "isAsync": true, "return": { @@ -3596,6 +3609,11 @@ } } }, + "remote_connect_options": { + "dependencies": [ + "../include/str_array_converter.h" + ] + }, "remote_callbacks": { "fields": { "completion": { @@ -3687,9 +3705,6 @@ }, "isAsync": false }, - "git_repository_init_init_options": { - "ignore": true - }, "git_repository_init_options_init": { "ignore": true }, diff --git a/generate/templates/manual/src/git_buf_converter.cc b/generate/templates/manual/src/git_buf_converter.cc index 1558d39fe..da6f425f8 100644 --- a/generate/templates/manual/src/git_buf_converter.cc +++ b/generate/templates/manual/src/git_buf_converter.cc @@ -22,7 +22,7 @@ git_buf *GitBufConverter::Convert(Local val) { memcpy(memory, v8String.c_str(), stringLength); - result->asize = stringLength; + result->reserved = stringLength; result->size = stringLength; result->ptr = reinterpret_cast(memory); return result; diff --git a/generate/templates/partials/async_function.cc b/generate/templates/partials/async_function.cc index 6041c16f3..1f3b1eaa3 100644 --- a/generate/templates/partials/async_function.cc +++ b/generate/templates/partials/async_function.cc @@ -98,7 +98,7 @@ NAN_METHOD({{ cppClassName }}::{{ cppFunctionName }}) { baton->{{arg.name}} = ({{ arg.cType }})malloc(sizeof({{ arg.cType|replace '*' '' }})); {%if arg.cppClassName == "GitBuf" %} baton->{{arg.name}}->ptr = NULL; - baton->{{arg.name}}->size = baton->{{arg.name}}->asize = 0; + baton->{{arg.name}}->size = baton->{{arg.name}}->reserved = 0; {%endif%} {%endif%} {%endeach%} diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index 1c5d1c876..ea0b5dab4 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -77,6 +77,7 @@ "libgit2/src/libgit2/fetchhead.c", "libgit2/src/libgit2/filter.c", "libgit2/src/libgit2/graph.c", + "libgit2/src/libgit2/grafts.c", "libgit2/src/libgit2/hashsig.c", "libgit2/src/libgit2/ident.c", "libgit2/src/libgit2/idxmap.c", @@ -245,6 +246,8 @@ "sources": [ "libgit2/src/libgit2/streams/tls.c", "libgit2/src/libgit2/transports/auth.c", + "libgit2/src/libgit2/transports/auth_gssapi.c", + "libgit2/src/libgit2/transports/auth_ntlmclient.c", "libgit2/src/libgit2/transports/http.c", ], "cflags": [ From 7968f0011b7f53b7e46f667730797cd7e4d00f02 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 7 Feb 2024 15:54:43 -0700 Subject: [PATCH 012/103] fix missing Oid.fromString function this is now missing from the auto-generated libgit2 documentation because the function declaration is behind a preprocessor check --- generate/input/descriptor.json | 13 ++++++++++++- generate/input/libgit2-supplement.json | 25 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index 48e32ba8e..828a20311 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -2696,7 +2696,18 @@ }, "git_oid_fromstrp": { "isAsync": false, - "jsFunctionName": "fromString" + "jsFunctionName": "fromString", + "args": { + "out": { + "isReturn": true + }, + "str": { + "shouldAlloc": false + } + }, + "return": { + "isErrorCode": true + } }, "git_oid_nfmt": { "ignore": true diff --git a/generate/input/libgit2-supplement.json b/generate/input/libgit2-supplement.json index 557410cfc..4f1ddf864 100644 --- a/generate/input/libgit2-supplement.json +++ b/generate/input/libgit2-supplement.json @@ -667,6 +667,25 @@ }, "group": "index_reuc_entry" }, + "git_oid_fromstrp": { + "type": "function", + "file": "oid.h", + "args": [ + { + "name": "out", + "type": "git_oid *" + }, + { + "name": "str", + "type": "const char *" + } + ], + "return": { + "type": "int" + }, + "isAsync": false, + "group": "oid" + }, "git_patch_convenient_from_diff": { "args": [ { @@ -1152,6 +1171,12 @@ "git_merge_file_result_free" ] ], + [ + "oid", + [ + "git_oid_fromstrp" + ] + ], [ "odb_object", [ From 999b8a12176228267101efb9fa302ab96789ce7d Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 7 Feb 2024 16:39:59 -0700 Subject: [PATCH 013/103] fix merge conflicts test the OID of the resulting commit has changed because the conflicts list of a Merge conflict is no longer commented, thus changing the commit message. the other content of the commit is unchanged --- test/tests/merge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tests/merge.js b/test/tests/merge.js index 00387da82..a5010925b 100644 --- a/test/tests/merge.js +++ b/test/tests/merge.js @@ -1592,7 +1592,7 @@ describe("Merge", function() { }) .then(function(commitOid) { assert.equal(commitOid.toString(), - "03ba156a7a1660f179b6b2dbc6a542fcf88d022d"); + "8221726e3f96e3d3e0258f655e107383dc3c7335"); // merge isn't cleaned up automatically assert.ok(fse.existsSync(path.join(repoGitPath, "MERGE_HEAD"))); From 9c4e40cf510af3ac9789eb3040d6640095c123da Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 7 Feb 2024 16:59:17 -0700 Subject: [PATCH 014/103] fix rename reference test nothing changed about this function but for some reason, the last message in the reflog is now a clone message, instead of the reflog we expect. --- test/tests/refs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tests/refs.js b/test/tests/refs.js index 68b114e85..1cad9f408 100644 --- a/test/tests/refs.js +++ b/test/tests/refs.js @@ -109,7 +109,7 @@ describe("Reference", function() { }) .then(function(reflog) { var refEntryMessage = reflog - .entryByIndex(reflog.entrycount() - 1) + .entryByIndex(0) .message(); // The reflog should have the message passed to // the rename From 4027c95737a4573e5b5cc4f9304d3ee75fd57883 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 8 Feb 2024 14:40:24 -0700 Subject: [PATCH 015/103] fix windows build --- vendor/libgit2.gyp | 2 -- 1 file changed, 2 deletions(-) diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index ea0b5dab4..fe98c956f 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -327,8 +327,6 @@ "libgit2/src/util/allocators/win32_leakcheck.c", "libgit2/src/util/win32/dir.c", "libgit2/src/util/win32/error.c", - "libgit2/src/util/win32/findfile.c", - "libgit2/src/util/win32/git2.rc", "libgit2/src/util/win32/map.c", "libgit2/src/util/win32/path_w32.c", "libgit2/src/util/win32/posix_w32.c", From ebe186467aca5f7f1e51a54de66649be16c38814 Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Wed, 14 Feb 2024 15:51:38 -0700 Subject: [PATCH 016/103] Bump to v0.28.0-alpha.23 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07caa1e75..306f6d99e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## v0.28.0-alpha.23 [(2024-02-14)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.23) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.22...v0.28.0-alpha.23) + +#### Summary of changes +- Bump libgit2 to 1.7.2 + +#### Merged PRs into NodeGit +- [Bump libgit2 to 1.7.2](https://github.com/nodegit/nodegit/pull/1990) + ## v0.28.0-alpha.22 [(2024-02-05)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.22) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.21...v0.28.0-alpha.22) diff --git a/package-lock.json b/package-lock.json index 8517e7dc5..3c19c3fc4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.22", + "version": "0.28.0-alpha.23", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.22", + "version": "0.28.0-alpha.23", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 2c5be0627..948cf7167 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.22", + "version": "0.28.0-alpha.23", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From b853b3d244fc64749fdd1f86382c0a52208a45d4 Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Tue, 20 Feb 2024 15:34:50 -0700 Subject: [PATCH 017/103] Ensure OpenSSL root included in win32 Electron builds --- vendor/libgit2.gyp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index fe98c956f..4fe4c8969 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -283,6 +283,13 @@ "GIT_WINHTTP", "GIT_IO_WSAPOLL" ], + "conditions": [ + ["<(is_electron) == 1", { + "include_dirs": [ + "<(electron_openssl_root)/include" + ] + }] + ], "msvs_settings": { "VCLinkerTool": { "AdditionalDependencies": [ @@ -304,9 +311,6 @@ "/MACHINE:x86", ], }, - }], - ["<(is_electron) == 1", { - "include_dirs": ["<(electron_openssl_root)/include"] }] ], }, From 5bccff63aa097b79c087048a11d1fe65e266920c Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 16 Aug 2022 10:05:22 -0700 Subject: [PATCH 018/103] use builtin SHA1 for libgit compilation apparently this is recommended by both ed and the upstream git project. In fact it's so recommended they're considering deprecating any alternatives. --- vendor/libgit2.gyp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index 4fe4c8969..b2ea9471b 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -22,7 +22,7 @@ "GIT_SSH", "GIT_SSH_MEMORY_CREDENTIALS", "LIBGIT2_NO_FEATURES_H", - "GIT_SHA1_OPENSSL", + "GIT_SHA1_COLLISIONDETECT", "GIT_SHA256_OPENSSL", "GIT_USE_NSEC", "GIT_HTTPS", @@ -172,7 +172,10 @@ "libgit2/src/util/fs_path.c", "libgit2/src/util/futils.c", "libgit2/src/util/hash.c", + "libgit2/src/util/hash/collisiondetect.c", "libgit2/src/util/hash/openssl.c", + "libgit2/src/util/hash/sha1dc/sha1.c", + "libgit2/src/util/hash/sha1dc/ubc_check.c", "libgit2/src/util/net.c", "libgit2/src/util/pool.c", "libgit2/src/util/posix.c", From 80b12acfc61d147461f0faa1bdef6bee16a207ce Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Tue, 20 Feb 2024 16:37:28 -0700 Subject: [PATCH 019/103] Bump to v0.28.0-alpha.24 --- CHANGELOG.md | 12 ++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 306f6d99e..a45fdbe1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## v0.28.0-alpha.24 [(2024-02-20)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.24) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.23...v0.28.0-alpha.24) + +#### Summary of changes +- Use Collision Detection SHA1 implementation +- Fix win32 Electron build due to incorrect OpenSSL include path + +#### Merged PRs into NodeGit +- [Use builtin SHA1 for libgit compilation](https://github.com/nodegit/nodegit/pull/1992) +- [Ensure OpenSSL root included in win32 Electron builds](https://github.com/nodegit/nodegit/pull/1991) + ## v0.28.0-alpha.23 [(2024-02-14)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.23) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.22...v0.28.0-alpha.23) diff --git a/package-lock.json b/package-lock.json index 3c19c3fc4..cd7102078 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.23", + "version": "0.28.0-alpha.24", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.23", + "version": "0.28.0-alpha.24", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 948cf7167..9bdcdd544 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.23", + "version": "0.28.0-alpha.24", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From e132dca1795443feb5cdffd2242ae3b0fca44937 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 11 Apr 2024 10:19:52 -0700 Subject: [PATCH 020/103] fix use-after-free in getReferences we didn't create the repo so we can't be the ones to free it --- generate/templates/manual/repository/get_references.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/generate/templates/manual/repository/get_references.cc b/generate/templates/manual/repository/get_references.cc index 1db6c542f..e57ba97ff 100644 --- a/generate/templates/manual/repository/get_references.cc +++ b/generate/templates/manual/repository/get_references.cc @@ -61,7 +61,6 @@ void GitRepository::GetReferencesWorker::Execute() } git_strarray_free(&reference_names); - git_repository_free(repo); delete baton->out; baton->out = NULL; return; From c024dfb60d33b4fa59eb1d24a3a83b211a3ca5be Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 11 Apr 2024 10:20:13 -0700 Subject: [PATCH 021/103] fix memory leak of repo object in getReferences --- generate/templates/manual/repository/get_remotes.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/generate/templates/manual/repository/get_remotes.cc b/generate/templates/manual/repository/get_remotes.cc index 647498837..800b08d0f 100644 --- a/generate/templates/manual/repository/get_remotes.cc +++ b/generate/templates/manual/repository/get_remotes.cc @@ -51,6 +51,8 @@ void GitRepository::GetRemotesWorker::Execute() if (giterr_last() != NULL) { baton->error = git_error_dup(giterr_last()); } + + git_repository_free(repo); delete baton->out; baton->out = NULL; return; @@ -82,6 +84,9 @@ void GitRepository::GetRemotesWorker::Execute() baton->out->push_back(remote); } + + git_strarray_free(&remote_names); + git_repository_free(repo); } void GitRepository::GetRemotesWorker::HandleErrorCallback() { From c12c5a423808e427056d67e0f9b53af8034927c1 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 12 Apr 2024 10:56:04 -0700 Subject: [PATCH 022/103] fix node-pre-gyp spawn on windows with node 18+ spawning cmd files without shell: true wasn't really allowed before, but not it's expressly disallowed because of a recent vulnerability reported to node --- lifecycleScripts/install.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lifecycleScripts/install.js b/lifecycleScripts/install.js index dc44c836b..ddbb90e9c 100755 --- a/lifecycleScripts/install.js +++ b/lifecycleScripts/install.js @@ -29,11 +29,13 @@ module.exports = function install() { } return new Promise(function(resolve, reject) { + const gypPath = path.join(__dirname, "..", "node_modules", "node-gyp", "bin", "node-gyp.js"); var spawnedNodePreGyp = spawn(nodePreGyp, args, { - env: Object.assign({}, process.env, { - npm_config_node_gyp: path.join(__dirname, "..", "node_modules", - "node-gyp", "bin", "node-gyp.js") - }) + env: { + ...process.env, + npm_config_node_gyp: gypPath + }, + shell: process.platform === "win32" }); spawnedNodePreGyp.stdout.on("data", function(data) { From a71141672c8fcb657fb19d59d76c4f7907324c4f Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Mon, 15 Apr 2024 20:43:47 -0700 Subject: [PATCH 023/103] Bump to v0.28.0-alpha.25 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a45fdbe1e..558e35414 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## v0.28.0-alpha.25 [(2024-04-15)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.25) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.24...v0.28.0-alpha.25) + +#### Summary of changes +- Fix use-after-free in getReferences + +#### Merged PRs into NodeGit +- [Don't free the given repo on error in getReferences and getRemotes](https://github.com/nodegit/nodegit/pull/1995) + ## v0.28.0-alpha.24 [(2024-02-20)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.24) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.23...v0.28.0-alpha.24) diff --git a/package-lock.json b/package-lock.json index cd7102078..01f4ed94d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.24", + "version": "0.28.0-alpha.25", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.24", + "version": "0.28.0-alpha.25", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 9bdcdd544..26953e555 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.24", + "version": "0.28.0-alpha.25", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From b854f7500a5a73187711a055a6a641331ee2243a Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 18 Apr 2024 17:11:10 -0700 Subject: [PATCH 024/103] don't duplicate repo when getting remotes I didn't realize this beforehand but the git_remote object takes the pointer to the repo it's looked up on. Then when we construct a GitRemote, we create a wrapper around *that* repo pointer(because we create a new repository instance per-remote...) which gets garbage collected later. I still don't see a good reason to duplicate the repo pointer and we don't in other cases of constructing GitRemote so I'm gonna remove it. --- generate/templates/manual/repository/get_references.cc | 2 ++ generate/templates/manual/repository/get_remotes.cc | 8 +------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/generate/templates/manual/repository/get_references.cc b/generate/templates/manual/repository/get_references.cc index e57ba97ff..56bc12ac3 100644 --- a/generate/templates/manual/repository/get_references.cc +++ b/generate/templates/manual/repository/get_references.cc @@ -79,6 +79,8 @@ void GitRepository::GetReferencesWorker::Execute() baton->out->push_back(reference); } } + + git_strarray_free(&reference_names); } void GitRepository::GetReferencesWorker::HandleErrorCallback() { diff --git a/generate/templates/manual/repository/get_remotes.cc b/generate/templates/manual/repository/get_remotes.cc index 800b08d0f..46b5f5da2 100644 --- a/generate/templates/manual/repository/get_remotes.cc +++ b/generate/templates/manual/repository/get_remotes.cc @@ -29,11 +29,7 @@ void GitRepository::GetRemotesWorker::Execute() { giterr_clear(); - git_repository *repo; - { - nodegit::LockMaster lockMaster(true, baton->repo); - baton->error_code = git_repository_open(&repo, git_repository_workdir(baton->repo)); - } + git_repository *repo = baton->repo; if (baton->error_code != GIT_OK) { if (giterr_last() != NULL) { @@ -52,7 +48,6 @@ void GitRepository::GetRemotesWorker::Execute() baton->error = git_error_dup(giterr_last()); } - git_repository_free(repo); delete baton->out; baton->out = NULL; return; @@ -86,7 +81,6 @@ void GitRepository::GetRemotesWorker::Execute() } git_strarray_free(&remote_names); - git_repository_free(repo); } void GitRepository::GetRemotesWorker::HandleErrorCallback() { From 26a25cce45c3aca5cd3d940df96f02c56218621c Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 19 Apr 2024 10:01:00 -0700 Subject: [PATCH 025/103] fix left-over free --- generate/templates/manual/repository/get_remotes.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/generate/templates/manual/repository/get_remotes.cc b/generate/templates/manual/repository/get_remotes.cc index 46b5f5da2..a7c316bb0 100644 --- a/generate/templates/manual/repository/get_remotes.cc +++ b/generate/templates/manual/repository/get_remotes.cc @@ -71,7 +71,6 @@ void GitRepository::GetRemotesWorker::Execute() } git_strarray_free(&remote_names); - git_repository_free(repo); delete baton->out; baton->out = NULL; return; From feab8b02ac9dec7e0ae717a21ca187be14ddd8eb Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Fri, 19 Apr 2024 10:16:27 -0700 Subject: [PATCH 026/103] Bump to v0.28.0-alpha.26 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 558e35414..3fd3ef4e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## v0.28.0-alpha.26 [(2024-04-19)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.26) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.25...v0.28.0-alpha.26) + +#### Summary of changes +- Fix use-after-free in getRemotes + +#### Merged PRs into NodeGit +- [Fix double-free introduced trying to fix other double-free](https://github.com/nodegit/nodegit/pull/1996) + ## v0.28.0-alpha.25 [(2024-04-15)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.25) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.24...v0.28.0-alpha.25) diff --git a/package-lock.json b/package-lock.json index 01f4ed94d..799afbdea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.25", + "version": "0.28.0-alpha.26", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.25", + "version": "0.28.0-alpha.26", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 26953e555..e5f85e8f0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.25", + "version": "0.28.0-alpha.26", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From 8031ded1384e2f4882414f549f7ab117ea670faf Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 30 May 2024 14:16:36 -0700 Subject: [PATCH 027/103] bump nan fixes build failure on electron 29+ --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 799afbdea..ed7d298bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@axosoft/nan": "^2.18.0-gk.2", + "@axosoft/nan": "^2.19.0-gk.1", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", "got": "^11.8.6", @@ -38,9 +38,9 @@ } }, "node_modules/@axosoft/nan": { - "version": "2.18.0-gk.2", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.18.0-gk.2.tgz", - "integrity": "sha512-R85blIk4tODD/tIQ1nezCs4O6RhWzPqB1Ls79fBEfUtZ9Zgq5s2c5mPGmWiS2+wAXaw2YgRhsBfqLFURH9mcPw==" + "version": "2.19.0-gk.1", + "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.19.0-gk.1.tgz", + "integrity": "sha512-Ovw3ZF814D1FEebGOD0jUseIpN7m8k0Y981qs75FUx+Dgnb3Y1T1Ey/02XccY+7WpLvX+KpSqKAV1TDDuSBH3A==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -4805,9 +4805,9 @@ }, "dependencies": { "@axosoft/nan": { - "version": "2.18.0-gk.2", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.18.0-gk.2.tgz", - "integrity": "sha512-R85blIk4tODD/tIQ1nezCs4O6RhWzPqB1Ls79fBEfUtZ9Zgq5s2c5mPGmWiS2+wAXaw2YgRhsBfqLFURH9mcPw==" + "version": "2.19.0-gk.1", + "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.19.0-gk.1.tgz", + "integrity": "sha512-Ovw3ZF814D1FEebGOD0jUseIpN7m8k0Y981qs75FUx+Dgnb3Y1T1Ey/02XccY+7WpLvX+KpSqKAV1TDDuSBH3A==" }, "@isaacs/cliui": { "version": "8.0.2", diff --git a/package.json b/package.json index e5f85e8f0..8f4e496bb 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "node": ">= 16" }, "dependencies": { - "@axosoft/nan": "^2.18.0-gk.2", + "@axosoft/nan": "^2.19.0-gk.1", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", "got": "^11.8.6", From 0690072e0e85abcdfbf816a49c53632cd67c4e82 Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Thu, 6 Jun 2024 16:29:29 -0700 Subject: [PATCH 028/103] Bump to v0.28.0-alpha.27 --- CHANGELOG.md | 12 +++++++++++- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fd3ef4e3..1ebde8c92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log -## v0.28.0-alpha.26 [(2024-04-19)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.26) +## v0.28.0-alpha.27 [(2024-06-06)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.27) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.26...v0.28.0-alpha.27) + +#### Summary of changes +- Build on Electron 29+ + +#### Merged PRs into NodeGit +- [Fix build failure on electron 29+](https://github.com/nodegit/nodegit/pull/1998) + +## v0.28.0-alpha.26 [(2024-04-19)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.26) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.25...v0.28.0-alpha.26) diff --git a/package-lock.json b/package-lock.json index ed7d298bd..6e78198bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.26", + "version": "0.28.0-alpha.27", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.26", + "version": "0.28.0-alpha.27", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 8f4e496bb..3a6e3eb8d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.26", + "version": "0.28.0-alpha.27", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From 137e9ccf58c48ac39e1b7e2d9b62c6586ae4c9c4 Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 24 Jun 2024 09:59:30 -0700 Subject: [PATCH 029/103] bump nan again for electron 31 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e78198bb..58f48126b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@axosoft/nan": "^2.19.0-gk.1", + "@axosoft/nan": "^2.20.0-gk.1", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", "got": "^11.8.6", @@ -38,9 +38,9 @@ } }, "node_modules/@axosoft/nan": { - "version": "2.19.0-gk.1", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.19.0-gk.1.tgz", - "integrity": "sha512-Ovw3ZF814D1FEebGOD0jUseIpN7m8k0Y981qs75FUx+Dgnb3Y1T1Ey/02XccY+7WpLvX+KpSqKAV1TDDuSBH3A==" + "version": "2.20.0-gk.1", + "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.20.0-gk.1.tgz", + "integrity": "sha512-IHQhM1EddFkgPuLMWvMU/qpNyNaNTlCMTXp79Pb36HJRgV/vai3gxPh0csluVqDyXS4zdqXRiuw1lVs+N12R0g==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -4805,9 +4805,9 @@ }, "dependencies": { "@axosoft/nan": { - "version": "2.19.0-gk.1", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.19.0-gk.1.tgz", - "integrity": "sha512-Ovw3ZF814D1FEebGOD0jUseIpN7m8k0Y981qs75FUx+Dgnb3Y1T1Ey/02XccY+7WpLvX+KpSqKAV1TDDuSBH3A==" + "version": "2.20.0-gk.1", + "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.20.0-gk.1.tgz", + "integrity": "sha512-IHQhM1EddFkgPuLMWvMU/qpNyNaNTlCMTXp79Pb36HJRgV/vai3gxPh0csluVqDyXS4zdqXRiuw1lVs+N12R0g==" }, "@isaacs/cliui": { "version": "8.0.2", diff --git a/package.json b/package.json index 3a6e3eb8d..c6cb59a15 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "node": ">= 16" }, "dependencies": { - "@axosoft/nan": "^2.19.0-gk.1", + "@axosoft/nan": "^2.20.0-gk.1", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", "got": "^11.8.6", From e10267ba307e26d6ec2ea095de1d9fe5e1214cf6 Mon Sep 17 00:00:00 2001 From: Ian Hattendorf Date: Tue, 2 Jul 2024 11:52:43 -0700 Subject: [PATCH 030/103] Bump to v0.28.0-alpha.28 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ebde8c92..247721a00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## v0.28.0-alpha.28 [(2024-07-01)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.28) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.27...v0.28.0-alpha.28) + +#### Summary of changes +- Build on Electron 31+ + +#### Merged PRs into NodeGit +- [Bump nan again for electron 31](https://github.com/nodegit/nodegit/pull/2000) + ## v0.28.0-alpha.27 [(2024-06-06)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.27) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.26...v0.28.0-alpha.27) diff --git a/package-lock.json b/package-lock.json index 58f48126b..33bad9ebb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.27", + "version": "0.28.0-alpha.28", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.27", + "version": "0.28.0-alpha.28", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index c6cb59a15..6dba1e13f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.27", + "version": "0.28.0-alpha.28", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From a4be2f56ed84fd01ccd31e6b5195da2d176940da Mon Sep 17 00:00:00 2001 From: Sergey Glukhov Date: Mon, 3 Feb 2025 15:53:05 +0300 Subject: [PATCH 031/103] fix linux actions --- .github/workflows/tests.yml | 74 ++++++++++--------------------------- 1 file changed, 19 insertions(+), 55 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6d5114d6a..2c3e9e4ff 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,29 +14,12 @@ jobs: name: "Linux Tests" strategy: matrix: - node: [16] # 18+ requires GLIBC 2.28+ - runs-on: ubuntu-latest - container: ubuntu:16.04 + node: [16, 18, 20, 22] + fail-fast: false + runs-on: ubuntu-20.04 steps: - name: Install Dependencies for Ubuntu - # git >= 2.18 required for actions/checkout git support - run: apt-get update && apt-get install -y software-properties-common && add-apt-repository -y ppa:git-core/ppa && apt-get update && apt-get install -y git build-essential clang libssl-dev libkrb5-dev libc++-dev wget - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - - - name: Setup python 3.6 - env: - CC: clang - CXX: clang++ - run: | - mkdir ~/python - cd ~/python - wget https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tgz - tar -xvf Python-3.6.15.tgz - cd Python-3.6.15 - ./configure - make - make install + run: sudo apt-get update && sudo apt-get install -y software-properties-common git build-essential clang libssl-dev libkrb5-dev libc++-dev wget zlib1g-dev - name: Setup Environment run: | @@ -49,31 +32,20 @@ jobs: git config --global user.name "John Doe" git config --global user.email johndoe@example.com - # v4 requires node 20, which won't run due to GLIBC 2.28+ requirement - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.6" - name: Use Node.js - # v4 requires node 20, which won't run due to GLIBC 2.28+ requirement - uses: actions/setup-node@v3 - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} check-latest: true - name: Install - env: - CC: clang - CXX: clang++ - npm_config_clang: 1 - GYP_DEFINES: use_obsolete_asm=true - # There is a race condition in node/generate that needs to be fixed - # Node 16 changed the logic it uses to select it's UID which means to make node run as root and not 1001, we need to chwon the current directory. More Details: - # https://stackoverflow.com/questions/70298238/getting-eaccess-when-running-npm-8-as-root - run: | - chown root.root -R . - npm set unsafe-perm true - node utils/retry npm install + run: npm install - name: Test run: | @@ -98,10 +70,11 @@ jobs: name: "macOS Tests" strategy: matrix: - node: [16, 18, 20] - runs-on: macOS-12 - # This is mostly the same as the Linux steps, waiting for anchor support - # https://github.com/actions/runner/issues/1182 + node: [16, 18, 20, 22] + fail-fast: false + runs-on: macOS-13 + # This is mostly the same as the Linux steps, waiting for anchor support + # https://github.com/actions/runner/issues/1182 steps: - name: Setup Environment run: | @@ -118,20 +91,12 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: node-version: ${{ matrix.node }} check-latest: true - name: Install - env: - CC: clang - CXX: clang++ - npm_config_clang: 1 - GYP_DEFINES: use_obsolete_asm=true - # There is a race condition in node/generate that needs to be fixed - run: node utils/retry npm install + run: npm install - name: Test run: | @@ -156,8 +121,9 @@ jobs: name: Windows Tests strategy: matrix: - node: [16, 18, 20] + node: [16, 18, 20, 22] arch: [x86, x64] + fail-fast: false runs-on: windows-2019 steps: - name: Setup Environment @@ -172,8 +138,6 @@ jobs: - name: Use Node.js uses: actions/setup-node@v4 - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true with: node-version: ${{ matrix.node }} check-latest: true From 053e0bffc6d5cc5c88c99373de620f10bac2605b Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 4 Feb 2025 15:03:06 -0700 Subject: [PATCH 032/103] update test ssh key --- test/id_rsa.enc | 2 +- test/id_rsa.pub | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/id_rsa.enc b/test/id_rsa.enc index cd8879bef..8c992bebd 100644 --- a/test/id_rsa.enc +++ b/test/id_rsa.enc @@ -1 +1 @@ -LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBd1pCektEVVVaQjJEUk94SjBDM1JjVElGWEtob0RUMkE0YTFvaXpKV0xzNlpoSEZKCjRjRnQ4eldpR3VDZGlaUnBFVFlHR1ZZbXRTSE5WZDVLQ1R4TjJEdHZuc1FIeVFTRDNtK2p0YWd3QTNOb1JSUjgKM2R2TUpoeWxKRHV0Y3M2Tm1ZdzBIMmhGYll6ZC9XSXN0ZlFHM1hUZDI4emE0TDdrRStlK0gydWtZSVpka1gzbgpDbUR1KzRod05VUmx5QlhQSVhsMVNGTGxGZjR4NDIrZWxxcUJ4L0w4cmRRNmxNL1BhTW9oNnZBcEx0S3N5amZOCkFqb1htVDdIZ05STDA5TTVTSUcxd2NjSW96ZU1VWnJ5Snl0SHdlU25QYTk1SFhSOXJVKzFkUFd6aFNiTHhrR2sKSmtOVmhVd3FvNlFSY05RaHluRzN6eXpzV3k2VlNFZllNc2ROMFFJREFRQUJBb0lCQUJzWk5QWUJFRnkvd1B2cQpOSjgvZXQzbENka2gvb2MwQUJJWUs5V284MlhVS0t2aERGM2RyWjNwK1VyWC9WWWdmK0VYOWh5ZjhnVlR1U0ozClgxZ1JxRGhJZ2VUeFBzSEdyd3Q2QjZwTDVJVG5LRWJiaW11bzlOaTFFKzJScVVPMFpTQ0UvMXNTUnY0Q1JhWE8KazhIWmF3aWY3dHR4djRiTlVyTHlzNnhFYnB2UWxPTXpnczRzL09CQi9YTUVxbkZSR1BKZWVUeThia09XeVR3bApMajA2bnEyYnJzNHFLNGVpakkvTW9HeTFDRDhKQ3BMNGdHMzlHUFRYZDhHcHVkWG1kZWxEbjFFMHQ5bmhMNlNlCmFPTWFpUGh5N2tCSkQ0d1ovL1daVFNSMVh5ak5CSDNER2tOWnhQSVdjWCt3SkZ5Tm9MYlNiVlNkYS83RHR2cDMKQ1BmaU5oRUNnWUVBLyszSnN3U3pjVkVBTk5GNU9MWjc2eCtUT0RrWjlUNllGNFNSOC91SmpOVmlXZ1VwWDd2dwpteVhGKzJBd3pOYW90YkJLbU5HNjE5QmNVZU1tUUI3NmMrVWlNTGVKdUpjVC9KajB4bUVVb3BIb25HcUVJY3ZnCkhnNmNhZkUxaXM3ZCtsNjY5YmZqaXRseCszbXVGMkNZbnlsU04xTFdIeElJVFZVajNCbWNXcVVDZ1lFQXdaNDUKV2RhSGZLN0c2R2pJN2xpRFFUNFpsc2xBOGRtTHYySmwyRXhCQk1vWTNtM1NyZTQyOHoyWkZhNE8vbnNCWVAwYQpEeGdZbVgyMGZRR2NiUHVnS2RDWUhjN0hrS2JNVTFHd2lWQ0dwRFlaQ20yZ0pLVHZhbTNkWU5haUFmcTVEeWhQCnpEQ1pOSjVyclNNcHJYc3VSdjJPNGM1dThxdEo1QnlhT0pCak9yMENnWUJNbGtBeHprcFVzc1M1Q2FhWkRpTHYKTGJmRXIzSFJMallkYzVLcHpMQlE4TnBKemhtZmlJSnNLMVdmOEIwcWIySjFYSmcyT3kwS3dGT2dQYldJb3J5WQpTZzE5UHE5OENkbjFVV0NPclNhYnI4WklhS2U1NVdUZ0djYzgvTzNrNkJzTmZhTzlQSlpmU3NzTlVsQ0N0bWwxCjE4dSt1bzlSSlBoUERCZDdHajdyOFFLQmdGcmF4V3k3dDI0eGtaTURnSzRmaU0vM3RRaEZ2aHovQ1kyd1BieEcKNUFlOFVma21MY09DVWZUSVJlcWZkOWZBbnNBRlpOSUthNWl6SFJ1L3dzaDlOd1lJSlNsdm04UHNFVnRUclBSeQpmZ3ZXZXQraTI0LzJlWVpHc2FnOGIxOWdhTENOS1F6WERUMWN6WWc4Uk5Wc1JTWDQyN0JvTHpYZVhOa1c5dU51CkZiSTlBb0dBVjJreGNkY0tTNEJ0TkhLUGVHZ1Y4N2RNMERXaFFhQXRFWEVJY1FxdUZ0YmEwbEFYaW9HSGc4VTQKemVpdWdsNFF6Y2h3azVxZDN3blo0U09oeDBzMTYvNWdRRGxua2JqRlI2RVJFVW52TFJ3VjkyekJYVVRPR0lraApaN1o0cmNnVUtsVkFhSFQzT0hOL2xUeXFKRy9pYitLNHdaaGJ6dGwvb3grSlVGc3ZEOTg9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== \ No newline at end of file +LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUNGd0FBQUFkemMyZ3RjbgpOaEFBQUFBd0VBQVFBQUFnRUFzRG5CRGV2dVZTNzFLVHg0OEdiRzlMeHp3UUJ1OVVYc25Qd3ROdGh3bHdpRmpYL1M5U0lKCnhwNENIdVBjS3JYdjJLcTI1NnRMby9jcENkZk9waFhjSWNpZ09RNzc1MGQwSDAvZkpyMHpzWjh3akFiZ1ZPOXpPanlRbXUKbE15WWNzWmpkMURESjQ2djBwNGU4YTZsbldwbHduVFNzVVB3OVVXRkt0MDRDcDZSNVpXaHdlTDg5cmI2Qk13SEJySURNWQpWY2VZSVlGZFRsZWU5MStGQWhLZVVFVE9LNzF6aWRPQXY0Ti9jdnRUQWNtYmlhTTgvUEtXVDEvRDFCeDJ6YzJsY0d3Y2RWCkJiaUxWQmNZKzJReGZzWjVlMGk5SGhKdjdCcWw4SXgxTTYzaVlkQU0yQUFseEZkTU1ONEMwUW1YeDlkSkxTdFdFcXRXZ2gKSHNGY05MSnpDTUs5MGRnSEh3OHZnOTFtdGNMVjVUS01nb3RXaEI2YjRMdkZEUUlac2V5RnY0cVJnM2NOb1hlUFY3bmg3OQp1YVlhL0NremJrNEdZQytsbXhENndFZDhHOGM4d0s4cjJ3NW04ZTAwWmdrQUVhbnovZGZRZ1dzdHBkajRmK05RdUVXRnN6CnNpeGlrTUtOVnJhWnpoRmFUaE9DbTNUUHNmY05LZ2NBN3VXVGJZNllNMlQ1SmowU3ZHRW5Ka1EzUitIK1RIamxqc0wrMnUKWVRCM2NlZ2dXc1dzSmlyazFTdjNlMURxUlhUeGNTcDlyRWlMaHVxV0NLL0t4QzZyWGpBMGJWSkgxMENnRjJNZWtVRTJtNApmeVZjUE5ML0VYWVN1V2t6elZzTDFjdzJSc3psS3RIQVJMNzRISlp6Z3RZMjZ2SlFLOTlub09QMk10aEc0dWI5aWRyajN1CmtBQUFkQVVoVnBRRklWYVVBQUFBQUhjM05vTFhKellRQUFBZ0VBc0RuQkRldnVWUzcxS1R4NDhHYkc5THh6d1FCdTlVWHMKblB3dE50aHdsd2lGalgvUzlTSUp4cDRDSHVQY0tyWHYyS3EyNTZ0TG8vY3BDZGZPcGhYY0ljaWdPUTc3NTBkMEgwL2ZKcgowenNaOHdqQWJnVk85ek9qeVFtdWxNeVljc1pqZDFEREo0NnYwcDRlOGE2bG5XcGx3blRTc1VQdzlVV0ZLdDA0Q3A2UjVaCldod2VMODlyYjZCTXdIQnJJRE1ZVmNlWUlZRmRUbGVlOTErRkFoS2VVRVRPSzcxemlkT0F2NE4vY3Z0VEFjbWJpYU04L1AKS1dUMS9EMUJ4MnpjMmxjR3djZFZCYmlMVkJjWSsyUXhmc1o1ZTBpOUhoSnY3QnFsOEl4MU02M2lZZEFNMkFBbHhGZE1NTgo0QzBRbVh4OWRKTFN0V0VxdFdnaEhzRmNOTEp6Q01LOTBkZ0hIdzh2ZzkxbXRjTFY1VEtNZ290V2hCNmI0THZGRFFJWnNlCnlGdjRxUmczY05vWGVQVjduaDc5dWFZYS9Da3piazRHWUMrbG14RDZ3RWQ4RzhjOHdLOHIydzVtOGUwMFpna0FFYW56L2QKZlFnV3N0cGRqNGYrTlF1RVdGc3pzaXhpa01LTlZyYVp6aEZhVGhPQ20zVFBzZmNOS2djQTd1V1RiWTZZTTJUNUpqMFN2RwpFbkprUTNSK0grVEhqbGpzTCsydVlUQjNjZWdnV3NXc0ppcmsxU3YzZTFEcVJYVHhjU3A5ckVpTGh1cVdDSy9LeEM2clhqCkEwYlZKSDEwQ2dGMk1la1VFMm00ZnlWY1BOTC9FWFlTdVdrenpWc0wxY3cyUnN6bEt0SEFSTDc0SEpaemd0WTI2dkpRSzkKOW5vT1AyTXRoRzR1YjlpZHJqM3VrQUFBQURBUUFCQUFBQ0FGL2pUUlNTSitEWjZEUkQzMXFQMGZvaEFLc24zVGhBai9ycgpqSDZuVHJ3ZnV1dS9mYjQ4Z3kwN2xOUFNFRjU5R01EQVF6M1RpeGp3eDdlL1lZWWxwdDRMR0lOemo4WE1yM2JLTXhZVkpTCmVsQXZsdVZHcGkwRVFENkhzaUx0SUpaek5IUWIwZFNZWXpzckpwTkRBSUtpL2pQTTlVZlhQQ2w1Wm5ob1hySUlqa0pxSk4KWW0rSllXQWZ6U041Q0JGQlBDQ1F0a3FrNVd4WGFQd1pVWHBMUHpGVi93ajEwUVJSdldCMzRNVmowMHJKdElReitsOTRjQwpsSVpubm44dzBRdE5CelF4amlYS3dLVkUzQ2NONFpDbDFqd3EzQnljMDZHWTdtbnhRMlNYWFBMMERja0thNEptTGVMNUtuCmNyelJiRUllRWVEM3VoRnpVM0kwckVOUVJoNjY5SXByYWpmUnpMY0Z4bkM3M0JTMVJUeWNmcGRTR0ZPUFhULzJOZDM2MlgKU2VwNlZOeFN0NWE2d2tXZ0hKaDJIOGRQY25pREgxRG1yQWRQOTdBa2VpMWxtWHFiekNJVjlwaWQzbWZNQUpiSm00UmhRcApURHZldUU4TmlCZ0k2MlRrd3Vjb1cyeTNMZFN2MTM3aUpCbkpTYzExRzlBNWJHMnlRWEUyYWlYUXhIeW9UMlF0VmY1WklYClJhVkx1YlFuY1NnTEJqZ0NkMUNsakI1amxSWU10U2M4YkZhL1RKNW9YT1ZNdENYNHhhcVo3Z3JHS05CcUJsRFRXblRnWk0KbXZ3UFZ1Y2xlNzI4MzZPSlBYbzFMajNLM2ttcnhDMXVORzA3NjMvemJLOWl2QWF1SFRMMnQ0cHkra0k0NC9ZcERvR2sybgp4bFdNZEQzTDNKVXgzUXo5THhBQUFCQVFDVzh6YVI5T2VPMXAzWGkxNFg5MDNuOWNjY1JVcGRMOEZSUDZ5MWkrVFpmN2RSClpla3ltWDZGbU9qbTAvbm9XM0hwZVoyYmJEaUFQRFp1VzRmUW1nWjBnemxvZERDZUp2UHF2U1FzUWVISjRjMkdzVG4xVHMKMzNYU1RWeFVLd3dqbEZ2TGpvMkJBdmlBaGZ3YUN3UmxUaGlrRy9CdC8wbVhObTF6cHFZbnFBc1pXb3JqOVVWQTYyT1c4MQpDVVgxL2RVMWtjUkFpY2NsUWxqTlNEWGJ6aWJVN2pvdXpzQzNFVUVEcG1HZG1UUVh4WHNCNTFVTmh5eVZoMmdBVnFDMDAyCm1Kd2dFVXNqcHFzYUw2TTczYXo4Mzg4b0RwWGJwMUNLTER5aDh2SnBJTkgwak5OZEQxd1dvQVJRZUhzL05iUUZLUThJTkkKdlBzWnowWkdmRzcvdVMrSkFBQUJBUURiVG94anFOUHJGT1piWDkzeDZONTVJV05DVUt1cUwxVks2MURIYUtYZmlpd0hEeQpRYjEzUnhPREk2RlNXMElIeVpqMDh5ZjBTVElGOXNZTUFwNy9GS1FORElqVVZyMVI2Z0RFZ0F3K2N5L2dpeWowVWxxSE1zCmdUUnNnSmEvSjJQYnViRDRWMzdZUkQ4enB2a0tmOFNKMGJRalEwaUx0YUNVYm9BUDVmYWFYbElLdmUyeHpLdVgzT0l2TTMKTyt1UTBJMDZqZGtMc2JBRzEvZ0E5emJmaW1wTHdJQkJkVUl6djdoRTJqOGJoak9HbTVTSU5rczRZZVROVFZXZHhmcjdiLwowVlFPSXJDd0RQKytCaGM5N2QrWDdZVVVkUUgzUHBTV3JWb0pOc0hNcHVUWmhpd0NnRk1NT1RYSEdWbGpFOHJnZGVTbFBzCmdCMXNRaHhyUlNNQitmQUFBQkFRRE50ZTQrMW5sWUtWNkVRWXhyeUpVQUtPdE1LSmZBNVhSVHNzWGhzRXlSMDBxL1djd3QKcmZmMzV3N2ZBWEJWd2VOemVlaXlwZXZKc1lnUnBBdTlPTVl0d1hFQlY1Rit5SUJRa2lHMTdiU2V6L3NibnlvaVdVNkJBWApHYmRDamZhNGVVRVRGemJjbGp0S2xnQUJSR2pXRDdQRk82V2ZwQWpRcGNqYVFwSVQ2WHpYZnVmV2d0bG5Ga1d5UGRXekpMCjQyV1lDemNhU3JKU0ZLZnpORHZtUjNzbllOZHB1bE1aUEtlRnZtZTJUWmp1VFJSRTd1OEtaRnhQalBkK0E4R2FuQnJOUGkKalBjSXE1SmFDWnpMMzVkaGlYcGJCQzJTMlh5cktwbWMrWEpRODJxZU93ZDZlOW9KVjEzUDdKU3NZYUVqdlFUeU5yNkE2bgo0ODIvcW1SZHUxUjNBQUFBQm01dmJtRnRaUUVDQXdRPQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K \ No newline at end of file diff --git a/test/id_rsa.pub b/test/id_rsa.pub index aed84e47b..77f36c653 100644 --- a/test/id_rsa.pub +++ b/test/id_rsa.pub @@ -1 +1 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBkHMoNRRkHYNE7EnQLdFxMgVcqGgNPYDhrWiLMlYuzpmEcUnhwW3zNaIa4J2JlGkRNgYZVia1Ic1V3koJPE3YO2+exAfJBIPeb6O1qDADc2hFFHzd28wmHKUkO61yzo2ZjDQfaEVtjN39Yiy19AbddN3bzNrgvuQT574fa6Rghl2RfecKYO77iHA1RGXIFc8heXVIUuUV/jHjb56WqoHH8vyt1DqUz89oyiHq8Cku0qzKN80COheZPseA1EvT0zlIgbXBxwijN4xRmvInK0fB5Kc9r3kddH2tT7V09bOFJsvGQaQmQ1WFTCqjpBFw1CHKcbfPLOxbLpVIR9gyx03R +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCwOcEN6+5VLvUpPHjwZsb0vHPBAG71Reyc/C022HCXCIWNf9L1IgnGngIe49wqte/Yqrbnq0uj9ykJ186mFdwhyKA5DvvnR3QfT98mvTOxnzCMBuBU73M6PJCa6UzJhyxmN3UMMnjq/Snh7xrqWdamXCdNKxQ/D1RYUq3TgKnpHllaHB4vz2tvoEzAcGsgMxhVx5ghgV1OV573X4UCEp5QRM4rvXOJ04C/g39y+1MByZuJozz88pZPX8PUHHbNzaVwbBx1UFuItUFxj7ZDF+xnl7SL0eEm/sGqXwjHUzreJh0AzYACXEV0ww3gLRCZfH10ktK1YSq1aCEewVw0snMIwr3R2AcfDy+D3Wa1wtXlMoyCi1aEHpvgu8UNAhmx7IW/ipGDdw2hd49XueHv25phr8KTNuTgZgL6WbEPrAR3wbxzzAryvbDmbx7TRmCQARqfP919CBay2l2Ph/41C4RYWzOyLGKQwo1WtpnOEVpOE4KbdM+x9w0qBwDu5ZNtjpgzZPkmPRK8YScmRDdH4f5MeOWOwv7a5hMHdx6CBaxawmKuTVK/d7UOpFdPFxKn2sSIuG6pYIr8rELqteMDRtUkfXQKAXYx6RQTabh/JVw80v8RdhK5aTPNWwvVzDZGzOUq0cBEvvgclnOC1jbq8lAr32eg4/Yy2Ebi5v2J2uPe6Q== noname From 35596615d92dc08654927ad72941ea2fe2e966dd Mon Sep 17 00:00:00 2001 From: Sergey Glukhov Date: Wed, 5 Feb 2025 10:11:45 +0300 Subject: [PATCH 033/103] use updated key for tests --- .github/workflows/tests.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2c3e9e4ff..a9ef00d07 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,19 +21,20 @@ jobs: - name: Install Dependencies for Ubuntu run: sudo apt-get update && sudo apt-get install -y software-properties-common git build-essential clang libssl-dev libkrb5-dev libc++-dev wget zlib1g-dev + - uses: actions/checkout@v4 + - name: Setup Environment run: | + set -e mkdir ~/.ssh_tests chmod 700 ~/.ssh_tests printf "%b" "Host *\n\tStrictHostKeyChecking no\n" > ~/.ssh_tests/config - printf "%b" "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBkHMoNRRkHYNE7EnQLdFxMgVcqGgNPYDhrWiLMlYuzpmEcUnhwW3zNaIa4J2JlGkRNgYZVia1Ic1V3koJPE3YO2+exAfJBIPeb6O1qDADc2hFFHzd28wmHKUkO61yzo2ZjDQfaEVtjN39Yiy19AbddN3bzNrgvuQT574fa6Rghl2RfecKYO77iHA1RGXIFc8heXVIUuUV/jHjb56WqoHH8vyt1DqUz89oyiHq8Cku0qzKN80COheZPseA1EvT0zlIgbXBxwijN4xRmvInK0fB5Kc9r3kddH2tT7V09bOFJsvGQaQmQ1WFTCqjpBFw1CHKcbfPLOxbLpVIR9gyx03R\n" > ~/.ssh_tests/id_rsa.pub - printf "%b" "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAwZBzKDUUZB2DROxJ0C3RcTIFXKhoDT2A4a1oizJWLs6ZhHFJ\n4cFt8zWiGuCdiZRpETYGGVYmtSHNVd5KCTxN2DtvnsQHyQSD3m+jtagwA3NoRRR8\n3dvMJhylJDutcs6NmYw0H2hFbYzd/WIstfQG3XTd28za4L7kE+e+H2ukYIZdkX3n\nCmDu+4hwNURlyBXPIXl1SFLlFf4x42+elqqBx/L8rdQ6lM/PaMoh6vApLtKsyjfN\nAjoXmT7HgNRL09M5SIG1wccIozeMUZryJytHweSnPa95HXR9rU+1dPWzhSbLxkGk\nJkNVhUwqo6QRcNQhynG3zyzsWy6VSEfYMsdN0QIDAQABAoIBABsZNPYBEFy/wPvq\nNJ8/et3lCdkh/oc0ABIYK9Wo82XUKKvhDF3drZ3p+UrX/VYgf+EX9hyf8gVTuSJ3\nX1gRqDhIgeTxPsHGrwt6B6pL5ITnKEbbimuo9Ni1E+2RqUO0ZSCE/1sSRv4CRaXO\nk8HZawif7ttxv4bNUrLys6xEbpvQlOMzgs4s/OBB/XMEqnFRGPJeeTy8bkOWyTwl\nLj06nq2brs4qK4eijI/MoGy1CD8JCpL4gG39GPTXd8GpudXmdelDn1E0t9nhL6Se\naOMaiPhy7kBJD4wZ//WZTSR1XyjNBH3DGkNZxPIWcX+wJFyNoLbSbVSda/7Dtvp3\nCPfiNhECgYEA/+3JswSzcVEANNF5OLZ76x+TODkZ9T6YF4SR8/uJjNViWgUpX7vw\nmyXF+2AwzNaotbBKmNG619BcUeMmQB76c+UiMLeJuJcT/Jj0xmEUopHonGqEIcvg\nHg6cafE1is7d+l669bfjitlx+3muF2CYnylSN1LWHxIITVUj3BmcWqUCgYEAwZ45\nWdaHfK7G6GjI7liDQT4ZlslA8dmLv2Jl2ExBBMoY3m3Sre428z2ZFa4O/nsBYP0a\nDxgYmX20fQGcbPugKdCYHc7HkKbMU1GwiVCGpDYZCm2gJKTvam3dYNaiAfq5DyhP\nzDCZNJ5rrSMprXsuRv2O4c5u8qtJ5ByaOJBjOr0CgYBMlkAxzkpUssS5CaaZDiLv\nLbfEr3HRLjYdc5KpzLBQ8NpJzhmfiIJsK1Wf8B0qb2J1XJg2Oy0KwFOgPbWIoryY\nSg19Pq98Cdn1UWCOrSabr8ZIaKe55WTgGcc8/O3k6BsNfaO9PJZfSssNUlCCtml1\n18u+uo9RJPhPDBd7Gj7r8QKBgFraxWy7t24xkZMDgK4fiM/3tQhFvhz/CY2wPbxG\n5Ae8UfkmLcOCUfTIReqfd9fAnsAFZNIKa5izHRu/wsh9NwYIJSlvm8PsEVtTrPRy\nfgvWet+i24/2eYZGsag8b19gaLCNKQzXDT1czYg8RNVsRSX427BoLzXeXNkW9uNu\nFbI9AoGAV2kxcdcKS4BtNHKPeGgV87dM0DWhQaAtEXEIcQquFtba0lAXioGHg8U4\nzeiugl4Qzchwk5qd3wnZ4SOhx0s16/5gQDlnkbjFR6EREUnvLRwV92zBXUTOGIkh\nZ7Z4rcgUKlVAaHT3OHN/lTyqJG/ib+K4wZhbztl/ox+JUFsvD98=\n-----END RSA PRIVATE KEY-----\n" > ~/.ssh_tests/id_rsa + cat test/id_rsa.pub > ~/.ssh_tests/id_rsa.pub + cat test/id_rsa.enc | base64 -d > ~/.ssh_tests/id_rsa chmod 600 ~/.ssh_tests/id_rsa* git config --global user.name "John Doe" git config --global user.email johndoe@example.com - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 with: python-version: "3.6" @@ -76,19 +77,19 @@ jobs: # This is mostly the same as the Linux steps, waiting for anchor support # https://github.com/actions/runner/issues/1182 steps: + - uses: actions/checkout@v4 + - name: Setup Environment run: | mkdir ~/.ssh_tests chmod 700 ~/.ssh_tests printf "%b" "Host *\n\tStrictHostKeyChecking no\n" > ~/.ssh_tests/config - printf "%b" "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBkHMoNRRkHYNE7EnQLdFxMgVcqGgNPYDhrWiLMlYuzpmEcUnhwW3zNaIa4J2JlGkRNgYZVia1Ic1V3koJPE3YO2+exAfJBIPeb6O1qDADc2hFFHzd28wmHKUkO61yzo2ZjDQfaEVtjN39Yiy19AbddN3bzNrgvuQT574fa6Rghl2RfecKYO77iHA1RGXIFc8heXVIUuUV/jHjb56WqoHH8vyt1DqUz89oyiHq8Cku0qzKN80COheZPseA1EvT0zlIgbXBxwijN4xRmvInK0fB5Kc9r3kddH2tT7V09bOFJsvGQaQmQ1WFTCqjpBFw1CHKcbfPLOxbLpVIR9gyx03R\n" > ~/.ssh_tests/id_rsa.pub - printf "%b" "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAwZBzKDUUZB2DROxJ0C3RcTIFXKhoDT2A4a1oizJWLs6ZhHFJ\n4cFt8zWiGuCdiZRpETYGGVYmtSHNVd5KCTxN2DtvnsQHyQSD3m+jtagwA3NoRRR8\n3dvMJhylJDutcs6NmYw0H2hFbYzd/WIstfQG3XTd28za4L7kE+e+H2ukYIZdkX3n\nCmDu+4hwNURlyBXPIXl1SFLlFf4x42+elqqBx/L8rdQ6lM/PaMoh6vApLtKsyjfN\nAjoXmT7HgNRL09M5SIG1wccIozeMUZryJytHweSnPa95HXR9rU+1dPWzhSbLxkGk\nJkNVhUwqo6QRcNQhynG3zyzsWy6VSEfYMsdN0QIDAQABAoIBABsZNPYBEFy/wPvq\nNJ8/et3lCdkh/oc0ABIYK9Wo82XUKKvhDF3drZ3p+UrX/VYgf+EX9hyf8gVTuSJ3\nX1gRqDhIgeTxPsHGrwt6B6pL5ITnKEbbimuo9Ni1E+2RqUO0ZSCE/1sSRv4CRaXO\nk8HZawif7ttxv4bNUrLys6xEbpvQlOMzgs4s/OBB/XMEqnFRGPJeeTy8bkOWyTwl\nLj06nq2brs4qK4eijI/MoGy1CD8JCpL4gG39GPTXd8GpudXmdelDn1E0t9nhL6Se\naOMaiPhy7kBJD4wZ//WZTSR1XyjNBH3DGkNZxPIWcX+wJFyNoLbSbVSda/7Dtvp3\nCPfiNhECgYEA/+3JswSzcVEANNF5OLZ76x+TODkZ9T6YF4SR8/uJjNViWgUpX7vw\nmyXF+2AwzNaotbBKmNG619BcUeMmQB76c+UiMLeJuJcT/Jj0xmEUopHonGqEIcvg\nHg6cafE1is7d+l669bfjitlx+3muF2CYnylSN1LWHxIITVUj3BmcWqUCgYEAwZ45\nWdaHfK7G6GjI7liDQT4ZlslA8dmLv2Jl2ExBBMoY3m3Sre428z2ZFa4O/nsBYP0a\nDxgYmX20fQGcbPugKdCYHc7HkKbMU1GwiVCGpDYZCm2gJKTvam3dYNaiAfq5DyhP\nzDCZNJ5rrSMprXsuRv2O4c5u8qtJ5ByaOJBjOr0CgYBMlkAxzkpUssS5CaaZDiLv\nLbfEr3HRLjYdc5KpzLBQ8NpJzhmfiIJsK1Wf8B0qb2J1XJg2Oy0KwFOgPbWIoryY\nSg19Pq98Cdn1UWCOrSabr8ZIaKe55WTgGcc8/O3k6BsNfaO9PJZfSssNUlCCtml1\n18u+uo9RJPhPDBd7Gj7r8QKBgFraxWy7t24xkZMDgK4fiM/3tQhFvhz/CY2wPbxG\n5Ae8UfkmLcOCUfTIReqfd9fAnsAFZNIKa5izHRu/wsh9NwYIJSlvm8PsEVtTrPRy\nfgvWet+i24/2eYZGsag8b19gaLCNKQzXDT1czYg8RNVsRSX427BoLzXeXNkW9uNu\nFbI9AoGAV2kxcdcKS4BtNHKPeGgV87dM0DWhQaAtEXEIcQquFtba0lAXioGHg8U4\nzeiugl4Qzchwk5qd3wnZ4SOhx0s16/5gQDlnkbjFR6EREUnvLRwV92zBXUTOGIkh\nZ7Z4rcgUKlVAaHT3OHN/lTyqJG/ib+K4wZhbztl/ox+JUFsvD98=\n-----END RSA PRIVATE KEY-----\n" > ~/.ssh_tests/id_rsa + cat test/id_rsa.pub > ~/.ssh_tests/id_rsa.pub + cat test/id_rsa.enc | base64 -d > ~/.ssh_tests/id_rsa chmod 600 ~/.ssh_tests/id_rsa* git config --global user.name "John Doe" git config --global user.email johndoe@example.com - - uses: actions/checkout@v4 - - name: Use Node.js uses: actions/setup-node@v4 with: From 085a0d0d404e4ce138a933b2903e87eef19e8178 Mon Sep 17 00:00:00 2001 From: Sergey Glukhov Date: Tue, 4 Feb 2025 09:51:21 +0300 Subject: [PATCH 034/103] Replace istanbul with nyc to fix 'Unexpected token' error --- package-lock.json | 2649 +++++++++++++++++++++++++++++++++++++-------- package.json | 2 +- test/index.js | 9 +- 3 files changed, 2177 insertions(+), 483 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33bad9ebb..c59d00deb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,22 +26,310 @@ "clean-for-publish": "~1.0.2", "combyne": "~0.8.1", "coveralls": "^3.0.2", - "istanbul": "^0.4.5", "js-beautify": "~1.5.10", "jshint": "^2.10.0", "lcov-result-merger": "^3.1.0", "mocha": "^5.2.0", + "nyc": "^17.1.0", "walk": "^2.3.9" }, "engines": { "node": ">= 16" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@axosoft/nan": { "version": "2.20.0-gk.1", "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.20.0-gk.1.tgz", "integrity": "sha512-IHQhM1EddFkgPuLMWvMU/qpNyNaNTlCMTXp79Pb36HJRgV/vai3gxPh0csluVqDyXS4zdqXRiuw1lVs+N12R0g==" }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -131,6 +419,96 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", @@ -319,16 +697,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -363,11 +731,31 @@ "node": ">=0.10.0" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, "node_modules/are-we-there-yet": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", @@ -407,12 +795,6 @@ "node": ">=0.8" } }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -541,6 +923,39 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -678,6 +1093,22 @@ "node": ">=8" } }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -700,6 +1131,27 @@ "node": ">=0.10.0" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001696", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", + "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1056,6 +1508,13 @@ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1237,11 +1696,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/defer-to-connect": { "version": "2.0.1", @@ -1409,6 +1878,13 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.5.90", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", + "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==", + "dev": true, + "license": "ISC" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1453,11 +1929,19 @@ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT" + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1471,59 +1955,6 @@ "node": ">=0.8.0" } }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -1574,11 +2005,37 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/flush-write-stream": { "version": "1.1.1", @@ -1627,9 +2084,10 @@ "dev": true }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -1675,6 +2133,27 @@ "node": ">= 0.12" } }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -1747,6 +2226,16 @@ "node": ">=10" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1770,6 +2259,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -1890,6 +2389,16 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/got": { "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", @@ -1928,36 +2437,6 @@ "node": ">=4.x" } }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -1993,15 +2472,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -2019,6 +2489,23 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -2028,6 +2515,13 @@ "he": "bin/he" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -2255,6 +2749,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2314,42 +2821,178 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "node_modules/istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", - "dev": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" }, - "bin": { - "istanbul": "lib/cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/istanbul/node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "abbrev": "1" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "license": "ISC", + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", "bin": { - "nopt": "bin/nopt.js" + "uuid": "dist/bin/uuid" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/jackspeak": { @@ -2406,6 +3049,13 @@ "nopt": "bin/nopt.js" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -2438,6 +3088,19 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jshint": { "version": "2.13.4", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.4.tgz", @@ -2795,17 +3458,17 @@ "node": ">= 0.10" } }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, "node_modules/lodash": { @@ -2813,6 +3476,13 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true, + "license": "MIT" + }, "node_modules/log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", @@ -2830,17 +3500,6 @@ "node": ">=8" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3183,12 +3842,6 @@ "node": ">= 0.6" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -3326,6 +3979,26 @@ "node": "^16.13.0 || >=18.0.0" } }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -3407,6 +4080,164 @@ "node": ">=0.10.0" } }, + "node_modules/nyc": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", + "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/nyc/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -3459,23 +4290,6 @@ "wrappy": "1" } }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", @@ -3535,6 +4349,35 @@ "node": ">=8" } }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -3549,6 +4392,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -3570,6 +4439,16 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3623,13 +4502,24 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, "node_modules/proc-log": { @@ -3646,6 +4536,19 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/process-on-spawn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -3757,6 +4660,19 @@ "node": ">= 6" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "license": "ISC", + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -3840,17 +4756,28 @@ "node": ">=0.10.0" } }, - "node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "license": "ISC" }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", @@ -3944,12 +4871,10 @@ "dev": true }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4032,17 +4957,52 @@ "node": ">= 14" } }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "optional": true, + "license": "ISC", "dependencies": { - "amdefine": ">=0.0.4" + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" }, "engines": { - "node": ">=0.8.0" + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/spawn-wrap/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/sprintf-js": { @@ -4159,6 +5119,16 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", @@ -4171,18 +5141,6 @@ "node": ">=0.8.0" } }, - "node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -4237,8 +5195,45 @@ "bin": { "mkdirp": "bin/cmd.js" }, - "engines": { - "node": ">=10" + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/through2": { @@ -4358,29 +5353,24 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/uglify-js": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", - "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" } }, "node_modules/unc-path-regex": { @@ -4432,6 +5422,37 @@ "node": ">= 4.0.0" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4611,17 +5632,12 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } + "license": "ISC" }, "node_modules/wide-align": { "version": "1.1.5", @@ -4643,21 +5659,6 @@ "node": ">= 0.10.0" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, "node_modules/wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -4740,6 +5741,19 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", @@ -4804,11 +5818,218 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "@axosoft/nan": { "version": "2.20.0-gk.1", "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.20.0-gk.1.tgz", "integrity": "sha512-IHQhM1EddFkgPuLMWvMU/qpNyNaNTlCMTXp79Pb36HJRgV/vai3gxPh0csluVqDyXS4zdqXRiuw1lVs+N12R0g==" }, + "@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true + }, + "@babel/core": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dev": true, + "requires": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "dev": true, + "requires": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7" + } + }, + "@babel/parser": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "dev": true, + "requires": { + "@babel/types": "^7.26.7" + } + }, + "@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/traverse": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, "@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -4867,6 +6088,72 @@ } } }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@mapbox/node-pre-gyp": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", @@ -5017,13 +6304,6 @@ "uri-js": "^4.2.2" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "optional": true - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -5046,11 +6326,26 @@ "buffer-equal": "^1.0.0" } }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, "aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, "are-we-there-yet": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", @@ -5084,12 +6379,6 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -5186,6 +6475,18 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + } + }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -5289,6 +6590,18 @@ "responselike": "^2.0.0" } }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -5305,6 +6618,12 @@ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001696", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", + "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -5604,6 +6923,12 @@ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5745,11 +7070,14 @@ "mimic-response": "^3.1.0" } }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } }, "defer-to-connect": { "version": "2.0.1", @@ -5883,6 +7211,12 @@ "safer-buffer": "^2.1.0" } }, + "electron-to-chromium": { + "version": "1.5.90", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", + "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5921,10 +7255,16 @@ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, "escape-string-regexp": { @@ -5933,37 +7273,6 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -6005,11 +7314,26 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, "flush-write-stream": { "version": "1.1.1", @@ -6060,9 +7384,9 @@ "dev": true }, "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6092,6 +7416,12 @@ "mime-types": "^2.1.12" } }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -6152,6 +7482,12 @@ "wide-align": "^1.1.2" } }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -6169,6 +7505,12 @@ "has-symbols": "^1.0.1" } }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -6273,6 +7615,12 @@ } } }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, "got": { "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", @@ -6302,27 +7650,6 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -6348,12 +7675,6 @@ "function-bind": "^1.1.1" } }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -6365,12 +7686,28 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + } + }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", @@ -6547,6 +7884,12 @@ "is-unc-path": "^1.0.0" } }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -6597,39 +7940,131 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { - "abbrev": "1" + "aggregate-error": "^3.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "jackspeak": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", @@ -6667,6 +8102,12 @@ } } }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -6691,6 +8132,12 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true + }, "jshint": { "version": "2.13.4", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.4.tgz", @@ -7002,14 +8449,13 @@ "flush-write-stream": "^1.0.2" } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "p-locate": "^4.1.0" } }, "lodash": { @@ -7017,6 +8463,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", @@ -7028,14 +8480,6 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -7297,12 +8741,6 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -7389,6 +8827,21 @@ } } }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, + "node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -7446,6 +8899,129 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "nyc": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", + "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -7483,20 +9059,6 @@ "wrappy": "1" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, "ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", @@ -7552,6 +9114,24 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -7560,6 +9140,24 @@ "aggregate-error": "^3.0.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", @@ -7581,6 +9179,12 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -7618,12 +9222,21 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, "proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", @@ -7635,6 +9248,15 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "process-on-spawn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, "promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -7726,6 +9348,15 @@ "util-deprecate": "^1.0.1" } }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -7793,10 +9424,10 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve-alpn": { @@ -7804,6 +9435,12 @@ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, "resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", @@ -7867,12 +9504,9 @@ "dev": true }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==" }, "set-blocking": { "version": "2.0.0", @@ -7931,14 +9565,39 @@ } } }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "optional": true, "requires": { - "amdefine": ">=0.0.4" + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "dependencies": { + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "sprintf-js": { @@ -8029,21 +9688,18 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, "strip-json-comments": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", "dev": true }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -8094,6 +9750,33 @@ "readable-stream": "^3.1.1" } }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -8201,22 +9884,21 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "is-typedarray": "^1.0.0" } }, - "uglify-js": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz", - "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==", - "dev": true, - "optional": true - }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -8254,6 +9936,16 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, + "update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -8418,14 +10110,11 @@ "webidl-conversions": "^3.0.0" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true }, "wide-align": { "version": "1.1.5", @@ -8441,18 +10130,6 @@ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", "dev": true }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -8515,6 +10192,18 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", diff --git a/package.json b/package.json index 6dba1e13f..85daada4f 100644 --- a/package.json +++ b/package.json @@ -54,11 +54,11 @@ "clean-for-publish": "~1.0.2", "combyne": "~0.8.1", "coveralls": "^3.0.2", - "istanbul": "^0.4.5", "js-beautify": "~1.5.10", "jshint": "^2.10.0", "lcov-result-merger": "^3.1.0", "mocha": "^5.2.0", + "nyc": "^17.1.0", "walk": "^2.3.9" }, "binary": { diff --git a/test/index.js b/test/index.js index 4891a0dba..b138525e1 100644 --- a/test/index.js +++ b/test/index.js @@ -2,8 +2,13 @@ var fork = require("child_process").fork; var path = require("path"); var fs = require('fs'); -var bin = "./node_modules/.bin/istanbul"; -var cov = "cover --report=lcov --dir=test/coverage/js _mocha --".split(" "); +var bin = "./node_modules/.bin/nyc"; +var cov = [ + "--reporter=lcov", + "--reporter=text-summary", + "--report-dir=test/coverage/js", + "mocha" +] if (process.platform === 'win32') { bin = "./node_modules/mocha/bin/mocha"; From efeb29ae166701c6f11b4e28ef9cd8caeb5881f2 Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 21 Oct 2024 16:45:29 -0700 Subject: [PATCH 035/103] remove unneccessary constructor declarations c++20 got stricter with it's requirements for aggregate initialization I guess, and these structs are POD so there should be no point in specifying any constructors at all --- .../templates/manual/repository/statistics.cc | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/generate/templates/manual/repository/statistics.cc b/generate/templates/manual/repository/statistics.cc index bca4aa268..8b7f84fe0 100644 --- a/generate/templates/manual/repository/statistics.cc +++ b/generate/templates/manual/repository/statistics.cc @@ -206,13 +206,6 @@ struct OdbObjectsData static constexpr uint32_t kUnreachable = 0; struct CommitInfo { - CommitInfo() = default; - ~CommitInfo() = default; - CommitInfo(const CommitInfo &other) = delete; - CommitInfo(CommitInfo &&other) = default; - CommitInfo& operator=(const CommitInfo &other) = delete; - CommitInfo& operator=(CommitInfo &&other) = default; - std::string oidTree {}; size_t size {0}; std::vector parents {}; @@ -222,13 +215,6 @@ struct OdbObjectsData }; struct TreeInfoAndStats { - TreeInfoAndStats() = default; - ~TreeInfoAndStats() = default; - TreeInfoAndStats(const TreeInfoAndStats &other) = delete; - TreeInfoAndStats(TreeInfoAndStats &&other) = default; - TreeInfoAndStats& operator=(const TreeInfoAndStats &other) = delete; - TreeInfoAndStats& operator=(TreeInfoAndStats &&other) = default; - size_t size {0}; size_t numEntries {0}; std::vector entryBlobs {}; @@ -241,13 +227,6 @@ struct OdbObjectsData }; struct BlobInfo { - BlobInfo() = default; - ~BlobInfo() = default; - BlobInfo(const BlobInfo &other) = delete; - BlobInfo(BlobInfo &&other) = default; - BlobInfo& operator=(const BlobInfo &other) = delete; - BlobInfo& operator=(BlobInfo &&other) = default; - size_t size {0}; // number of sources from which a blob can be reached: // a tree's entry, or a tag @@ -257,13 +236,6 @@ struct OdbObjectsData struct TagInfo { static constexpr uint32_t kUnsetDepth = 0; - TagInfo() = default; - ~TagInfo() = default; - TagInfo(const TagInfo &other) = delete; - TagInfo(TagInfo &&other) = default; - TagInfo& operator=(const TagInfo &other) = delete; - TagInfo& operator=(TagInfo &&other) = default; - std::string oidTarget {}; git_object_t typeTarget {GIT_OBJECT_INVALID}; uint32_t depth {kUnsetDepth}; From 461962a70d5a3dc376471337a2aa8a6d662921fa Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 20 Jan 2025 12:43:47 -0700 Subject: [PATCH 036/103] update cxxStandard determination for C++20 --- utils/defaultCxxStandard.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/utils/defaultCxxStandard.js b/utils/defaultCxxStandard.js index bc42a39a6..5a7d7beb5 100644 --- a/utils/defaultCxxStandard.js +++ b/utils/defaultCxxStandard.js @@ -1,18 +1,24 @@ const targetSpecified = process.argv[2] !== 'none'; -let isNode18OrElectron20AndUp = false; +let cxxStandard = '14'; + if (targetSpecified) { // Assume electron if target is specified. // If building node 18 / 19 via target, will need to specify C++ standard manually const majorVersion = process.argv[2].split('.')[0]; - isNode18OrElectron20AndUp = majorVersion >= 20; + if (Number.parseInt(majorVersion) >= 32) { + cxxStandard = '20'; + } else if (Number.parseInt(majorVersion) >= 21) { + cxxStandard = '17'; + } } else { + const abiVersion = Number.parseInt(process.versions.modules) ?? 0; // Node 18 === 108 - isNode18OrElectron20AndUp = Number.parseInt(process.versions.modules) >= 108; + if (abiVersion >= 131) { + cxxStandard = '20'; + } else if (abiVersion >= 108) { + cxxStandard = '17'; + } } -const defaultCxxStandard = isNode18OrElectron20AndUp - ? '17' - : '14'; - -process.stdout.write(defaultCxxStandard); +process.stdout.write(cxxStandard); From f353fe1e4b5265ea4073c074e4e81e9d679286f9 Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 31 Jan 2025 12:30:22 -0700 Subject: [PATCH 037/103] bump nan --- package-lock.json | 15 ++++++++------- package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c59d00deb..b737a2300 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@axosoft/nan": "^2.20.0-gk.1", + "@axosoft/nan": "^2.22.0-gk.1", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", "got": "^11.8.6", @@ -52,9 +52,10 @@ } }, "node_modules/@axosoft/nan": { - "version": "2.20.0-gk.1", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.20.0-gk.1.tgz", - "integrity": "sha512-IHQhM1EddFkgPuLMWvMU/qpNyNaNTlCMTXp79Pb36HJRgV/vai3gxPh0csluVqDyXS4zdqXRiuw1lVs+N12R0g==" + "version": "2.22.0-gk.1", + "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.22.0-gk.1.tgz", + "integrity": "sha512-C4xrZ5HQoWwoq/WZnKDhf/Jd/czIaa0gsjHV792qUp7b7H+4Xtw1Um10BiiU/zrgmGhQuA92dedU2/rGvKErNg==", + "license": "MIT" }, "node_modules/@babel/code-frame": { "version": "7.26.2", @@ -5829,9 +5830,9 @@ } }, "@axosoft/nan": { - "version": "2.20.0-gk.1", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.20.0-gk.1.tgz", - "integrity": "sha512-IHQhM1EddFkgPuLMWvMU/qpNyNaNTlCMTXp79Pb36HJRgV/vai3gxPh0csluVqDyXS4zdqXRiuw1lVs+N12R0g==" + "version": "2.22.0-gk.1", + "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.22.0-gk.1.tgz", + "integrity": "sha512-C4xrZ5HQoWwoq/WZnKDhf/Jd/czIaa0gsjHV792qUp7b7H+4Xtw1Um10BiiU/zrgmGhQuA92dedU2/rGvKErNg==" }, "@babel/code-frame": { "version": "7.26.2", diff --git a/package.json b/package.json index 85daada4f..621ed7131 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "node": ">= 16" }, "dependencies": { - "@axosoft/nan": "^2.20.0-gk.1", + "@axosoft/nan": "^2.22.0-gk.1", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", "got": "^11.8.6", From 3abb8fcd583ca73290e9516b74aa2c8d775aa79a Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 10 Feb 2025 12:41:19 -0700 Subject: [PATCH 038/103] fix use-after-free causing intermittent failures in Repository::statistics() git_reference_target just returns a pointer to the git_reference's oid, it does not clone it so freeing the reference then wipes the oid --- .../templates/manual/repository/statistics.cc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/generate/templates/manual/repository/statistics.cc b/generate/templates/manual/repository/statistics.cc index 8b7f84fe0..8b04cc31a 100644 --- a/generate/templates/manual/repository/statistics.cc +++ b/generate/templates/manual/repository/statistics.cc @@ -1020,11 +1020,13 @@ int RepoAnalysis::storeAndCountRefs() } // obtain peeled oid of the reference - const git_oid *oid_ref {nullptr}; + bool found_oid = false; + git_oid oid_ref; switch (git_reference_type(ref)) { case GIT_REFERENCE_DIRECT: - oid_ref = git_reference_target(ref); + git_oid_cpy(&oid_ref, git_reference_target(ref)); + found_oid = true; break; case GIT_REFERENCE_SYMBOLIC: @@ -1035,7 +1037,8 @@ int RepoAnalysis::storeAndCountRefs() git_strarray_dispose(&ref_list); return errorCode; } - oid_ref = git_reference_target(ref_resolved); + git_oid_cpy(&oid_ref, git_reference_target(ref_resolved)); + found_oid = true; git_reference_free(ref_resolved); } break; @@ -1045,17 +1048,17 @@ int RepoAnalysis::storeAndCountRefs() } // store object's oid and type - if (oid_ref != nullptr) + if (found_oid) { git_object *target {nullptr}; - if ((errorCode = git_object_lookup(&target, m_repo, oid_ref, GIT_OBJECT_ANY)) != GIT_OK) { + if ((errorCode = git_object_lookup(&target, m_repo, &oid_ref, GIT_OBJECT_ANY)) != GIT_OK) { git_reference_free(ref); git_strarray_dispose(&ref_list); return errorCode; } m_peeledRefs.emplace(std::make_pair( - std::string(reinterpret_cast(oid_ref->id), GIT_OID_RAWSZ), + std::string(reinterpret_cast(oid_ref.id), GIT_OID_RAWSZ), git_object_type(target))); git_object_free(target); From 13836c6ad0b4c4871c3d5bb53caad94f1e6865df Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 10 Feb 2025 12:41:38 -0700 Subject: [PATCH 039/103] ignore nyc output --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 99a83fc4a..feb22eaa2 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ .DS_STORE .idea .clangd +.nyc_output/ .vscode jsconfig.json From 68dbe802cae3cdcff6cad1f1f0d7c45df3e42a20 Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 11 Feb 2025 14:55:05 -0700 Subject: [PATCH 040/103] Bump to v0.28.0-alpha.29 --- CHANGELOG.md | 19 ++++++++++++++----- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 247721a00..af39f9095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## v0.28.0-alpha.29 [(2025-02-11)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.29) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.28...v0.28.0-alpha.29) + +#### Summary of Changes +- Build on Electron 34+ +- fix use-after-free in Repository::statistics() + +#### Merged PRs into NodeGit +- [Bump @axosoft/nan and add ability to compile for c++20](https://github.com/nodegit/nodegit/pull/2012) +- [Fix Github Action workflow](https://github.com/nodegit/nodegit/pull/2014) + + ## v0.28.0-alpha.28 [(2024-07-01)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.28) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.27...v0.28.0-alpha.28) @@ -4094,8 +4107,4 @@ We have added Node 6 as a supported platform! Going forward we aim to have 1:1 s [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.0.1...v0.0.2) -## v0.0.1 [(2011-03-10)](https://github.com/nodegit/nodegit/tree/v0.0.1) - - - -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* +## v0.0.1 [(2011-03-10)](https://github.com/nodegit/nodegit/tree/v0.0.1) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b737a2300..19c0840ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nodegit", - "version": "0.28.0-alpha.28", + "version": "0.28.0-alpha.29", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 621ed7131..df260834f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.28", + "version": "0.28.0-alpha.29", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From dba7cb85cc380cec50ff75b3e5b7c4177ddf46f7 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 13 Feb 2025 11:22:14 -0700 Subject: [PATCH 041/103] define NOMINMAX on windows necessary until node23 for building on newere versions of v8 --- generate/templates/templates/binding.gyp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/generate/templates/templates/binding.gyp b/generate/templates/templates/binding.gyp index 771eca54f..09ca6713c 100644 --- a/generate/templates/templates/binding.gyp +++ b/generate/templates/templates/binding.gyp @@ -152,7 +152,8 @@ }] ], "defines": [ - "_HAS_EXCEPTIONS=1" + "_HAS_EXCEPTIONS=1", + "NOMINMAX=1" ], "msvs_settings": { "VCCLCompilerTool": { From 8f485fab438f41ce891f74d7ebe8a018e2e2fe2d Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 13 Feb 2025 16:13:57 -0700 Subject: [PATCH 042/103] bump to 0.28.0-alpha.30 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19c0840ff..c4e3f1604 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.29", + "version": "0.28.0-alpha.30", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.28", + "version": "0.28.0-alpha.30", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index df260834f..2406899fa 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.29", + "version": "0.28.0-alpha.30", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From d19dcd77082b87e7250073d908459eef9e3bba0a Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 20 May 2025 09:42:18 -0700 Subject: [PATCH 043/103] bump libgit2 and fix build config fixup --- generate/input/libgit2-docs.json | 78145 ++++++++--------- generate/templates/templates/class_header.h | 1 + generate/templates/templates/struct_header.h | 1 + vendor/libgit2 | 2 +- vendor/libgit2.gyp | 20 +- 5 files changed, 37402 insertions(+), 40767 deletions(-) diff --git a/generate/input/libgit2-docs.json b/generate/input/libgit2-docs.json index 32160fef8..5870c608a 100644 --- a/generate/input/libgit2-docs.json +++ b/generate/input/libgit2-docs.json @@ -1,40797 +1,37418 @@ { - "files": [ - { - "file": "git2/annotated_commit.h", - "functions": [ - "git_annotated_commit_from_ref", - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_lookup", - "git_annotated_commit_from_revspec", - "git_annotated_commit_id", - "git_annotated_commit_ref", - "git_annotated_commit_free" - ], - "meta": {}, - "lines": 121 - }, - { - "file": "git2/apply.h", - "functions": [ - "git_apply_delta_cb", - "git_apply_hunk_cb", - "git_apply_options_init", - "git_apply_to_tree", - "git_apply" - ], - "meta": {}, - "lines": 161 - }, - { - "file": "git2/attr.h", - "functions": [ - "git_attr_value", - "git_attr_get", - "git_attr_get_ext", - "git_attr_get_many", - "git_attr_get_many_ext", - "git_attr_foreach_cb", - "git_attr_foreach", - "git_attr_foreach_ext", - "git_attr_cache_flush", - "git_attr_add_macro" - ], - "meta": {}, - "lines": 365 - }, - { - "file": "git2/blame.h", - "functions": [ - "git_blame_options_init", - "git_blame_get_hunk_count", - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline", - "git_blame_file", - "git_blame_buffer", - "git_blame_free" - ], - "meta": {}, - "lines": 280 - }, - { - "file": "git2/blob.h", - "functions": [ - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_blob_free", - "git_blob_id", - "git_blob_owner", - "git_blob_rawcontent", - "git_blob_rawsize", - "git_blob_filter_options_init", - "git_blob_filter", - "git_blob_create_from_workdir", - "git_blob_create_from_disk", - "git_blob_create_from_stream", - "git_blob_create_from_stream_commit", - "git_blob_create_from_buffer", - "git_blob_is_binary", - "git_blob_data_is_binary", - "git_blob_dup" - ], - "meta": {}, - "lines": 307 - }, - { - "file": "git2/branch.h", - "functions": [ - "git_branch_create", - "git_branch_create_from_annotated", - "git_branch_delete", - "git_branch_iterator_new", - "git_branch_next", - "git_branch_iterator_free", - "git_branch_move", - "git_branch_lookup", - "git_branch_name", - "git_branch_upstream", - "git_branch_set_upstream", - "git_branch_upstream_name", - "git_branch_is_head", - "git_branch_is_checked_out", - "git_branch_remote_name", - "git_branch_upstream_remote", - "git_branch_upstream_merge", - "git_branch_name_is_valid" - ], - "meta": {}, - "lines": 332 - }, - { - "file": "git2/buffer.h", - "functions": [ - "git_buf_dispose" - ], - "meta": {}, - "lines": 68 - }, - { - "file": "git2/cert.h", - "functions": [ - "git_transport_certificate_check_cb" - ], - "meta": {}, - "lines": 168 - }, - { - "file": "git2/checkout.h", - "functions": [ - "git_checkout_notify_cb", - "git_checkout_progress_cb", - "git_checkout_perfdata_cb", - "git_checkout_options_init", - "git_checkout_head", - "git_checkout_index", - "git_checkout_tree" - ], - "meta": {}, - "lines": 413 - }, - { - "file": "git2/cherrypick.h", - "functions": [ - "git_cherrypick_options_init", - "git_cherrypick_commit", - "git_cherrypick" - ], - "meta": {}, - "lines": 86 - }, - { - "file": "git2/clone.h", - "functions": [ - "git_remote_create_cb", - "git_repository_create_cb", - "git_clone_options_init", - "git_clone" - ], - "meta": {}, - "lines": 205 - }, - { - "file": "git2/commit.h", - "functions": [ - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_commit_free", - "git_commit_id", - "git_commit_owner", - "git_commit_message_encoding", - "git_commit_message", - "git_commit_message_raw", - "git_commit_summary", - "git_commit_body", - "git_commit_time", - "git_commit_time_offset", - "git_commit_committer", - "git_commit_author", - "git_commit_committer_with_mailmap", - "git_commit_author_with_mailmap", - "git_commit_raw_header", - "git_commit_tree", - "git_commit_tree_id", - "git_commit_parentcount", - "git_commit_parent", - "git_commit_parent_id", - "git_commit_nth_gen_ancestor", - "git_commit_header_field", - "git_commit_extract_signature", - "git_commit_create", - "git_commit_create_v", - "git_commit_amend", - "git_commit_create_buffer", - "git_commit_create_with_signature", - "git_commit_dup", - "git_commit_create_cb" - ], - "meta": {}, - "lines": 542 - }, - { - "file": "git2/common.h", - "functions": [ - "git_libgit2_version", - "git_libgit2_prerelease", - "git_libgit2_features", - "git_libgit2_opts" - ], - "meta": {}, - "lines": 512 - }, - { - "file": "git2/config.h", - "functions": [ - "git_config_entry_free", - "git_config_foreach_cb", - "git_config_find_global", - "git_config_find_xdg", - "git_config_find_system", - "git_config_find_programdata", - "git_config_open_default", - "git_config_new", - "git_config_add_file_ondisk", - "git_config_open_ondisk", - "git_config_open_level", - "git_config_open_global", - "git_config_snapshot", - "git_config_free", - "git_config_get_entry", - "git_config_get_int32", - "git_config_get_int64", - "git_config_get_bool", - "git_config_get_path", - "git_config_get_string", - "git_config_get_string_buf", - "git_config_get_multivar_foreach", - "git_config_multivar_iterator_new", - "git_config_next", - "git_config_iterator_free", - "git_config_set_int32", - "git_config_set_int64", - "git_config_set_bool", - "git_config_set_string", - "git_config_set_multivar", - "git_config_delete_entry", - "git_config_delete_multivar", - "git_config_foreach", - "git_config_iterator_new", - "git_config_iterator_glob_new", - "git_config_foreach_match", - "git_config_get_mapped", - "git_config_lookup_map_value", - "git_config_parse_bool", - "git_config_parse_int32", - "git_config_parse_int64", - "git_config_parse_path", - "git_config_backend_foreach_match", - "git_config_lock" - ], - "meta": {}, - "lines": 778 - }, - { - "file": "git2/credential.h", - "functions": [ - "git_credential_acquire_cb", - "git_credential_free", - "git_credential_has_username", - "git_credential_get_username", - "git_credential_userpass_plaintext_new", - "git_credential_default_new", - "git_credential_username_new", - "git_credential_ssh_key_new", - "git_credential_ssh_key_memory_new", - "git_credential_ssh_interactive_new", - "git_credential_ssh_key_from_agent", - "git_credential_ssh_custom_new" - ], - "meta": {}, - "lines": 311 - }, - { - "file": "git2/credential_helpers.h", - "functions": [ - "git_credential_userpass" - ], - "meta": {}, - "lines": 49 - }, - { - "file": "git2/deprecated.h", - "functions": [ - "git_blob_filtered_content", - "git_filter_list_stream_data", - "git_filter_list_apply_to_data", - "git_treebuilder_write_with_buffer", - "git_buf_grow", - "git_buf_set", - "git_buf_is_binary", - "git_buf_contains_nul", - "git_buf_free", - "git_commit_signing_cb", - "git_diff_format_email", - "git_diff_commit_as_email", - "git_diff_format_email_options_init", - "giterr_last", - "giterr_clear", - "giterr_set_str", - "giterr_set_oom", - "git_object__size", - "git_remote_is_valid_name", - "git_reference_is_valid_name", - "git_oidarray_free", - "git_headlist_cb", - "git_strarray_copy", - "git_strarray_free", - "git_blame_init_options" - ], - "meta": {}, - "lines": 905 - }, - { - "file": "git2/describe.h", - "functions": [ - "git_describe_options_init", - "git_describe_format_options_init", - "git_describe_commit", - "git_describe_workdir", - "git_describe_format", - "git_describe_result_free" - ], - "meta": {}, - "lines": 189 - }, - { - "file": "git2/diff.h", - "functions": [ - "git_diff_notify_cb", - "git_diff_progress_cb", - "git_diff_options_init", - "git_diff_file_cb", - "git_diff_binary_cb", - "git_diff_hunk_cb", - "git_diff_line_cb", - "git_diff_find_options_init", - "git_diff_free", - "git_diff_tree_to_tree", - "git_diff_tree_to_index", - "git_diff_index_to_workdir", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_diff_index_to_index", - "git_diff_merge", - "git_diff_find_similar", - "git_diff_num_deltas", - "git_diff_num_deltas_of_type", - "git_diff_get_delta", - "git_diff_is_sorted_icase", - "git_diff_foreach", - "git_diff_status_char", - "git_diff_print", - "git_diff_to_buf", - "git_diff_blobs", - "git_diff_blob_to_buffer", - "git_diff_buffers", - "git_diff_from_buffer", - "git_diff_get_stats", - "git_diff_stats_files_changed", - "git_diff_stats_insertions", - "git_diff_stats_deletions", - "git_diff_stats_to_buf", - "git_diff_stats_free", - "git_diff_patchid_options_init", - "git_diff_patchid" - ], - "meta": {}, - "lines": 1471 - }, - { - "file": "git2/email.h", - "functions": [], - "meta": {}, - "lines": 38 - }, - { - "file": "git2/errors.h", - "functions": [ - "git_error_last", - "git_error_clear", - "git_error_set", - "git_error_set_str", - "git_error_set_oom" - ], - "meta": {}, - "lines": 177 - }, - { - "file": "git2/filter.h", - "functions": [ - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_contains", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_file", - "git_filter_list_apply_to_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_file", - "git_filter_list_stream_blob", - "git_filter_list_free" - ], - "meta": {}, - "lines": 269 - }, - { - "file": "git2/global.h", - "functions": [ - "git_libgit2_init", - "git_libgit2_shutdown" - ], - "meta": {}, - "lines": 39 - }, - { - "file": "git2/graph.h", - "functions": [ - "git_graph_ahead_behind", - "git_graph_descendant_of", - "git_graph_reachable_from_any" - ], - "meta": {}, - "lines": 73 - }, - { - "file": "git2/ignore.h", - "functions": [ - "git_ignore_add_rule", - "git_ignore_clear_internal_rules", - "git_ignore_path_is_ignored" - ], - "meta": {}, - "lines": 74 - }, - { - "file": "git2/index.h", - "functions": [ - "git_index_matched_path_cb", - "git_index_free", - "git_index_owner", - "git_index_caps", - "git_index_set_caps", - "git_index_version", - "git_index_set_version", - "git_index_read", - "git_index_write", - "git_index_path", - "git_index_checksum", - "git_index_read_tree", - "git_index_write_tree", - "git_index_write_tree_to", - "git_index_entrycount", - "git_index_clear", - "git_index_get_byindex", - "git_index_get_bypath", - "git_index_remove", - "git_index_remove_directory", - "git_index_add", - "git_index_entry_stage", - "git_index_entry_is_conflict", - "git_index_iterator_new", - "git_index_iterator_next", - "git_index_iterator_free", - "git_index_add_bypath", - "git_index_add_from_buffer", - "git_index_remove_bypath", - "git_index_add_all", - "git_index_remove_all", - "git_index_update_all", - "git_index_find", - "git_index_find_prefix", - "git_index_conflict_add", - "git_index_conflict_get", - "git_index_conflict_remove", - "git_index_conflict_cleanup", - "git_index_has_conflicts", - "git_index_conflict_iterator_new", - "git_index_conflict_next", - "git_index_conflict_iterator_free" - ], - "meta": {}, - "lines": 844 - }, - { - "file": "git2/indexer.h", - "functions": [ - "git_indexer_progress_cb", - "git_indexer_options_init", - "git_indexer_new", - "git_indexer_append", - "git_indexer_commit", - "git_indexer_hash", - "git_indexer_name", - "git_indexer_free" - ], - "meta": {}, - "lines": 191 - }, - { - "file": "git2/mailmap.h", - "functions": [ - "git_mailmap_new", - "git_mailmap_free", - "git_mailmap_add_entry", - "git_mailmap_from_buffer", - "git_mailmap_from_repository", - "git_mailmap_resolve", - "git_mailmap_resolve_signature" - ], - "meta": {}, - "lines": 111 - }, - { - "file": "git2/merge.h", - "functions": [ - "git_merge_file_input_init", - "git_merge_file_options_init", - "git_merge_options_init", - "git_merge_analysis", - "git_merge_analysis_for_ref", - "git_merge_base", - "git_merge_bases", - "git_merge_base_many", - "git_merge_bases_many", - "git_merge_base_octopus", - "git_merge_file", - "git_merge_file_from_index", - "git_merge_file_result_free", - "git_merge_trees", - "git_merge_commits", - "git_merge" - ], - "meta": {}, - "lines": 622 - }, - { - "file": "git2/message.h", - "functions": [ - "git_message_prettify", - "git_message_trailers", - "git_message_trailer_array_free" - ], - "meta": {}, - "lines": 81 - }, - { - "file": "git2/net.h", - "functions": [], - "meta": {}, - "lines": 50 - }, - { - "file": "git2/notes.h", - "functions": [ - "git_note_foreach_cb", - "git_note_iterator_new", - "git_note_commit_iterator_new", - "git_note_iterator_free", - "git_note_next", - "git_note_read", - "git_note_commit_read", - "git_note_author", - "git_note_committer", - "git_note_message", - "git_note_id", - "git_note_create", - "git_note_commit_create", - "git_note_remove", - "git_note_commit_remove", - "git_note_free", - "git_note_default_ref", - "git_note_foreach" - ], - "meta": {}, - "lines": 302 - }, - { - "file": "git2/object.h", - "functions": [ - "git_object_lookup", - "git_object_lookup_prefix", - "git_object_lookup_bypath", - "git_object_id", - "git_object_short_id", - "git_object_type", - "git_object_owner", - "git_object_free", - "git_object_type2string", - "git_object_string2type", - "git_object_typeisloose", - "git_object_peel", - "git_object_dup", - "git_object_rawcontent_is_valid" - ], - "meta": {}, - "lines": 273 - }, - { - "file": "git2/odb.h", - "functions": [ - "git_odb_foreach_cb", - "git_odb_add_disk_alternate", - "git_odb_free", - "git_odb_read", - "git_odb_read_prefix", - "git_odb_read_header", - "git_odb_exists", - "git_odb_exists_ext", - "git_odb_exists_prefix", - "git_odb_expand_ids", - "git_odb_refresh", - "git_odb_foreach", - "git_odb_write", - "git_odb_open_wstream", - "git_odb_stream_write", - "git_odb_stream_finalize_write", - "git_odb_stream_read", - "git_odb_stream_free", - "git_odb_open_rstream", - "git_odb_write_pack", - "git_odb_write_multi_pack_index", - "git_odb_object_dup", - "git_odb_object_free", - "git_odb_object_id", - "git_odb_object_data", - "git_odb_object_size", - "git_odb_object_type", - "git_odb_add_backend", - "git_odb_add_alternate", - "git_odb_num_backends", - "git_odb_get_backend", - "git_odb_set_commit_graph" - ], - "meta": {}, - "lines": 650 - }, - { - "file": "git2/odb_backend.h", - "functions": [], - "meta": {}, - "lines": 219 - }, - { - "file": "git2/oid.h", - "functions": [ - "git_oid_fmt", - "git_oid_nfmt", - "git_oid_pathfmt", - "git_oid_tostr_s", - "git_oid_tostr", - "git_oid_cpy", - "git_oid_cmp", - "git_oid_equal", - "git_oid_ncmp", - "git_oid_streq", - "git_oid_strcmp", - "git_oid_is_zero", - "git_oid_shorten_new", - "git_oid_shorten_add", - "git_oid_shorten_free" - ], - "meta": {}, - "lines": 369 - }, - { - "file": "git2/oidarray.h", - "functions": [ - "git_oidarray_dispose" - ], - "meta": {}, - "lines": 31 - }, - { - "file": "git2/pack.h", - "functions": [ - "git_packbuilder_new", - "git_packbuilder_set_threads", - "git_packbuilder_insert", - "git_packbuilder_insert_tree", - "git_packbuilder_insert_commit", - "git_packbuilder_insert_walk", - "git_packbuilder_insert_recur", - "git_packbuilder_write_buf", - "git_packbuilder_write", - "git_packbuilder_hash", - "git_packbuilder_name", - "git_packbuilder_foreach_cb", - "git_packbuilder_foreach", - "git_packbuilder_object_count", - "git_packbuilder_written", - "git_packbuilder_progress", - "git_packbuilder_set_callbacks", - "git_packbuilder_free" - ], - "meta": {}, - "lines": 263 - }, - { - "file": "git2/patch.h", - "functions": [ - "git_patch_owner", - "git_patch_from_diff", - "git_patch_from_blobs", - "git_patch_from_blob_and_buffer", - "git_patch_from_buffers", - "git_patch_free", - "git_patch_get_delta", - "git_patch_num_hunks", - "git_patch_line_stats", - "git_patch_get_hunk", - "git_patch_num_lines_in_hunk", - "git_patch_get_line_in_hunk", - "git_patch_size", - "git_patch_print", - "git_patch_to_buf" - ], - "meta": {}, - "lines": 284 - }, - { - "file": "git2/pathspec.h", - "functions": [ - "git_pathspec_new", - "git_pathspec_free", - "git_pathspec_matches_path", - "git_pathspec_match_workdir", - "git_pathspec_match_index", - "git_pathspec_match_tree", - "git_pathspec_match_diff", - "git_pathspec_match_list_free", - "git_pathspec_match_list_entrycount", - "git_pathspec_match_list_entry", - "git_pathspec_match_list_diff_entry", - "git_pathspec_match_list_failed_entrycount", - "git_pathspec_match_list_failed_entry" - ], - "meta": {}, - "lines": 277 - }, - { - "file": "git2/proxy.h", - "functions": [ - "git_proxy_options_init" - ], - "meta": {}, - "lines": 94 - }, - { - "file": "git2/rebase.h", - "functions": [ - "git_rebase_options_init", - "git_rebase_init", - "git_rebase_open", - "git_rebase_orig_head_name", - "git_rebase_orig_head_id", - "git_rebase_onto_name", - "git_rebase_onto_id", - "git_rebase_operation_entrycount", - "git_rebase_operation_current", - "git_rebase_operation_byindex", - "git_rebase_next", - "git_rebase_inmemory_index", - "git_rebase_commit", - "git_rebase_abort", - "git_rebase_finish", - "git_rebase_free" - ], - "meta": {}, - "lines": 395 - }, - { - "file": "git2/refdb.h", - "functions": [ - "git_refdb_new", - "git_refdb_open", - "git_refdb_compress", - "git_refdb_free" - ], - "meta": {}, - "lines": 66 - }, - { - "file": "git2/reflog.h", - "functions": [ - "git_reflog_read", - "git_reflog_write", - "git_reflog_append", - "git_reflog_rename", - "git_reflog_delete", - "git_reflog_entrycount", - "git_reflog_entry_byindex", - "git_reflog_drop", - "git_reflog_entry_id_old", - "git_reflog_entry_id_new", - "git_reflog_entry_committer", - "git_reflog_entry_message", - "git_reflog_free" - ], - "meta": {}, - "lines": 166 - }, - { - "file": "git2/refs.h", - "functions": [ - "git_reference_lookup", - "git_reference_name_to_id", - "git_reference_dwim", - "git_reference_symbolic_create_matching", - "git_reference_symbolic_create", - "git_reference_create", - "git_reference_create_matching", - "git_reference_target", - "git_reference_target_peel", - "git_reference_symbolic_target", - "git_reference_type", - "git_reference_name", - "git_reference_resolve", - "git_reference_owner", - "git_reference_symbolic_set_target", - "git_reference_set_target", - "git_reference_rename", - "git_reference_delete", - "git_reference_remove", - "git_reference_list", - "git_reference_foreach_cb", - "git_reference_foreach_name_cb", - "git_reference_foreach", - "git_reference_foreach_name", - "git_reference_dup", - "git_reference_free", - "git_reference_cmp", - "git_reference_iterator_new", - "git_reference_iterator_glob_new", - "git_reference_next", - "git_reference_next_name", - "git_reference_iterator_free", - "git_reference_foreach_glob", - "git_reference_has_log", - "git_reference_ensure_log", - "git_reference_is_branch", - "git_reference_is_remote", - "git_reference_is_tag", - "git_reference_is_note", - "git_reference_normalize_name", - "git_reference_peel", - "git_reference_name_is_valid", - "git_reference_shorthand" - ], - "meta": {}, - "lines": 767 - }, - { - "file": "git2/refspec.h", - "functions": [ - "git_refspec_parse", - "git_refspec_free", - "git_refspec_src", - "git_refspec_dst", - "git_refspec_string", - "git_refspec_force", - "git_refspec_direction", - "git_refspec_src_matches", - "git_refspec_dst_matches", - "git_refspec_transform", - "git_refspec_rtransform" - ], - "meta": {}, - "lines": 117 - }, - { - "file": "git2/remote.h", - "functions": [ - "git_remote_create", - "git_remote_create_options_init", - "git_remote_create_with_opts", - "git_remote_create_with_fetchspec", - "git_remote_create_anonymous", - "git_remote_create_detached", - "git_remote_lookup", - "git_remote_dup", - "git_remote_owner", - "git_remote_name", - "git_remote_url", - "git_remote_pushurl", - "git_remote_set_url", - "git_remote_set_pushurl", - "git_remote_set_instance_url", - "git_remote_set_instance_pushurl", - "git_remote_add_fetch", - "git_remote_get_fetch_refspecs", - "git_remote_add_push", - "git_remote_get_push_refspecs", - "git_remote_refspec_count", - "git_remote_get_refspec", - "git_remote_ls", - "git_remote_connected", - "git_remote_stop", - "git_remote_disconnect", - "git_remote_free", - "git_remote_list", - "git_push_transfer_progress_cb", - "git_push_negotiation", - "git_push_update_reference_cb", - "git_url_resolve_cb", - "git_remote_ready_cb", - "git_remote_init_callbacks", - "git_fetch_options_init", - "git_push_options_init", - "git_remote_connect_options_init", - "git_remote_connect", - "git_remote_connect_ext", - "git_remote_download", - "git_remote_upload", - "git_remote_update_tips", - "git_remote_fetch", - "git_remote_prune", - "git_remote_push", - "git_remote_stats", - "git_remote_autotag", - "git_remote_set_autotag", - "git_remote_prune_refs", - "git_remote_rename", - "git_remote_name_is_valid", - "git_remote_delete", - "git_remote_default_branch" - ], - "meta": {}, - "lines": 1169 - }, - { - "file": "git2/repository.h", - "functions": [ - "git_repository_open", - "git_repository_open_from_worktree", - "git_repository_discover", - "git_repository_open_ext", - "git_repository_open_bare", - "git_repository_free", - "git_repository_init", - "git_repository_init_options_init", - "git_repository_init_ext", - "git_repository_head", - "git_repository_head_for_worktree", - "git_repository_head_detached", - "git_repository_head_detached_for_worktree", - "git_repository_head_unborn", - "git_repository_is_empty", - "git_repository_item_path", - "git_repository_path", - "git_repository_workdir", - "git_repository_commondir", - "git_repository_set_workdir", - "git_repository_is_bare", - "git_repository_is_worktree", - "git_repository_config", - "git_repository_config_snapshot", - "git_repository_odb", - "git_repository_refdb", - "git_repository_index", - "git_repository_message", - "git_repository_message_remove", - "git_repository_state_cleanup", - "git_repository_fetchhead_foreach_cb", - "git_repository_fetchhead_foreach", - "git_repository_mergehead_foreach_cb", - "git_repository_mergehead_foreach", - "git_repository_hashfile", - "git_repository_set_head", - "git_repository_set_head_detached", - "git_repository_set_head_detached_from_annotated", - "git_repository_detach_head", - "git_repository_state", - "git_repository_set_namespace", - "git_repository_get_namespace", - "git_repository_is_shallow", - "git_repository_ident", - "git_repository_set_ident", - "git_repository_oid_type" - ], - "meta": {}, - "lines": 979 - }, - { - "file": "git2/reset.h", - "functions": [ - "git_reset", - "git_reset_from_annotated", - "git_reset_default" - ], - "meta": {}, - "lines": 107 - }, - { - "file": "git2/revert.h", - "functions": [ - "git_revert_options_init", - "git_revert_commit", - "git_revert" - ], - "meta": {}, - "lines": 86 - }, - { - "file": "git2/revparse.h", - "functions": [ - "git_revparse_single", - "git_revparse_ext", - "git_revparse" - ], - "meta": {}, - "lines": 108 - }, - { - "file": "git2/revwalk.h", - "functions": [ - "git_revwalk_new", - "git_revwalk_reset", - "git_revwalk_push", - "git_revwalk_push_glob", - "git_revwalk_push_head", - "git_revwalk_hide", - "git_revwalk_hide_glob", - "git_revwalk_hide_head", - "git_revwalk_push_ref", - "git_revwalk_hide_ref", - "git_revwalk_next", - "git_revwalk_sorting", - "git_revwalk_push_range", - "git_revwalk_simplify_first_parent", - "git_revwalk_free", - "git_revwalk_repository", - "git_revwalk_hide_cb", - "git_revwalk_add_hide_cb" - ], - "meta": {}, - "lines": 298 - }, - { - "file": "git2/signature.h", - "functions": [ - "git_signature_new", - "git_signature_now", - "git_signature_default", - "git_signature_from_buffer", - "git_signature_dup", - "git_signature_free" - ], - "meta": {}, - "lines": 99 - }, - { - "file": "git2/stash.h", - "functions": [ - "git_stash_save", - "git_stash_save_options_init", - "git_stash_save_with_opts", - "git_stash_apply_progress_cb", - "git_stash_apply_options_init", - "git_stash_apply", - "git_stash_cb", - "git_stash_foreach", - "git_stash_drop", - "git_stash_pop" - ], - "meta": {}, - "lines": 310 - }, - { - "file": "git2/status.h", - "functions": [ - "git_status_cb", - "git_status_options_init", - "git_status_foreach", - "git_status_foreach_ext", - "git_status_file", - "git_status_list_new", - "git_status_list_entrycount", - "git_status_byindex", - "git_status_list_free", - "git_status_should_ignore" - ], - "meta": {}, - "lines": 448 - }, - { - "file": "git2/strarray.h", - "functions": [ - "git_strarray_dispose" - ], - "meta": {}, - "lines": 37 - }, - { - "file": "git2/submodule.h", - "functions": [ - "git_submodule_cb", - "git_submodule_update_options_init", - "git_submodule_update", - "git_submodule_lookup", - "git_submodule_dup", - "git_submodule_free", - "git_submodule_foreach", - "git_submodule_add_setup", - "git_submodule_clone", - "git_submodule_add_finalize", - "git_submodule_add_to_index", - "git_submodule_owner", - "git_submodule_name", - "git_submodule_path", - "git_submodule_url", - "git_submodule_resolve_url", - "git_submodule_branch", - "git_submodule_set_branch", - "git_submodule_set_url", - "git_submodule_index_id", - "git_submodule_head_id", - "git_submodule_wd_id", - "git_submodule_ignore", - "git_submodule_set_ignore", - "git_submodule_update_strategy", - "git_submodule_set_update", - "git_submodule_fetch_recurse_submodules", - "git_submodule_set_fetch_recurse_submodules", - "git_submodule_init", - "git_submodule_repo_init", - "git_submodule_sync", - "git_submodule_open", - "git_submodule_reload", - "git_submodule_status", - "git_submodule_location" - ], - "meta": {}, - "lines": 664 - }, - { - "file": "git2/sys/commit_graph.h", - "functions": [], - "meta": {}, - "lines": 108 - }, - { - "file": "git2/sys/filter.h", - "functions": [], - "meta": {}, - "lines": 95 - }, - { - "file": "git2/sys/hashsig.h", - "functions": [], - "meta": {}, - "lines": 45 - }, - { - "file": "git2/sys/merge.h", - "functions": [], - "meta": {}, - "lines": 41 - }, - { - "file": "git2/sys/path.h", - "functions": [], - "meta": {}, - "lines": 41 - }, - { - "file": "git2/sys/stream.h", - "functions": [], - "meta": {}, - "lines": 97 - }, - { - "file": "git2/sys/transport.h", - "functions": [], - "meta": {}, - "lines": 318 - }, - { - "file": "git2/tag.h", - "functions": [ - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_tag_free", - "git_tag_id", - "git_tag_owner", - "git_tag_target", - "git_tag_target_id", - "git_tag_target_type", - "git_tag_name", - "git_tag_tagger", - "git_tag_message", - "git_tag_create", - "git_tag_annotation_create", - "git_tag_create_from_buffer", - "git_tag_create_lightweight", - "git_tag_delete", - "git_tag_list", - "git_tag_list_match", - "git_tag_foreach_cb", - "git_tag_foreach", - "git_tag_peel", - "git_tag_dup", - "git_tag_name_is_valid" - ], - "meta": {}, - "lines": 379 - }, - { - "file": "git2/trace.h", - "functions": [ - "git_trace_cb", - "git_trace_set" - ], - "meta": {}, - "lines": 63 - }, - { - "file": "git2/transaction.h", - "functions": [ - "git_transaction_new", - "git_transaction_lock_ref", - "git_transaction_set_target", - "git_transaction_set_symbolic_target", - "git_transaction_set_reflog", - "git_transaction_remove", - "git_transaction_commit", - "git_transaction_free" - ], - "meta": {}, - "lines": 117 - }, - { - "file": "git2/transport.h", - "functions": [ - "git_transport_message_cb", - "git_transport_cb" - ], - "meta": {}, - "lines": 37 - }, - { - "file": "git2/tree.h", - "functions": [ - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_tree_free", - "git_tree_id", - "git_tree_owner", - "git_tree_entrycount", - "git_tree_entry_byname", - "git_tree_entry_byindex", - "git_tree_entry_byid", - "git_tree_entry_bypath", - "git_tree_entry_dup", - "git_tree_entry_free", - "git_tree_entry_name", - "git_tree_entry_id", - "git_tree_entry_type", - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw", - "git_tree_entry_cmp", - "git_tree_entry_to_object", - "git_treebuilder_new", - "git_treebuilder_clear", - "git_treebuilder_entrycount", - "git_treebuilder_free", - "git_treebuilder_get", - "git_treebuilder_insert", - "git_treebuilder_remove", - "git_treebuilder_filter_cb", - "git_treebuilder_filter", - "git_treebuilder_write", - "git_treewalk_cb", - "git_tree_walk", - "git_tree_dup", - "git_tree_create_updated" - ], - "meta": {}, - "lines": 470 - }, - { - "file": "git2/types.h", - "functions": [], - "meta": {}, - "lines": 366 - }, - { - "file": "git2/worktree.h", - "functions": [ - "git_worktree_list", - "git_worktree_lookup", - "git_worktree_open_from_repository", - "git_worktree_free", - "git_worktree_validate", - "git_worktree_add_options_init", - "git_worktree_add", - "git_worktree_lock", - "git_worktree_unlock", - "git_worktree_is_locked", - "git_worktree_name", - "git_worktree_path", - "git_worktree_prune_options_init", - "git_worktree_is_prunable", - "git_worktree_prune" - ], - "meta": {}, - "lines": 264 - } - ], - "functions": { - "git_annotated_commit_from_ref": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 33, - "lineto": 36, - "args": [ - { - "name": "out", - "type": "git_annotated_commit **", - "comment": "pointer to store the git_annotated_commit result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given reference" - }, - { - "name": "ref", - "type": "const git_reference *", - "comment": "reference to use to lookup the git_annotated_commit" - } - ], - "argline": "git_annotated_commit **out, git_repository *repo, const git_reference *ref", - "sig": "git_annotated_commit **::git_repository *::const git_reference *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Creates a git_annotated_commit from the given reference.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", - "comments": "", - "group": "annotated", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_annotated_commit_from_ref-1" - ] - } - }, - "git_annotated_commit_from_fetchhead": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 50, - "lineto": 55, - "args": [ - { - "name": "out", - "type": "git_annotated_commit **", - "comment": "pointer to store the git_annotated_commit result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given commit" - }, - { - "name": "branch_name", - "type": "const char *", - "comment": "name of the (remote) branch" - }, - { - "name": "remote_url", - "type": "const char *", - "comment": "url of the remote" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the commit object id of the remote branch" - } - ], - "argline": "git_annotated_commit **out, git_repository *repo, const char *branch_name, const char *remote_url, const git_oid *id", - "sig": "git_annotated_commit **::git_repository *::const char *::const char *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Creates a git_annotated_commit from the given fetch head data.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", - "comments": "", - "group": "annotated" - }, - "git_annotated_commit_lookup": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 75, - "lineto": 78, - "args": [ - { - "name": "out", - "type": "git_annotated_commit **", - "comment": "pointer to store the git_annotated_commit result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given commit" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the commit object id to lookup" - } - ], - "argline": "git_annotated_commit **out, git_repository *repo, const git_oid *id", - "sig": "git_annotated_commit **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Creates a git_annotated_commit from the given commit id.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", - "comments": "

An annotated commit contains information about how it was looked up, which may be useful for functions like merge or rebase to provide context to the operation. For example, conflict files will include the name of the source or target branches being merged. It is therefore preferable to use the most specific function (eg git_annotated_commit_from_ref) instead of this one when that data is known.

\n", - "group": "annotated" - }, - "git_annotated_commit_from_revspec": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 92, - "lineto": 95, - "args": [ - { - "name": "out", - "type": "git_annotated_commit **", - "comment": "pointer to store the git_annotated_commit result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given commit" - }, - { - "name": "revspec", - "type": "const char *", - "comment": "the extended sha syntax string to use to lookup the commit" - } - ], - "argline": "git_annotated_commit **out, git_repository *repo, const char *revspec", - "sig": "git_annotated_commit **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Creates a git_annotated_commit from a revision string.

\n", - "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", - "group": "annotated" - }, - "git_annotated_commit_id": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 103, - "lineto": 104, - "args": [ - { - "name": "commit", - "type": "const git_annotated_commit *", - "comment": "the given annotated commit" - } - ], - "argline": "const git_annotated_commit *commit", - "sig": "const git_annotated_commit *", - "return": { - "type": "const git_oid *", - "comment": " commit id" - }, - "description": "

Gets the commit ID that the given git_annotated_commit refers to.

\n", - "comments": "", - "group": "annotated", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_annotated_commit_id-2" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_annotated_commit_id-1", - "ex/v1.7.2/merge.html#git_annotated_commit_id-2", - "ex/v1.7.2/merge.html#git_annotated_commit_id-3" - ] - } - }, - "git_annotated_commit_ref": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 112, - "lineto": 113, - "args": [ - { - "name": "commit", - "type": "const git_annotated_commit *", - "comment": "the given annotated commit" - } - ], - "argline": "const git_annotated_commit *commit", - "sig": "const git_annotated_commit *", - "return": { - "type": "const char *", - "comment": " ref name." - }, - "description": "

Get the refname that the given git_annotated_commit refers to.

\n", - "comments": "", - "group": "annotated", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_annotated_commit_ref-3", - "ex/v1.7.2/checkout.html#git_annotated_commit_ref-4", - "ex/v1.7.2/checkout.html#git_annotated_commit_ref-5" - ] - } - }, - "git_annotated_commit_free": { - "type": "function", - "file": "git2/annotated_commit.h", - "line": 120, - "lineto": 121, - "args": [ - { - "name": "commit", - "type": "git_annotated_commit *", - "comment": "annotated commit to free" - } - ], - "argline": "git_annotated_commit *commit", - "sig": "git_annotated_commit *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees a git_annotated_commit.

\n", - "comments": "", - "group": "annotated", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_annotated_commit_free-6" - ] - } - }, - "git_apply_options_init": { - "type": "function", - "file": "git2/apply.h", - "line": 106, - "lineto": 106, - "args": [ - { - "name": "opts", - "type": "git_apply_options *", - "comment": "The `git_apply_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_APPLY_OPTIONS_VERSION`" - } - ], - "argline": "git_apply_options *opts, unsigned int version", - "sig": "git_apply_options *::unsigned int", - "return": { - "type": "int", - "comment": " 0 on success or -1 on failure." - }, - "description": "

Initialize git_apply_options structure

\n", - "comments": "

Initialize a git_apply_options with default values. Equivalent to creating an instance with GIT_APPLY_OPTIONS_INIT.

\n", - "group": "apply" - }, - "git_apply_to_tree": { - "type": "function", - "file": "git2/apply.h", - "line": 119, - "lineto": 124, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "the postimage of the application" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to apply" - }, - { - "name": "preimage", - "type": "git_tree *", - "comment": "the tree to apply the diff to" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "the diff to apply" - }, - { - "name": "options", - "type": "const git_apply_options *", - "comment": "the options for the apply (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, git_tree *preimage, git_diff *diff, const git_apply_options *options", - "sig": "git_index **::git_repository *::git_tree *::git_diff *::const git_apply_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Apply a git_diff to a git_tree, and return the resulting image\n as an index.

\n", - "comments": "", - "group": "apply" - }, - "git_apply": { - "type": "function", - "file": "git2/apply.h", - "line": 157, - "lineto": 161, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to apply to" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "the diff to apply" - }, - { - "name": "location", - "type": "git_apply_location_t", - "comment": "the location to apply (workdir, index or both)" - }, - { - "name": "options", - "type": "const git_apply_options *", - "comment": "the options for the apply (or null for defaults)" - } - ], - "argline": "git_repository *repo, git_diff *diff, git_apply_location_t location, const git_apply_options *options", - "sig": "git_repository *::git_diff *::git_apply_location_t::const git_apply_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Apply a git_diff to the given repository, making changes directly\n in the working directory, the index, or both.

\n", - "comments": "", - "group": "apply" - }, - "git_attr_value": { - "type": "function", - "file": "git2/attr.h", - "line": 102, - "lineto": 102, - "args": [ - { - "name": "attr", - "type": "const char *", - "comment": "The attribute" - } - ], - "argline": "const char *attr", - "sig": "const char *", - "return": { - "type": "git_attr_value_t", - "comment": " the value type for the attribute" - }, - "description": "

Return the value type for a given attribute.

\n", - "comments": "

This can be either TRUE, FALSE, UNSPECIFIED (if the attribute was not set at all), or VALUE, if the attribute was set to an actual string.

\n\n

If the attribute has a VALUE string, it can be accessed normally as a NULL-terminated C string.

\n", - "group": "attr" - }, - "git_attr_get": { - "type": "function", - "file": "git2/attr.h", - "line": 182, - "lineto": 187, - "args": [ - { - "name": "value_out", - "type": "const char **", - "comment": "Output of the value of the attribute. Use the GIT_ATTR_...\n macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just\n use the string value for attributes set to a value. You\n should NOT modify or free this value." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "A combination of GIT_ATTR_CHECK... flags." - }, - { - "name": "path", - "type": "const char *", - "comment": "The path to check for attributes. Relative paths are\n interpreted relative to the repo root. The file does\n not have to exist, but if it does not, then it will be\n treated as a plain file (not a directory)." - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the attribute to look up." - } - ], - "argline": "const char **value_out, git_repository *repo, uint32_t flags, const char *path, const char *name", - "sig": "const char **::git_repository *::uint32_t::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Look up the value of one git attribute for path.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_get_ext": { - "type": "function", - "file": "git2/attr.h", - "line": 205, - "lineto": 210, - "args": [ - { - "name": "value_out", - "type": "const char **", - "comment": "Output of the value of the attribute. Use the GIT_ATTR_...\n macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just\n use the string value for attributes set to a value. You\n should NOT modify or free this value." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "opts", - "type": "git_attr_options *", - "comment": "The `git_attr_options` to use when querying these attributes." - }, - { - "name": "path", - "type": "const char *", - "comment": "The path to check for attributes. Relative paths are\n interpreted relative to the repo root. The file does\n not have to exist, but if it does not, then it will be\n treated as a plain file (not a directory)." - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the attribute to look up." - } - ], - "argline": "const char **value_out, git_repository *repo, git_attr_options *opts, const char *path, const char *name", - "sig": "const char **::git_repository *::git_attr_options *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Look up the value of one git attribute for path with extended options.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_get_many": { - "type": "function", - "file": "git2/attr.h", - "line": 242, - "lineto": 248, - "args": [ - { - "name": "values_out", - "type": "const char **", - "comment": "An array of num_attr entries that will have string\n pointers written into it for the values of the attributes.\n You should not modify or free the values that are written\n into this array (although of course, you should free the\n array itself if you allocated it)." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "A combination of GIT_ATTR_CHECK... flags." - }, - { - "name": "path", - "type": "const char *", - "comment": "The path inside the repo to check attributes. This\n does not have to exist, but if it does not, then\n it will be treated as a plain file (i.e. not a directory)." - }, - { - "name": "num_attr", - "type": "size_t", - "comment": "The number of attributes being looked up" - }, - { - "name": "names", - "type": "const char **", - "comment": "An array of num_attr strings containing attribute names." - } - ], - "argline": "const char **values_out, git_repository *repo, uint32_t flags, const char *path, size_t num_attr, const char **names", - "sig": "const char **::git_repository *::uint32_t::const char *::size_t::const char **", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Look up a list of git attributes for path.

\n", - "comments": "

Use this if you have a known list of attributes that you want to look up in a single call. This is somewhat more efficient than calling git_attr_get() multiple times.

\n\n

For example, you might write:

\n\n
 const char *attrs[] = { "crlf", "diff", "foo" };     const char **values[3];     git_attr_get_many(values, repo, 0, "my/fun/file.c", 3, attrs);\n
\n\n

Then you could loop through the 3 values to get the settings for the three attributes you asked about.

\n", - "group": "attr" - }, - "git_attr_get_many_ext": { - "type": "function", - "file": "git2/attr.h", - "line": 267, - "lineto": 273, - "args": [ - { - "name": "values_out", - "type": "const char **", - "comment": "An array of num_attr entries that will have string\n pointers written into it for the values of the attributes.\n You should not modify or free the values that are written\n into this array (although of course, you should free the\n array itself if you allocated it)." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "opts", - "type": "git_attr_options *", - "comment": "The `git_attr_options` to use when querying these attributes." - }, - { - "name": "path", - "type": "const char *", - "comment": "The path inside the repo to check attributes. This\n does not have to exist, but if it does not, then\n it will be treated as a plain file (i.e. not a directory)." - }, - { - "name": "num_attr", - "type": "size_t", - "comment": "The number of attributes being looked up" - }, - { - "name": "names", - "type": "const char **", - "comment": "An array of num_attr strings containing attribute names." - } - ], - "argline": "const char **values_out, git_repository *repo, git_attr_options *opts, const char *path, size_t num_attr, const char **names", - "sig": "const char **::git_repository *::git_attr_options *::const char *::size_t::const char **", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Look up a list of git attributes for path with extended options.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_foreach": { - "type": "function", - "file": "git2/attr.h", - "line": 306, - "lineto": 311, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "A combination of GIT_ATTR_CHECK... flags." - }, - { - "name": "path", - "type": "const char *", - "comment": "Path inside the repo to check attributes. This does not have\n to exist, but if it does not, then it will be treated as a\n plain file (i.e. not a directory)." - }, - { - "name": "callback", - "type": "git_attr_foreach_cb", - "comment": "Function to invoke on each attribute name and value.\n See git_attr_foreach_cb." - }, - { - "name": "payload", - "type": "void *", - "comment": "Passed on as extra parameter to callback function." - } - ], - "argline": "git_repository *repo, uint32_t flags, const char *path, git_attr_foreach_cb callback, void *payload", - "sig": "git_repository *::uint32_t::const char *::git_attr_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all the git attributes for a path.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_foreach_ext": { - "type": "function", - "file": "git2/attr.h", - "line": 326, - "lineto": 331, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the path." - }, - { - "name": "opts", - "type": "git_attr_options *", - "comment": "The `git_attr_options` to use when querying these attributes." - }, - { - "name": "path", - "type": "const char *", - "comment": "Path inside the repo to check attributes. This does not have\n to exist, but if it does not, then it will be treated as a\n plain file (i.e. not a directory)." - }, - { - "name": "callback", - "type": "git_attr_foreach_cb", - "comment": "Function to invoke on each attribute name and value.\n See git_attr_foreach_cb." - }, - { - "name": "payload", - "type": "void *", - "comment": "Passed on as extra parameter to callback function." - } - ], - "argline": "git_repository *repo, git_attr_options *opts, const char *path, git_attr_foreach_cb callback, void *payload", - "sig": "git_repository *::git_attr_options *::const char *::git_attr_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all the git attributes for a path with extended options.

\n", - "comments": "", - "group": "attr" - }, - "git_attr_cache_flush": { - "type": "function", - "file": "git2/attr.h", - "line": 344, - "lineto": 345, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the gitattributes cache" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Flush the gitattributes cache.

\n", - "comments": "

Call this if you have reason to believe that the attributes files on disk no longer match the cached contents of memory. This will cause the attributes files to be reloaded the next time that an attribute access function is called.

\n", - "group": "attr" - }, - "git_attr_add_macro": { - "type": "function", - "file": "git2/attr.h", - "line": 362, - "lineto": 365, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository to add the macro in." - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the macro." - }, - { - "name": "values", - "type": "const char *", - "comment": "The value for the macro." - } - ], - "argline": "git_repository *repo, const char *name, const char *values", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Add a macro definition.

\n", - "comments": "

Macros will automatically be loaded from the top level .gitattributes file of the repository (plus the built-in "binary" macro). This function allows you to add others. For example, to add the default macro, you would call:

\n\n
 git_attr_add_macro(repo, "binary", "-diff -crlf");\n
\n", - "group": "attr" - }, - "git_blame_options_init": { - "type": "function", - "file": "git2/blame.h", - "line": 138, - "lineto": 140, - "args": [ - { - "name": "opts", - "type": "git_blame_options *", - "comment": "The `git_blame_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_BLAME_OPTIONS_VERSION`." - } - ], - "argline": "git_blame_options *opts, unsigned int version", - "sig": "git_blame_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_blame_options structure

\n", - "comments": "

Initializes a git_blame_options with default values. Equivalent to creating an instance with GIT_BLAME_OPTIONS_INIT.

\n", - "group": "blame" - }, - "git_blame_get_hunk_count": { - "type": "function", - "file": "git2/blame.h", - "line": 210, - "lineto": 210, - "args": [ - { - "name": "blame", - "type": "git_blame *", - "comment": "The blame structure to query." - } - ], - "argline": "git_blame *blame", - "sig": "git_blame *", - "return": { - "type": "uint32_t", - "comment": " The number of hunks." - }, - "description": "

Gets the number of hunks that exist in the blame structure.

\n", - "comments": "", - "group": "blame" - }, - "git_blame_get_hunk_byindex": { - "type": "function", - "file": "git2/blame.h", - "line": 219, - "lineto": 221, - "args": [ - { - "name": "blame", - "type": "git_blame *", - "comment": "the blame structure to query" - }, - { - "name": "index", - "type": "uint32_t", - "comment": "index of the hunk to retrieve" - } - ], - "argline": "git_blame *blame, uint32_t index", - "sig": "git_blame *::uint32_t", - "return": { - "type": "const git_blame_hunk *", - "comment": " the hunk at the given index, or NULL on error" - }, - "description": "

Gets the blame hunk at the given index.

\n", - "comments": "", - "group": "blame" - }, - "git_blame_get_hunk_byline": { - "type": "function", - "file": "git2/blame.h", - "line": 230, - "lineto": 232, - "args": [ - { - "name": "blame", - "type": "git_blame *", - "comment": "the blame structure to query" - }, - { - "name": "lineno", - "type": "size_t", - "comment": "the (1-based) line number to find a hunk for" - } - ], - "argline": "git_blame *blame, size_t lineno", - "sig": "git_blame *::size_t", - "return": { - "type": "const git_blame_hunk *", - "comment": " the hunk that contains the given line, or NULL on error" - }, - "description": "

Gets the hunk that relates to the given line number in the newest commit.

\n", - "comments": "", - "group": "blame", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_blame_get_hunk_byline-1" - ] - } - }, - "git_blame_file": { - "type": "function", - "file": "git2/blame.h", - "line": 245, - "lineto": 249, - "args": [ - { - "name": "out", - "type": "git_blame **", - "comment": "pointer that will receive the blame object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository whose history is to be walked" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to file to consider" - }, - { - "name": "options", - "type": "git_blame_options *", - "comment": "options for the blame operation. If NULL, this is treated as\n though GIT_BLAME_OPTIONS_INIT were passed." - } - ], - "argline": "git_blame **out, git_repository *repo, const char *path, git_blame_options *options", - "sig": "git_blame **::git_repository *::const char *::git_blame_options *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error.)" - }, - "description": "

Get the blame for a single file.

\n", - "comments": "", - "group": "blame", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_blame_file-2" - ] - } - }, - "git_blame_buffer": { - "type": "function", - "file": "git2/blame.h", - "line": 269, - "lineto": 273, - "args": [ - { - "name": "out", - "type": "git_blame **", - "comment": "pointer that will receive the resulting blame data" - }, - { - "name": "reference", - "type": "git_blame *", - "comment": "cached blame from the history of the file (usually the output\n from git_blame_file)" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "the (possibly) modified contents of the file" - }, - { - "name": "buffer_len", - "type": "size_t", - "comment": "number of valid bytes in the buffer" - } - ], - "argline": "git_blame **out, git_blame *reference, const char *buffer, size_t buffer_len", - "sig": "git_blame **::git_blame *::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error)" - }, - "description": "

Get blame data for a file that has been modified in memory. The reference\n parameter is a pre-calculated blame for the in-odb history of the file. This\n means that once a file blame is completed (which can be expensive), updating\n the buffer blame is very fast.

\n", - "comments": "

Lines that differ between the buffer and the committed version are marked as having a zero OID for their final_commit_id.

\n", - "group": "blame" - }, - "git_blame_free": { - "type": "function", - "file": "git2/blame.h", - "line": 280, - "lineto": 280, - "args": [ - { - "name": "blame", - "type": "git_blame *", - "comment": "the blame structure to free" - } - ], - "argline": "git_blame *blame", - "sig": "git_blame *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free memory allocated by git_blame_file or git_blame_buffer.

\n", - "comments": "", - "group": "blame", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_blame_free-3" - ] - } - }, - "git_blob_lookup": { - "type": "function", - "file": "git2/blob.h", - "line": 33, - "lineto": 33, - "args": [ - { - "name": "blob", - "type": "git_blob **", - "comment": "pointer to the looked up blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the blob." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the blob to locate." - } - ], - "argline": "git_blob **blob, git_repository *repo, const git_oid *id", - "sig": "git_blob **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a blob object from a repository.

\n", - "comments": "", - "group": "blob", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_blob_lookup-4" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_blob_lookup-1" - ] - } - }, - "git_blob_lookup_prefix": { - "type": "function", - "file": "git2/blob.h", - "line": 47, - "lineto": 47, - "args": [ - { - "name": "blob", - "type": "git_blob **", - "comment": "pointer to the looked up blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the blob." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the blob to locate." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - } - ], - "argline": "git_blob **blob, git_repository *repo, const git_oid *id, size_t len", - "sig": "git_blob **::git_repository *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a blob object from a repository,\n given a prefix of its identifier (short id).

\n", - "comments": "", - "group": "blob" - }, - "git_blob_free": { - "type": "function", - "file": "git2/blob.h", - "line": 60, - "lineto": 60, - "args": [ - { - "name": "blob", - "type": "git_blob *", - "comment": "the blob to close" - } - ], - "argline": "git_blob *blob", - "sig": "git_blob *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open blob

\n", - "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a blob. Failure to do so will cause a memory leak.

\n", - "group": "blob", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_blob_free-5" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_blob_free-2" - ] - } - }, - "git_blob_id": { - "type": "function", - "file": "git2/blob.h", - "line": 68, - "lineto": 68, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "a previously loaded blob." - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "const git_oid *", - "comment": " SHA1 hash for this blob." - }, - "description": "

Get the id of a blob.

\n", - "comments": "", - "group": "blob" - }, - "git_blob_owner": { - "type": "function", - "file": "git2/blob.h", - "line": 76, - "lineto": 76, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "A previously loaded blob." - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "git_repository *", - "comment": " Repository that contains this blob." - }, - "description": "

Get the repository that contains the blob.

\n", - "comments": "", - "group": "blob" - }, - "git_blob_rawcontent": { - "type": "function", - "file": "git2/blob.h", - "line": 89, - "lineto": 89, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "pointer to the blob" - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "const void *", - "comment": " the pointer, or NULL on error" - }, - "description": "

Get a read-only buffer with the raw content of a blob.

\n", - "comments": "

A pointer to the raw content of a blob is returned; this pointer is owned internally by the object and shall not be free'd. The pointer may be invalidated at a later time.

\n", - "group": "blob", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_blob_rawcontent-6" - ], - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_blob_rawcontent-1" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_blob_rawcontent-3" - ] - } - }, - "git_blob_rawsize": { - "type": "function", - "file": "git2/blob.h", - "line": 97, - "lineto": 97, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "pointer to the blob" - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "git_object_size_t", - "comment": " size on bytes" - }, - "description": "

Get the size in bytes of the contents of a blob

\n", - "comments": "", - "group": "blob", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_blob_rawsize-7" - ], - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_blob_rawsize-2" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_blob_rawsize-4", - "ex/v1.7.2/general.html#git_blob_rawsize-5" - ] - } - }, - "git_blob_filter_options_init": { - "type": "function", - "file": "git2/blob.h", - "line": 164, - "lineto": 164, - "args": [ - { - "name": "opts", - "type": "git_blob_filter_options *", - "comment": "The `git_blob_filter_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_BLOB_FILTER_OPTIONS_VERSION`." - } - ], - "argline": "git_blob_filter_options *opts, unsigned int version", - "sig": "git_blob_filter_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_blob_filter_options structure

\n", - "comments": "

Initializes a git_blob_filter_options with default values. Equivalent to creating an instance with GIT_BLOB_FILTER_OPTIONS_INIT.

\n", - "group": "blob" - }, - "git_blob_filter": { - "type": "function", - "file": "git2/blob.h", - "line": 188, - "lineto": 192, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The git_buf to be filled in" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "Pointer to the blob" - }, - { - "name": "as_path", - "type": "const char *", - "comment": "Path used for file attribute lookups, etc." - }, - { - "name": "opts", - "type": "git_blob_filter_options *", - "comment": "Options to use for filtering the blob" - } - ], - "argline": "git_buf *out, git_blob *blob, const char *as_path, git_blob_filter_options *opts", - "sig": "git_buf *::git_blob *::const char *::git_blob_filter_options *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Get a buffer with the filtered content of a blob.

\n", - "comments": "

This applies filters as if the blob was being checked out to the working directory under the specified filename. This may apply CRLF filtering or other types of changes depending on the file attributes set for the blob and the content detected in it.

\n\n

The output is written into a git_buf which the caller must free when done (via git_buf_dispose).

\n\n

If no filters need to be applied, then the out buffer will just be populated with a pointer to the raw content of the blob. In that case, be careful to not free the blob until done with the buffer or copy it into memory you own.

\n", - "group": "blob" - }, - "git_blob_create_from_workdir": { - "type": "function", - "file": "git2/blob.h", - "line": 205, - "lineto": 205, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "return the id of the written blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the blob will be written.\n\tthis repository cannot be bare" - }, - { - "name": "relative_path", - "type": "const char *", - "comment": "file from which the blob will be created,\n\trelative to the repository's working dir" - } - ], - "argline": "git_oid *id, git_repository *repo, const char *relative_path", - "sig": "git_oid *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read a file from the working folder of a repository\n and write it to the Object Database as a loose blob

\n", - "comments": "", - "group": "blob" - }, - "git_blob_create_from_disk": { - "type": "function", - "file": "git2/blob.h", - "line": 217, - "lineto": 217, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "return the id of the written blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the blob will be written.\n\tthis repository can be bare or not" - }, - { - "name": "path", - "type": "const char *", - "comment": "file from which the blob will be created" - } - ], - "argline": "git_oid *id, git_repository *repo, const char *path", - "sig": "git_oid *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read a file from the filesystem and write its content\n to the Object Database as a loose blob

\n", - "comments": "", - "group": "blob" - }, - "git_blob_create_from_stream": { - "type": "function", - "file": "git2/blob.h", - "line": 244, - "lineto": 247, - "args": [ - { - "name": "out", - "type": "git_writestream **", - "comment": "the stream into which to write" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where the blob will be written.\n This repository can be bare or not." - }, - { - "name": "hintpath", - "type": "const char *", - "comment": "If not NULL, will be used to select data filters\n to apply onto the content of the blob to be created." - } - ], - "argline": "git_writestream **out, git_repository *repo, const char *hintpath", - "sig": "git_writestream **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or error code" - }, - "description": "

Create a stream to write a new blob into the object db

\n", - "comments": "

This function may need to buffer the data on disk and will in general not be the right choice if you know the size of the data to write. If you have data in memory, use git_blob_create_from_buffer(). If you do not, but know the size of the contents (and don't want/need to perform filtering), use git_odb_open_wstream().

\n\n

Don't close this stream yourself but pass it to git_blob_create_from_stream_commit() to commit the write to the object db and get the object id.

\n\n

If the hintpath parameter is filled, it will be used to determine what git filters should be applied to the object before it is written to the object database.

\n", - "group": "blob" - }, - "git_blob_create_from_stream_commit": { - "type": "function", - "file": "git2/blob.h", - "line": 258, - "lineto": 260, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the id of the new blob" - }, - { - "name": "stream", - "type": "git_writestream *", - "comment": "the stream to close" - } - ], - "argline": "git_oid *out, git_writestream *stream", - "sig": "git_oid *::git_writestream *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Close the stream and write the blob to the object db

\n", - "comments": "

The stream will be closed and freed.

\n", - "group": "blob" - }, - "git_blob_create_from_buffer": { - "type": "function", - "file": "git2/blob.h", - "line": 271, - "lineto": 272, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "return the id of the written blob" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the blob will be written" - }, - { - "name": "buffer", - "type": "const void *", - "comment": "data to be written into the blob" - }, - { - "name": "len", - "type": "size_t", - "comment": "length of the data" - } - ], - "argline": "git_oid *id, git_repository *repo, const void *buffer, size_t len", - "sig": "git_oid *::git_repository *::const void *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write an in-memory buffer to the ODB as a blob

\n", - "comments": "", - "group": "blob" - }, - "git_blob_is_binary": { - "type": "function", - "file": "git2/blob.h", - "line": 285, - "lineto": 285, - "args": [ - { - "name": "blob", - "type": "const git_blob *", - "comment": "The blob which content should be analyzed" - } - ], - "argline": "const git_blob *blob", - "sig": "const git_blob *", - "return": { - "type": "int", - "comment": " 1 if the content of the blob is detected\n as binary; 0 otherwise." - }, - "description": "

Determine if the blob content is most certainly binary or not.

\n", - "comments": "

The heuristic used to guess if a file is binary is taken from core git: Searching for NUL bytes and looking for a reasonable ratio of printable to non-printable characters among the first 8000 bytes.

\n", - "group": "blob" - }, - "git_blob_data_is_binary": { - "type": "function", - "file": "git2/blob.h", - "line": 297, - "lineto": 297, - "args": [ - { - "name": "data", - "type": "const char *", - "comment": "The blob data which content should be analyzed" - }, - { - "name": "len", - "type": "size_t", - "comment": "The length of the data" - } - ], - "argline": "const char *data, size_t len", - "sig": "const char *::size_t", - "return": { - "type": "int", - "comment": " 1 if the content of the blob is detected\n as binary; 0 otherwise." - }, - "description": "

Determine if the given content is most certainly binary or not;\n this is the same mechanism used by git_blob_is_binary but only\n looking at raw data.

\n", - "comments": "", - "group": "blob" - }, - "git_blob_dup": { - "type": "function", - "file": "git2/blob.h", - "line": 307, - "lineto": 307, - "args": [ - { - "name": "out", - "type": "git_blob **", - "comment": "Pointer to store the copy of the object" - }, - { - "name": "source", - "type": "git_blob *", - "comment": "Original object to copy" - } - ], - "argline": "git_blob **out, git_blob *source", - "sig": "git_blob **::git_blob *", - "return": { - "type": "int", - "comment": " 0." - }, - "description": "

Create an in-memory copy of a blob. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "blob" - }, - "git_branch_create": { - "type": "function", - "file": "git2/branch.h", - "line": 52, - "lineto": 57, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer where to store the underlying reference." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to create the branch in." - }, - { - "name": "branch_name", - "type": "const char *", - "comment": "Name for the branch; this name is\n validated for consistency. It should also not conflict with\n an already existing branch name." - }, - { - "name": "target", - "type": "const git_commit *", - "comment": "Commit to which this branch should point. This object\n must belong to the given `repo`." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing branch." - } - ], - "argline": "git_reference **out, git_repository *repo, const char *branch_name, const git_commit *target, int force", - "sig": "git_reference **::git_repository *::const char *::const git_commit *::int", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC or an error code.\n A proper reference is written in the refs/heads namespace\n pointing to the provided target commit." - }, - "description": "

Create a new branch pointing at a target commit

\n", - "comments": "

A new direct reference will be created pointing to this target commit. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The returned reference must be freed by the user.

\n\n

The branch name will be checked for validity. See git_tag_create() for rules about valid names.

\n", - "group": "branch" - }, - "git_branch_create_from_annotated": { - "type": "function", - "file": "git2/branch.h", - "line": 70, - "lineto": 75, - "args": [ - { - "name": "ref_out", - "type": "git_reference **", - "comment": null - }, - { - "name": "repository", - "type": "git_repository *", - "comment": null - }, - { - "name": "branch_name", - "type": "const char *", - "comment": null - }, - { - "name": "commit", - "type": "const git_annotated_commit *", - "comment": null - }, - { - "name": "force", - "type": "int", - "comment": null - } - ], - "argline": "git_reference **ref_out, git_repository *repository, const char *branch_name, const git_annotated_commit *commit, int force", - "sig": "git_reference **::git_repository *::const char *::const git_annotated_commit *::int", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create a new branch pointing at a target commit

\n", - "comments": "

This behaves like git_branch_create() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_branch_create().

\n", - "group": "branch", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_branch_create_from_annotated-7" - ] - } - }, - "git_branch_delete": { - "type": "function", - "file": "git2/branch.h", - "line": 87, - "lineto": 87, - "args": [ - { - "name": "branch", - "type": "git_reference *", - "comment": "A valid reference representing a branch" - } - ], - "argline": "git_reference *branch", - "sig": "git_reference *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code." - }, - "description": "

Delete an existing branch reference.

\n", - "comments": "

Note that if the deletion succeeds, the reference object will not be valid anymore, and should be freed immediately by the user using git_reference_free().

\n", - "group": "branch" - }, - "git_branch_iterator_new": { - "type": "function", - "file": "git2/branch.h", - "line": 103, - "lineto": 106, - "args": [ - { - "name": "out", - "type": "git_branch_iterator **", - "comment": "the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the branches." - }, - { - "name": "list_flags", - "type": "git_branch_t", - "comment": "Filtering flags for the branch\n listing. Valid values are GIT_BRANCH_LOCAL, GIT_BRANCH_REMOTE\n or GIT_BRANCH_ALL." - } - ], - "argline": "git_branch_iterator **out, git_repository *repo, git_branch_t list_flags", - "sig": "git_branch_iterator **::git_repository *::git_branch_t", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Create an iterator which loops over the requested branches.

\n", - "comments": "", - "group": "branch" - }, - "git_branch_next": { - "type": "function", - "file": "git2/branch.h", - "line": 116, - "lineto": 116, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "the reference" - }, - { - "name": "out_type", - "type": "git_branch_t *", - "comment": "the type of branch (local or remote-tracking)" - }, - { - "name": "iter", - "type": "git_branch_iterator *", - "comment": "the branch iterator" - } - ], - "argline": "git_reference **out, git_branch_t *out_type, git_branch_iterator *iter", - "sig": "git_reference **::git_branch_t *::git_branch_iterator *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ITEROVER if there are no more branches or an error code." - }, - "description": "

Retrieve the next branch from the iterator

\n", - "comments": "", - "group": "branch" - }, - "git_branch_iterator_free": { - "type": "function", - "file": "git2/branch.h", - "line": 123, - "lineto": 123, - "args": [ - { - "name": "iter", - "type": "git_branch_iterator *", - "comment": "the iterator to free" - } - ], - "argline": "git_branch_iterator *iter", - "sig": "git_branch_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a branch iterator

\n", - "comments": "", - "group": "branch" - }, - "git_branch_move": { - "type": "function", - "file": "git2/branch.h", - "line": 146, - "lineto": 150, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "New reference object for the updated name." - }, - { - "name": "branch", - "type": "git_reference *", - "comment": "Current underlying reference of the branch." - }, - { - "name": "new_branch_name", - "type": "const char *", - "comment": "Target name of the branch once the move\n is performed; this name is validated for consistency." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing branch." - } - ], - "argline": "git_reference **out, git_reference *branch, const char *new_branch_name, int force", - "sig": "git_reference **::git_reference *::const char *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code." - }, - "description": "

Move/rename an existing local branch reference.

\n", - "comments": "

The new branch name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

Note that if the move succeeds, the old reference object will not be valid anymore, and should be freed immediately by the user using git_reference_free().

\n", - "group": "branch" - }, - "git_branch_lookup": { - "type": "function", - "file": "git2/branch.h", - "line": 170, - "lineto": 174, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer to the looked-up branch reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to look up the branch" - }, - { - "name": "branch_name", - "type": "const char *", - "comment": "Name of the branch to be looked-up;\n this name is validated for consistency." - }, - { - "name": "branch_type", - "type": "git_branch_t", - "comment": "Type of the considered branch. This should\n be valued with either GIT_BRANCH_LOCAL or GIT_BRANCH_REMOTE." - } - ], - "argline": "git_reference **out, git_repository *repo, const char *branch_name, git_branch_t branch_type", - "sig": "git_reference **::git_repository *::const char *::git_branch_t", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND when no matching branch\n exists, GIT_EINVALIDSPEC, otherwise an error code." - }, - "description": "

Lookup a branch by its name in a repository.

\n", - "comments": "

The generated reference must be freed by the user. The branch name will be checked for validity.

\n", - "group": "branch" - }, - "git_branch_name": { - "type": "function", - "file": "git2/branch.h", - "line": 191, - "lineto": 193, - "args": [ - { - "name": "out", - "type": "const char **", - "comment": "Pointer to the abbreviated reference name.\n Owned by ref, do not free." - }, - { - "name": "ref", - "type": "const git_reference *", - "comment": "A reference object, ideally pointing to a branch" - } - ], - "argline": "const char **out, const git_reference *ref", - "sig": "const char **::const git_reference *", - "return": { - "type": "int", - "comment": " 0 on success; GIT_EINVALID if the reference isn't either a local or\n remote branch, otherwise an error code." - }, - "description": "

Get the branch name

\n", - "comments": "

Given a reference object, this will check that it really is a branch (ie. it lives under "refs/heads/" or "refs/remotes/"), and return the branch part of it.

\n", - "group": "branch", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_branch_name-4" - ] - } - }, - "git_branch_upstream": { - "type": "function", - "file": "git2/branch.h", - "line": 209, - "lineto": 211, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer where to store the retrieved reference." - }, - { - "name": "branch", - "type": "const git_reference *", - "comment": "Current underlying reference of the branch." - } - ], - "argline": "git_reference **out, const git_reference *branch", - "sig": "git_reference **::const git_reference *", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND when no remote tracking\n reference exists, otherwise an error code." - }, - "description": "

Get the upstream of a branch

\n", - "comments": "

Given a reference, this will return a new reference object corresponding to its remote tracking branch. The reference must be a local branch.

\n", - "group": "branch" - }, - "git_branch_set_upstream": { - "type": "function", - "file": "git2/branch.h", - "line": 228, - "lineto": 230, - "args": [ - { - "name": "branch", - "type": "git_reference *", - "comment": "the branch to configure" - }, - { - "name": "branch_name", - "type": "const char *", - "comment": "remote-tracking or local branch to set as upstream." - } - ], - "argline": "git_reference *branch, const char *branch_name", - "sig": "git_reference *::const char *", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name`\n or an error code" - }, - "description": "

Set a branch's upstream branch

\n", - "comments": "

This will update the configuration to set the branch named branch_name as the upstream of branch. Pass a NULL name to unset the upstream information.

\n", - "group": "branch" - }, - "git_branch_upstream_name": { - "type": "function", - "file": "git2/branch.h", - "line": 246, - "lineto": 249, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer into which the name will be written." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the branches live." - }, - { - "name": "refname", - "type": "const char *", - "comment": "reference name of the local branch." - } - ], - "argline": "git_buf *out, git_repository *repo, const char *refname", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND when no remote tracking reference exists,\n or an error code." - }, - "description": "

Get the upstream name of a branch

\n", - "comments": "

Given a local branch, this will return its remote-tracking branch information, as a full reference name, ie. "feature/nice" would become "refs/remote/origin/feature/nice", depending on that branch's configuration.

\n", - "group": "branch" - }, - "git_branch_is_head": { - "type": "function", - "file": "git2/branch.h", - "line": 259, - "lineto": 260, - "args": [ - { - "name": "branch", - "type": "const git_reference *", - "comment": "A reference to a local branch." - } - ], - "argline": "const git_reference *branch", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 if HEAD points at the branch, 0 if it isn't, or a negative value\n \t\t as an error code." - }, - "description": "

Determine if HEAD points to the given branch

\n", - "comments": "", - "group": "branch" - }, - "git_branch_is_checked_out": { - "type": "function", - "file": "git2/branch.h", - "line": 272, - "lineto": 273, - "args": [ - { - "name": "branch", - "type": "const git_reference *", - "comment": "A reference to a local branch." - } - ], - "argline": "const git_reference *branch", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 if branch is checked out, 0 if it isn't, an error code otherwise." - }, - "description": "

Determine if any HEAD points to the current branch

\n", - "comments": "

This will iterate over all known linked repositories (usually in the form of worktrees) and report whether any HEAD is pointing at the current branch.

\n", - "group": "branch" - }, - "git_branch_remote_name": { - "type": "function", - "file": "git2/branch.h", - "line": 291, - "lineto": 294, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The buffer into which the name will be written." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository where the branch lives." - }, - { - "name": "refname", - "type": "const char *", - "comment": "complete name of the remote tracking branch." - } - ], - "argline": "git_buf *out, git_repository *repo, const char *refname", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND when no matching remote was found,\n GIT_EAMBIGUOUS when the branch maps to several remotes,\n otherwise an error code." - }, - "description": "

Find the remote name of a remote-tracking branch

\n", - "comments": "

This will return the name of the remote whose fetch refspec is matching the given branch. E.g. given a branch "refs/remotes/test/master", it will extract the "test" part. If refspecs from multiple remotes match, the function will return GIT_EAMBIGUOUS.

\n", - "group": "branch" - }, - "git_branch_upstream_remote": { - "type": "function", - "file": "git2/branch.h", - "line": 307, - "lineto": 307, - "args": [ - { - "name": "buf", - "type": "git_buf *", - "comment": "the buffer into which to write the name" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to look" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the full name of the branch" - } - ], - "argline": "git_buf *buf, git_repository *repo, const char *refname", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Retrieve the upstream remote of a local branch

\n", - "comments": "

This will return the currently configured "branch.*.remote" for a given branch. This branch must be local.

\n", - "group": "branch" - }, - "git_branch_upstream_merge": { - "type": "function", - "file": "git2/branch.h", - "line": 320, - "lineto": 320, - "args": [ - { - "name": "buf", - "type": "git_buf *", - "comment": "the buffer into which to write the name" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to look" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the full name of the branch" - } - ], - "argline": "git_buf *buf, git_repository *repo, const char *refname", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Retrieve the upstream merge of a local branch

\n", - "comments": "

This will return the currently configured "branch.*.merge" for a given branch. This branch must be local.

\n", - "group": "branch" - }, - "git_branch_name_is_valid": { - "type": "function", - "file": "git2/branch.h", - "line": 332, - "lineto": 332, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "output pointer to set with validity of given branch name" - }, - { - "name": "name", - "type": "const char *", - "comment": "a branch name to test" - } - ], - "argline": "int *valid, const char *name", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Determine whether a branch name is valid, meaning that (when prefixed\n with refs/heads/) that it is a valid reference name, and that any\n additional branch name restrictions are imposed (eg, it cannot start\n with a -).

\n", - "comments": "", - "group": "branch" - }, - "git_buf_dispose": { - "type": "function", - "file": "git2/buffer.h", - "line": 68, - "lineto": 68, - "args": [ - { - "name": "buffer", - "type": "git_buf *", - "comment": "The buffer to deallocate" - } - ], - "argline": "git_buf *buffer", - "sig": "git_buf *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory referred to by the git_buf.

\n", - "comments": "

Note that this does not free the git_buf itself, just the memory pointed to by buffer->ptr.

\n", - "group": "buf", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_buf_dispose-1", - "ex/v1.7.2/diff.html#git_buf_dispose-2" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_buf_dispose-1" - ] - } - }, - "git_checkout_options_init": { - "type": "function", - "file": "git2/checkout.h", - "line": 360, - "lineto": 362, - "args": [ - { - "name": "opts", - "type": "git_checkout_options *", - "comment": "The `git_checkout_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_CHECKOUT_OPTIONS_VERSION`." - } - ], - "argline": "git_checkout_options *opts, unsigned int version", - "sig": "git_checkout_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_checkout_options structure

\n", - "comments": "

Initializes a git_checkout_options with default values. Equivalent to creating an instance with GIT_CHECKOUT_OPTIONS_INIT.

\n", - "group": "checkout" - }, - "git_checkout_head": { - "type": "function", - "file": "git2/checkout.h", - "line": 381, - "lineto": 383, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository to check out (must be non-bare)" - }, - { - "name": "opts", - "type": "const git_checkout_options *", - "comment": "specifies checkout options (may be NULL)" - } - ], - "argline": "git_repository *repo, const git_checkout_options *opts", - "sig": "git_repository *::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNBORNBRANCH if HEAD points to a non\n existing branch, non-zero value returned by `notify_cb`, or\n other error code \n<\n 0 (use git_error_last for error details)" - }, - "description": "

Updates files in the index and the working tree to match the content of\n the commit pointed at by HEAD.

\n", - "comments": "

Note that this is not the correct mechanism used to switch branches; do not change your HEAD and then call this method, that would leave you with checkout conflicts since your working directory would then appear to be dirty. Instead, checkout the target of the branch and then update HEAD using git_repository_set_head to point to the branch you checked out.

\n", - "group": "checkout" - }, - "git_checkout_index": { - "type": "function", - "file": "git2/checkout.h", - "line": 394, - "lineto": 397, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository into which to check out (must be non-bare)" - }, - { - "name": "index", - "type": "git_index *", - "comment": "index to be checked out (or NULL to use repository index)" - }, - { - "name": "opts", - "type": "const git_checkout_options *", - "comment": "specifies checkout options (may be NULL)" - } - ], - "argline": "git_repository *repo, git_index *index, const git_checkout_options *opts", - "sig": "git_repository *::git_index *::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero return value from `notify_cb`, or error\n code \n<\n 0 (use git_error_last for error details)" - }, - "description": "

Updates files in the working tree to match the content of the index.

\n", - "comments": "", - "group": "checkout" - }, - "git_checkout_tree": { - "type": "function", - "file": "git2/checkout.h", - "line": 410, - "lineto": 413, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository to check out (must be non-bare)" - }, - { - "name": "treeish", - "type": "const git_object *", - "comment": "a commit, tag or tree which content will be used to update\n the working directory (or NULL to use HEAD)" - }, - { - "name": "opts", - "type": "const git_checkout_options *", - "comment": "specifies checkout options (may be NULL)" - } - ], - "argline": "git_repository *repo, const git_object *treeish, const git_checkout_options *opts", - "sig": "git_repository *::const git_object *::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero return value from `notify_cb`, or error\n code \n<\n 0 (use git_error_last for error details)" - }, - "description": "

Updates files in the index and working tree to match the content of the\n tree pointed at by the treeish.

\n", - "comments": "", - "group": "checkout", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_checkout_tree-8" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_checkout_tree-5" - ] - } - }, - "git_cherrypick_options_init": { - "type": "function", - "file": "git2/cherrypick.h", - "line": 49, - "lineto": 51, - "args": [ - { - "name": "opts", - "type": "git_cherrypick_options *", - "comment": "The `git_cherrypick_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_CHERRYPICK_OPTIONS_VERSION`." - } - ], - "argline": "git_cherrypick_options *opts, unsigned int version", - "sig": "git_cherrypick_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_cherrypick_options structure

\n", - "comments": "

Initializes a git_cherrypick_options with default values. Equivalent to creating an instance with GIT_CHERRYPICK_OPTIONS_INIT.

\n", - "group": "cherrypick" - }, - "git_cherrypick_commit": { - "type": "function", - "file": "git2/cherrypick.h", - "line": 67, - "lineto": 73, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "pointer to store the index result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository that contains the given commits" - }, - { - "name": "cherrypick_commit", - "type": "git_commit *", - "comment": "the commit to cherry-pick" - }, - { - "name": "our_commit", - "type": "git_commit *", - "comment": "the commit to cherry-pick against (eg, HEAD)" - }, - { - "name": "mainline", - "type": "unsigned int", - "comment": "the parent of the `cherrypick_commit`, if it is a merge" - }, - { - "name": "merge_options", - "type": "const git_merge_options *", - "comment": "the merge options (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, git_commit *cherrypick_commit, git_commit *our_commit, unsigned int mainline, const git_merge_options *merge_options", - "sig": "git_index **::git_repository *::git_commit *::git_commit *::unsigned int::const git_merge_options *", - "return": { - "type": "int", - "comment": " zero on success, -1 on failure." - }, - "description": "

Cherry-picks the given commit against the given "our" commit, producing an\n index that reflects the result of the cherry-pick.

\n", - "comments": "

The returned index must be freed explicitly with git_index_free.

\n", - "group": "cherrypick" - }, - "git_cherrypick": { - "type": "function", - "file": "git2/cherrypick.h", - "line": 83, - "lineto": 86, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to cherry-pick" - }, - { - "name": "commit", - "type": "git_commit *", - "comment": "the commit to cherry-pick" - }, - { - "name": "cherrypick_options", - "type": "const git_cherrypick_options *", - "comment": "the cherry-pick options (or null for defaults)" - } - ], - "argline": "git_repository *repo, git_commit *commit, const git_cherrypick_options *cherrypick_options", - "sig": "git_repository *::git_commit *::const git_cherrypick_options *", - "return": { - "type": "int", - "comment": " zero on success, -1 on failure." - }, - "description": "

Cherry-pick the given commit, producing changes in the index and working directory.

\n", - "comments": "", - "group": "cherrypick" - }, - "git_clone_options_init": { - "type": "function", - "file": "git2/clone.h", - "line": 181, - "lineto": 183, - "args": [ - { - "name": "opts", - "type": "git_clone_options *", - "comment": "The `git_clone_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_CLONE_OPTIONS_VERSION`." - } - ], - "argline": "git_clone_options *opts, unsigned int version", - "sig": "git_clone_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_clone_options structure

\n", - "comments": "

Initializes a git_clone_options with default values. Equivalent to creating an instance with GIT_CLONE_OPTIONS_INIT.

\n", - "group": "clone" - }, - "git_clone": { - "type": "function", - "file": "git2/clone.h", - "line": 201, - "lineto": 205, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "pointer that will receive the resulting repository object" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote repository to clone" - }, - { - "name": "local_path", - "type": "const char *", - "comment": "local directory to clone to" - }, - { - "name": "options", - "type": "const git_clone_options *", - "comment": "configuration options for the clone. If NULL, the\n function works as though GIT_OPTIONS_INIT were passed." - } - ], - "argline": "git_repository **out, const char *url, const char *local_path, const git_clone_options *options", - "sig": "git_repository **::const char *::const char *::const git_clone_options *", - "return": { - "type": "int", - "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)" - }, - "description": "

Clone a remote repository.

\n", - "comments": "

By default this creates its repository and initial remote to match git's defaults. You can use the options in the callback to customize how these are created.

\n", - "group": "clone" - }, - "git_commit_lookup": { - "type": "function", - "file": "git2/commit.h", - "line": 36, - "lineto": 37, - "args": [ - { - "name": "commit", - "type": "git_commit **", - "comment": "pointer to the looked up commit" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the commit." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the commit to locate. If the object is\n\t\tan annotated tag it will be peeled back to the commit." - } - ], - "argline": "git_commit **commit, git_repository *repo, const git_oid *id", - "sig": "git_commit **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a commit object from a repository.

\n", - "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", - "group": "commit", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_commit_lookup-9" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_commit_lookup-6", - "ex/v1.7.2/general.html#git_commit_lookup-7", - "ex/v1.7.2/general.html#git_commit_lookup-8" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_lookup-1" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_commit_lookup-6" - ] - } - }, - "git_commit_lookup_prefix": { - "type": "function", - "file": "git2/commit.h", - "line": 55, - "lineto": 56, - "args": [ - { - "name": "commit", - "type": "git_commit **", - "comment": "pointer to the looked up commit" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the commit." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the commit to locate. If the object is\n\t\tan annotated tag it will be peeled back to the commit." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - } - ], - "argline": "git_commit **commit, git_repository *repo, const git_oid *id, size_t len", - "sig": "git_commit **::git_repository *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a commit object from a repository, given a prefix of its\n identifier (short id).

\n", - "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", - "group": "commit" - }, - "git_commit_free": { - "type": "function", - "file": "git2/commit.h", - "line": 70, - "lineto": 70, - "args": [ - { - "name": "commit", - "type": "git_commit *", - "comment": "the commit to close" - } - ], - "argline": "git_commit *commit", - "sig": "git_commit *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open commit

\n", - "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a commit. Failure to do so will cause a memory leak.

\n", - "group": "commit", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_commit_free-10" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_commit_free-9", - "ex/v1.7.2/general.html#git_commit_free-10", - "ex/v1.7.2/general.html#git_commit_free-11", - "ex/v1.7.2/general.html#git_commit_free-12", - "ex/v1.7.2/general.html#git_commit_free-13" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_free-2", - "ex/v1.7.2/log.html#git_commit_free-3", - "ex/v1.7.2/log.html#git_commit_free-4", - "ex/v1.7.2/log.html#git_commit_free-5" - ] - } - }, - "git_commit_id": { - "type": "function", - "file": "git2/commit.h", - "line": 78, - "lineto": 78, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const git_oid *", - "comment": " object identity for the commit." - }, - "description": "

Get the id of a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_commit_id-14" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_id-6" - ] - } - }, - "git_commit_owner": { - "type": "function", - "file": "git2/commit.h", - "line": 86, - "lineto": 86, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "A previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "git_repository *", - "comment": " Repository that contains this commit." - }, - "description": "

Get the repository that contains the commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_commit_owner-7", - "ex/v1.7.2/log.html#git_commit_owner-8" - ] - } - }, - "git_commit_message_encoding": { - "type": "function", - "file": "git2/commit.h", - "line": 98, - "lineto": 98, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const char *", - "comment": " NULL, or the encoding" - }, - "description": "

Get the encoding for the message of a commit,\n as a string representing a standard encoding name.

\n", - "comments": "

The encoding may be NULL if the encoding header in the commit is missing; in that case UTF-8 is assumed.

\n", - "group": "commit" - }, - "git_commit_message": { - "type": "function", - "file": "git2/commit.h", - "line": 109, - "lineto": 109, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const char *", - "comment": " the message of a commit" - }, - "description": "

Get the full message of a commit.

\n", - "comments": "

The returned message will be slightly prettified by removing any potential leading newlines.

\n", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_commit_message-3", - "ex/v1.7.2/cat-file.html#git_commit_message-4" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_commit_message-15", - "ex/v1.7.2/general.html#git_commit_message-16", - "ex/v1.7.2/general.html#git_commit_message-17" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_message-9", - "ex/v1.7.2/log.html#git_commit_message-10", - "ex/v1.7.2/log.html#git_commit_message-11" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_commit_message-2" - ] - } - }, - "git_commit_message_raw": { - "type": "function", - "file": "git2/commit.h", - "line": 117, - "lineto": 117, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const char *", - "comment": " the raw message of a commit" - }, - "description": "

Get the full raw message of a commit.

\n", - "comments": "", - "group": "commit" - }, - "git_commit_summary": { - "type": "function", - "file": "git2/commit.h", - "line": 128, - "lineto": 128, - "args": [ - { - "name": "commit", - "type": "git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "git_commit *commit", - "sig": "git_commit *", - "return": { - "type": "const char *", - "comment": " the summary of a commit or NULL on error" - }, - "description": "

Get the short "summary" of the git commit message.

\n", - "comments": "

The returned message is the summary of the commit, comprising the first paragraph of the message with whitespace trimmed and squashed.

\n", - "group": "commit" - }, - "git_commit_body": { - "type": "function", - "file": "git2/commit.h", - "line": 141, - "lineto": 141, - "args": [ - { - "name": "commit", - "type": "git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "git_commit *commit", - "sig": "git_commit *", - "return": { - "type": "const char *", - "comment": " the body of a commit or NULL when no the message only\n consists of a summary" - }, - "description": "

Get the long "body" of the git commit message.

\n", - "comments": "

The returned message is the body of the commit, comprising everything but the first paragraph of the message. Leading and trailing whitespaces are trimmed.

\n", - "group": "commit" - }, - "git_commit_time": { - "type": "function", - "file": "git2/commit.h", - "line": 149, - "lineto": 149, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "git_time_t", - "comment": " the time of a commit" - }, - "description": "

Get the commit time (i.e. committer time) of a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_commit_time-18", - "ex/v1.7.2/general.html#git_commit_time-19" - ] - } - }, - "git_commit_time_offset": { - "type": "function", - "file": "git2/commit.h", - "line": 157, - "lineto": 157, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "int", - "comment": " positive or negative timezone offset, in minutes from UTC" - }, - "description": "

Get the commit timezone offset (i.e. committer's preferred timezone) of a commit.

\n", - "comments": "", - "group": "commit" - }, - "git_commit_committer": { - "type": "function", - "file": "git2/commit.h", - "line": 165, - "lineto": 165, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const git_signature *", - "comment": " the committer of a commit" - }, - "description": "

Get the committer of a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_commit_committer-5" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_commit_committer-20" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_committer-12" - ] - } - }, - "git_commit_author": { - "type": "function", - "file": "git2/commit.h", - "line": 173, - "lineto": 173, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const git_signature *", - "comment": " the author of a commit" - }, - "description": "

Get the author of a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_commit_author-6" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_commit_author-21", - "ex/v1.7.2/general.html#git_commit_author-22" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_author-13", - "ex/v1.7.2/log.html#git_commit_author-14" - ] - } - }, - "git_commit_committer_with_mailmap": { - "type": "function", - "file": "git2/commit.h", - "line": 186, - "lineto": 187, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "a pointer to store the resolved signature." - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "mailmap", - "type": "const git_mailmap *", - "comment": "the mailmap to resolve with. (may be NULL)" - } - ], - "argline": "git_signature **out, const git_commit *commit, const git_mailmap *mailmap", - "sig": "git_signature **::const git_commit *::const git_mailmap *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the committer of a commit, using the mailmap to map names and email\n addresses to canonical real names and email addresses.

\n", - "comments": "

Call git_signature_free to free the signature.

\n", - "group": "commit" - }, - "git_commit_author_with_mailmap": { - "type": "function", - "file": "git2/commit.h", - "line": 200, - "lineto": 201, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "a pointer to store the resolved signature." - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "mailmap", - "type": "const git_mailmap *", - "comment": "the mailmap to resolve with. (may be NULL)" - } - ], - "argline": "git_signature **out, const git_commit *commit, const git_mailmap *mailmap", - "sig": "git_signature **::const git_commit *::const git_mailmap *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the author of a commit, using the mailmap to map names and email\n addresses to canonical real names and email addresses.

\n", - "comments": "

Call git_signature_free to free the signature.

\n", - "group": "commit" - }, - "git_commit_raw_header": { - "type": "function", - "file": "git2/commit.h", - "line": 209, - "lineto": 209, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit" - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const char *", - "comment": " the header text of the commit" - }, - "description": "

Get the full raw text of the commit header.

\n", - "comments": "", - "group": "commit" - }, - "git_commit_tree": { - "type": "function", - "file": "git2/commit.h", - "line": 218, - "lineto": 218, - "args": [ - { - "name": "tree_out", - "type": "git_tree **", - "comment": "pointer where to store the tree object" - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "git_tree **tree_out, const git_commit *commit", - "sig": "git_tree **::const git_commit *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the tree pointed to by a commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_commit_tree-15", - "ex/v1.7.2/log.html#git_commit_tree-16", - "ex/v1.7.2/log.html#git_commit_tree-17", - "ex/v1.7.2/log.html#git_commit_tree-18", - "ex/v1.7.2/log.html#git_commit_tree-19" - ] - } - }, - "git_commit_tree_id": { - "type": "function", - "file": "git2/commit.h", - "line": 228, - "lineto": 228, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "const git_oid *", - "comment": " the id of tree pointed to by commit." - }, - "description": "

Get the id of the tree pointed to by a commit. This differs from\n git_commit_tree in that no attempts are made to fetch an object\n from the ODB.

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_commit_tree_id-7" - ] - } - }, - "git_commit_parentcount": { - "type": "function", - "file": "git2/commit.h", - "line": 236, - "lineto": 236, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - } - ], - "argline": "const git_commit *commit", - "sig": "const git_commit *", - "return": { - "type": "unsigned int", - "comment": " integer of count of parents" - }, - "description": "

Get the number of parents of this commit

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_commit_parentcount-8" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_commit_parentcount-23" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_parentcount-20", - "ex/v1.7.2/log.html#git_commit_parentcount-21" - ] - } - }, - "git_commit_parent": { - "type": "function", - "file": "git2/commit.h", - "line": 246, - "lineto": 249, - "args": [ - { - "name": "out", - "type": "git_commit **", - "comment": "Pointer where to store the parent commit" - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "n", - "type": "unsigned int", - "comment": "the position of the parent (from 0 to `parentcount`)" - } - ], - "argline": "git_commit **out, const git_commit *commit, unsigned int n", - "sig": "git_commit **::const git_commit *::unsigned int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the specified parent of the commit.

\n", - "comments": "", - "group": "commit", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_commit_parent-24" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_parent-22", - "ex/v1.7.2/log.html#git_commit_parent-23" - ] - } - }, - "git_commit_parent_id": { - "type": "function", - "file": "git2/commit.h", - "line": 260, - "lineto": 262, - "args": [ - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "n", - "type": "unsigned int", - "comment": "the position of the parent (from 0 to `parentcount`)" - } - ], - "argline": "const git_commit *commit, unsigned int n", - "sig": "const git_commit *::unsigned int", - "return": { - "type": "const git_oid *", - "comment": " the id of the parent, NULL on error." - }, - "description": "

Get the oid of a specified parent for a commit. This is different from\n git_commit_parent, which will attempt to load the parent commit from\n the ODB.

\n", - "comments": "", - "group": "commit", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_commit_parent_id-9" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_commit_parent_id-24" - ] - } - }, - "git_commit_nth_gen_ancestor": { - "type": "function", - "file": "git2/commit.h", - "line": 278, - "lineto": 281, - "args": [ - { - "name": "ancestor", - "type": "git_commit **", - "comment": "Pointer where to store the ancestor commit" - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "a previously loaded commit." - }, - { - "name": "n", - "type": "unsigned int", - "comment": "the requested generation" - } - ], - "argline": "git_commit **ancestor, const git_commit *commit, unsigned int n", - "sig": "git_commit **::const git_commit *::unsigned int", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND if no matching ancestor exists\n or an error code" - }, - "description": "

Get the commit object that is the \n<n

\n\n
\n

th generation ancestor\n of the named commit object, following only the first parents.\n The returned commit has to be freed by the caller.

\n
\n", - "comments": "

Passing 0 as the generation number returns another instance of the base commit itself.

\n", - "group": "commit" - }, - "git_commit_header_field": { - "type": "function", - "file": "git2/commit.h", - "line": 293, - "lineto": 293, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer to fill; existing content will be\n overwritten" - }, - { - "name": "commit", - "type": "const git_commit *", - "comment": "the commit to look in" - }, - { - "name": "field", - "type": "const char *", - "comment": "the header field to return" - } - ], - "argline": "git_buf *out, const git_commit *commit, const char *field", - "sig": "git_buf *::const git_commit *::const char *", - "return": { - "type": "int", - "comment": " 0 on succeess, GIT_ENOTFOUND if the field does not exist,\n or an error code" - }, - "description": "

Get an arbitrary header field

\n", - "comments": "", - "group": "commit" - }, - "git_commit_extract_signature": { - "type": "function", - "file": "git2/commit.h", - "line": 313, - "lineto": 313, - "args": [ - { - "name": "signature", - "type": "git_buf *", - "comment": "the signature block; existing content will be\n overwritten" - }, - { - "name": "signed_data", - "type": "git_buf *", - "comment": "signed data; this is the commit contents minus the signature block;\n existing content will be overwritten" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which the commit exists" - }, - { - "name": "commit_id", - "type": "git_oid *", - "comment": "the commit from which to extract the data" - }, - { - "name": "field", - "type": "const char *", - "comment": "the name of the header field containing the signature\n block; pass `NULL` to extract the default 'gpgsig'" - } - ], - "argline": "git_buf *signature, git_buf *signed_data, git_repository *repo, git_oid *commit_id, const char *field", - "sig": "git_buf *::git_buf *::git_repository *::git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if the id is not for a commit\n or the commit does not have a signature." - }, - "description": "

Extract the signature from a commit

\n", - "comments": "

If the id is not for a commit, the error class will be GIT_ERROR_INVALID. If the commit does not have a signature, the error class will be GIT_ERROR_OBJECT.

\n", - "group": "commit" - }, - "git_commit_create": { - "type": "function", - "file": "git2/commit.h", - "line": 359, - "lineto": 369, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "Pointer in which to store the OID of the newly created commit" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the commit" - }, - { - "name": "update_ref", - "type": "const char *", - "comment": "If not NULL, name of the reference that\n\twill be updated to point to this commit. If the reference\n\tis not direct, it will be resolved to a direct reference.\n\tUse \"HEAD\" to update the HEAD of the current branch and\n\tmake it point to this commit. If the reference doesn't\n\texist yet, it will be created. If it does exist, the first\n\tparent must be the tip of this branch." - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "Signature with author and author time of commit" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "Signature with committer and * commit time of commit" - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." - }, - { - "name": "message", - "type": "const char *", - "comment": "Full message for this commit" - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." - }, - { - "name": "parent_count", - "type": "size_t", - "comment": "Number of parents for this commit" - }, - { - "name": "parents", - "type": "const git_commit *[]", - "comment": "Array of `parent_count` pointers to `git_commit`\n objects that will be used as the parents for this commit. This\n array may be NULL if `parent_count` is 0 (root commit). All the\n given commits must be owned by the `repo`." - } - ], - "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents", - "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]", - "return": { - "type": "int", - "comment": " 0 or an error code\n\tThe created commit will be written to the Object Database and\n\tthe given reference will be updated to point to it" - }, - "description": "

Create new commit in the repository from a list of git_object pointers

\n", - "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n", - "group": "commit", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_commit_create-7" - ] - } - }, - "git_commit_create_v": { - "type": "function", - "file": "git2/commit.h", - "line": 385, - "lineto": 395, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": null - }, - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "update_ref", - "type": "const char *", - "comment": null - }, - { - "name": "author", - "type": "const git_signature *", - "comment": null - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": null - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": null - }, - { - "name": "message", - "type": "const char *", - "comment": null - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": null - }, - { - "name": "parent_count", - "type": "size_t", - "comment": null - } - ], - "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count", - "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create new commit in the repository using a variable argument list.

\n", - "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n\n

The parents for the commit are specified as a variable list of pointers to const git_commit *. Note that this is a convenience method which may not be safe to export for certain languages or compilers

\n\n

All other parameters remain the same as git_commit_create().

\n", - "group": "commit", - "examples": { - "commit.c": [ - "ex/v1.7.2/commit.html#git_commit_create_v-1" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_commit_create_v-25" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_commit_create_v-1" - ] - } - }, - "git_commit_amend": { - "type": "function", - "file": "git2/commit.h", - "line": 418, - "lineto": 426, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": null - }, - { - "name": "commit_to_amend", - "type": "const git_commit *", - "comment": null - }, - { - "name": "update_ref", - "type": "const char *", - "comment": null - }, - { - "name": "author", - "type": "const git_signature *", - "comment": null - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": null - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": null - }, - { - "name": "message", - "type": "const char *", - "comment": null - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": null - } - ], - "argline": "git_oid *id, const git_commit *commit_to_amend, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree", - "sig": "git_oid *::const git_commit *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Amend an existing commit by replacing only non-NULL values.

\n", - "comments": "

This creates a new commit that is exactly the same as the old commit, except that any non-NULL values will be updated. The new commit has the same parents as the old commit.

\n\n

The update_ref value works as in the regular git_commit_create(), updating the ref to point to the newly rewritten commit. If you want to amend a commit that is not currently the tip of the branch and then rewrite the following commits to reach a ref, pass this as NULL and update the rest of the commit chain and ref separately.

\n\n

Unlike git_commit_create(), the author, committer, message, message_encoding, and tree parameters can be NULL in which case this will use the values from the original commit_to_amend.

\n\n

All parameters have the same meanings as in git_commit_create().

\n", - "group": "commit" - }, - "git_commit_create_buffer": { - "type": "function", - "file": "git2/commit.h", - "line": 463, - "lineto": 472, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer into which to write the commit object content" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where the referenced tree and parents live" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "Signature with author and author time of commit" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "Signature with committer and * commit time of commit" - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." - }, - { - "name": "message", - "type": "const char *", - "comment": "Full message for this commit" - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." - }, - { - "name": "parent_count", - "type": "size_t", - "comment": "Number of parents for this commit" - }, - { - "name": "parents", - "type": "const git_commit *[]", - "comment": "Array of `parent_count` pointers to `git_commit`\n objects that will be used as the parents for this commit. This\n array may be NULL if `parent_count` is 0 (root commit). All the\n given commits must be owned by the `repo`." - } - ], - "argline": "git_buf *out, git_repository *repo, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents", - "sig": "git_buf *::git_repository *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a commit and write it into a buffer

\n", - "comments": "

Create a commit as with git_commit_create() but instead of writing it to the objectdb, write the contents of the object into a buffer.

\n", - "group": "commit" - }, - "git_commit_create_with_signature": { - "type": "function", - "file": "git2/commit.h", - "line": 490, - "lineto": 495, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the resulting commit id" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to create the commit in." - }, - { - "name": "commit_content", - "type": "const char *", - "comment": "the content of the unsigned commit object" - }, - { - "name": "signature", - "type": "const char *", - "comment": "the signature to add to the commit. Leave `NULL`\n to create a commit without adding a signature field." - }, - { - "name": "signature_field", - "type": "const char *", - "comment": "which header field should contain this\n signature. Leave `NULL` for the default of \"gpgsig\"" - } - ], - "argline": "git_oid *out, git_repository *repo, const char *commit_content, const char *signature, const char *signature_field", - "sig": "git_oid *::git_repository *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a commit object from the given buffer and signature

\n", - "comments": "

Given the unsigned commit object's contents, its signature and the header field in which to store the signature, attach the signature to the commit and write it into the given repository.

\n", - "group": "commit" - }, - "git_commit_dup": { - "type": "function", - "file": "git2/commit.h", - "line": 505, - "lineto": 505, - "args": [ - { - "name": "out", - "type": "git_commit **", - "comment": "Pointer to store the copy of the commit" - }, - { - "name": "source", - "type": "git_commit *", - "comment": "Original commit to copy" - } - ], - "argline": "git_commit **out, git_commit *source", - "sig": "git_commit **::git_commit *", - "return": { - "type": "int", - "comment": " 0" - }, - "description": "

Create an in-memory copy of a commit. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "commit" - }, - "git_libgit2_version": { - "type": "function", - "file": "git2/common.h", - "line": 117, - "lineto": 117, - "args": [ - { - "name": "major", - "type": "int *", - "comment": "Store the major version number" - }, - { - "name": "minor", - "type": "int *", - "comment": "Store the minor version number" - }, - { - "name": "rev", - "type": "int *", - "comment": "Store the revision (patch) number" - } - ], - "argline": "int *major, int *minor, int *rev", - "sig": "int *::int *::int *", - "return": { - "type": "int", - "comment": " 0 on success or an error code on failure" - }, - "description": "

Return the version of the libgit2 library\n being currently used.

\n", - "comments": "", - "group": "libgit2" - }, - "git_libgit2_prerelease": { - "type": "function", - "file": "git2/common.h", - "line": 128, - "lineto": 128, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "const char *", - "comment": " the name of the prerelease state or NULL" - }, - "description": "

Return the prerelease state of the libgit2 library currently being\n used. For nightly builds during active development, this will be\n "alpha". Releases may have a "beta" or release candidate ("rc1",\n "rc2", etc) prerelease. For a final release, this function returns\n NULL.

\n", - "comments": "", - "group": "libgit2" - }, - "git_libgit2_features": { - "type": "function", - "file": "git2/common.h", - "line": 180, - "lineto": 180, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "int", - "comment": " A combination of GIT_FEATURE_* values." - }, - "description": "

Query compile time options for libgit2.

\n", - "comments": "
    \n
  • GIT_FEATURE_THREADS Libgit2 was compiled with thread support. Note that thread support is still to be seen as a 'work in progress' - basic object lookups are believed to be threadsafe, but other operations may not be.

  • \n
  • GIT_FEATURE_HTTPS Libgit2 supports the https:// protocol. This requires the openssl library to be found when compiling libgit2.

  • \n
  • GIT_FEATURE_SSH Libgit2 supports the SSH protocol for network operations. This requires the libssh2 library to be found when compiling libgit2

  • \n
  • GIT_FEATURE_NSEC Libgit2 supports the sub-second resolution in file modification times.

  • \n
\n", - "group": "libgit2" - }, - "git_libgit2_opts": { - "type": "function", - "file": "git2/common.h", - "line": 512, - "lineto": 512, - "args": [ - { - "name": "option", - "type": "int", - "comment": "Option key" - } - ], - "argline": "int option", - "sig": "int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Set or query a library global option

\n", - "comments": "

Available options:

\n\n
* opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *):\n\n    > Get the maximum mmap window size\n\n* opts(GIT_OPT_SET_MWINDOW_SIZE, size_t):\n\n    > Set the maximum mmap window size\n\n* opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *):\n\n    > Get the maximum memory that will be mapped in total by the library\n\n* opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t):\n\n    > Set the maximum amount of memory that can be mapped at any time       > by the library\n\n* opts(GIT_OPT_GET_MWINDOW_FILE_LIMIT, size_t *):\n\n    > Get the maximum number of files that will be mapped at any time by the        > library\n\n* opts(GIT_OPT_SET_MWINDOW_FILE_LIMIT, size_t):\n\n    > Set the maximum number of files that can be mapped at any time        > by the library. The default (0) is unlimited.\n\n* opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf)\n\n    > Get the search path for a given level of config data.  "level" must       > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`,       > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`.        > The search path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path)\n\n    > Set the search path for a level of config data.  The search path      > applied to shared attributes and ignore files, too.       >       > - `path` lists directories delimited by GIT_PATH_LIST_SEPARATOR.      >   Pass NULL to reset to the default (generally based on environment       >   variables).  Use magic path `$PATH` to include the old value        >   of the path (if you want to prepend or append, for instance).       >       > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`,      >   `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or       >   `GIT_CONFIG_LEVEL_PROGRAMDATA`.\n\n* opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_object_t type, size_t size)\n\n    > Set the maximum data size for the given type of object to be      > considered eligible for caching in memory.  Setting to value to       > zero means that that type of object will not be cached.       > Defaults to 0 for GIT_OBJECT_BLOB (i.e. won't cache blobs) and 4k     > for GIT_OBJECT_COMMIT, GIT_OBJECT_TREE, and GIT_OBJECT_TAG.\n\n* opts(GIT_OPT_SET_CACHE_MAX_SIZE, ssize_t max_storage_bytes)\n\n    > Set the maximum total data size that will be cached in memory     > across all repositories before libgit2 starts evicting objects        > from the cache.  This is a soft limit, in that the library might      > briefly exceed it, but will start aggressively evicting objects       > from cache when that happens.  The default cache size is 256MB.\n\n* opts(GIT_OPT_ENABLE_CACHING, int enabled)\n\n    > Enable or disable caching completely.     >       > Because caches are repository-specific, disabling the cache       > cannot immediately clear all cached objects, but each cache will      > be cleared on the next attempt to update anything in it.\n\n* opts(GIT_OPT_GET_CACHED_MEMORY, ssize_t *current, ssize_t *allowed)\n\n    > Get the current bytes in cache and the maximum that would be      > allowed in the cache.\n\n* opts(GIT_OPT_GET_TEMPLATE_PATH, git_buf *out)\n\n    > Get the default template path.        > The path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_TEMPLATE_PATH, const char *path)\n\n    > Set the default template path.        >       > - `path` directory of template.\n\n* opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, const char *file, const char *path)\n\n    > Set the SSL certificate-authority locations.      >       > - `file` is the location of a file containing several     >   certificates concatenated together.     > - `path` is the location of a directory holding several       >   certificates, one per file.     >       > Either parameter may be `NULL`, but not both.\n\n* opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)\n\n    > Set the value of the User-Agent header.  This value will be       > appended to "git/1.0", for compatibility with other git clients.      >       > - `user_agent` is the value that will be delivered as the     >   User-Agent header on HTTP requests.\n\n* opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value)\n\n    > Set the share mode used when opening files on Windows.        > For more information, see the documentation for CreateFile.       > The default is: FILE_SHARE_READ | FILE_SHARE_WRITE.  This is      > ignored and unused on non-Windows platforms.\n\n* opts(GIT_OPT_GET_WINDOWS_SHAREMODE, unsigned long *value)\n\n    > Get the share mode used when opening files on Windows.\n\n* opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled)\n\n    > Enable strict input validation when creating new objects      > to ensure that all inputs to the new objects are valid.  For      > example, when this is enabled, the parent(s) and tree inputs      > will be validated when creating a new commit.  This defaults      > to enabled.\n\n* opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, int enabled)\n\n    > Validate the target of a symbolic ref when creating it.  For      > example, `foobar` is not a valid ref, therefore `foobar` is       > not a valid target for a symbolic ref by default, whereas     > `refs/heads/foobar` is.  Disabling this bypasses validation       > so that an arbitrary strings such as `foobar` can be used     > for a symbolic ref target.  This defaults to enabled.\n\n* opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers)\n\n    > Set the SSL ciphers use for HTTPS connections.        >       > - `ciphers` is the list of ciphers that are eanbled.\n\n* opts(GIT_OPT_GET_USER_AGENT, git_buf *out)\n\n    > Get the value of the User-Agent header.       > The User-Agent is written to the `out` buffer.\n\n* opts(GIT_OPT_ENABLE_OFS_DELTA, int enabled)\n\n    > Enable or disable the use of "offset deltas" when creating packfiles,     > and the negotiation of them when talking to a remote server.      > Offset deltas store a delta base location as an offset into the       > packfile from the current location, which provides a shorter encoding     > and thus smaller resultant packfiles.     > Packfiles containing offset deltas can still be read.     > This defaults to enabled.\n\n* opts(GIT_OPT_ENABLE_FSYNC_GITDIR, int enabled)\n\n    > Enable synchronized writes of files in the gitdir using `fsync`       > (or the platform equivalent) to ensure that new object data       > is written to permanent storage, not simply cached.  This     > defaults to disabled.\n\n opts(GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION, int enabled)\n\n    > Enable strict verification of object hashsums when reading        > objects from disk. This may impact performance due to an      > additional checksum calculation on each object. This defaults     > to enabled.\n\n opts(GIT_OPT_SET_ALLOCATOR, git_allocator *allocator)\n\n    > Set the memory allocator to a different memory allocator. This        > allocator will then be used to make all memory allocations for        > libgit2 operations.  If the given `allocator` is NULL, then the       > system default will be restored.\n\n opts(GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, int enabled)\n\n    > Ensure that there are no unsaved changes in the index before      > beginning any operation that reloads the index from disk (eg,     > checkout).  If there are unsaved changes, the instruction will        > fail.  (Using the FORCE flag to checkout will still overwrite     > these changes.)\n\n opts(GIT_OPT_GET_PACK_MAX_OBJECTS, size_t *out)\n\n    > Get the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote. This can be      > used to limit maximum memory usage when fetching from an untrusted        > remote.\n\n opts(GIT_OPT_SET_PACK_MAX_OBJECTS, size_t objects)\n\n    > Set the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote.\n\n opts(GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS, int enabled)       > This will cause .keep file existence checks to be skipped when        > accessing packfiles, which can help performance with remote filesystems.\n\n opts(GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE, int enabled)     > When connecting to a server using NTLM or Negotiate       > authentication, use expect/continue when POSTing data.        > This option is not available on Windows.\n
\n\n

opts(GIT_OPT_SET_ODB_PACKED_PRIORITY, int priority) > Override the default priority of the packed ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_SET_ODB_LOOSE_PRIORITY, int priority) > Override the default priority of the loose ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out) > Returns the list of git extensions that are supported. This > is the list of built-in extensions supported by libgit2 and > custom extensions that have been added with > GIT_OPT_SET_EXTENSIONS. Extensions that have been negated > will not be returned. The returned list should be released > with git_strarray_dispose.

\n\n

opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len) > Set that the given git extensions are supported by the caller. > Extensions supported by libgit2 may be negated by prefixing > them with a !. For example: setting extensions to > { "!noop", "newext" } indicates that the caller does not want > to support repositories with the noop extension but does want > to support repositories with the newext extension.

\n\n

opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) > Gets the owner validation setting for repository > directories.

\n\n

opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) > Set that repository directories should be owned by the current > user. The default is to validate ownership.

\n\n

opts(GIT_OPT_GET_HOMEDIR, git_buf *out) > Gets the current user's home directory, as it will be used > for file lookups. The path is written to the out buffer.

\n\n

opts(GIT_OPT_SET_HOMEDIR, const char *path) > Sets the directory used as the current user's home directory, > for file lookups. > > - path directory of home directory.

\n\n

opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) to attempt connections to > a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) to attempt connections to > a remote server. This is supported only for HTTP(S) connections > and is not supported by SSH. Set to 0 to use the system default. > Note that this may not be able to be configured longer than the > system default, typically 75 seconds.

\n\n

opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) for reading from and writing > to a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) for reading from and writing > to a remote server. This is supported only for HTTP(S) > connections and is not supported by SSH. Set to 0 to use the > system default.

\n", - "group": "libgit2" - }, - "git_config_entry_free": { - "type": "function", - "file": "git2/config.h", - "line": 78, - "lineto": 78, - "args": [ - { - "name": "entry", - "type": "git_config_entry *", - "comment": "The entry to free." - } - ], - "argline": "git_config_entry *entry", - "sig": "git_config_entry *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a config entry

\n", - "comments": "", - "group": "config", - "examples": { - "config.c": [ - "ex/v1.7.2/config.html#git_config_entry_free-1", - "ex/v1.7.2/config.html#git_config_entry_free-2" - ] - } - }, - "git_config_find_global": { - "type": "function", - "file": "git2/config.h", - "line": 130, - "lineto": 130, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Pointer to a user-allocated git_buf in which to store the path" - } - ], - "argline": "git_buf *out", - "sig": "git_buf *", - "return": { - "type": "int", - "comment": " 0 if a global configuration file has been found. Its path will be stored in `out`." - }, - "description": "

Locate the path to the global configuration file

\n", - "comments": "

The user or global configuration file is usually located in $HOME/.gitconfig.

\n\n

This method will try to guess the full path to that file, if the file exists. The returned path may be used on any git_config call to load the global configuration file.

\n\n

This method will not guess the path to the xdg compatible config file (.config/git/config).

\n", - "group": "config" - }, - "git_config_find_xdg": { - "type": "function", - "file": "git2/config.h", - "line": 147, - "lineto": 147, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Pointer to a user-allocated git_buf in which to store the path" - } - ], - "argline": "git_buf *out", - "sig": "git_buf *", - "return": { - "type": "int", - "comment": " 0 if a xdg compatible configuration file has been\n\tfound. Its path will be stored in `out`." - }, - "description": "

Locate the path to the global xdg compatible configuration file

\n", - "comments": "

The xdg compatible configuration file is usually located in $HOME/.config/git/config.

\n\n

This method will try to guess the full path to that file, if the file exists. The returned path may be used on any git_config call to load the xdg compatible configuration file.

\n", - "group": "config" - }, - "git_config_find_system": { - "type": "function", - "file": "git2/config.h", - "line": 159, - "lineto": 159, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Pointer to a user-allocated git_buf in which to store the path" - } - ], - "argline": "git_buf *out", - "sig": "git_buf *", - "return": { - "type": "int", - "comment": " 0 if a system configuration file has been\n\tfound. Its path will be stored in `out`." - }, - "description": "

Locate the path to the system configuration file

\n", - "comments": "

If /etc/gitconfig doesn't exist, it will look for %PROGRAMFILES%.

\n", - "group": "config" - }, - "git_config_find_programdata": { - "type": "function", - "file": "git2/config.h", - "line": 170, - "lineto": 170, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Pointer to a user-allocated git_buf in which to store the path" - } - ], - "argline": "git_buf *out", - "sig": "git_buf *", - "return": { - "type": "int", - "comment": " 0 if a ProgramData configuration file has been\n\tfound. Its path will be stored in `out`." - }, - "description": "

Locate the path to the configuration file in ProgramData

\n", - "comments": "

Look for the file in %PROGRAMDATA% used by portable git.

\n", - "group": "config" - }, - "git_config_open_default": { - "type": "function", - "file": "git2/config.h", - "line": 182, - "lineto": 182, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "Pointer to store the config instance" - } - ], - "argline": "git_config **out", - "sig": "git_config **", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open the global, XDG and system configuration files

\n", - "comments": "

Utility wrapper that finds the global, XDG and system configuration files and opens them into a single prioritized config object that can be used when accessing default config data outside a repository.

\n", - "group": "config" - }, - "git_config_new": { - "type": "function", - "file": "git2/config.h", - "line": 193, - "lineto": 193, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "pointer to the new configuration" - } - ], - "argline": "git_config **out", - "sig": "git_config **", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Allocate a new configuration object

\n", - "comments": "

This object is empty, so you have to add a file to it before you can do anything with it.

\n", - "group": "config" - }, - "git_config_add_file_ondisk": { - "type": "function", - "file": "git2/config.h", - "line": 222, - "lineto": 227, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "the configuration to add the file to" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to the configuration file to add" - }, - { - "name": "level", - "type": "git_config_level_t", - "comment": "the priority level of the backend" - }, - { - "name": "repo", - "type": "const git_repository *", - "comment": "optional repository to allow parsing of\n conditional includes" - }, - { - "name": "force", - "type": "int", - "comment": "replace config file at the given priority level" - } - ], - "argline": "git_config *cfg, const char *path, git_config_level_t level, const git_repository *repo, int force", - "sig": "git_config *::const char *::git_config_level_t::const git_repository *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS when adding more than one file\n for a given priority level (and force_replace set to 0),\n GIT_ENOTFOUND when the file doesn't exist or error code" - }, - "description": "

Add an on-disk config file instance to an existing config

\n", - "comments": "

The on-disk file pointed at by path will be opened and parsed; it's expected to be a native Git config file following the default Git config syntax (see man git-config).

\n\n

If the file does not exist, the file will still be added and it will be created the first time we write to it.

\n\n

Note that the configuration object will free the file automatically.

\n\n

Further queries on this config object will access each of the config file instances in order (instances with a higher priority level will be accessed first).

\n", - "group": "config" - }, - "git_config_open_ondisk": { - "type": "function", - "file": "git2/config.h", - "line": 241, - "lineto": 241, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "The configuration instance to create" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to the on-disk file to open" - } - ], - "argline": "git_config **out, const char *path", - "sig": "git_config **::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Create a new config instance containing a single on-disk file

\n", - "comments": "

This method is a simple utility wrapper for the following sequence of calls: - git_config_new - git_config_add_file_ondisk

\n", - "group": "config", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_config_open_ondisk-26" - ] - } - }, - "git_config_open_level": { - "type": "function", - "file": "git2/config.h", - "line": 259, - "lineto": 262, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "The configuration instance to create" - }, - { - "name": "parent", - "type": "const git_config *", - "comment": "Multi-level config to search for the given level" - }, - { - "name": "level", - "type": "git_config_level_t", - "comment": "Configuration level to search for" - } - ], - "argline": "git_config **out, const git_config *parent, git_config_level_t level", - "sig": "git_config **::const git_config *::git_config_level_t", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the passed level cannot be found in the\n multi-level parent config, or an error code" - }, - "description": "

Build a single-level focused config object from a multi-level one.

\n", - "comments": "

The returned config object can be used to perform get/set/delete operations on a single specific level.

\n\n

Getting several times the same level from the same parent multi-level config will return different config instances, but containing the same config_file instance.

\n", - "group": "config" - }, - "git_config_open_global": { - "type": "function", - "file": "git2/config.h", - "line": 277, - "lineto": 277, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "pointer in which to store the config object" - }, - { - "name": "config", - "type": "git_config *", - "comment": "the config object in which to look" - } - ], - "argline": "git_config **out, git_config *config", - "sig": "git_config **::git_config *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Open the global/XDG configuration file according to git's rules

\n", - "comments": "

Git allows you to store your global configuration at $HOME/.gitconfig or $XDG_CONFIG_HOME/git/config. For backwards compatibility, the XDG file shouldn't be used unless the use has created it explicitly. With this function you'll open the correct one to write to.

\n", - "group": "config" - }, - "git_config_snapshot": { - "type": "function", - "file": "git2/config.h", - "line": 293, - "lineto": 293, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "pointer in which to store the snapshot config object" - }, - { - "name": "config", - "type": "git_config *", - "comment": "configuration to snapshot" - } - ], - "argline": "git_config **out, git_config *config", - "sig": "git_config **::git_config *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a snapshot of the configuration

\n", - "comments": "

Create a snapshot of the current state of a configuration, which allows you to look into a consistent view of the configuration for looking up complex values (e.g. a remote, submodule).

\n\n

The string returned when querying such a config object is valid until it is freed.

\n", - "group": "config" - }, - "git_config_free": { - "type": "function", - "file": "git2/config.h", - "line": 300, - "lineto": 300, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "the configuration to free" - } - ], - "argline": "git_config *cfg", - "sig": "git_config *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the configuration and its associated memory and files

\n", - "comments": "", - "group": "config", - "examples": { - "config.c": [ - "ex/v1.7.2/config.html#git_config_free-3" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_config_free-27", - "ex/v1.7.2/general.html#git_config_free-28" - ] - } - }, - "git_config_get_entry": { - "type": "function", - "file": "git2/config.h", - "line": 312, - "lineto": 315, - "args": [ - { - "name": "out", - "type": "git_config_entry **", - "comment": "pointer to the variable git_config_entry" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "git_config_entry **out, const git_config *cfg, const char *name", - "sig": "git_config_entry **::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the git_config_entry of a config variable.

\n", - "comments": "

Free the git_config_entry after use with git_config_entry_free().

\n", - "group": "config", - "examples": { - "config.c": [ - "ex/v1.7.2/config.html#git_config_get_entry-4" - ] - } - }, - "git_config_get_int32": { - "type": "function", - "file": "git2/config.h", - "line": 329, - "lineto": 329, - "args": [ - { - "name": "out", - "type": "int32_t *", - "comment": "pointer to the variable where the value should be stored" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "int32_t *out, const git_config *cfg, const char *name", - "sig": "int32_t *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of an integer config variable.

\n", - "comments": "

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_config_get_int32-29", - "ex/v1.7.2/general.html#git_config_get_int32-30" - ] - } - }, - "git_config_get_int64": { - "type": "function", - "file": "git2/config.h", - "line": 343, - "lineto": 343, - "args": [ - { - "name": "out", - "type": "int64_t *", - "comment": "pointer to the variable where the value should be stored" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "int64_t *out, const git_config *cfg, const char *name", - "sig": "int64_t *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a long integer config variable.

\n", - "comments": "

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config" - }, - "git_config_get_bool": { - "type": "function", - "file": "git2/config.h", - "line": 360, - "lineto": 360, - "args": [ - { - "name": "out", - "type": "int *", - "comment": "pointer to the variable where the value should be stored" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "int *out, const git_config *cfg, const char *name", - "sig": "int *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a boolean config variable.

\n", - "comments": "

This function uses the usual C convention of 0 being false and anything else true.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config" - }, - "git_config_get_path": { - "type": "function", - "file": "git2/config.h", - "line": 378, - "lineto": 378, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer in which to store the result" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "git_buf *out, const git_config *cfg, const char *name", - "sig": "git_buf *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a path config variable.

\n", - "comments": "

A leading '~' will be expanded to the global search path (which defaults to the user's home directory but can be overridden via git_libgit2_opts().

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config" - }, - "git_config_get_string": { - "type": "function", - "file": "git2/config.h", - "line": 396, - "lineto": 396, - "args": [ - { - "name": "out", - "type": "const char **", - "comment": "pointer to the string" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "const char **out, const git_config *cfg, const char *name", - "sig": "const char **::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a string config variable.

\n", - "comments": "

This function can only be used on snapshot config objects. The string is owned by the config and should not be freed by the user. The pointer will be valid until the config is freed.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_config_get_string-31", - "ex/v1.7.2/general.html#git_config_get_string-32" - ] - } - }, - "git_config_get_string_buf": { - "type": "function", - "file": "git2/config.h", - "line": 412, - "lineto": 412, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer in which to store the string" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - } - ], - "argline": "git_buf *out, const git_config *cfg, const char *name", - "sig": "git_buf *::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the value of a string config variable.

\n", - "comments": "

The value of the config will be copied into the buffer.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", - "group": "config" - }, - "git_config_get_multivar_foreach": { - "type": "function", - "file": "git2/config.h", - "line": 431, - "lineto": 431, - "args": [ - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to filter which variables we're\n interested in. Use NULL to indicate all" - }, - { - "name": "callback", - "type": "git_config_foreach_cb", - "comment": "the function to be called on each value of the variable" - }, - { - "name": "payload", - "type": "void *", - "comment": "opaque pointer to pass to the callback" - } - ], - "argline": "const git_config *cfg, const char *name, const char *regexp, git_config_foreach_cb callback, void *payload", - "sig": "const git_config *::const char *::const char *::git_config_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Get each value of a multivar in a foreach callback

\n", - "comments": "

The callback will be called on each variable found

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", - "group": "config" - }, - "git_config_multivar_iterator_new": { - "type": "function", - "file": "git2/config.h", - "line": 447, - "lineto": 447, - "args": [ - { - "name": "out", - "type": "git_config_iterator **", - "comment": "pointer to store the iterator" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to filter which variables we're\n interested in. Use NULL to indicate all" - } - ], - "argline": "git_config_iterator **out, const git_config *cfg, const char *name, const char *regexp", - "sig": "git_config_iterator **::const git_config *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Get each value of a multivar

\n", - "comments": "

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", - "group": "config" - }, - "git_config_next": { - "type": "function", - "file": "git2/config.h", - "line": 459, - "lineto": 459, - "args": [ - { - "name": "entry", - "type": "git_config_entry **", - "comment": "pointer to store the entry" - }, - { - "name": "iter", - "type": "git_config_iterator *", - "comment": "the iterator" - } - ], - "argline": "git_config_entry **entry, git_config_iterator *iter", - "sig": "git_config_entry **::git_config_iterator *", - "return": { - "type": "int", - "comment": " 0 or an error code. GIT_ITEROVER if the iteration has completed" - }, - "description": "

Return the current entry and advance the iterator

\n", - "comments": "

The pointers returned by this function are valid until the next call to git_config_next or until the iterator is freed.

\n", - "group": "config" - }, - "git_config_iterator_free": { - "type": "function", - "file": "git2/config.h", - "line": 466, - "lineto": 466, - "args": [ - { - "name": "iter", - "type": "git_config_iterator *", - "comment": "the iterator to free" - } - ], - "argline": "git_config_iterator *iter", - "sig": "git_config_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a config iterator

\n", - "comments": "", - "group": "config" - }, - "git_config_set_int32": { - "type": "function", - "file": "git2/config.h", - "line": 477, - "lineto": 477, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "value", - "type": "int32_t", - "comment": "Integer value for the variable" - } - ], - "argline": "git_config *cfg, const char *name, int32_t value", - "sig": "git_config *::const char *::int32_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the value of an integer config variable in the config file\n with the highest level (usually the local one).

\n", - "comments": "", - "group": "config" - }, - "git_config_set_int64": { - "type": "function", - "file": "git2/config.h", - "line": 488, - "lineto": 488, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "value", - "type": "int64_t", - "comment": "Long integer value for the variable" - } - ], - "argline": "git_config *cfg, const char *name, int64_t value", - "sig": "git_config *::const char *::int64_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the value of a long integer config variable in the config file\n with the highest level (usually the local one).

\n", - "comments": "", - "group": "config" - }, - "git_config_set_bool": { - "type": "function", - "file": "git2/config.h", - "line": 499, - "lineto": 499, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "value", - "type": "int", - "comment": "the value to store" - } - ], - "argline": "git_config *cfg, const char *name, int value", - "sig": "git_config *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the value of a boolean config variable in the config file\n with the highest level (usually the local one).

\n", - "comments": "", - "group": "config" - }, - "git_config_set_string": { - "type": "function", - "file": "git2/config.h", - "line": 513, - "lineto": 513, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "value", - "type": "const char *", - "comment": "the string to store." - } - ], - "argline": "git_config *cfg, const char *name, const char *value", - "sig": "git_config *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the value of a string config variable in the config file\n with the highest level (usually the local one).

\n", - "comments": "

A copy of the string is made and the user is free to use it afterwards.

\n", - "group": "config", - "examples": { - "config.c": [ - "ex/v1.7.2/config.html#git_config_set_string-5" - ] - } - }, - "git_config_set_multivar": { - "type": "function", - "file": "git2/config.h", - "line": 526, - "lineto": 526, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variable" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "a regular expression to indicate which values to replace" - }, - { - "name": "value", - "type": "const char *", - "comment": "the new value." - } - ], - "argline": "git_config *cfg, const char *name, const char *regexp, const char *value", - "sig": "git_config *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Set a multivar in the local config file.

\n", - "comments": "

The regular expression is applied case-sensitively on the value.

\n", - "group": "config" - }, - "git_config_delete_entry": { - "type": "function", - "file": "git2/config.h", - "line": 536, - "lineto": 536, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "the configuration" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable to delete" - } - ], - "argline": "git_config *cfg, const char *name", - "sig": "git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Delete a config variable from the config file\n with the highest level (usually the local one).

\n", - "comments": "", - "group": "config" - }, - "git_config_delete_multivar": { - "type": "function", - "file": "git2/config.h", - "line": 549, - "lineto": 549, - "args": [ - { - "name": "cfg", - "type": "git_config *", - "comment": "where to look for the variables" - }, - { - "name": "name", - "type": "const char *", - "comment": "the variable's name" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "a regular expression to indicate which values to delete" - } - ], - "argline": "git_config *cfg, const char *name, const char *regexp", - "sig": "git_config *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Deletes one or several entries from a multivar in the local config file.

\n", - "comments": "

The regular expression is applied case-sensitively on the value.

\n", - "group": "config" - }, - "git_config_foreach": { - "type": "function", - "file": "git2/config.h", - "line": 567, - "lineto": 570, - "args": [ - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to get the variables from" - }, - { - "name": "callback", - "type": "git_config_foreach_cb", - "comment": "the function to call on each variable" - }, - { - "name": "payload", - "type": "void *", - "comment": "the data to pass to the callback" - } - ], - "argline": "const git_config *cfg, git_config_foreach_cb callback, void *payload", - "sig": "const git_config *::git_config_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Perform an operation on each config variable.

\n", - "comments": "

The callback receives the normalized name and value of each variable in the config backend, and the data pointer passed to this function. If the callback returns a non-zero value, the function stops iterating and returns that value to the caller.

\n\n

The pointers passed to the callback are only valid as long as the iteration is ongoing.

\n", - "group": "config" - }, - "git_config_iterator_new": { - "type": "function", - "file": "git2/config.h", - "line": 582, - "lineto": 582, - "args": [ - { - "name": "out", - "type": "git_config_iterator **", - "comment": "pointer to store the iterator" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to get the variables from" - } - ], - "argline": "git_config_iterator **out, const git_config *cfg", - "sig": "git_config_iterator **::const git_config *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Iterate over all the config variables

\n", - "comments": "

Use git_config_next to advance the iteration and git_config_iterator_free when done.

\n", - "group": "config" - }, - "git_config_iterator_glob_new": { - "type": "function", - "file": "git2/config.h", - "line": 599, - "lineto": 599, - "args": [ - { - "name": "out", - "type": "git_config_iterator **", - "comment": "pointer to store the iterator" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to ge the variables from" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to match the names" - } - ], - "argline": "git_config_iterator **out, const git_config *cfg, const char *regexp", - "sig": "git_config_iterator **::const git_config *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Iterate over all the config variables whose name matches a pattern

\n", - "comments": "

Use git_config_next to advance the iteration and git_config_iterator_free when done.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", - "group": "config" - }, - "git_config_foreach_match": { - "type": "function", - "file": "git2/config.h", - "line": 621, - "lineto": 625, - "args": [ - { - "name": "cfg", - "type": "const git_config *", - "comment": "where to get the variables from" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to match against config names" - }, - { - "name": "callback", - "type": "git_config_foreach_cb", - "comment": "the function to call on each variable" - }, - { - "name": "payload", - "type": "void *", - "comment": "the data to pass to the callback" - } - ], - "argline": "const git_config *cfg, const char *regexp, git_config_foreach_cb callback, void *payload", - "sig": "const git_config *::const char *::git_config_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 or the return value of the callback which didn't return 0" - }, - "description": "

Perform an operation on each config variable matching a regular expression.

\n", - "comments": "

This behaves like git_config_foreach with an additional filter of a regular expression that filters which config keys are passed to the callback.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the case-insensitive parts are lower-case.

\n", - "group": "config" - }, - "git_config_get_mapped": { - "type": "function", - "file": "git2/config.h", - "line": 661, - "lineto": 666, - "args": [ - { - "name": "out", - "type": "int *", - "comment": "place to store the result of the mapping" - }, - { - "name": "cfg", - "type": "const git_config *", - "comment": "config file to get the variables from" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the config variable to lookup" - }, - { - "name": "maps", - "type": "const git_configmap *", - "comment": "array of `git_configmap` objects specifying the possible mappings" - }, - { - "name": "map_n", - "type": "size_t", - "comment": "number of mapping objects in `maps`" - } - ], - "argline": "int *out, const git_config *cfg, const char *name, const git_configmap *maps, size_t map_n", - "sig": "int *::const git_config *::const char *::const git_configmap *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Query the value of a config variable and return it mapped to\n an integer constant.

\n", - "comments": "

This is a helper method to easily map different possible values to a variable to integer constants that easily identify them.

\n\n

A mapping array looks as follows:

\n\n
git_configmap autocrlf_mapping[] = {        {GIT_CVAR_FALSE, NULL, GIT_AUTO_CRLF_FALSE},        {GIT_CVAR_TRUE, NULL, GIT_AUTO_CRLF_TRUE},      {GIT_CVAR_STRING, "input", GIT_AUTO_CRLF_INPUT},        {GIT_CVAR_STRING, "default", GIT_AUTO_CRLF_DEFAULT}};\n
\n\n

On any "false" value for the variable (e.g. "false", "FALSE", "no"), the mapping will store GIT_AUTO_CRLF_FALSE in the out parameter.

\n\n

The same thing applies for any "true" value such as "true", "yes" or "1", storing the GIT_AUTO_CRLF_TRUE variable.

\n\n

Otherwise, if the value matches the string "input" (with case insensitive comparison), the given constant will be stored in out, and likewise for "default".

\n\n

If not a single match can be made to store in out, an error code will be returned.

\n", - "group": "config" - }, - "git_config_lookup_map_value": { - "type": "function", - "file": "git2/config.h", - "line": 677, - "lineto": 681, - "args": [ - { - "name": "out", - "type": "int *", - "comment": "place to store the result of the parsing" - }, - { - "name": "maps", - "type": "const git_configmap *", - "comment": "array of `git_configmap` objects specifying the possible mappings" - }, - { - "name": "map_n", - "type": "size_t", - "comment": "number of mapping objects in `maps`" - }, - { - "name": "value", - "type": "const char *", - "comment": "value to parse" - } - ], - "argline": "int *out, const git_configmap *maps, size_t map_n, const char *value", - "sig": "int *::const git_configmap *::size_t::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Maps a string value to an integer constant

\n", - "comments": "", - "group": "config" - }, - "git_config_parse_bool": { - "type": "function", - "file": "git2/config.h", - "line": 694, - "lineto": 694, - "args": [ - { - "name": "out", - "type": "int *", - "comment": "place to store the result of the parsing" - }, - { - "name": "value", - "type": "const char *", - "comment": "value to parse" - } - ], - "argline": "int *out, const char *value", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Parse a string value as a bool.

\n", - "comments": "

Valid values for true are: 'true', 'yes', 'on', 1 or any number different from 0 Valid values for false are: 'false', 'no', 'off', 0

\n", - "group": "config" - }, - "git_config_parse_int32": { - "type": "function", - "file": "git2/config.h", - "line": 707, - "lineto": 707, - "args": [ - { - "name": "out", - "type": "int32_t *", - "comment": "place to store the result of the parsing" - }, - { - "name": "value", - "type": "const char *", - "comment": "value to parse" - } - ], - "argline": "int32_t *out, const char *value", - "sig": "int32_t *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Parse a string value as an int32.

\n", - "comments": "

An optional value suffix of 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output.

\n", - "group": "config" - }, - "git_config_parse_int64": { - "type": "function", - "file": "git2/config.h", - "line": 720, - "lineto": 720, - "args": [ - { - "name": "out", - "type": "int64_t *", - "comment": "place to store the result of the parsing" - }, - { - "name": "value", - "type": "const char *", - "comment": "value to parse" - } - ], - "argline": "int64_t *out, const char *value", - "sig": "int64_t *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Parse a string value as an int64.

\n", - "comments": "

An optional value suffix of 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output.

\n", - "group": "config" - }, - "git_config_parse_path": { - "type": "function", - "file": "git2/config.h", - "line": 736, - "lineto": 736, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "placae to store the result of parsing" - }, - { - "name": "value", - "type": "const char *", - "comment": "the path to evaluate" - } - ], - "argline": "git_buf *out, const char *value", - "sig": "git_buf *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Parse a string value as a path.

\n", - "comments": "

A leading '~' will be expanded to the global search path (which defaults to the user's home directory but can be overridden via git_libgit2_opts().

\n\n

If the value does not begin with a tilde, the input will be returned.

\n", - "group": "config" - }, - "git_config_backend_foreach_match": { - "type": "function", - "file": "git2/config.h", - "line": 755, - "lineto": 759, - "args": [ - { - "name": "backend", - "type": "git_config_backend *", - "comment": "where to get the variables from" - }, - { - "name": "regexp", - "type": "const char *", - "comment": "regular expression to match against config names (can be NULL)" - }, - { - "name": "callback", - "type": "git_config_foreach_cb", - "comment": "the function to call on each variable" - }, - { - "name": "payload", - "type": "void *", - "comment": "the data to pass to the callback" - } - ], - "argline": "git_config_backend *backend, const char *regexp, git_config_foreach_cb callback, void *payload", - "sig": "git_config_backend *::const char *::git_config_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Perform an operation on each config variable in a given config backend,\n matching a regular expression.

\n", - "comments": "

This behaves like git_config_foreach_match except that only config entries from the given backend entry are enumerated.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", - "group": "config" - }, - "git_config_lock": { - "type": "function", - "file": "git2/config.h", - "line": 778, - "lineto": 778, - "args": [ - { - "name": "tx", - "type": "git_transaction **", - "comment": "the resulting transaction, use this to commit or undo the\n changes" - }, - { - "name": "cfg", - "type": "git_config *", - "comment": "the configuration in which to lock" - } - ], - "argline": "git_transaction **tx, git_config *cfg", - "sig": "git_transaction **::git_config *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lock the backend with the highest priority

\n", - "comments": "

Locking disallows anybody else from writing to that backend. Any updates made after locking will not be visible to a reader until the file is unlocked.

\n\n

You can apply the changes by calling git_transaction_commit() before freeing the transaction. Either of these actions will unlock the config.

\n", - "group": "config" - }, - "git_credential_free": { - "type": "function", - "file": "git2/credential.h", - "line": 146, - "lineto": 146, - "args": [ - { - "name": "cred", - "type": "git_credential *", - "comment": "the object to free" - } - ], - "argline": "git_credential *cred", - "sig": "git_credential *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a credential.

\n", - "comments": "

This is only necessary if you own the object; that is, if you are a transport.

\n", - "group": "credential" - }, - "git_credential_has_username": { - "type": "function", - "file": "git2/credential.h", - "line": 154, - "lineto": 154, - "args": [ - { - "name": "cred", - "type": "git_credential *", - "comment": "object to check" - } - ], - "argline": "git_credential *cred", - "sig": "git_credential *", - "return": { - "type": "int", - "comment": " 1 if the credential object has non-NULL username, 0 otherwise" - }, - "description": "

Check whether a credential object contains username information.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_get_username": { - "type": "function", - "file": "git2/credential.h", - "line": 162, - "lineto": 162, - "args": [ - { - "name": "cred", - "type": "git_credential *", - "comment": "object to check" - } - ], - "argline": "git_credential *cred", - "sig": "git_credential *", - "return": { - "type": "const char *", - "comment": " the credential username, or NULL if not applicable" - }, - "description": "

Return the username associated with a credential object.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_userpass_plaintext_new": { - "type": "function", - "file": "git2/credential.h", - "line": 173, - "lineto": 176, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "The username of the credential." - }, - { - "name": "password", - "type": "const char *", - "comment": "The password of the credential." - } - ], - "argline": "git_credential **out, const char *username, const char *password", - "sig": "git_credential **::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a new plain-text username and password credential object.\n The supplied credential parameter will be internally duplicated.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_default_new": { - "type": "function", - "file": "git2/credential.h", - "line": 185, - "lineto": 185, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - } - ], - "argline": "git_credential **out", - "sig": "git_credential **", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a "default" credential usable for Negotiate mechanisms like NTLM\n or Kerberos authentication.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_username_new": { - "type": "function", - "file": "git2/credential.h", - "line": 197, - "lineto": 197, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "The username to authenticate with" - } - ], - "argline": "git_credential **out, const char *username", - "sig": "git_credential **::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a credential to specify a username.

\n", - "comments": "

This is used with ssh authentication to query for the username if none is specified in the url.

\n", - "group": "credential" - }, - "git_credential_ssh_key_new": { - "type": "function", - "file": "git2/credential.h", - "line": 210, - "lineto": 215, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "username to use to authenticate" - }, - { - "name": "publickey", - "type": "const char *", - "comment": "The path to the public key of the credential." - }, - { - "name": "privatekey", - "type": "const char *", - "comment": "The path to the private key of the credential." - }, - { - "name": "passphrase", - "type": "const char *", - "comment": "The passphrase of the credential." - } - ], - "argline": "git_credential **out, const char *username, const char *publickey, const char *privatekey, const char *passphrase", - "sig": "git_credential **::const char *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a new passphrase-protected ssh key credential object.\n The supplied credential parameter will be internally duplicated.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_ssh_key_memory_new": { - "type": "function", - "file": "git2/credential.h", - "line": 227, - "lineto": 232, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "username to use to authenticate." - }, - { - "name": "publickey", - "type": "const char *", - "comment": "The public key of the credential." - }, - { - "name": "privatekey", - "type": "const char *", - "comment": "The private key of the credential." - }, - { - "name": "passphrase", - "type": "const char *", - "comment": "The passphrase of the credential." - } - ], - "argline": "git_credential **out, const char *username, const char *publickey, const char *privatekey, const char *passphrase", - "sig": "git_credential **::const char *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a new ssh key credential object reading the keys from memory.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_ssh_interactive_new": { - "type": "function", - "file": "git2/credential.h", - "line": 263, - "lineto": 267, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "Username to use to authenticate." - }, - { - "name": "prompt_callback", - "type": "git_credential_ssh_interactive_cb", - "comment": "The callback method used for prompts." - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback." - } - ], - "argline": "git_credential **out, const char *username, git_credential_ssh_interactive_cb prompt_callback, void *payload", - "sig": "git_credential **::const char *::git_credential_ssh_interactive_cb::void *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure." - }, - "description": "

Create a new ssh keyboard-interactive based credential object.\n The supplied credential parameter will be internally duplicated.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_ssh_key_from_agent": { - "type": "function", - "file": "git2/credential.h", - "line": 277, - "lineto": 279, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "username to use to authenticate" - } - ], - "argline": "git_credential **out, const char *username", - "sig": "git_credential **::const char *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create a new ssh key credential object used for querying an ssh-agent.\n The supplied credential parameter will be internally duplicated.

\n", - "comments": "", - "group": "credential" - }, - "git_credential_ssh_custom_new": { - "type": "function", - "file": "git2/credential.h", - "line": 305, - "lineto": 311, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "username", - "type": "const char *", - "comment": "username to use to authenticate" - }, - { - "name": "publickey", - "type": "const char *", - "comment": "The bytes of the public key." - }, - { - "name": "publickey_len", - "type": "size_t", - "comment": "The length of the public key in bytes." - }, - { - "name": "sign_callback", - "type": "git_credential_sign_cb", - "comment": "The callback method to sign the data during the challenge." - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback." - } - ], - "argline": "git_credential **out, const char *username, const char *publickey, size_t publickey_len, git_credential_sign_cb sign_callback, void *payload", - "sig": "git_credential **::const char *::const char *::size_t::git_credential_sign_cb::void *", - "return": { - "type": "int", - "comment": " 0 for success or an error code for failure" - }, - "description": "

Create an ssh key credential with a custom signing function.

\n", - "comments": "

This lets you use your own function to sign the challenge.

\n\n

This function and its credential type is provided for completeness and wraps libssh2_userauth_publickey(), which is undocumented.

\n\n

The supplied credential parameter will be internally duplicated.

\n", - "group": "credential" - }, - "git_credential_userpass": { - "type": "function", - "file": "git2/credential_helpers.h", - "line": 44, - "lineto": 49, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "url", - "type": "const char *", - "comment": "The resource for which we are demanding a credential." - }, - { - "name": "user_from_url", - "type": "const char *", - "comment": "The username that was embedded in a \"user\n@\nhost\"\n remote url, or NULL if not included." - }, - { - "name": "allowed_types", - "type": "unsigned int", - "comment": "A bitmask stating which credential types are OK to return." - }, - { - "name": "payload", - "type": "void *", - "comment": "The payload provided when specifying this callback. (This is\n interpreted as a `git_credential_userpass_payload*`.)" - } - ], - "argline": "git_credential **out, const char *url, const char *user_from_url, unsigned int allowed_types, void *payload", - "sig": "git_credential **::const char *::const char *::unsigned int::void *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Stock callback usable as a git_credential_acquire_cb. This calls\n git_cred_userpass_plaintext_new unless the protocol has not specified\n GIT_CREDENTIAL_USERPASS_PLAINTEXT as an allowed type.

\n", - "comments": "", - "group": "credential" - }, - "git_blob_filtered_content": { - "type": "function", - "file": "git2/deprecated.h", - "line": 115, - "lineto": 119, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": null - }, - { - "name": "blob", - "type": "git_blob *", - "comment": null - }, - { - "name": "as_path", - "type": "const char *", - "comment": null - }, - { - "name": "check_for_binary_data", - "type": "int", - "comment": null - } - ], - "argline": "git_buf *out, git_blob *blob, const char *as_path, int check_for_binary_data", - "sig": "git_buf *::git_blob *::const char *::int", - "return": { - "type": "int", - "comment": null - }, - "description": "

Deprecated in favor of git_blob_filter.

\n", - "comments": "", - "group": "blob" - }, - "git_filter_list_stream_data": { - "type": "function", - "file": "git2/deprecated.h", - "line": 139, - "lineto": 142, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": null - }, - { - "name": "data", - "type": "git_buf *", - "comment": null - }, - { - "name": "target", - "type": "git_writestream *", - "comment": null - } - ], - "argline": "git_filter_list *filters, git_buf *data, git_writestream *target", - "sig": "git_filter_list *::git_buf *::git_writestream *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Deprecated in favor of git_filter_list_stream_buffer.

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_apply_to_data": { - "type": "function", - "file": "git2/deprecated.h", - "line": 149, - "lineto": 152, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": null - }, - { - "name": "filters", - "type": "git_filter_list *", - "comment": null - }, - { - "name": "in", - "type": "git_buf *", - "comment": null - } - ], - "argline": "git_buf *out, git_filter_list *filters, git_buf *in", - "sig": "git_buf *::git_filter_list *::git_buf *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Deprecated in favor of git_filter_list_apply_to_buffer.

\n", - "comments": "", - "group": "filter" - }, - "git_treebuilder_write_with_buffer": { - "type": "function", - "file": "git2/deprecated.h", - "line": 178, - "lineto": 179, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": null - }, - { - "name": "bld", - "type": "git_treebuilder *", - "comment": null - }, - { - "name": "tree", - "type": "git_buf *", - "comment": null - } - ], - "argline": "git_oid *oid, git_treebuilder *bld, git_buf *tree", - "sig": "git_oid *::git_treebuilder *::git_buf *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Write the contents of the tree builder as a tree object.\n This is an alias of git_treebuilder_write and is preserved\n for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "treebuilder" - }, - "git_buf_grow": { - "type": "function", - "file": "git2/deprecated.h", - "line": 220, - "lineto": 220, - "args": [ - { - "name": "buffer", - "type": "git_buf *", - "comment": "The buffer to be resized; may or may not be allocated yet" - }, - { - "name": "target_size", - "type": "size_t", - "comment": "The desired available size" - } - ], - "argline": "git_buf *buffer, size_t target_size", - "sig": "git_buf *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, -1 on allocation failure" - }, - "description": "

Resize the buffer allocation to make more space.

\n", - "comments": "

This will attempt to grow the buffer to accommodate the target size.

\n\n

If the buffer refers to memory that was not allocated by libgit2 (i.e. the asize field is zero), then ptr will be replaced with a newly allocated block of data. Be careful so that memory allocated by the caller is not lost. As a special variant, if you pass target_size as 0 and the memory is not allocated by libgit2, this will allocate a new buffer of size size and copy the external data into it.

\n\n

Currently, this will never shrink a buffer, only expand it.

\n\n

If the allocation fails, this will return an error and the buffer will be marked as invalid for future operations, invaliding the contents.

\n", - "group": "buf" - }, - "git_buf_set": { - "type": "function", - "file": "git2/deprecated.h", - "line": 230, - "lineto": 231, - "args": [ - { - "name": "buffer", - "type": "git_buf *", - "comment": "The buffer to set" - }, - { - "name": "data", - "type": "const void *", - "comment": "The data to copy into the buffer" - }, - { - "name": "datalen", - "type": "size_t", - "comment": "The length of the data to copy into the buffer" - } - ], - "argline": "git_buf *buffer, const void *data, size_t datalen", - "sig": "git_buf *::const void *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, -1 on allocation failure" - }, - "description": "

Set buffer to a copy of some raw data.

\n", - "comments": "", - "group": "buf" - }, - "git_buf_is_binary": { - "type": "function", - "file": "git2/deprecated.h", - "line": 239, - "lineto": 239, - "args": [ - { - "name": "buf", - "type": "const git_buf *", - "comment": "Buffer to check" - } - ], - "argline": "const git_buf *buf", - "sig": "const git_buf *", - "return": { - "type": "int", - "comment": " 1 if buffer looks like non-text data" - }, - "description": "

Check quickly if buffer looks like it contains binary data

\n", - "comments": "", - "group": "buf" - }, - "git_buf_contains_nul": { - "type": "function", - "file": "git2/deprecated.h", - "line": 247, - "lineto": 247, - "args": [ - { - "name": "buf", - "type": "const git_buf *", - "comment": "Buffer to check" - } - ], - "argline": "const git_buf *buf", - "sig": "const git_buf *", - "return": { - "type": "int", - "comment": " 1 if buffer contains a NUL byte" - }, - "description": "

Check quickly if buffer contains a NUL byte

\n", - "comments": "", - "group": "buf" - }, - "git_buf_free": { - "type": "function", - "file": "git2/deprecated.h", - "line": 259, - "lineto": 259, - "args": [ - { - "name": "buffer", - "type": "git_buf *", - "comment": null - } - ], - "argline": "git_buf *buffer", - "sig": "git_buf *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory referred to by the git_buf. This is an alias of\n git_buf_dispose and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "buf" - }, - "git_diff_format_email": { - "type": "function", - "file": "git2/deprecated.h", - "line": 357, - "lineto": 360, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": null - }, - { - "name": "diff", - "type": "git_diff *", - "comment": null - }, - { - "name": "opts", - "type": "const git_diff_format_email_options *", - "comment": null - } - ], - "argline": "git_buf *out, git_diff *diff, const git_diff_format_email_options *opts", - "sig": "git_buf *::git_diff *::const git_diff_format_email_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an e-mail ready patch from a diff.

\n", - "comments": "", - "group": "diff" - }, - "git_diff_commit_as_email": { - "type": "function", - "file": "git2/deprecated.h", - "line": 368, - "lineto": 375, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": null - }, - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "commit", - "type": "git_commit *", - "comment": null - }, - { - "name": "patch_no", - "type": "size_t", - "comment": null - }, - { - "name": "total_patches", - "type": "size_t", - "comment": null - }, - { - "name": "flags", - "type": "uint32_t", - "comment": null - }, - { - "name": "diff_opts", - "type": "const git_diff_options *", - "comment": null - } - ], - "argline": "git_buf *out, git_repository *repo, git_commit *commit, size_t patch_no, size_t total_patches, uint32_t flags, const git_diff_options *diff_opts", - "sig": "git_buf *::git_repository *::git_commit *::size_t::size_t::uint32_t::const git_diff_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Create an e-mail ready patch for a commit.

\n", - "comments": "", - "group": "diff" - }, - "git_diff_format_email_options_init": { - "type": "function", - "file": "git2/deprecated.h", - "line": 387, - "lineto": 389, - "args": [ - { - "name": "opts", - "type": "git_diff_format_email_options *", - "comment": "The `git_blame_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION`." - } - ], - "argline": "git_diff_format_email_options *opts, unsigned int version", - "sig": "git_diff_format_email_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_diff_format_email_options structure

\n", - "comments": "

Initializes a git_diff_format_email_options with default values. Equivalent to creating an instance with GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT.

\n", - "group": "diff" - }, - "giterr_last": { - "type": "function", - "file": "git2/deprecated.h", - "line": 452, - "lineto": 452, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "const git_error *", - "comment": null - }, - "description": "

Return the last git_error object that was generated for the\n current thread. This is an alias of git_error_last and is\n preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "giterr" - }, - "giterr_clear": { - "type": "function", - "file": "git2/deprecated.h", - "line": 464, - "lineto": 464, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "void", - "comment": null - }, - "description": "

Clear the last error. This is an alias of git_error_last and is\n preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "giterr" - }, - "giterr_set_str": { - "type": "function", - "file": "git2/deprecated.h", - "line": 476, - "lineto": 476, - "args": [ - { - "name": "error_class", - "type": "int", - "comment": null - }, - { - "name": "string", - "type": "const char *", - "comment": null - } - ], - "argline": "int error_class, const char *string", - "sig": "int::const char *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Sets the error message to the given string. This is an alias of\n git_error_set_str and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "giterr" - }, - "giterr_set_oom": { - "type": "function", - "file": "git2/deprecated.h", - "line": 488, - "lineto": 488, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "void", - "comment": null - }, - "description": "

Indicates that an out-of-memory situation occurred. This is an alias\n of git_error_set_oom and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "giterr" - }, - "git_object__size": { - "type": "function", - "file": "git2/deprecated.h", - "line": 578, - "lineto": 578, - "args": [ - { - "name": "type", - "type": "git_object_t", - "comment": "object type to get its size" - } - ], - "argline": "git_object_t type", - "sig": "git_object_t", - "return": { - "type": "size_t", - "comment": " size in bytes of the object" - }, - "description": "

Get the size in bytes for the structure which\n acts as an in-memory representation of any given\n object type.

\n", - "comments": "

For all the core types, this would the equivalent of calling sizeof(git_commit) if the core types were not opaque on the external API.

\n", - "group": "object" - }, - "git_remote_is_valid_name": { - "type": "function", - "file": "git2/deprecated.h", - "line": 599, - "lineto": 599, - "args": [ - { - "name": "remote_name", - "type": "const char *", - "comment": "name to be checked." - } - ], - "argline": "const char *remote_name", - "sig": "const char *", - "return": { - "type": "int", - "comment": " 1 if the reference name is acceptable; 0 if it isn't" - }, - "description": "

Ensure the remote name is well-formed.

\n", - "comments": "", - "group": "remote" - }, - "git_reference_is_valid_name": { - "type": "function", - "file": "git2/deprecated.h", - "line": 643, - "lineto": 643, - "args": [ - { - "name": "refname", - "type": "const char *", - "comment": "name to be checked." - } - ], - "argline": "const char *refname", - "sig": "const char *", - "return": { - "type": "int", - "comment": " 1 if the reference name is acceptable; 0 if it isn't" - }, - "description": "

Ensure the reference name is well-formed.

\n", - "comments": "

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n", - "group": "reference" - }, - "git_oidarray_free": { - "type": "function", - "file": "git2/deprecated.h", - "line": 810, - "lineto": 810, - "args": [ - { - "name": "array", - "type": "git_oidarray *", - "comment": null - } - ], - "argline": "git_oidarray *array", - "sig": "git_oidarray *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory referred to by the git_oidarray. This is an alias of\n git_oidarray_dispose and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "oidarray" - }, - "git_strarray_copy": { - "type": "function", - "file": "git2/deprecated.h", - "line": 879, - "lineto": 879, - "args": [ - { - "name": "tgt", - "type": "git_strarray *", - "comment": "target" - }, - { - "name": "src", - "type": "const git_strarray *", - "comment": "source" - } - ], - "argline": "git_strarray *tgt, const git_strarray *src", - "sig": "git_strarray *::const git_strarray *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n 0 on allocation failure" - }, - "description": "

Copy a string array object from source to target.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "strarray" - }, - "git_strarray_free": { - "type": "function", - "file": "git2/deprecated.h", - "line": 891, - "lineto": 891, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": null - } - ], - "argline": "git_strarray *array", - "sig": "git_strarray *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory referred to by the git_strarray. This is an alias of\n git_strarray_dispose and is preserved for backward compatibility.

\n", - "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", - "group": "strarray" - }, - "git_blame_init_options": { - "type": "function", - "file": "git2/deprecated.h", - "line": 905, - "lineto": 905, - "args": [ - { - "name": "opts", - "type": "git_blame_options *", - "comment": null - }, - { - "name": "version", - "type": "unsigned int", - "comment": null - } - ], - "argline": "git_blame_options *opts, unsigned int version", - "sig": "git_blame_options *::unsigned int", - "return": { - "type": "int", - "comment": null - }, - "description": "", - "comments": "

These functions are retained for backward compatibility. The newer versions of these functions should be preferred in all new code.

\n\n

There is no plan to remove these backward compatibility functions at this time.

\n\n

@{

\n", - "group": "blame" - }, - "git_describe_options_init": { - "type": "function", - "file": "git2/describe.h", - "line": 82, - "lineto": 82, - "args": [ - { - "name": "opts", - "type": "git_describe_options *", - "comment": "The `git_describe_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DESCRIBE_OPTIONS_VERSION`." - } - ], - "argline": "git_describe_options *opts, unsigned int version", - "sig": "git_describe_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_describe_options structure

\n", - "comments": "

Initializes a git_describe_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_OPTIONS_INIT.

\n", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.7.2/describe.html#git_describe_options_init-1" - ] - } - }, - "git_describe_format_options_init": { - "type": "function", - "file": "git2/describe.h", - "line": 129, - "lineto": 129, - "args": [ - { - "name": "opts", - "type": "git_describe_format_options *", - "comment": "The `git_describe_format_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DESCRIBE_FORMAT_OPTIONS_VERSION`." - } - ], - "argline": "git_describe_format_options *opts, unsigned int version", - "sig": "git_describe_format_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_describe_format_options structure

\n", - "comments": "

Initializes a git_describe_format_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_FORMAT_OPTIONS_INIT.

\n", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.7.2/describe.html#git_describe_format_options_init-2" - ] - } - }, - "git_describe_commit": { - "type": "function", - "file": "git2/describe.h", - "line": 147, - "lineto": 150, - "args": [ - { - "name": "result", - "type": "git_describe_result **", - "comment": "pointer to store the result. You must free this once\n you're done with it." - }, - { - "name": "committish", - "type": "git_object *", - "comment": "a committish to describe" - }, - { - "name": "opts", - "type": "git_describe_options *", - "comment": "the lookup options (or NULL for defaults)" - } - ], - "argline": "git_describe_result **result, git_object *committish, git_describe_options *opts", - "sig": "git_describe_result **::git_object *::git_describe_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Describe a commit

\n", - "comments": "

Perform the describe operation on the given committish object.

\n", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.7.2/describe.html#git_describe_commit-3" - ] - } - }, - "git_describe_workdir": { - "type": "function", - "file": "git2/describe.h", - "line": 165, - "lineto": 168, - "args": [ - { - "name": "out", - "type": "git_describe_result **", - "comment": "pointer to store the result. You must free this once\n you're done with it." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the describe" - }, - { - "name": "opts", - "type": "git_describe_options *", - "comment": "the lookup options (or NULL for defaults)" - } - ], - "argline": "git_describe_result **out, git_repository *repo, git_describe_options *opts", - "sig": "git_describe_result **::git_repository *::git_describe_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Describe a commit

\n", - "comments": "

Perform the describe operation on the current commit and the worktree. After performing describe on HEAD, a status is run and the description is considered to be dirty if there are.

\n", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.7.2/describe.html#git_describe_workdir-4" - ] - } - }, - "git_describe_format": { - "type": "function", - "file": "git2/describe.h", - "line": 179, - "lineto": 182, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The buffer to store the result" - }, - { - "name": "result", - "type": "const git_describe_result *", - "comment": "the result from `git_describe_commit()` or\n `git_describe_workdir()`." - }, - { - "name": "opts", - "type": "const git_describe_format_options *", - "comment": "the formatting options (or NULL for defaults)" - } - ], - "argline": "git_buf *out, const git_describe_result *result, const git_describe_format_options *opts", - "sig": "git_buf *::const git_describe_result *::const git_describe_format_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Print the describe result to a buffer

\n", - "comments": "", - "group": "describe", - "examples": { - "describe.c": [ - "ex/v1.7.2/describe.html#git_describe_format-5" - ] - } - }, - "git_describe_result_free": { - "type": "function", - "file": "git2/describe.h", - "line": 189, - "lineto": 189, - "args": [ - { - "name": "result", - "type": "git_describe_result *", - "comment": "The result to free." - } - ], - "argline": "git_describe_result *result", - "sig": "git_describe_result *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the describe result.

\n", - "comments": "", - "group": "describe" - }, - "git_diff_options_init": { - "type": "function", - "file": "git2/diff.h", - "line": 485, - "lineto": 487, - "args": [ - { - "name": "opts", - "type": "git_diff_options *", - "comment": "The `git_diff_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DIFF_OPTIONS_VERSION`." - } - ], - "argline": "git_diff_options *opts, unsigned int version", - "sig": "git_diff_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_diff_options structure

\n", - "comments": "

Initializes a git_diff_options with default values. Equivalent to creating an instance with GIT_DIFF_OPTIONS_INIT.

\n", - "group": "diff" - }, - "git_diff_find_options_init": { - "type": "function", - "file": "git2/diff.h", - "line": 818, - "lineto": 820, - "args": [ - { - "name": "opts", - "type": "git_diff_find_options *", - "comment": "The `git_diff_find_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DIFF_FIND_OPTIONS_VERSION`." - } - ], - "argline": "git_diff_find_options *opts, unsigned int version", - "sig": "git_diff_find_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_diff_find_options structure

\n", - "comments": "

Initializes a git_diff_find_options with default values. Equivalent to creating an instance with GIT_DIFF_FIND_OPTIONS_INIT.

\n", - "group": "diff" - }, - "git_diff_free": { - "type": "function", - "file": "git2/diff.h", - "line": 834, - "lineto": 834, - "args": [ - { - "name": "diff", - "type": "git_diff *", - "comment": "The previously created diff; cannot be used after free." - } - ], - "argline": "git_diff *diff", - "sig": "git_diff *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Deallocate a diff.

\n", - "comments": "", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_free-3" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_diff_free-25", - "ex/v1.7.2/log.html#git_diff_free-26" - ] - } - }, - "git_diff_tree_to_tree": { - "type": "function", - "file": "git2/diff.h", - "line": 853, - "lineto": 858, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "Output pointer to a git_diff pointer to be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the trees." - }, - { - "name": "old_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff from, or NULL for empty tree." - }, - { - "name": "new_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff to, or NULL for empty tree." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, git_tree *new_tree, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_tree *::git_tree *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Create a diff with the difference between two tree objects.

\n", - "comments": "

This is equivalent to git diff <old-tree> <new-tree>

\n\n

The first tree will be used for the "old_file" side of the delta and the second tree will be used for the "new_file" side of the delta. You can pass NULL to indicate an empty tree, although it is an error to pass NULL for both the old_tree and new_tree.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_tree_to_tree-4" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_diff_tree_to_tree-27", - "ex/v1.7.2/log.html#git_diff_tree_to_tree-28" - ] - } - }, - "git_diff_tree_to_index": { - "type": "function", - "file": "git2/diff.h", - "line": 880, - "lineto": 885, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "Output pointer to a git_diff pointer to be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the tree and index." - }, - { - "name": "old_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff from, or NULL for empty tree." - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to diff with; repo index used if NULL." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, git_index *index, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_tree *::git_index *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Create a diff between a tree and repository index.

\n", - "comments": "

This is equivalent to git diff --cached <treeish> or if you pass the HEAD tree, then like git diff --cached.

\n\n

The tree you pass will be used for the "old_file" side of the delta, and the index will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_tree_to_index-5" - ] - } - }, - "git_diff_index_to_workdir": { - "type": "function", - "file": "git2/diff.h", - "line": 908, - "lineto": 912, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "Output pointer to a git_diff pointer to be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository." - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to diff from; repo index used if NULL." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_index *index, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_index *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Create a diff between the repository index and the workdir directory.

\n", - "comments": "

This matches the git diff command. See the note below on git_diff_tree_to_workdir for a discussion of the difference between git diff and git diff HEAD and how to emulate a git diff <treeish> using libgit2.

\n\n

The index will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_index_to_workdir-6" - ] - } - }, - "git_diff_tree_to_workdir": { - "type": "function", - "file": "git2/diff.h", - "line": 938, - "lineto": 942, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "A pointer to a git_diff pointer that will be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the tree." - }, - { - "name": "old_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff from, or NULL for empty tree." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_tree *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Create a diff between a tree and the working directory.

\n", - "comments": "

The tree you provide will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side.

\n\n

This is not the same as git diff <treeish> or git diff-index <treeish>. Those commands use information from the index, whereas this function strictly returns the differences between the tree and the files in the working directory, regardless of the state of the index. Use git_diff_tree_to_workdir_with_index to emulate those commands.

\n\n

To see difference between this and git_diff_tree_to_workdir_with_index, consider the example of a staged file deletion where the file has then been put back into the working dir and further modified. The tree-to-workdir diff for that file is 'modified', but git diff would show status 'deleted' since there is a staged delete.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_tree_to_workdir-7" - ] - } - }, - "git_diff_tree_to_workdir_with_index": { - "type": "function", - "file": "git2/diff.h", - "line": 958, - "lineto": 962, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "A pointer to a git_diff pointer that will be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the tree." - }, - { - "name": "old_tree", - "type": "git_tree *", - "comment": "A git_tree object to diff from, or NULL for empty tree." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_tree *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Create a diff between a tree and the working directory using index data\n to account for staged deletes, tracked files, etc.

\n", - "comments": "

This emulates git diff <tree> by diffing the tree to the index and the index to the working directory and blending the results into a single diff that includes staged deleted, etc.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_tree_to_workdir_with_index-8" - ] - } - }, - "git_diff_index_to_index": { - "type": "function", - "file": "git2/diff.h", - "line": 977, - "lineto": 982, - "args": [ - { - "name": "diff", - "type": "git_diff **", - "comment": "Output pointer to a git_diff pointer to be allocated." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing the indexes." - }, - { - "name": "old_index", - "type": "git_index *", - "comment": "A git_index object to diff from." - }, - { - "name": "new_index", - "type": "git_index *", - "comment": "A git_index object to diff to." - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Structure with options to influence diff or NULL for defaults." - } - ], - "argline": "git_diff **diff, git_repository *repo, git_index *old_index, git_index *new_index, const git_diff_options *opts", - "sig": "git_diff **::git_repository *::git_index *::git_index *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Create a diff with the difference between two index objects.

\n", - "comments": "

The first index will be used for the "old_file" side of the delta and the second index will be used for the "new_file" side of the delta.

\n", - "group": "diff" - }, - "git_diff_merge": { - "type": "function", - "file": "git2/diff.h", - "line": 998, - "lineto": 1000, - "args": [ - { - "name": "onto", - "type": "git_diff *", - "comment": "Diff to merge into." - }, - { - "name": "from", - "type": "const git_diff *", - "comment": "Diff to merge." - } - ], - "argline": "git_diff *onto, const git_diff *from", - "sig": "git_diff *::const git_diff *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Merge one diff into another.

\n", - "comments": "

This merges items from the "from" list into the "onto" list. The resulting diff will have all items that appear in either list. If an item appears in both lists, then it will be "merged" to appear as if the old version was from the "onto" list and the new version is from the "from" list (with the exception that if the item has a pending DELETE in the middle, then it will show as deleted).

\n", - "group": "diff" - }, - "git_diff_find_similar": { - "type": "function", - "file": "git2/diff.h", - "line": 1014, - "lineto": 1016, - "args": [ - { - "name": "diff", - "type": "git_diff *", - "comment": "diff to run detection algorithms on" - }, - { - "name": "options", - "type": "const git_diff_find_options *", - "comment": "Control how detection should be run, NULL for defaults" - } - ], - "argline": "git_diff *diff, const git_diff_find_options *options", - "sig": "git_diff *::const git_diff_find_options *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on failure" - }, - "description": "

Transform a diff marking file renames, copies, etc.

\n", - "comments": "

This modifies a diff in place, replacing old entries that look like renames or copies with new entries reflecting those changes. This also will, if requested, break modified files into add/remove pairs if the amount of change is above a threshold.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_find_similar-9" - ] - } - }, - "git_diff_num_deltas": { - "type": "function", - "file": "git2/diff.h", - "line": 1034, - "lineto": 1034, - "args": [ - { - "name": "diff", - "type": "const git_diff *", - "comment": "A git_diff generated by one of the above functions" - } - ], - "argline": "const git_diff *diff", - "sig": "const git_diff *", - "return": { - "type": "size_t", - "comment": " Count of number of deltas in the list" - }, - "description": "

Query how many diff records are there in a diff.

\n", - "comments": "", - "group": "diff", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_diff_num_deltas-29" - ] - } - }, - "git_diff_num_deltas_of_type": { - "type": "function", - "file": "git2/diff.h", - "line": 1047, - "lineto": 1048, - "args": [ - { - "name": "diff", - "type": "const git_diff *", - "comment": "A git_diff generated by one of the above functions" - }, - { - "name": "type", - "type": "git_delta_t", - "comment": "A git_delta_t value to filter the count" - } - ], - "argline": "const git_diff *diff, git_delta_t type", - "sig": "const git_diff *::git_delta_t", - "return": { - "type": "size_t", - "comment": " Count of number of deltas matching delta_t type" - }, - "description": "

Query how many diff deltas are there in a diff filtered by type.

\n", - "comments": "

This works just like git_diff_num_deltas() with an extra parameter that is a git_delta_t and returns just the count of how many deltas match that particular type.

\n", - "group": "diff" - }, - "git_diff_get_delta": { - "type": "function", - "file": "git2/diff.h", - "line": 1067, - "lineto": 1068, - "args": [ - { - "name": "diff", - "type": "const git_diff *", - "comment": "Diff list object" - }, - { - "name": "idx", - "type": "size_t", - "comment": "Index into diff list" - } - ], - "argline": "const git_diff *diff, size_t idx", - "sig": "const git_diff *::size_t", - "return": { - "type": "const git_diff_delta *", - "comment": " Pointer to git_diff_delta (or NULL if `idx` out of range)" - }, - "description": "

Return the diff delta for an entry in the diff list.

\n", - "comments": "

The git_diff_delta pointer points to internal data and you do not have to release it when you are done with it. It will go away when the * git_diff (or any associated git_patch) goes away.

\n\n

Note that the flags on the delta related to whether it has binary content or not may not be set if there are no attributes set for the file and there has been no reason to load the file data at this point. For now, if you need those flags to be up to date, your only option is to either use git_diff_foreach or create a git_patch.

\n", - "group": "diff" - }, - "git_diff_is_sorted_icase": { - "type": "function", - "file": "git2/diff.h", - "line": 1076, - "lineto": 1076, - "args": [ - { - "name": "diff", - "type": "const git_diff *", - "comment": "diff to check" - } - ], - "argline": "const git_diff *diff", - "sig": "const git_diff *", - "return": { - "type": "int", - "comment": " 0 if case sensitive, 1 if case is ignored" - }, - "description": "

Check if deltas are sorted case sensitively or insensitively.

\n", - "comments": "", - "group": "diff" - }, - "git_diff_foreach": { - "type": "function", - "file": "git2/diff.h", - "line": 1104, - "lineto": 1110, - "args": [ - { - "name": "diff", - "type": "git_diff *", - "comment": "A git_diff generated by one of the above functions." - }, - { - "name": "file_cb", - "type": "git_diff_file_cb", - "comment": "Callback function to make per file in the diff." - }, - { - "name": "binary_cb", - "type": "git_diff_binary_cb", - "comment": "Optional callback to make for binary files." - }, - { - "name": "hunk_cb", - "type": "git_diff_hunk_cb", - "comment": "Optional callback to make per hunk of text diff. This\n callback is called to describe a range of lines in the\n diff. It will not be issued for binary files." - }, - { - "name": "line_cb", - "type": "git_diff_line_cb", - "comment": "Optional callback to make per line of diff text. This\n same callback will be made for context lines, added, and\n removed lines, and even for a deleted trailing newline." - }, - { - "name": "payload", - "type": "void *", - "comment": "Reference pointer that will be passed to your callbacks." - } - ], - "argline": "git_diff *diff, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", - "sig": "git_diff *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all deltas in a diff issuing callbacks.

\n", - "comments": "

This will iterate through all of the files described in a diff. You should provide a file callback to learn about each file.

\n\n

The "hunk" and "line" callbacks are optional, and the text diff of the files will only be calculated if they are not NULL. Of course, these callbacks will not be invoked for binary files on the diff or for files whose only changed is a file mode change.

\n\n

Returning a non-zero value from any of the callbacks will terminate the iteration and return the value to the user.

\n", - "group": "diff" - }, - "git_diff_status_char": { - "type": "function", - "file": "git2/diff.h", - "line": 1123, - "lineto": 1123, - "args": [ - { - "name": "status", - "type": "git_delta_t", - "comment": "The git_delta_t value to look up" - } - ], - "argline": "git_delta_t status", - "sig": "git_delta_t", - "return": { - "type": "char", - "comment": " The single character label for that code" - }, - "description": "

Look up the single character abbreviation for a delta status code.

\n", - "comments": "

When you run git diff --name-status it uses single letter codes in the output such as 'A' for added, 'D' for deleted, 'M' for modified, etc. This function converts a git_delta_t value into these letters for your own purposes. GIT_DELTA_UNTRACKED will return a space (i.e. ' ').

\n", - "group": "diff" - }, - "git_diff_print": { - "type": "function", - "file": "git2/diff.h", - "line": 1149, - "lineto": 1153, - "args": [ - { - "name": "diff", - "type": "git_diff *", - "comment": "A git_diff generated by one of the above functions." - }, - { - "name": "format", - "type": "git_diff_format_t", - "comment": "A git_diff_format_t value to pick the text format." - }, - { - "name": "print_cb", - "type": "git_diff_line_cb", - "comment": "Callback to make per line of diff text." - }, - { - "name": "payload", - "type": "void *", - "comment": "Reference pointer that will be passed to your callback." - } - ], - "argline": "git_diff *diff, git_diff_format_t format, git_diff_line_cb print_cb, void *payload", - "sig": "git_diff *::git_diff_format_t::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Iterate over a diff generating formatted text output.

\n", - "comments": "

Returning a non-zero value from the callbacks will terminate the iteration and return the non-zero value to the caller.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_print-10" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_diff_print-30" - ] - } - }, - "git_diff_to_buf": { - "type": "function", - "file": "git2/diff.h", - "line": 1165, - "lineto": 1168, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "A pointer to a user-allocated git_buf that will\n contain the diff text" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "A git_diff generated by one of the above functions." - }, - { - "name": "format", - "type": "git_diff_format_t", - "comment": "A git_diff_format_t value to pick the text format." - } - ], - "argline": "git_buf *out, git_diff *diff, git_diff_format_t format", - "sig": "git_buf *::git_diff *::git_diff_format_t", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Produce the complete formatted text output from a diff into a\n buffer.

\n", - "comments": "", - "group": "diff" - }, - "git_diff_blobs": { - "type": "function", - "file": "git2/diff.h", - "line": 1204, - "lineto": 1214, - "args": [ - { - "name": "old_blob", - "type": "const git_blob *", - "comment": "Blob for old side of diff, or NULL for empty blob" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old blob as if it had this filename; can be NULL" - }, - { - "name": "new_blob", - "type": "const git_blob *", - "comment": "Blob for new side of diff, or NULL for empty blob" - }, - { - "name": "new_as_path", - "type": "const char *", - "comment": "Treat new blob as if it had this filename; can be NULL" - }, - { - "name": "options", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - }, - { - "name": "file_cb", - "type": "git_diff_file_cb", - "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" - }, - { - "name": "binary_cb", - "type": "git_diff_binary_cb", - "comment": "Callback for binary files; can be NULL" - }, - { - "name": "hunk_cb", - "type": "git_diff_hunk_cb", - "comment": "Callback for each hunk in diff; can be NULL" - }, - { - "name": "line_cb", - "type": "git_diff_line_cb", - "comment": "Callback for each line in diff; can be NULL" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to each callback function" - } - ], - "argline": "const git_blob *old_blob, const char *old_as_path, const git_blob *new_blob, const char *new_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", - "sig": "const git_blob *::const char *::const git_blob *::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Directly run a diff on two blobs.

\n", - "comments": "

Compared to a file, a blob lacks some contextual information. As such, the git_diff_file given to the callback will have some fake data; i.e. mode will be 0 and path will be NULL.

\n\n

NULL is allowed for either old_blob or new_blob and will be treated as an empty blob, with the oid set to NULL in the git_diff_file data. Passing NULL for both blobs is a noop; no callbacks will be made at all.

\n\n

We do run a binary content check on the blob content and if either blob looks like binary data, the git_diff_delta binary attribute will be set to 1 and no call to the hunk_cb nor line_cb will be made (unless you pass GIT_DIFF_FORCE_TEXT of course).

\n", - "group": "diff" - }, - "git_diff_blob_to_buffer": { - "type": "function", - "file": "git2/diff.h", - "line": 1241, - "lineto": 1252, - "args": [ - { - "name": "old_blob", - "type": "const git_blob *", - "comment": "Blob for old side of diff, or NULL for empty blob" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old blob as if it had this filename; can be NULL" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "Raw data for new side of diff, or NULL for empty" - }, - { - "name": "buffer_len", - "type": "size_t", - "comment": "Length of raw data for new side of diff" - }, - { - "name": "buffer_as_path", - "type": "const char *", - "comment": "Treat buffer as if it had this filename; can be NULL" - }, - { - "name": "options", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - }, - { - "name": "file_cb", - "type": "git_diff_file_cb", - "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" - }, - { - "name": "binary_cb", - "type": "git_diff_binary_cb", - "comment": "Callback for binary files; can be NULL" - }, - { - "name": "hunk_cb", - "type": "git_diff_hunk_cb", - "comment": "Callback for each hunk in diff; can be NULL" - }, - { - "name": "line_cb", - "type": "git_diff_line_cb", - "comment": "Callback for each line in diff; can be NULL" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to each callback function" - } - ], - "argline": "const git_blob *old_blob, const char *old_as_path, const char *buffer, size_t buffer_len, const char *buffer_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", - "sig": "const git_blob *::const char *::const char *::size_t::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Directly run a diff between a blob and a buffer.

\n", - "comments": "

As with git_diff_blobs, comparing a blob and buffer lacks some context, so the git_diff_file parameters to the callbacks will be faked a la the rules for git_diff_blobs().

\n\n

Passing NULL for old_blob will be treated as an empty blob (i.e. the file_cb will be invoked with GIT_DELTA_ADDED and the diff will be the entire content of the buffer added). Passing NULL to the buffer will do the reverse, with GIT_DELTA_REMOVED and blob content removed.

\n", - "group": "diff" - }, - "git_diff_buffers": { - "type": "function", - "file": "git2/diff.h", - "line": 1275, - "lineto": 1287, - "args": [ - { - "name": "old_buffer", - "type": "const void *", - "comment": "Raw data for old side of diff, or NULL for empty" - }, - { - "name": "old_len", - "type": "size_t", - "comment": "Length of the raw data for old side of the diff" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old buffer as if it had this filename; can be NULL" - }, - { - "name": "new_buffer", - "type": "const void *", - "comment": "Raw data for new side of diff, or NULL for empty" - }, - { - "name": "new_len", - "type": "size_t", - "comment": "Length of raw data for new side of diff" - }, - { - "name": "new_as_path", - "type": "const char *", - "comment": "Treat buffer as if it had this filename; can be NULL" - }, - { - "name": "options", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - }, - { - "name": "file_cb", - "type": "git_diff_file_cb", - "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" - }, - { - "name": "binary_cb", - "type": "git_diff_binary_cb", - "comment": "Callback for binary files; can be NULL" - }, - { - "name": "hunk_cb", - "type": "git_diff_hunk_cb", - "comment": "Callback for each hunk in diff; can be NULL" - }, - { - "name": "line_cb", - "type": "git_diff_line_cb", - "comment": "Callback for each line in diff; can be NULL" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to each callback function" - } - ], - "argline": "const void *old_buffer, size_t old_len, const char *old_as_path, const void *new_buffer, size_t new_len, const char *new_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", - "sig": "const void *::size_t::const char *::const void *::size_t::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Directly run a diff between two buffers.

\n", - "comments": "

Even more than with git_diff_blobs, comparing two buffer lacks context, so the git_diff_file parameters to the callbacks will be faked a la the rules for git_diff_blobs().

\n", - "group": "diff" - }, - "git_diff_from_buffer": { - "type": "function", - "file": "git2/diff.h", - "line": 1327, - "lineto": 1334, - "args": [ - { - "name": "out", - "type": "git_diff **", - "comment": "A pointer to a git_diff pointer that will be allocated." - }, - { - "name": "content", - "type": "const char *", - "comment": "The contents of a patch file" - }, - { - "name": "content_len", - "type": "size_t", - "comment": "The length of the patch file contents" - } - ], - "argline": "git_diff **out, const char *content, size_t content_len", - "sig": "git_diff **::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read the contents of a git patch file into a git_diff object.

\n", - "comments": "

The diff object produced is similar to the one that would be produced if you actually produced it computationally by comparing two trees, however there may be subtle differences. For example, a patch file likely contains abbreviated object IDs, so the object IDs in a git_diff_delta produced by this function will also be abbreviated.

\n\n

This function will only read patch files created by a git implementation, it will not read unified diffs produced by the diff program, nor any other types of patch files.

\n", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_from_buffer-11", - "ex/v1.7.2/diff.html#git_diff_from_buffer-12" - ] - } - }, - "git_diff_get_stats": { - "type": "function", - "file": "git2/diff.h", - "line": 1370, - "lineto": 1372, - "args": [ - { - "name": "out", - "type": "git_diff_stats **", - "comment": "Structure containing the diff statistics." - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "A git_diff generated by one of the above functions." - } - ], - "argline": "git_diff_stats **out, git_diff *diff", - "sig": "git_diff_stats **::git_diff *", - "return": { - "type": "int", - "comment": " 0 on success; non-zero on error" - }, - "description": "

Accumulate diff statistics for all patches.

\n", - "comments": "", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_get_stats-13" - ] - } - }, - "git_diff_stats_files_changed": { - "type": "function", - "file": "git2/diff.h", - "line": 1380, - "lineto": 1381, - "args": [ - { - "name": "stats", - "type": "const git_diff_stats *", - "comment": "A `git_diff_stats` generated by one of the above functions." - } - ], - "argline": "const git_diff_stats *stats", - "sig": "const git_diff_stats *", - "return": { - "type": "size_t", - "comment": " total number of files changed in the diff" - }, - "description": "

Get the total number of files changed in a diff

\n", - "comments": "", - "group": "diff" - }, - "git_diff_stats_insertions": { - "type": "function", - "file": "git2/diff.h", - "line": 1389, - "lineto": 1390, - "args": [ - { - "name": "stats", - "type": "const git_diff_stats *", - "comment": "A `git_diff_stats` generated by one of the above functions." - } - ], - "argline": "const git_diff_stats *stats", - "sig": "const git_diff_stats *", - "return": { - "type": "size_t", - "comment": " total number of insertions in the diff" - }, - "description": "

Get the total number of insertions in a diff

\n", - "comments": "", - "group": "diff" - }, - "git_diff_stats_deletions": { - "type": "function", - "file": "git2/diff.h", - "line": 1398, - "lineto": 1399, - "args": [ - { - "name": "stats", - "type": "const git_diff_stats *", - "comment": "A `git_diff_stats` generated by one of the above functions." - } - ], - "argline": "const git_diff_stats *stats", - "sig": "const git_diff_stats *", - "return": { - "type": "size_t", - "comment": " total number of deletions in the diff" - }, - "description": "

Get the total number of deletions in a diff

\n", - "comments": "", - "group": "diff" - }, - "git_diff_stats_to_buf": { - "type": "function", - "file": "git2/diff.h", - "line": 1410, - "lineto": 1414, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer to store the formatted diff statistics in." - }, - { - "name": "stats", - "type": "const git_diff_stats *", - "comment": "A `git_diff_stats` generated by one of the above functions." - }, - { - "name": "format", - "type": "git_diff_stats_format_t", - "comment": "Formatting option." - }, - { - "name": "width", - "type": "size_t", - "comment": "Target width for output (only affects GIT_DIFF_STATS_FULL)" - } - ], - "argline": "git_buf *out, const git_diff_stats *stats, git_diff_stats_format_t format, size_t width", - "sig": "git_buf *::const git_diff_stats *::git_diff_stats_format_t::size_t", - "return": { - "type": "int", - "comment": " 0 on success; non-zero on error" - }, - "description": "

Print diff statistics to a git_buf.

\n", - "comments": "", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_stats_to_buf-14" - ] - } - }, - "git_diff_stats_free": { - "type": "function", - "file": "git2/diff.h", - "line": 1422, - "lineto": 1422, - "args": [ - { - "name": "stats", - "type": "git_diff_stats *", - "comment": "The previously created statistics object;\n cannot be used after free." - } - ], - "argline": "git_diff_stats *stats", - "sig": "git_diff_stats *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Deallocate a git_diff_stats.

\n", - "comments": "", - "group": "diff", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_diff_stats_free-15" - ] - } - }, - "git_diff_patchid_options_init": { - "type": "function", - "file": "git2/diff.h", - "line": 1448, - "lineto": 1450, - "args": [ - { - "name": "opts", - "type": "git_diff_patchid_options *", - "comment": "The `git_diff_patchid_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_DIFF_PATCHID_OPTIONS_VERSION`." - } - ], - "argline": "git_diff_patchid_options *opts, unsigned int version", - "sig": "git_diff_patchid_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_diff_patchid_options structure

\n", - "comments": "

Initializes a git_diff_patchid_options with default values. Equivalent to creating an instance with GIT_DIFF_PATCHID_OPTIONS_INIT.

\n", - "group": "diff" - }, - "git_diff_patchid": { - "type": "function", - "file": "git2/diff.h", - "line": 1471, - "lineto": 1471, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer where the calculated patch ID should be stored" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "The diff to calculate the ID for" - }, - { - "name": "opts", - "type": "git_diff_patchid_options *", - "comment": "Options for how to calculate the patch ID. This is\n intended for future changes, as currently no options are\n available." - } - ], - "argline": "git_oid *out, git_diff *diff, git_diff_patchid_options *opts", - "sig": "git_oid *::git_diff *::git_diff_patchid_options *", - "return": { - "type": "int", - "comment": " 0 on success, an error code otherwise." - }, - "description": "

Calculate the patch ID for the given patch.

\n", - "comments": "

Calculate a stable patch ID for the given patch by summing the hash of the file diffs, ignoring whitespace and line numbers. This can be used to derive whether two diffs are the same with a high probability.

\n\n

Currently, this function only calculates stable patch IDs, as defined in git-patch-id(1), and should in fact generate the same IDs as the upstream git project does.

\n", - "group": "diff" - }, - "git_error_last": { - "type": "function", - "file": "git2/errors.h", - "line": 128, - "lineto": 128, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "const git_error *", - "comment": " A git_error object." - }, - "description": "

Return the last git_error object that was generated for the\n current thread.

\n", - "comments": "

The default behaviour of this function is to return NULL if no previous error has occurred. However, libgit2's error strings are not cleared aggressively, so a prior (unrelated) error may be returned. This can be avoided by only calling this function if the prior call to a libgit2 API returned an error.

\n", - "group": "error", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_error_last-11", - "ex/v1.7.2/checkout.html#git_error_last-12", - "ex/v1.7.2/checkout.html#git_error_last-13", - "ex/v1.7.2/checkout.html#git_error_last-14" - ], - "commit.c": [ - "ex/v1.7.2/commit.html#git_error_last-2" - ], - "config.c": [ - "ex/v1.7.2/config.html#git_error_last-6", - "ex/v1.7.2/config.html#git_error_last-7", - "ex/v1.7.2/config.html#git_error_last-8" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_error_last-33" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_error_last-8", - "ex/v1.7.2/merge.html#git_error_last-9" - ] - } - }, - "git_error_clear": { - "type": "function", - "file": "git2/errors.h", - "line": 133, - "lineto": 133, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "void", - "comment": null - }, - "description": "

Clear the last library error that occurred for this thread.

\n", - "comments": "", - "group": "error" - }, - "git_error_set": { - "type": "function", - "file": "git2/errors.h", - "line": 153, - "lineto": 154, - "args": [ - { - "name": "error_class", - "type": "int", - "comment": "One of the `git_error_t` enum above describing the\n general subsystem that is responsible for the error." - }, - { - "name": "fmt", - "type": "const char *", - "comment": "The `printf`-style format string; subsequent arguments must\n be the arguments for the format string." - } - ], - "argline": "int error_class, const char *fmt", - "sig": "int::const char *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Set the error message string for this thread, using printf-style\n formatting.

\n", - "comments": "

This function is public so that custom ODB backends and the like can relay an error message through libgit2. Most regular users of libgit2 will never need to call this function -- actually, calling it in most circumstances (for example, calling from within a callback function) will just end up having the value overwritten by libgit2 internals.

\n\n

This error message is stored in thread-local storage and only applies to the particular thread that this libgit2 call is made from.

\n", - "group": "error" - }, - "git_error_set_str": { - "type": "function", - "file": "git2/errors.h", - "line": 166, - "lineto": 166, - "args": [ - { - "name": "error_class", - "type": "int", - "comment": "One of the `git_error_t` enum above describing the\n general subsystem that is responsible for the error." - }, - { - "name": "string", - "type": "const char *", - "comment": "The error message to keep" - } - ], - "argline": "int error_class, const char *string", - "sig": "int::const char *", - "return": { - "type": "int", - "comment": " 0 on success or -1 on failure" - }, - "description": "

Set the error message string for this thread. This function is like\n git_error_set but takes a static string instead of a printf-style\n format.

\n", - "comments": "", - "group": "error" - }, - "git_error_set_oom": { - "type": "function", - "file": "git2/errors.h", - "line": 177, - "lineto": 177, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "void", - "comment": null - }, - "description": "

Set the error message to a special value for memory allocation failure.

\n", - "comments": "

The normal git_error_set_str() function attempts to strdup() the string that is passed in. This is not a good idea when the error in question is a memory allocation failure. That circumstance has a special setter function that sets the error string to a known and statically allocated internal value.

\n", - "group": "error" - }, - "git_filter_list_load": { - "type": "function", - "file": "git2/filter.h", - "line": 129, - "lineto": 135, - "args": [ - { - "name": "filters", - "type": "git_filter_list **", - "comment": "Output newly created git_filter_list (or NULL)" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository object that contains `path`" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "The blob to which the filter will be applied (if known)" - }, - { - "name": "path", - "type": "const char *", - "comment": "Relative path of the file to be filtered" - }, - { - "name": "mode", - "type": "git_filter_mode_t", - "comment": "Filtering direction (WT->ODB or ODB->WT)" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of `git_filter_flag_t` flags" - } - ], - "argline": "git_filter_list **filters, git_repository *repo, git_blob *blob, const char *path, git_filter_mode_t mode, uint32_t flags", - "sig": "git_filter_list **::git_repository *::git_blob *::const char *::git_filter_mode_t::uint32_t", - "return": { - "type": "int", - "comment": " 0 on success (which could still return NULL if no filters are\n needed for the requested file), \n<\n0 on error" - }, - "description": "

Load the filter list for a given path.

\n", - "comments": "

This will return 0 (success) but set the output git_filter_list to NULL if no filters are requested for the given file.

\n", - "group": "filter" - }, - "git_filter_list_load_ext": { - "type": "function", - "file": "git2/filter.h", - "line": 152, - "lineto": 158, - "args": [ - { - "name": "filters", - "type": "git_filter_list **", - "comment": "Output newly created git_filter_list (or NULL)" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository object that contains `path`" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "The blob to which the filter will be applied (if known)" - }, - { - "name": "path", - "type": "const char *", - "comment": "Relative path of the file to be filtered" - }, - { - "name": "mode", - "type": "git_filter_mode_t", - "comment": "Filtering direction (WT->ODB or ODB->WT)" - }, - { - "name": "opts", - "type": "git_filter_options *", - "comment": "The `git_filter_options` to use when loading filters" - } - ], - "argline": "git_filter_list **filters, git_repository *repo, git_blob *blob, const char *path, git_filter_mode_t mode, git_filter_options *opts", - "sig": "git_filter_list **::git_repository *::git_blob *::const char *::git_filter_mode_t::git_filter_options *", - "return": { - "type": "int", - "comment": " 0 on success (which could still return NULL if no filters are\n needed for the requested file), \n<\n0 on error" - }, - "description": "

Load the filter list for a given path.

\n", - "comments": "

This will return 0 (success) but set the output git_filter_list to NULL if no filters are requested for the given file.

\n", - "group": "filter" - }, - "git_filter_list_contains": { - "type": "function", - "file": "git2/filter.h", - "line": 172, - "lineto": 174, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "A loaded git_filter_list (or NULL)" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the filter to query" - } - ], - "argline": "git_filter_list *filters, const char *name", - "sig": "git_filter_list *::const char *", - "return": { - "type": "int", - "comment": " 1 if the filter is in the list, 0 otherwise" - }, - "description": "

Query the filter list to see if a given filter (by name) will run.\n The built-in filters "crlf" and "ident" can be queried, otherwise this\n is the name of the filter specified by the filter attribute.

\n", - "comments": "

This will return 0 if the given filter is not in the list, or 1 if the filter will be applied.

\n", - "group": "filter" - }, - "git_filter_list_apply_to_buffer": { - "type": "function", - "file": "git2/filter.h", - "line": 185, - "lineto": 189, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Buffer to store the result of the filtering" - }, - { - "name": "filters", - "type": "git_filter_list *", - "comment": "A loaded git_filter_list (or NULL)" - }, - { - "name": "in", - "type": "const char *", - "comment": "Buffer containing the data to filter" - }, - { - "name": "in_len", - "type": "size_t", - "comment": "The length of the input buffer" - } - ], - "argline": "git_buf *out, git_filter_list *filters, const char *in, size_t in_len", - "sig": "git_buf *::git_filter_list *::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, an error code otherwise" - }, - "description": "

Apply filter list to a data buffer.

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_apply_to_file": { - "type": "function", - "file": "git2/filter.h", - "line": 201, - "lineto": 205, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer into which to store the filtered file" - }, - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the filtering" - }, - { - "name": "path", - "type": "const char *", - "comment": "the path of the file to filter, a relative path will be\n taken as relative to the workdir" - } - ], - "argline": "git_buf *out, git_filter_list *filters, git_repository *repo, const char *path", - "sig": "git_buf *::git_filter_list *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Apply a filter list to the contents of a file on disk

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_apply_to_blob": { - "type": "function", - "file": "git2/filter.h", - "line": 215, - "lineto": 218, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer into which to store the filtered file" - }, - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "the blob to filter" - } - ], - "argline": "git_buf *out, git_filter_list *filters, git_blob *blob", - "sig": "git_buf *::git_filter_list *::git_blob *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Apply a filter list to the contents of a blob

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_stream_buffer": { - "type": "function", - "file": "git2/filter.h", - "line": 229, - "lineto": 233, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "the buffer to filter" - }, - { - "name": "len", - "type": "size_t", - "comment": "the size of the buffer" - }, - { - "name": "target", - "type": "git_writestream *", - "comment": "the stream into which the data will be written" - } - ], - "argline": "git_filter_list *filters, const char *buffer, size_t len, git_writestream *target", - "sig": "git_filter_list *::const char *::size_t::git_writestream *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Apply a filter list to an arbitrary buffer as a stream

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_stream_file": { - "type": "function", - "file": "git2/filter.h", - "line": 245, - "lineto": 249, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the filtering" - }, - { - "name": "path", - "type": "const char *", - "comment": "the path of the file to filter, a relative path will be\n taken as relative to the workdir" - }, - { - "name": "target", - "type": "git_writestream *", - "comment": "the stream into which the data will be written" - } - ], - "argline": "git_filter_list *filters, git_repository *repo, const char *path, git_writestream *target", - "sig": "git_filter_list *::git_repository *::const char *::git_writestream *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Apply a filter list to a file as a stream

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_stream_blob": { - "type": "function", - "file": "git2/filter.h", - "line": 259, - "lineto": 262, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "the list of filters to apply" - }, - { - "name": "blob", - "type": "git_blob *", - "comment": "the blob to filter" - }, - { - "name": "target", - "type": "git_writestream *", - "comment": "the stream into which the data will be written" - } - ], - "argline": "git_filter_list *filters, git_blob *blob, git_writestream *target", - "sig": "git_filter_list *::git_blob *::git_writestream *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Apply a filter list to a blob as a stream

\n", - "comments": "", - "group": "filter" - }, - "git_filter_list_free": { - "type": "function", - "file": "git2/filter.h", - "line": 269, - "lineto": 269, - "args": [ - { - "name": "filters", - "type": "git_filter_list *", - "comment": "A git_filter_list created by `git_filter_list_load`" - } - ], - "argline": "git_filter_list *filters", - "sig": "git_filter_list *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a git_filter_list

\n", - "comments": "", - "group": "filter" - }, - "git_libgit2_init": { - "type": "function", - "file": "git2/global.h", - "line": 26, - "lineto": 26, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "int", - "comment": " the number of initializations of the library, or an error code." - }, - "description": "

Init the global state

\n", - "comments": "

This function must be called before any other libgit2 function in order to set up global state and threading.

\n\n

This function may be called multiple times - it will return the number of times the initialization has been called (including this one) that have not subsequently been shutdown.

\n", - "group": "libgit2", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_libgit2_init-34" - ] - } - }, - "git_libgit2_shutdown": { - "type": "function", - "file": "git2/global.h", - "line": 39, - "lineto": 39, - "args": [], - "argline": "", - "sig": "", - "return": { - "type": "int", - "comment": " the number of remaining initializations of the library, or an\n error code." - }, - "description": "

Shutdown the global state

\n", - "comments": "

Clean up the global state and threading context after calling it as many times as git_libgit2_init() was called - it will return the number of remainining initializations that have not been shutdown (after this one).

\n", - "group": "libgit2" - }, - "git_graph_ahead_behind": { - "type": "function", - "file": "git2/graph.h", - "line": 38, - "lineto": 38, - "args": [ - { - "name": "ahead", - "type": "size_t *", - "comment": "number of unique from commits in `upstream`" - }, - { - "name": "behind", - "type": "size_t *", - "comment": "number of unique from commits in `local`" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "local", - "type": "const git_oid *", - "comment": "the commit for local" - }, - { - "name": "upstream", - "type": "const git_oid *", - "comment": "the commit for upstream" - } - ], - "argline": "size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream", - "sig": "size_t *::size_t *::git_repository *::const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Count the number of unique commits between two commit objects

\n", - "comments": "

There is no need for branches containing the commits to have any upstream relationship, but it helps to think of one as a branch and the other as its upstream, the ahead and behind values will be what git would report for the branches.

\n", - "group": "graph" - }, - "git_graph_descendant_of": { - "type": "function", - "file": "git2/graph.h", - "line": 53, - "lineto": 56, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "commit", - "type": "const git_oid *", - "comment": "a previously loaded commit" - }, - { - "name": "ancestor", - "type": "const git_oid *", - "comment": "a potential ancestor commit" - } - ], - "argline": "git_repository *repo, const git_oid *commit, const git_oid *ancestor", - "sig": "git_repository *::const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 1 if the given commit is a descendant of the potential ancestor,\n 0 if not, error code otherwise." - }, - "description": "

Determine if a commit is the descendant of another commit.

\n", - "comments": "

Note that a commit is not considered a descendant of itself, in contrast to git merge-base --is-ancestor.

\n", - "group": "graph" - }, - "git_graph_reachable_from_any": { - "type": "function", - "file": "git2/graph.h", - "line": 69, - "lineto": 73, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "commit", - "type": "const git_oid *", - "comment": "a previously loaded commit" - }, - { - "name": "descendant_array", - "type": "const git_oid []", - "comment": "oids of the commits" - }, - { - "name": "length", - "type": "size_t", - "comment": "the number of commits in the provided `descendant_array`" - } - ], - "argline": "git_repository *repo, const git_oid *commit, const git_oid [] descendant_array, size_t length", - "sig": "git_repository *::const git_oid *::const git_oid []::size_t", - "return": { - "type": "int", - "comment": " 1 if the given commit is an ancestor of any of the given potential\n descendants, 0 if not, error code otherwise." - }, - "description": "

Determine if a commit is reachable from any of a list of commits by\n following parent edges.

\n", - "comments": "", - "group": "graph" - }, - "git_ignore_add_rule": { - "type": "function", - "file": "git2/ignore.h", - "line": 37, - "lineto": 39, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository to add ignore rules to." - }, - { - "name": "rules", - "type": "const char *", - "comment": "Text of rules, the contents to add on a .gitignore file.\n It is okay to have multiple rules in the text; if so,\n each rule should be terminated with a newline." - } - ], - "argline": "git_repository *repo, const char *rules", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success" - }, - "description": "

Add ignore rules for a repository.

\n", - "comments": "

Excludesfile rules (i.e. .gitignore rules) are generally read from .gitignore files in the repository tree or from a shared system file only if a "core.excludesfile" config value is set. The library also keeps a set of per-repository internal ignores that can be configured in-memory and will not persist. This function allows you to add to that internal rules list.

\n\n

Example usage:

\n\n
 error = git_ignore_add_rule(myrepo, "*.c/ with space");\n
\n\n

This would add three rules to the ignores.

\n", - "group": "ignore" - }, - "git_ignore_clear_internal_rules": { - "type": "function", - "file": "git2/ignore.h", - "line": 52, - "lineto": 53, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository to remove ignore rules from." - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 on success" - }, - "description": "

Clear ignore rules that were explicitly added.

\n", - "comments": "

Resets to the default internal ignore rules. This will not turn off rules in .gitignore files that actually exist in the filesystem.

\n\n

The default internal ignores ignore ".", ".." and ".git" entries.

\n", - "group": "ignore" - }, - "git_ignore_path_is_ignored": { - "type": "function", - "file": "git2/ignore.h", - "line": 71, - "lineto": 74, - "args": [ - { - "name": "ignored", - "type": "int *", - "comment": "boolean returning 0 if the file is not ignored, 1 if it is" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "a repository object" - }, - { - "name": "path", - "type": "const char *", - "comment": "the file to check ignores for, relative to the repo's workdir." - } - ], - "argline": "int *ignored, git_repository *repo, const char *path", - "sig": "int *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 if ignore rules could be processed for the file (regardless\n of whether it exists or not), or an error \n<\n 0 if they could not." - }, - "description": "

Test if the ignore rules apply to a given path.

\n", - "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git check-ignore --no-index" on the given file, would it be shown or not?

\n", - "group": "ignore" - }, - "git_index_free": { - "type": "function", - "file": "git2/index.h", - "line": 216, - "lineto": 216, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an existing index object.

\n", - "comments": "", - "group": "index", - "examples": { - "add.c": [ - "ex/v1.7.2/add.html#git_index_free-1" - ], - "commit.c": [ - "ex/v1.7.2/commit.html#git_index_free-3" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_index_free-35" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_index_free-2" - ], - "ls-files.c": [ - "ex/v1.7.2/ls-files.html#git_index_free-1" - ] - } - }, - "git_index_owner": { - "type": "function", - "file": "git2/index.h", - "line": 224, - "lineto": 224, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "The index" - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "git_repository *", - "comment": " A pointer to the repository" - }, - "description": "

Get the repository this index relates to

\n", - "comments": "", - "group": "index" - }, - "git_index_caps": { - "type": "function", - "file": "git2/index.h", - "line": 232, - "lineto": 232, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "An existing index object" - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "int", - "comment": " A combination of GIT_INDEX_CAPABILITY values" - }, - "description": "

Read index capabilities flags.

\n", - "comments": "", - "group": "index" - }, - "git_index_set_caps": { - "type": "function", - "file": "git2/index.h", - "line": 245, - "lineto": 245, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - }, - { - "name": "caps", - "type": "int", - "comment": "A combination of GIT_INDEX_CAPABILITY values" - } - ], - "argline": "git_index *index, int caps", - "sig": "git_index *::int", - "return": { - "type": "int", - "comment": " 0 on success, -1 on failure" - }, - "description": "

Set index capabilities flags.

\n", - "comments": "

If you pass GIT_INDEX_CAPABILITY_FROM_OWNER for the caps, then capabilities will be read from the config of the owner object, looking at core.ignorecase, core.filemode, core.symlinks.

\n", - "group": "index" - }, - "git_index_version": { - "type": "function", - "file": "git2/index.h", - "line": 257, - "lineto": 257, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "unsigned int", - "comment": " the index version" - }, - "description": "

Get index on-disk version.

\n", - "comments": "

Valid return values are 2, 3, or 4. If 3 is returned, an index with version 2 may be written instead, if the extension data in version 3 is not necessary.

\n", - "group": "index" - }, - "git_index_set_version": { - "type": "function", - "file": "git2/index.h", - "line": 270, - "lineto": 270, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The new version number" - } - ], - "argline": "git_index *index, unsigned int version", - "sig": "git_index *::unsigned int", - "return": { - "type": "int", - "comment": " 0 on success, -1 on failure" - }, - "description": "

Set index on-disk version.

\n", - "comments": "

Valid values are 2, 3, or 4. If 2 is given, git_index_write may write an index with version 3 instead, if necessary to accurately represent the index.

\n", - "group": "index" - }, - "git_index_read": { - "type": "function", - "file": "git2/index.h", - "line": 289, - "lineto": 289, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "force", - "type": "int", - "comment": "if true, always reload, vs. only read if file has changed" - } - ], - "argline": "git_index *index, int force", - "sig": "git_index *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Update the contents of an existing index object in memory by reading\n from the hard disk.

\n", - "comments": "

If force is true, this performs a "hard" read that discards in-memory changes and always reloads the on-disk index data. If there is no on-disk version, the index will be cleared.

\n\n

If force is false, this does a "soft" read that reloads the index data from disk only if it has changed since the last time it was loaded. Purely in-memory index data will be untouched. Be aware: if there are changes on disk, unwritten in-memory changes are discarded.

\n", - "group": "index" - }, - "git_index_write": { - "type": "function", - "file": "git2/index.h", - "line": 298, - "lineto": 298, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write an existing index object from memory back to disk\n using an atomic file lock.

\n", - "comments": "", - "group": "index", - "examples": { - "add.c": [ - "ex/v1.7.2/add.html#git_index_write-2" - ], - "commit.c": [ - "ex/v1.7.2/commit.html#git_index_write-4" - ] - } - }, - "git_index_path": { - "type": "function", - "file": "git2/index.h", - "line": 306, - "lineto": 306, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "an existing index object" - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "const char *", - "comment": " path to index file or NULL for in-memory index" - }, - "description": "

Get the full path to the index file on disk.

\n", - "comments": "", - "group": "index" - }, - "git_index_checksum": { - "type": "function", - "file": "git2/index.h", - "line": 320, - "lineto": 320, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "const git_oid *", - "comment": " a pointer to the checksum of the index" - }, - "description": "

Get the checksum of the index

\n", - "comments": "

This checksum is the SHA-1 hash over the index file (except the last 20 bytes which are the checksum itself). In cases where the index does not exist on-disk, it will be zeroed out.

\n", - "group": "index" - }, - "git_index_read_tree": { - "type": "function", - "file": "git2/index.h", - "line": 332, - "lineto": 332, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": "tree to read" - } - ], - "argline": "git_index *index, const git_tree *tree", - "sig": "git_index *::const git_tree *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read a tree into the index file with stats

\n", - "comments": "

The current index contents will be replaced by the specified tree.

\n", - "group": "index" - }, - "git_index_write_tree": { - "type": "function", - "file": "git2/index.h", - "line": 353, - "lineto": 353, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the written tree" - }, - { - "name": "index", - "type": "git_index *", - "comment": "Index to write" - } - ], - "argline": "git_oid *out, git_index *index", - "sig": "git_oid *::git_index *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNMERGED when the index is not clean\n or an error code" - }, - "description": "

Write the index as a tree

\n", - "comments": "

This method will scan the index and write a representation of its current state back to disk; it recursively creates tree objects for each of the subtrees stored in the index, but only returns the OID of the root tree. This is the OID that can be used e.g. to create a commit.

\n\n

The index instance cannot be bare, and needs to be associated to an existing repository.

\n\n

The index must not contain any file in conflict.

\n", - "group": "index", - "examples": { - "commit.c": [ - "ex/v1.7.2/commit.html#git_index_write_tree-5" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_index_write_tree-3" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_index_write_tree-10" - ] - } - }, - "git_index_write_tree_to": { - "type": "function", - "file": "git2/index.h", - "line": 370, - "lineto": 370, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer where to store OID of the written tree" - }, - { - "name": "index", - "type": "git_index *", - "comment": "Index to write" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to write the tree" - } - ], - "argline": "git_oid *out, git_index *index, git_repository *repo", - "sig": "git_oid *::git_index *::git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNMERGED when the index is not clean\n or an error code" - }, - "description": "

Write the index as a tree to the given repository

\n", - "comments": "

This method will do the same as git_index_write_tree, but letting the user choose the repository where the tree will be written.

\n\n

The index must not contain any file in conflict.

\n", - "group": "index" - }, - "git_index_entrycount": { - "type": "function", - "file": "git2/index.h", - "line": 389, - "lineto": 389, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "an existing index object" - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "size_t", - "comment": " integer of count of current entries" - }, - "description": "

Get the count of entries currently in the index

\n", - "comments": "", - "group": "index", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_index_entrycount-36" - ], - "ls-files.c": [ - "ex/v1.7.2/ls-files.html#git_index_entrycount-2" - ] - } - }, - "git_index_clear": { - "type": "function", - "file": "git2/index.h", - "line": 400, - "lineto": 400, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "int", - "comment": " 0 on success, error code \n<\n 0 on failure" - }, - "description": "

Clear the contents (all the entries) of an index object.

\n", - "comments": "

This clears the index object in memory; changes must be explicitly written to disk for them to take effect persistently.

\n", - "group": "index" - }, - "git_index_get_byindex": { - "type": "function", - "file": "git2/index.h", - "line": 413, - "lineto": 414, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "n", - "type": "size_t", - "comment": "the position of the entry" - } - ], - "argline": "git_index *index, size_t n", - "sig": "git_index *::size_t", - "return": { - "type": "const git_index_entry *", - "comment": " a pointer to the entry; NULL if out of bounds" - }, - "description": "

Get a pointer to one of the entries in the index

\n", - "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", - "group": "index", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_index_get_byindex-37" - ], - "ls-files.c": [ - "ex/v1.7.2/ls-files.html#git_index_get_byindex-3" - ] - } - }, - "git_index_get_bypath": { - "type": "function", - "file": "git2/index.h", - "line": 428, - "lineto": 429, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to search" - }, - { - "name": "stage", - "type": "int", - "comment": "stage to search" - } - ], - "argline": "git_index *index, const char *path, int stage", - "sig": "git_index *::const char *::int", - "return": { - "type": "const git_index_entry *", - "comment": " a pointer to the entry; NULL if it was not found" - }, - "description": "

Get a pointer to one of the entries in the index

\n", - "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", - "group": "index", - "examples": { - "ls-files.c": [ - "ex/v1.7.2/ls-files.html#git_index_get_bypath-4" - ] - } - }, - "git_index_remove": { - "type": "function", - "file": "git2/index.h", - "line": 439, - "lineto": 439, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to search" - }, - { - "name": "stage", - "type": "int", - "comment": "stage to search" - } - ], - "argline": "git_index *index, const char *path, int stage", - "sig": "git_index *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove an entry from the index

\n", - "comments": "", - "group": "index" - }, - "git_index_remove_directory": { - "type": "function", - "file": "git2/index.h", - "line": 449, - "lineto": 450, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "dir", - "type": "const char *", - "comment": "container directory path" - }, - { - "name": "stage", - "type": "int", - "comment": "stage to search" - } - ], - "argline": "git_index *index, const char *dir, int stage", - "sig": "git_index *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove all entries from the index under a given directory

\n", - "comments": "", - "group": "index" - }, - "git_index_add": { - "type": "function", - "file": "git2/index.h", - "line": 466, - "lineto": 466, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "source_entry", - "type": "const git_index_entry *", - "comment": "new entry object" - } - ], - "argline": "git_index *index, const git_index_entry *source_entry", - "sig": "git_index *::const git_index_entry *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update an index entry from an in-memory struct

\n", - "comments": "

If a previous index entry exists that has the same path and stage as the given 'source_entry', it will be replaced. Otherwise, the 'source_entry' will be added.

\n\n

A full copy (including the 'path' string) of the given 'source_entry' will be inserted on the index.

\n", - "group": "index" - }, - "git_index_entry_stage": { - "type": "function", - "file": "git2/index.h", - "line": 478, - "lineto": 478, - "args": [ - { - "name": "entry", - "type": "const git_index_entry *", - "comment": "The entry" - } - ], - "argline": "const git_index_entry *entry", - "sig": "const git_index_entry *", - "return": { - "type": "int", - "comment": " the stage number" - }, - "description": "

Return the stage number from a git index entry

\n", - "comments": "

This entry is calculated from the entry's flag attribute like this:

\n\n
(entry->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT\n
\n", - "group": "index" - }, - "git_index_entry_is_conflict": { - "type": "function", - "file": "git2/index.h", - "line": 487, - "lineto": 487, - "args": [ - { - "name": "entry", - "type": "const git_index_entry *", - "comment": "The entry" - } - ], - "argline": "const git_index_entry *entry", - "sig": "const git_index_entry *", - "return": { - "type": "int", - "comment": " 1 if the entry is a conflict entry, 0 otherwise" - }, - "description": "

Return whether the given index entry is a conflict (has a high stage\n entry). This is simply shorthand for git_index_entry_stage > 0.

\n", - "comments": "", - "group": "index" - }, - "git_index_iterator_new": { - "type": "function", - "file": "git2/index.h", - "line": 508, - "lineto": 510, - "args": [ - { - "name": "iterator_out", - "type": "git_index_iterator **", - "comment": "The newly created iterator" - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to iterate" - } - ], - "argline": "git_index_iterator **iterator_out, git_index *index", - "sig": "git_index_iterator **::git_index *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Create an iterator that will return every entry contained in the\n index at the time of creation. Entries are returned in order,\n sorted by path. This iterator is backed by a snapshot that allows\n callers to modify the index while iterating without affecting the\n iterator.

\n", - "comments": "", - "group": "index" - }, - "git_index_iterator_next": { - "type": "function", - "file": "git2/index.h", - "line": 519, - "lineto": 521, - "args": [ - { - "name": "out", - "type": "const git_index_entry **", - "comment": "Pointer to store the index entry in" - }, - { - "name": "iterator", - "type": "git_index_iterator *", - "comment": "The iterator" - } - ], - "argline": "const git_index_entry **out, git_index_iterator *iterator", - "sig": "const git_index_entry **::git_index_iterator *", - "return": { - "type": "int", - "comment": " 0, GIT_ITEROVER on iteration completion or an error code" - }, - "description": "

Return the next index entry in-order from the iterator.

\n", - "comments": "", - "group": "index" - }, - "git_index_iterator_free": { - "type": "function", - "file": "git2/index.h", - "line": 528, - "lineto": 528, - "args": [ - { - "name": "iterator", - "type": "git_index_iterator *", - "comment": "The iterator to free" - } - ], - "argline": "git_index_iterator *iterator", - "sig": "git_index_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the index iterator

\n", - "comments": "", - "group": "index" - }, - "git_index_add_bypath": { - "type": "function", - "file": "git2/index.h", - "line": 559, - "lineto": 559, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "filename to add" - } - ], - "argline": "git_index *index, const char *path", - "sig": "git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update an index entry from a file on disk

\n", - "comments": "

The file path must be relative to the repository's working folder and must be readable.

\n\n

This method will fail in bare index instances.

\n\n

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", - "group": "index" - }, - "git_index_add_from_buffer": { - "type": "function", - "file": "git2/index.h", - "line": 587, - "lineto": 590, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "entry", - "type": "const git_index_entry *", - "comment": "filename to add" - }, - { - "name": "buffer", - "type": "const void *", - "comment": "data to be written into the blob" - }, - { - "name": "len", - "type": "size_t", - "comment": "length of the data" - } - ], - "argline": "git_index *index, const git_index_entry *entry, const void *buffer, size_t len", - "sig": "git_index *::const git_index_entry *::const void *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update an index entry from a buffer in memory

\n", - "comments": "

This method will create a blob in the repository that owns the index and then add the index entry to the index. The path of the entry represents the position of the blob relative to the repository's root folder.

\n\n

If a previous index entry exists that has the same path as the given 'entry', it will be replaced. Otherwise, the 'entry' will be added.

\n\n

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", - "group": "index" - }, - "git_index_remove_bypath": { - "type": "function", - "file": "git2/index.h", - "line": 606, - "lineto": 606, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "filename to remove" - } - ], - "argline": "git_index *index, const char *path", - "sig": "git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove an index entry corresponding to a file on disk

\n", - "comments": "

The file path must be relative to the repository's working folder. It may exist.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", - "group": "index" - }, - "git_index_add_all": { - "type": "function", - "file": "git2/index.h", - "line": 654, - "lineto": 659, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "pathspec", - "type": "const git_strarray *", - "comment": "array of path patterns" - }, - { - "name": "flags", - "type": "unsigned int", - "comment": "combination of git_index_add_option_t flags" - }, - { - "name": "callback", - "type": "git_index_matched_path_cb", - "comment": "notification callback for each added/updated path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." - }, - { - "name": "payload", - "type": "void *", - "comment": "payload passed through to callback function" - } - ], - "argline": "git_index *index, const git_strarray *pathspec, unsigned int flags, git_index_matched_path_cb callback, void *payload", - "sig": "git_index *::const git_strarray *::unsigned int::git_index_matched_path_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, negative callback return value, or error code" - }, - "description": "

Add or update index entries matching files in the working directory.

\n", - "comments": "

This method will fail in bare index instances.

\n\n

The pathspec is a list of file names or shell glob patterns that will be matched against files in the repository's working directory. Each file that matches will be added to the index (either updating an existing entry or adding a new entry). You can disable glob expansion and force exact matching with the GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH flag.

\n\n

Files that are ignored will be skipped (unlike git_index_add_bypath). If a file is already tracked in the index, then it will be updated even if it is ignored. Pass the GIT_INDEX_ADD_FORCE flag to skip the checking of ignore rules.

\n\n

To emulate git add -A and generate an error if the pathspec contains the exact path of an ignored file (when not using FORCE), add the GIT_INDEX_ADD_CHECK_PATHSPEC flag. This checks that each entry in the pathspec that is an exact match to a filename on disk is either not ignored or already in the index. If this check fails, the function will return GIT_EINVALIDSPEC.

\n\n

To emulate git add -A with the "dry-run" option, just use a callback function that always returns a positive value. See below for details.

\n\n

If any files are currently the result of a merge conflict, those files will no longer be marked as conflicting. The data about the conflicts will be moved to the "resolve undo" (REUC) section.

\n\n

If you provide a callback function, it will be invoked on each matching item in the working directory immediately before it is added to / updated in the index. Returning zero will add the item to the index, greater than zero will skip the item, and less than zero will abort the scan and return that value to the caller.

\n", - "group": "index", - "examples": { - "add.c": [ - "ex/v1.7.2/add.html#git_index_add_all-3" - ] - } - }, - "git_index_remove_all": { - "type": "function", - "file": "git2/index.h", - "line": 676, - "lineto": 680, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - }, - { - "name": "pathspec", - "type": "const git_strarray *", - "comment": "array of path patterns" - }, - { - "name": "callback", - "type": "git_index_matched_path_cb", - "comment": "notification callback for each removed path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." - }, - { - "name": "payload", - "type": "void *", - "comment": "payload passed through to callback function" - } - ], - "argline": "git_index *index, const git_strarray *pathspec, git_index_matched_path_cb callback, void *payload", - "sig": "git_index *::const git_strarray *::git_index_matched_path_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, negative callback return value, or error code" - }, - "description": "

Remove all matching index entries.

\n", - "comments": "

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is removed. Return 0 to remove the item, > 0 to skip the item, and < 0 to abort the scan.

\n", - "group": "index" - }, - "git_index_update_all": { - "type": "function", - "file": "git2/index.h", - "line": 705, - "lineto": 709, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "An existing index object" - }, - { - "name": "pathspec", - "type": "const git_strarray *", - "comment": "array of path patterns" - }, - { - "name": "callback", - "type": "git_index_matched_path_cb", - "comment": "notification callback for each updated path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." - }, - { - "name": "payload", - "type": "void *", - "comment": "payload passed through to callback function" - } - ], - "argline": "git_index *index, const git_strarray *pathspec, git_index_matched_path_cb callback, void *payload", - "sig": "git_index *::const git_strarray *::git_index_matched_path_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, negative callback return value, or error code" - }, - "description": "

Update all index entries to match the working directory

\n", - "comments": "

This method will fail in bare index instances.

\n\n

This scans the existing index entries and synchronizes them with the working directory, deleting them if the corresponding working directory file no longer exists otherwise updating the information (including adding the latest version of file to the ODB if needed).

\n\n

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is updated (either refreshed or removed depending on working directory state). Return 0 to proceed with updating the item, > 0 to skip the item, and < 0 to abort the scan.

\n", - "group": "index", - "examples": { - "add.c": [ - "ex/v1.7.2/add.html#git_index_update_all-4" - ] - } - }, - "git_index_find": { - "type": "function", - "file": "git2/index.h", - "line": 720, - "lineto": 720, - "args": [ - { - "name": "at_pos", - "type": "size_t *", - "comment": "the address to which the position of the index entry is written (optional)" - }, - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to search" - } - ], - "argline": "size_t *at_pos, git_index *index, const char *path", - "sig": "size_t *::git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Find the first position of any entries which point to given\n path in the Git index.

\n", - "comments": "", - "group": "index" - }, - "git_index_find_prefix": { - "type": "function", - "file": "git2/index.h", - "line": 731, - "lineto": 731, - "args": [ - { - "name": "at_pos", - "type": "size_t *", - "comment": "the address to which the position of the index entry is written (optional)" - }, - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "prefix", - "type": "const char *", - "comment": "the prefix to search for" - } - ], - "argline": "size_t *at_pos, git_index *index, const char *prefix", - "sig": "size_t *::git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Find the first position of any entries matching a prefix. To find the first position\n of a path inside a given folder, suffix the prefix with a '/'.

\n", - "comments": "", - "group": "index" - }, - "git_index_conflict_add": { - "type": "function", - "file": "git2/index.h", - "line": 756, - "lineto": 760, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "ancestor_entry", - "type": "const git_index_entry *", - "comment": "the entry data for the ancestor of the conflict" - }, - { - "name": "our_entry", - "type": "const git_index_entry *", - "comment": "the entry data for our side of the merge conflict" - }, - { - "name": "their_entry", - "type": "const git_index_entry *", - "comment": "the entry data for their side of the merge conflict" - } - ], - "argline": "git_index *index, const git_index_entry *ancestor_entry, const git_index_entry *our_entry, const git_index_entry *their_entry", - "sig": "git_index *::const git_index_entry *::const git_index_entry *::const git_index_entry *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update index entries to represent a conflict. Any staged\n entries that exist at the given paths will be removed.

\n", - "comments": "

The entries are the entries from the tree included in the merge. Any entry may be null to indicate that that file was not present in the trees during the merge. For example, ancestor_entry may be NULL to indicate that a file was added in both branches and must be resolved.

\n", - "group": "index" - }, - "git_index_conflict_get": { - "type": "function", - "file": "git2/index.h", - "line": 776, - "lineto": 781, - "args": [ - { - "name": "ancestor_out", - "type": "const git_index_entry **", - "comment": "Pointer to store the ancestor entry" - }, - { - "name": "our_out", - "type": "const git_index_entry **", - "comment": "Pointer to store the our entry" - }, - { - "name": "their_out", - "type": "const git_index_entry **", - "comment": "Pointer to store the their entry" - }, - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to search" - } - ], - "argline": "const git_index_entry **ancestor_out, const git_index_entry **our_out, const git_index_entry **their_out, git_index *index, const char *path", - "sig": "const git_index_entry **::const git_index_entry **::const git_index_entry **::git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the index entries that represent a conflict of a single file.

\n", - "comments": "

The entries are not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", - "group": "index" - }, - "git_index_conflict_remove": { - "type": "function", - "file": "git2/index.h", - "line": 790, - "lineto": 790, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to remove conflicts for" - } - ], - "argline": "git_index *index, const char *path", - "sig": "git_index *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Removes the index entries that represent a conflict of a single file.

\n", - "comments": "", - "group": "index" - }, - "git_index_conflict_cleanup": { - "type": "function", - "file": "git2/index.h", - "line": 798, - "lineto": 798, - "args": [ - { - "name": "index", - "type": "git_index *", - "comment": "an existing index object" - } - ], - "argline": "git_index *index", - "sig": "git_index *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove all conflicts in the index (entries with a stage greater than 0).

\n", - "comments": "", - "group": "index" - }, - "git_index_has_conflicts": { - "type": "function", - "file": "git2/index.h", - "line": 806, - "lineto": 806, - "args": [ - { - "name": "index", - "type": "const git_index *", - "comment": "An existing index object." - } - ], - "argline": "const git_index *index", - "sig": "const git_index *", - "return": { - "type": "int", - "comment": " 1 if at least one conflict is found, 0 otherwise." - }, - "description": "

Determine if the index contains entries representing file conflicts.

\n", - "comments": "", - "group": "index", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_index_has_conflicts-11" - ] - } - }, - "git_index_conflict_iterator_new": { - "type": "function", - "file": "git2/index.h", - "line": 817, - "lineto": 819, - "args": [ - { - "name": "iterator_out", - "type": "git_index_conflict_iterator **", - "comment": "The newly created conflict iterator" - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to scan" - } - ], - "argline": "git_index_conflict_iterator **iterator_out, git_index *index", - "sig": "git_index_conflict_iterator **::git_index *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an iterator for the conflicts in the index.

\n", - "comments": "

The index must not be modified while iterating; the results are undefined.

\n", - "group": "index", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_index_conflict_iterator_new-12" - ] - } - }, - "git_index_conflict_next": { - "type": "function", - "file": "git2/index.h", - "line": 832, - "lineto": 836, - "args": [ - { - "name": "ancestor_out", - "type": "const git_index_entry **", - "comment": "Pointer to store the ancestor side of the conflict" - }, - { - "name": "our_out", - "type": "const git_index_entry **", - "comment": "Pointer to store our side of the conflict" - }, - { - "name": "their_out", - "type": "const git_index_entry **", - "comment": "Pointer to store their side of the conflict" - }, - { - "name": "iterator", - "type": "git_index_conflict_iterator *", - "comment": "The conflict iterator." - } - ], - "argline": "const git_index_entry **ancestor_out, const git_index_entry **our_out, const git_index_entry **their_out, git_index_conflict_iterator *iterator", - "sig": "const git_index_entry **::const git_index_entry **::const git_index_entry **::git_index_conflict_iterator *", - "return": { - "type": "int", - "comment": " 0 (no error), GIT_ITEROVER (iteration is done) or an error code\n (negative value)" - }, - "description": "

Returns the current conflict (ancestor, ours and theirs entry) and\n advance the iterator internally to the next value.

\n", - "comments": "", - "group": "index", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_index_conflict_next-13" - ] - } - }, - "git_index_conflict_iterator_free": { - "type": "function", - "file": "git2/index.h", - "line": 843, - "lineto": 844, - "args": [ - { - "name": "iterator", - "type": "git_index_conflict_iterator *", - "comment": "pointer to the iterator" - } - ], - "argline": "git_index_conflict_iterator *iterator", - "sig": "git_index_conflict_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees a git_index_conflict_iterator.

\n", - "comments": "", - "group": "index", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_index_conflict_iterator_free-14" - ] - } - }, - "git_indexer_options_init": { - "type": "function", - "file": "git2/indexer.h", - "line": 99, - "lineto": 101, - "args": [ - { - "name": "opts", - "type": "git_indexer_options *", - "comment": "the `git_indexer_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "Version of struct; pass `GIT_INDEXER_OPTIONS_VERSION`" - } - ], - "argline": "git_indexer_options *opts, unsigned int version", - "sig": "git_indexer_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initializes a git_indexer_options with default values. Equivalent to\n creating an instance with GIT_INDEXER_OPTIONS_INIT.

\n", - "comments": "", - "group": "indexer" - }, - "git_indexer_new": { - "type": "function", - "file": "git2/indexer.h", - "line": 131, - "lineto": 136, - "args": [ - { - "name": "out", - "type": "git_indexer **", - "comment": "where to store the indexer instance" - }, - { - "name": "path", - "type": "const char *", - "comment": "to the directory where the packfile should be stored" - }, - { - "name": "mode", - "type": "unsigned int", - "comment": "permissions to use creating packfile or 0 for defaults" - }, - { - "name": "odb", - "type": "git_odb *", - "comment": "object database from which to read base objects when\n fixing thin packs. Pass NULL if no thin pack is expected (an error\n will be returned if there are bases missing)" - }, - { - "name": "opts", - "type": "git_indexer_options *", - "comment": "Optional structure containing additional options. See\n `git_indexer_options` above." - } - ], - "argline": "git_indexer **out, const char *path, unsigned int mode, git_odb *odb, git_indexer_options *opts", - "sig": "git_indexer **::const char *::unsigned int::git_odb *::git_indexer_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Create a new indexer instance

\n", - "comments": "", - "group": "indexer" - }, - "git_indexer_append": { - "type": "function", - "file": "git2/indexer.h", - "line": 148, - "lineto": 148, - "args": [ - { - "name": "idx", - "type": "git_indexer *", - "comment": "the indexer" - }, - { - "name": "data", - "type": "const void *", - "comment": "the data to add" - }, - { - "name": "size", - "type": "size_t", - "comment": "the size of the data in bytes" - }, - { - "name": "stats", - "type": "git_indexer_progress *", - "comment": "stat storage" - } - ], - "argline": "git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats", - "sig": "git_indexer *::const void *::size_t::git_indexer_progress *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Add data to the indexer

\n", - "comments": "", - "group": "indexer" - }, - "git_indexer_commit": { - "type": "function", - "file": "git2/indexer.h", - "line": 159, - "lineto": 159, - "args": [ - { - "name": "idx", - "type": "git_indexer *", - "comment": "the indexer" - }, - { - "name": "stats", - "type": "git_indexer_progress *", - "comment": "Stat storage." - } - ], - "argline": "git_indexer *idx, git_indexer_progress *stats", - "sig": "git_indexer *::git_indexer_progress *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Finalize the pack and index

\n", - "comments": "

Resolve any pending deltas and write out the index file

\n", - "group": "indexer" - }, - "git_indexer_hash": { - "type": "function", - "file": "git2/indexer.h", - "line": 172, - "lineto": 172, - "args": [ - { - "name": "idx", - "type": "const git_indexer *", - "comment": "the indexer instance" - } - ], - "argline": "const git_indexer *idx", - "sig": "const git_indexer *", - "return": { - "type": "const git_oid *", - "comment": " the packfile's hash" - }, - "description": "

Get the packfile's hash

\n", - "comments": "

A packfile's name is derived from the sorted hashing of all object names. This is only correct after the index has been finalized.

\n", - "group": "indexer" - }, - "git_indexer_name": { - "type": "function", - "file": "git2/indexer.h", - "line": 184, - "lineto": 184, - "args": [ - { - "name": "idx", - "type": "const git_indexer *", - "comment": "the indexer instance" - } - ], - "argline": "const git_indexer *idx", - "sig": "const git_indexer *", - "return": { - "type": "const char *", - "comment": " a NUL terminated string for the packfile name" - }, - "description": "

Get the unique name for the resulting packfile.

\n", - "comments": "

The packfile's name is derived from the packfile's content. This is only correct after the index has been finalized.

\n", - "group": "indexer" - }, - "git_indexer_free": { - "type": "function", - "file": "git2/indexer.h", - "line": 191, - "lineto": 191, - "args": [ - { - "name": "idx", - "type": "git_indexer *", - "comment": "the indexer to free" - } - ], - "argline": "git_indexer *idx", - "sig": "git_indexer *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the indexer and its resources

\n", - "comments": "", - "group": "indexer" - }, - "git_mailmap_new": { - "type": "function", - "file": "git2/mailmap.h", - "line": 32, - "lineto": 32, - "args": [ - { - "name": "out", - "type": "git_mailmap **", - "comment": "pointer to store the new mailmap" - } - ], - "argline": "git_mailmap **out", - "sig": "git_mailmap **", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Allocate a new mailmap object.

\n", - "comments": "

This object is empty, so you'll have to add a mailmap file before you can do anything with it. The mailmap must be freed with 'git_mailmap_free'.

\n", - "group": "mailmap" - }, - "git_mailmap_free": { - "type": "function", - "file": "git2/mailmap.h", - "line": 39, - "lineto": 39, - "args": [ - { - "name": "mm", - "type": "git_mailmap *", - "comment": "the mailmap to free" - } - ], - "argline": "git_mailmap *mm", - "sig": "git_mailmap *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the mailmap and its associated memory.

\n", - "comments": "", - "group": "mailmap" - }, - "git_mailmap_add_entry": { - "type": "function", - "file": "git2/mailmap.h", - "line": 52, - "lineto": 54, - "args": [ - { - "name": "mm", - "type": "git_mailmap *", - "comment": "mailmap to add the entry to" - }, - { - "name": "real_name", - "type": "const char *", - "comment": "the real name to use, or NULL" - }, - { - "name": "real_email", - "type": "const char *", - "comment": "the real email to use, or NULL" - }, - { - "name": "replace_name", - "type": "const char *", - "comment": "the name to replace, or NULL" - }, - { - "name": "replace_email", - "type": "const char *", - "comment": "the email to replace" - } - ], - "argline": "git_mailmap *mm, const char *real_name, const char *real_email, const char *replace_name, const char *replace_email", - "sig": "git_mailmap *::const char *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Add a single entry to the given mailmap object. If the entry already exists,\n it will be replaced with the new entry.

\n", - "comments": "", - "group": "mailmap" - }, - "git_mailmap_from_buffer": { - "type": "function", - "file": "git2/mailmap.h", - "line": 64, - "lineto": 65, - "args": [ - { - "name": "out", - "type": "git_mailmap **", - "comment": "pointer to store the new mailmap" - }, - { - "name": "buf", - "type": "const char *", - "comment": "buffer to parse the mailmap from" - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the input buffer" - } - ], - "argline": "git_mailmap **out, const char *buf, size_t len", - "sig": "git_mailmap **::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Create a new mailmap instance containing a single mailmap file

\n", - "comments": "", - "group": "mailmap" - }, - "git_mailmap_from_repository": { - "type": "function", - "file": "git2/mailmap.h", - "line": 81, - "lineto": 82, - "args": [ - { - "name": "out", - "type": "git_mailmap **", - "comment": "pointer to store the new mailmap" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository to load mailmap information from" - } - ], - "argline": "git_mailmap **out, git_repository *repo", - "sig": "git_mailmap **::git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Create a new mailmap instance from a repository, loading mailmap files based\n on the repository's configuration.

\n", - "comments": "

Mailmaps are loaded in the following order: 1. '.mailmap' in the root of the repository's working directory, if present. 2. The blob object identified by the 'mailmap.blob' config entry, if set. [NOTE: 'mailmap.blob' defaults to 'HEAD:.mailmap' in bare repositories] 3. The path in the 'mailmap.file' config entry, if set.

\n", - "group": "mailmap" - }, - "git_mailmap_resolve": { - "type": "function", - "file": "git2/mailmap.h", - "line": 96, - "lineto": 98, - "args": [ - { - "name": "real_name", - "type": "const char **", - "comment": "pointer to store the real name" - }, - { - "name": "real_email", - "type": "const char **", - "comment": "pointer to store the real email" - }, - { - "name": "mm", - "type": "const git_mailmap *", - "comment": "the mailmap to perform a lookup with (may be NULL)" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name to look up" - }, - { - "name": "email", - "type": "const char *", - "comment": "the email to look up" - } - ], - "argline": "const char **real_name, const char **real_email, const git_mailmap *mm, const char *name, const char *email", - "sig": "const char **::const char **::const git_mailmap *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Resolve a name and email to the corresponding real name and email.

\n", - "comments": "

The lifetime of the strings are tied to mm, name, and email parameters.

\n", - "group": "mailmap" - }, - "git_mailmap_resolve_signature": { - "type": "function", - "file": "git2/mailmap.h", - "line": 110, - "lineto": 111, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature" - }, - { - "name": "mm", - "type": "const git_mailmap *", - "comment": "mailmap to resolve with" - }, - { - "name": "sig", - "type": "const git_signature *", - "comment": "signature to resolve" - } - ], - "argline": "git_signature **out, const git_mailmap *mm, const git_signature *sig", - "sig": "git_signature **::const git_mailmap *::const git_signature *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Resolve a signature to use real names and emails with a mailmap.

\n", - "comments": "

Call git_signature_free() to free the data.

\n", - "group": "mailmap" - }, - "git_merge_file_input_init": { - "type": "function", - "file": "git2/merge.h", - "line": 60, - "lineto": 62, - "args": [ - { - "name": "opts", - "type": "git_merge_file_input *", - "comment": "the `git_merge_file_input` instance to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "the version of the struct; you should pass\n `GIT_MERGE_FILE_INPUT_VERSION` here." - } - ], - "argline": "git_merge_file_input *opts, unsigned int version", - "sig": "git_merge_file_input *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initializes a git_merge_file_input with default values. Equivalent to\n creating an instance with GIT_MERGE_FILE_INPUT_INIT.

\n", - "comments": "", - "group": "merge" - }, - "git_merge_file_options_init": { - "type": "function", - "file": "git2/merge.h", - "line": 233, - "lineto": 233, - "args": [ - { - "name": "opts", - "type": "git_merge_file_options *", - "comment": "The `git_merge_file_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_MERGE_FILE_OPTIONS_VERSION`." - } - ], - "argline": "git_merge_file_options *opts, unsigned int version", - "sig": "git_merge_file_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_merge_file_options structure

\n", - "comments": "

Initializes a git_merge_file_options with default values. Equivalent to creating an instance with GIT_MERGE_FILE_OPTIONS_INIT.

\n", - "group": "merge" - }, - "git_merge_options_init": { - "type": "function", - "file": "git2/merge.h", - "line": 329, - "lineto": 329, - "args": [ - { - "name": "opts", - "type": "git_merge_options *", - "comment": "The `git_merge_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_MERGE_OPTIONS_VERSION`." - } - ], - "argline": "git_merge_options *opts, unsigned int version", - "sig": "git_merge_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_merge_options structure

\n", - "comments": "

Initializes a git_merge_options with default values. Equivalent to creating an instance with GIT_MERGE_OPTIONS_INIT.

\n", - "group": "merge" - }, - "git_merge_analysis": { - "type": "function", - "file": "git2/merge.h", - "line": 399, - "lineto": 404, - "args": [ - { - "name": "analysis_out", - "type": "git_merge_analysis_t *", - "comment": "analysis enumeration that the result is written into" - }, - { - "name": "preference_out", - "type": "git_merge_preference_t *", - "comment": "One of the `git_merge_preference_t` flag." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to merge" - }, - { - "name": "their_heads", - "type": "const git_annotated_commit **", - "comment": "the heads to merge into" - }, - { - "name": "their_heads_len", - "type": "size_t", - "comment": "the number of heads to merge" - } - ], - "argline": "git_merge_analysis_t *analysis_out, git_merge_preference_t *preference_out, git_repository *repo, const git_annotated_commit **their_heads, size_t their_heads_len", - "sig": "git_merge_analysis_t *::git_merge_preference_t *::git_repository *::const git_annotated_commit **::size_t", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into the HEAD of the repository.

\n", - "comments": "", - "group": "merge", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_merge_analysis-15" - ] - } - }, - "git_merge_analysis_for_ref": { - "type": "function", - "file": "git2/merge.h", - "line": 418, - "lineto": 424, - "args": [ - { - "name": "analysis_out", - "type": "git_merge_analysis_t *", - "comment": "analysis enumeration that the result is written into" - }, - { - "name": "preference_out", - "type": "git_merge_preference_t *", - "comment": "One of the `git_merge_preference_t` flag." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to merge" - }, - { - "name": "our_ref", - "type": "git_reference *", - "comment": "the reference to perform the analysis from" - }, - { - "name": "their_heads", - "type": "const git_annotated_commit **", - "comment": "the heads to merge into" - }, - { - "name": "their_heads_len", - "type": "size_t", - "comment": "the number of heads to merge" - } - ], - "argline": "git_merge_analysis_t *analysis_out, git_merge_preference_t *preference_out, git_repository *repo, git_reference *our_ref, const git_annotated_commit **their_heads, size_t their_heads_len", - "sig": "git_merge_analysis_t *::git_merge_preference_t *::git_repository *::git_reference *::const git_annotated_commit **::size_t", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into a reference.

\n", - "comments": "", - "group": "merge" - }, - "git_merge_base": { - "type": "function", - "file": "git2/merge.h", - "line": 435, - "lineto": 439, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the OID of a merge base between 'one' and 'two'" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "one", - "type": "const git_oid *", - "comment": "one of the commits" - }, - { - "name": "two", - "type": "const git_oid *", - "comment": "the other commit" - } - ], - "argline": "git_oid *out, git_repository *repo, const git_oid *one, const git_oid *two", - "sig": "git_oid *::git_repository *::const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if not found or error code" - }, - "description": "

Find a merge base between two commits

\n", - "comments": "", - "group": "merge", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_merge_base-31" - ], - "rev-parse.c": [ - "ex/v1.7.2/rev-parse.html#git_merge_base-1" - ] - } - }, - "git_merge_bases": { - "type": "function", - "file": "git2/merge.h", - "line": 450, - "lineto": 454, - "args": [ - { - "name": "out", - "type": "git_oidarray *", - "comment": "array in which to store the resulting ids" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "one", - "type": "const git_oid *", - "comment": "one of the commits" - }, - { - "name": "two", - "type": "const git_oid *", - "comment": "the other commit" - } - ], - "argline": "git_oidarray *out, git_repository *repo, const git_oid *one, const git_oid *two", - "sig": "git_oidarray *::git_repository *::const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if not found or error code" - }, - "description": "

Find merge bases between two commits

\n", - "comments": "", - "group": "merge" - }, - "git_merge_base_many": { - "type": "function", - "file": "git2/merge.h", - "line": 465, - "lineto": 469, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the OID of a merge base considering all the commits" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "length", - "type": "size_t", - "comment": "The number of commits in the provided `input_array`" - }, - { - "name": "input_array", - "type": "const git_oid []", - "comment": "oids of the commits" - } - ], - "argline": "git_oid *out, git_repository *repo, size_t length, const git_oid [] input_array", - "sig": "git_oid *::git_repository *::size_t::const git_oid []", - "return": { - "type": "int", - "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." - }, - "description": "

Find a merge base given a list of commits

\n", - "comments": "", - "group": "merge" - }, - "git_merge_bases_many": { - "type": "function", - "file": "git2/merge.h", - "line": 480, - "lineto": 484, - "args": [ - { - "name": "out", - "type": "git_oidarray *", - "comment": "array in which to store the resulting ids" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "length", - "type": "size_t", - "comment": "The number of commits in the provided `input_array`" - }, - { - "name": "input_array", - "type": "const git_oid []", - "comment": "oids of the commits" - } - ], - "argline": "git_oidarray *out, git_repository *repo, size_t length, const git_oid [] input_array", - "sig": "git_oidarray *::git_repository *::size_t::const git_oid []", - "return": { - "type": "int", - "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." - }, - "description": "

Find all merge bases given a list of commits

\n", - "comments": "", - "group": "merge" - }, - "git_merge_base_octopus": { - "type": "function", - "file": "git2/merge.h", - "line": 495, - "lineto": 499, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "the OID of a merge base considering all the commits" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository where the commits exist" - }, - { - "name": "length", - "type": "size_t", - "comment": "The number of commits in the provided `input_array`" - }, - { - "name": "input_array", - "type": "const git_oid []", - "comment": "oids of the commits" - } - ], - "argline": "git_oid *out, git_repository *repo, size_t length, const git_oid [] input_array", - "sig": "git_oid *::git_repository *::size_t::const git_oid []", - "return": { - "type": "int", - "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." - }, - "description": "

Find a merge base in preparation for an octopus merge

\n", - "comments": "", - "group": "merge" - }, - "git_merge_file": { - "type": "function", - "file": "git2/merge.h", - "line": 517, - "lineto": 522, - "args": [ - { - "name": "out", - "type": "git_merge_file_result *", - "comment": "The git_merge_file_result to be filled in" - }, - { - "name": "ancestor", - "type": "const git_merge_file_input *", - "comment": "The contents of the ancestor file" - }, - { - "name": "ours", - "type": "const git_merge_file_input *", - "comment": "The contents of the file in \"our\" side" - }, - { - "name": "theirs", - "type": "const git_merge_file_input *", - "comment": "The contents of the file in \"their\" side" - }, - { - "name": "opts", - "type": "const git_merge_file_options *", - "comment": "The merge file options or `NULL` for defaults" - } - ], - "argline": "git_merge_file_result *out, const git_merge_file_input *ancestor, const git_merge_file_input *ours, const git_merge_file_input *theirs, const git_merge_file_options *opts", - "sig": "git_merge_file_result *::const git_merge_file_input *::const git_merge_file_input *::const git_merge_file_input *::const git_merge_file_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merge two files as they exist in the in-memory data structures, using\n the given common ancestor as the baseline, producing a\n git_merge_file_result that reflects the merge result. The\n git_merge_file_result must be freed with git_merge_file_result_free.

\n", - "comments": "

Note that this function does not reference a repository and any configuration must be passed as git_merge_file_options.

\n", - "group": "merge" - }, - "git_merge_file_from_index": { - "type": "function", - "file": "git2/merge.h", - "line": 538, - "lineto": 544, - "args": [ - { - "name": "out", - "type": "git_merge_file_result *", - "comment": "The git_merge_file_result to be filled in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository" - }, - { - "name": "ancestor", - "type": "const git_index_entry *", - "comment": "The index entry for the ancestor file (stage level 1)" - }, - { - "name": "ours", - "type": "const git_index_entry *", - "comment": "The index entry for our file (stage level 2)" - }, - { - "name": "theirs", - "type": "const git_index_entry *", - "comment": "The index entry for their file (stage level 3)" - }, - { - "name": "opts", - "type": "const git_merge_file_options *", - "comment": "The merge file options or NULL" - } - ], - "argline": "git_merge_file_result *out, git_repository *repo, const git_index_entry *ancestor, const git_index_entry *ours, const git_index_entry *theirs, const git_merge_file_options *opts", - "sig": "git_merge_file_result *::git_repository *::const git_index_entry *::const git_index_entry *::const git_index_entry *::const git_merge_file_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merge two files as they exist in the index, using the given common\n ancestor as the baseline, producing a git_merge_file_result that\n reflects the merge result. The git_merge_file_result must be freed with\n git_merge_file_result_free.

\n", - "comments": "", - "group": "merge" - }, - "git_merge_file_result_free": { - "type": "function", - "file": "git2/merge.h", - "line": 551, - "lineto": 551, - "args": [ - { - "name": "result", - "type": "git_merge_file_result *", - "comment": "The result to free or `NULL`" - } - ], - "argline": "git_merge_file_result *result", - "sig": "git_merge_file_result *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees a git_merge_file_result.

\n", - "comments": "", - "group": "merge" - }, - "git_merge_trees": { - "type": "function", - "file": "git2/merge.h", - "line": 569, - "lineto": 575, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "pointer to store the index result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given trees" - }, - { - "name": "ancestor_tree", - "type": "const git_tree *", - "comment": "the common ancestor between the trees (or null if none)" - }, - { - "name": "our_tree", - "type": "const git_tree *", - "comment": "the tree that reflects the destination tree" - }, - { - "name": "their_tree", - "type": "const git_tree *", - "comment": "the tree to merge in to `our_tree`" - }, - { - "name": "opts", - "type": "const git_merge_options *", - "comment": "the merge tree options (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, const git_tree *ancestor_tree, const git_tree *our_tree, const git_tree *their_tree, const git_merge_options *opts", - "sig": "git_index **::git_repository *::const git_tree *::const git_tree *::const git_tree *::const git_merge_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merge two trees, producing a git_index that reflects the result of\n the merge. The index may be written as-is to the working directory\n or checked out. If the index is to be converted to a tree, the caller\n should resolve any conflicts that arose as part of the merge.

\n", - "comments": "

The returned index must be freed explicitly with git_index_free.

\n", - "group": "merge" - }, - "git_merge_commits": { - "type": "function", - "file": "git2/merge.h", - "line": 592, - "lineto": 597, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "pointer to store the index result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository that contains the given trees" - }, - { - "name": "our_commit", - "type": "const git_commit *", - "comment": "the commit that reflects the destination tree" - }, - { - "name": "their_commit", - "type": "const git_commit *", - "comment": "the commit to merge in to `our_commit`" - }, - { - "name": "opts", - "type": "const git_merge_options *", - "comment": "the merge tree options (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, const git_commit *our_commit, const git_commit *their_commit, const git_merge_options *opts", - "sig": "git_index **::git_repository *::const git_commit *::const git_commit *::const git_merge_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merge two commits, producing a git_index that reflects the result of\n the merge. The index may be written as-is to the working directory\n or checked out. If the index is to be converted to a tree, the caller\n should resolve any conflicts that arose as part of the merge.

\n", - "comments": "

The returned index must be freed explicitly with git_index_free.

\n", - "group": "merge" - }, - "git_merge": { - "type": "function", - "file": "git2/merge.h", - "line": 617, - "lineto": 622, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to merge" - }, - { - "name": "their_heads", - "type": "const git_annotated_commit **", - "comment": "the heads to merge into" - }, - { - "name": "their_heads_len", - "type": "size_t", - "comment": "the number of heads to merge" - }, - { - "name": "merge_opts", - "type": "const git_merge_options *", - "comment": "merge options" - }, - { - "name": "checkout_opts", - "type": "const git_checkout_options *", - "comment": "checkout options" - } - ], - "argline": "git_repository *repo, const git_annotated_commit **their_heads, size_t their_heads_len, const git_merge_options *merge_opts, const git_checkout_options *checkout_opts", - "sig": "git_repository *::const git_annotated_commit **::size_t::const git_merge_options *::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Merges the given commit(s) into HEAD, writing the results into the working\n directory. Any changes are staged for commit and any conflicts are written\n to the index. Callers should inspect the repository's index after this\n completes, resolve any conflicts and prepare a commit.

\n", - "comments": "

For compatibility with git, the repository is put into a merging state. Once the commit is done (or if the user wishes to abort), you should clear this state by calling git_repository_state_cleanup().

\n", - "group": "merge", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_merge-16" - ] - } - }, - "git_message_prettify": { - "type": "function", - "file": "git2/message.h", - "line": 38, - "lineto": 38, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The user-allocated git_buf which will be filled with the\n cleaned up message." - }, - { - "name": "message", - "type": "const char *", - "comment": "The message to be prettified." - }, - { - "name": "strip_comments", - "type": "int", - "comment": "Non-zero to remove comment lines, 0 to leave them in." - }, - { - "name": "comment_char", - "type": "char", - "comment": "Comment character. Lines starting with this character\n are considered to be comments and removed if `strip_comments` is non-zero." - } - ], - "argline": "git_buf *out, const char *message, int strip_comments, char comment_char", - "sig": "git_buf *::const char *::int::char", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Clean up excess whitespace and make sure there is a trailing newline in the message.

\n", - "comments": "

Optionally, it can remove lines which start with the comment character.

\n", - "group": "message" - }, - "git_message_trailers": { - "type": "function", - "file": "git2/message.h", - "line": 73, - "lineto": 73, - "args": [ - { - "name": "arr", - "type": "git_message_trailer_array *", - "comment": "A pre-allocated git_message_trailer_array struct to be filled in\n with any trailers found during parsing." - }, - { - "name": "message", - "type": "const char *", - "comment": "The message to be parsed" - } - ], - "argline": "git_message_trailer_array *arr, const char *message", - "sig": "git_message_trailer_array *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or non-zero on error." - }, - "description": "

Parse trailers out of a message, filling the array pointed to by +arr+.

\n", - "comments": "

Trailers are key/value pairs in the last paragraph of a message, not including any patches or conflicts that may be present.

\n", - "group": "message" - }, - "git_message_trailer_array_free": { - "type": "function", - "file": "git2/message.h", - "line": 81, - "lineto": 81, - "args": [ - { - "name": "arr", - "type": "git_message_trailer_array *", - "comment": "The trailer to free." - } - ], - "argline": "git_message_trailer_array *arr", - "sig": "git_message_trailer_array *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Clean's up any allocated memory in the git_message_trailer_array filled by\n a call to git_message_trailers.

\n", - "comments": "", - "group": "message" - }, - "git_note_iterator_new": { - "type": "function", - "file": "git2/notes.h", - "line": 49, - "lineto": 52, - "args": [ - { - "name": "out", - "type": "git_note_iterator **", - "comment": "pointer to the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" - } - ], - "argline": "git_note_iterator **out, git_repository *repo, const char *notes_ref", - "sig": "git_note_iterator **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Creates a new iterator for notes

\n", - "comments": "

The iterator must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_commit_iterator_new": { - "type": "function", - "file": "git2/notes.h", - "line": 64, - "lineto": 66, - "args": [ - { - "name": "out", - "type": "git_note_iterator **", - "comment": "pointer to the iterator" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - } - ], - "argline": "git_note_iterator **out, git_commit *notes_commit", - "sig": "git_note_iterator **::git_commit *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Creates a new iterator for notes from a commit

\n", - "comments": "

The iterator must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_iterator_free": { - "type": "function", - "file": "git2/notes.h", - "line": 73, - "lineto": 73, - "args": [ - { - "name": "it", - "type": "git_note_iterator *", - "comment": "pointer to the iterator" - } - ], - "argline": "git_note_iterator *it", - "sig": "git_note_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees an git_note_iterator

\n", - "comments": "", - "group": "note" - }, - "git_note_next": { - "type": "function", - "file": "git2/notes.h", - "line": 86, - "lineto": 89, - "args": [ - { - "name": "note_id", - "type": "git_oid *", - "comment": "id of blob containing the message" - }, - { - "name": "annotated_id", - "type": "git_oid *", - "comment": "id of the git object being annotated" - }, - { - "name": "it", - "type": "git_note_iterator *", - "comment": "pointer to the iterator" - } - ], - "argline": "git_oid *note_id, git_oid *annotated_id, git_note_iterator *it", - "sig": "git_oid *::git_oid *::git_note_iterator *", - "return": { - "type": "int", - "comment": " 0 (no error), GIT_ITEROVER (iteration is done) or an error code\n (negative value)" - }, - "description": "

Return the current item (note_id and annotated_id) and advance the iterator\n internally to the next value

\n", - "comments": "", - "group": "note" - }, - "git_note_read": { - "type": "function", - "file": "git2/notes.h", - "line": 105, - "lineto": 109, - "args": [ - { - "name": "out", - "type": "git_note **", - "comment": "pointer to the read note; NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to read the note from" - } - ], - "argline": "git_note **out, git_repository *repo, const char *notes_ref, const git_oid *oid", - "sig": "git_note **::git_repository *::const char *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read the note for an object

\n", - "comments": "

The note must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_commit_read": { - "type": "function", - "file": "git2/notes.h", - "line": 124, - "lineto": 128, - "args": [ - { - "name": "out", - "type": "git_note **", - "comment": "pointer to the read note; NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to read the note from" - } - ], - "argline": "git_note **out, git_repository *repo, git_commit *notes_commit, const git_oid *oid", - "sig": "git_note **::git_repository *::git_commit *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read the note for an object from a note commit

\n", - "comments": "

The note must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_author": { - "type": "function", - "file": "git2/notes.h", - "line": 136, - "lineto": 136, - "args": [ - { - "name": "note", - "type": "const git_note *", - "comment": "the note" - } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const git_signature *", - "comment": " the author" - }, - "description": "

Get the note author

\n", - "comments": "", - "group": "note" - }, - "git_note_committer": { - "type": "function", - "file": "git2/notes.h", - "line": 144, - "lineto": 144, - "args": [ - { - "name": "note", - "type": "const git_note *", - "comment": "the note" - } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const git_signature *", - "comment": " the committer" - }, - "description": "

Get the note committer

\n", - "comments": "", - "group": "note" - }, - "git_note_message": { - "type": "function", - "file": "git2/notes.h", - "line": 153, - "lineto": 153, - "args": [ - { - "name": "note", - "type": "const git_note *", - "comment": "the note" - } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const char *", - "comment": " the note message" - }, - "description": "

Get the note message

\n", - "comments": "", - "group": "note" - }, - "git_note_id": { - "type": "function", - "file": "git2/notes.h", - "line": 162, - "lineto": 162, - "args": [ - { - "name": "note", - "type": "const git_note *", - "comment": "the note" - } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const git_oid *", - "comment": " the note object's id" - }, - "description": "

Get the note object's id

\n", - "comments": "", - "group": "note" - }, - "git_note_create": { - "type": "function", - "file": "git2/notes.h", - "line": 179, - "lineto": 187, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer to store the OID (optional); NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to store the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to decorate" - }, - { - "name": "note", - "type": "const char *", - "comment": "Content of the note to add for object oid" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing note" - } - ], - "argline": "git_oid *out, git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int force", - "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_commit_create": { - "type": "function", - "file": "git2/notes.h", - "line": 209, - "lineto": 218, - "args": [ - { - "name": "notes_commit_out", - "type": "git_oid *", - "comment": "pointer to store the commit (optional);\n\t\t\t\t\tNULL in case of error" - }, - { - "name": "notes_blob_out", - "type": "git_oid *", - "comment": "a point to the id of a note blob (optional)" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note will live" - }, - { - "name": "parent", - "type": "git_commit *", - "comment": "Pointer to parent note\n\t\t\t\t\tor NULL if this shall start a new notes tree" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to decorate" - }, - { - "name": "note", - "type": "const char *", - "comment": "Content of the note to add for object oid" - }, - { - "name": "allow_note_overwrite", - "type": "int", - "comment": "Overwrite existing note" - } - ], - "argline": "git_oid *notes_commit_out, git_oid *notes_blob_out, git_repository *repo, git_commit *parent, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int allow_note_overwrite", - "sig": "git_oid *::git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *::const char *::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a note for an object from a commit

\n", - "comments": "

This function will create a notes commit for a given object, the commit is a dangling commit, no reference is created.

\n", - "group": "note" - }, - "git_note_remove": { - "type": "function", - "file": "git2/notes.h", - "line": 232, - "lineto": 237, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note lives" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to remove the note from" - } - ], - "argline": "git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid", - "sig": "git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove the note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_commit_remove": { - "type": "function", - "file": "git2/notes.h", - "line": 257, - "lineto": 263, - "args": [ - { - "name": "notes_commit_out", - "type": "git_oid *", - "comment": "pointer to store the new notes commit (optional);\n\t\t\t\t\tNULL in case of error.\n\t\t\t\t\tWhen removing a note a new tree containing all notes\n\t\t\t\t\tsans the note to be removed is created and a new commit\n\t\t\t\t\tpointing to that tree is also created.\n\t\t\t\t\tIn the case where the resulting tree is an empty tree\n\t\t\t\t\ta new commit pointing to this empty tree will be returned." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note lives" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to remove the note from" - } - ], - "argline": "git_oid *notes_commit_out, git_repository *repo, git_commit *notes_commit, const git_signature *author, const git_signature *committer, const git_oid *oid", - "sig": "git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove the note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_free": { - "type": "function", - "file": "git2/notes.h", - "line": 270, - "lineto": 270, - "args": [ - { - "name": "note", - "type": "git_note *", - "comment": "git_note object" - } - ], - "argline": "git_note *note", - "sig": "git_note *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a git_note object

\n", - "comments": "", - "group": "note" - }, - "git_note_default_ref": { - "type": "function", - "file": "git2/notes.h", - "line": 280, - "lineto": 280, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer in which to store the name of the default notes reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The Git repository" - } - ], - "argline": "git_buf *out, git_repository *repo", - "sig": "git_buf *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the default notes reference for a repository

\n", - "comments": "", - "group": "note" - }, - "git_note_foreach": { - "type": "function", - "file": "git2/notes.h", - "line": 298, - "lineto": 302, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the notes." - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "Reference to read from (optional); defaults to\n \"refs/notes/commits\"." - }, - { - "name": "note_cb", - "type": "git_note_foreach_cb", - "comment": "Callback to invoke per found annotation. Return non-zero\n to stop looping." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra parameter to callback function." - } - ], - "argline": "git_repository *repo, const char *notes_ref, git_note_foreach_cb note_cb, void *payload", - "sig": "git_repository *::const char *::git_note_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all the notes within a specified namespace\n and issue a callback for each one.

\n", - "comments": "", - "group": "note" - }, - "git_object_lookup": { - "type": "function", - "file": "git2/object.h", - "line": 44, - "lineto": 48, - "args": [ - { - "name": "object", - "type": "git_object **", - "comment": "pointer to the looked-up object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to look up the object" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the unique identifier for the object" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "the type of the object" - } - ], - "argline": "git_object **object, git_repository *repo, const git_oid *id, git_object_t type", - "sig": "git_object **::git_repository *::const git_oid *::git_object_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a reference to one of the objects in a repository.

\n", - "comments": "

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", - "group": "object", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_object_lookup-32" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_object_lookup-17" - ] - } - }, - "git_object_lookup_prefix": { - "type": "function", - "file": "git2/object.h", - "line": 77, - "lineto": 82, - "args": [ - { - "name": "object_out", - "type": "git_object **", - "comment": "pointer where to store the looked-up object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to look up the object" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "a short identifier for the object" - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "the type of the object" - } - ], - "argline": "git_object **object_out, git_repository *repo, const git_oid *id, size_t len, git_object_t type", - "sig": "git_object **::git_repository *::const git_oid *::size_t::git_object_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a reference to one of the objects in a repository,\n given a prefix of its identifier (short id).

\n", - "comments": "

The object obtained will be so that its identifier matches the first 'len' hexadecimal characters (packets of 4 bits) of the given 'id'. 'len' must be at least GIT_OID_MINPREFIXLEN, and long enough to identify a unique object matching the prefix; otherwise the method will fail.

\n\n

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", - "group": "object" - }, - "git_object_lookup_bypath": { - "type": "function", - "file": "git2/object.h", - "line": 95, - "lineto": 99, - "args": [ - { - "name": "out", - "type": "git_object **", - "comment": "buffer that receives a pointer to the object (which must be freed\n by the caller)" - }, - { - "name": "treeish", - "type": "const git_object *", - "comment": "root object that can be peeled to a tree" - }, - { - "name": "path", - "type": "const char *", - "comment": "relative path from the root object to the desired object" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "type of object desired" - } - ], - "argline": "git_object **out, const git_object *treeish, const char *path, git_object_t type", - "sig": "git_object **::const git_object *::const char *::git_object_t", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Lookup an object that represents a tree entry.

\n", - "comments": "", - "group": "object" - }, - "git_object_id": { - "type": "function", - "file": "git2/object.h", - "line": 107, - "lineto": 107, - "args": [ - { - "name": "obj", - "type": "const git_object *", - "comment": "the repository object" - } - ], - "argline": "const git_object *obj", - "sig": "const git_object *", - "return": { - "type": "const git_oid *", - "comment": " the SHA1 id" - }, - "description": "

Get the id (SHA1) of a repository object

\n", - "comments": "", - "group": "object", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_object_id-8", - "ex/v1.7.2/blame.html#git_object_id-9", - "ex/v1.7.2/blame.html#git_object_id-10", - "ex/v1.7.2/blame.html#git_object_id-11" - ], - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_object_id-10", - "ex/v1.7.2/cat-file.html#git_object_id-11" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_object_id-33", - "ex/v1.7.2/log.html#git_object_id-34", - "ex/v1.7.2/log.html#git_object_id-35", - "ex/v1.7.2/log.html#git_object_id-36" - ], - "rev-parse.c": [ - "ex/v1.7.2/rev-parse.html#git_object_id-2", - "ex/v1.7.2/rev-parse.html#git_object_id-3", - "ex/v1.7.2/rev-parse.html#git_object_id-4", - "ex/v1.7.2/rev-parse.html#git_object_id-5", - "ex/v1.7.2/rev-parse.html#git_object_id-6" - ] - } - }, - "git_object_short_id": { - "type": "function", - "file": "git2/object.h", - "line": 121, - "lineto": 121, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Buffer to write string into" - }, - { - "name": "obj", - "type": "const git_object *", - "comment": "The object to get an ID for" - } - ], - "argline": "git_buf *out, const git_object *obj", - "sig": "git_buf *::const git_object *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 for error" - }, - "description": "

Get a short abbreviated OID string for the object

\n", - "comments": "

This starts at the "core.abbrev" length (default 7 characters) and iteratively extends to a longer string if that length is ambiguous. The result will be unambiguous (at least until new objects are added to the repository).

\n", - "group": "object", - "examples": { - "tag.c": [ - "ex/v1.7.2/tag.html#git_object_short_id-3" - ] - } - }, - "git_object_type": { - "type": "function", - "file": "git2/object.h", - "line": 129, - "lineto": 129, - "args": [ - { - "name": "obj", - "type": "const git_object *", - "comment": "the repository object" - } - ], - "argline": "const git_object *obj", - "sig": "const git_object *", - "return": { - "type": "git_object_t", - "comment": " the object's type" - }, - "description": "

Get the object type of an object

\n", - "comments": "", - "group": "object", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_object_type-12", - "ex/v1.7.2/cat-file.html#git_object_type-13", - "ex/v1.7.2/cat-file.html#git_object_type-14" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_object_type-4" - ] - } - }, - "git_object_owner": { - "type": "function", - "file": "git2/object.h", - "line": 143, - "lineto": 143, - "args": [ - { - "name": "obj", - "type": "const git_object *", - "comment": "the object" - } - ], - "argline": "const git_object *obj", - "sig": "const git_object *", - "return": { - "type": "git_repository *", - "comment": " the repository who owns this object" - }, - "description": "

Get the repository that owns this object

\n", - "comments": "

Freeing or calling git_repository_close on the returned pointer will invalidate the actual object.

\n\n

Any other operation may be run on the repository without affecting the object.

\n", - "group": "object" - }, - "git_object_free": { - "type": "function", - "file": "git2/object.h", - "line": 160, - "lineto": 160, - "args": [ - { - "name": "object", - "type": "git_object *", - "comment": "the object to close" - } - ], - "argline": "git_object *object", - "sig": "git_object *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open object

\n", - "comments": "

This method instructs the library to close an existing object; note that git_objects are owned and cached by the repository so the object may or may not be freed after this library call, depending on how aggressive is the caching mechanism used by the repository.

\n\n

IMPORTANT: It is necessary to call this method when you stop using an object. Failure to do so will cause a memory leak.

\n", - "group": "object", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_object_free-12", - "ex/v1.7.2/blame.html#git_object_free-13", - "ex/v1.7.2/blame.html#git_object_free-14", - "ex/v1.7.2/blame.html#git_object_free-15" - ], - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_object_free-15" - ], - "commit.c": [ - "ex/v1.7.2/commit.html#git_object_free-6" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_object_free-38" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_object_free-37" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_object_free-18" - ], - "rev-parse.c": [ - "ex/v1.7.2/rev-parse.html#git_object_free-7", - "ex/v1.7.2/rev-parse.html#git_object_free-8", - "ex/v1.7.2/rev-parse.html#git_object_free-9" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_object_free-5", - "ex/v1.7.2/tag.html#git_object_free-6", - "ex/v1.7.2/tag.html#git_object_free-7", - "ex/v1.7.2/tag.html#git_object_free-8" - ] - } - }, - "git_object_type2string": { - "type": "function", - "file": "git2/object.h", - "line": 171, - "lineto": 171, - "args": [ - { - "name": "type", - "type": "git_object_t", - "comment": "object type to convert." - } - ], - "argline": "git_object_t type", - "sig": "git_object_t", - "return": { - "type": "const char *", - "comment": " the corresponding string representation." - }, - "description": "

Convert an object type to its string representation.

\n", - "comments": "

The result is a pointer to a string in static memory and should not be free()'ed.

\n", - "group": "object", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_object_type2string-16", - "ex/v1.7.2/cat-file.html#git_object_type2string-17", - "ex/v1.7.2/cat-file.html#git_object_type2string-18", - "ex/v1.7.2/cat-file.html#git_object_type2string-19" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_object_type2string-39", - "ex/v1.7.2/general.html#git_object_type2string-40" - ] - } - }, - "git_object_string2type": { - "type": "function", - "file": "git2/object.h", - "line": 179, - "lineto": 179, - "args": [ - { - "name": "str", - "type": "const char *", - "comment": "the string to convert." - } - ], - "argline": "const char *str", - "sig": "const char *", - "return": { - "type": "git_object_t", - "comment": " the corresponding git_object_t." - }, - "description": "

Convert a string object type representation to it's git_object_t.

\n", - "comments": "", - "group": "object" - }, - "git_object_typeisloose": { - "type": "function", - "file": "git2/object.h", - "line": 188, - "lineto": 188, - "args": [ - { - "name": "type", - "type": "git_object_t", - "comment": "object type to test." - } - ], - "argline": "git_object_t type", - "sig": "git_object_t", - "return": { - "type": "int", - "comment": " true if the type represents a valid loose object type,\n false otherwise." - }, - "description": "

Determine if the given git_object_t is a valid loose object type.

\n", - "comments": "", - "group": "object" - }, - "git_object_peel": { - "type": "function", - "file": "git2/object.h", - "line": 213, - "lineto": 216, - "args": [ - { - "name": "peeled", - "type": "git_object **", - "comment": "Pointer to the peeled git_object" - }, - { - "name": "object", - "type": "const git_object *", - "comment": "The object to be processed" - }, - { - "name": "target_type", - "type": "git_object_t", - "comment": "The type of the requested object (a GIT_OBJECT_ value)" - } - ], - "argline": "git_object **peeled, const git_object *object, git_object_t target_type", - "sig": "git_object **::const git_object *::git_object_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC, GIT_EPEEL, or an error code" - }, - "description": "

Recursively peel an object until an object of the specified type is met.

\n", - "comments": "

If the query cannot be satisfied due to the object model, GIT_EINVALIDSPEC will be returned (e.g. trying to peel a blob to a tree).

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until the type changes. A tag will be peeled until the referenced object is no longer a tag, and a commit will be peeled to a tree. Any other object type will return GIT_EINVALIDSPEC.

\n\n

If peeling a tag we discover an object which cannot be peeled to the target type due to the object model, GIT_EPEEL will be returned.

\n\n

You must free the returned object.

\n", - "group": "object" - }, - "git_object_dup": { - "type": "function", - "file": "git2/object.h", - "line": 226, - "lineto": 226, - "args": [ - { - "name": "dest", - "type": "git_object **", - "comment": "Pointer to store the copy of the object" - }, - { - "name": "source", - "type": "git_object *", - "comment": "Original object to copy" - } - ], - "argline": "git_object **dest, git_object *source", - "sig": "git_object **::git_object *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an in-memory copy of a Git object. The copy must be\n explicitly free'd or it will leak.

\n", - "comments": "", - "group": "object" - }, - "git_object_rawcontent_is_valid": { - "type": "function", - "file": "git2/object.h", - "line": 269, - "lineto": 273, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "Output pointer to set with validity of the object content" - }, - { - "name": "buf", - "type": "const char *", - "comment": "The contents to validate" - }, - { - "name": "len", - "type": "size_t", - "comment": "The length of the buffer" - }, - { - "name": "object_type", - "type": "git_object_t", - "comment": "The type of the object in the buffer" - } - ], - "argline": "int *valid, const char *buf, size_t len, git_object_t object_type", - "sig": "int *::const char *::size_t::git_object_t", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Analyzes a buffer of raw object content and determines its validity.\n Tree, commit, and tag objects will be parsed and ensured that they\n are valid, parseable content. (Blobs are always valid by definition.)\n An error message will be set with an informative message if the object\n is not valid.

\n", - "comments": "", - "group": "object" - }, - "git_odb_add_disk_alternate": { - "type": "function", - "file": "git2/odb.h", - "line": 118, - "lineto": 118, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "database to add the backend to" - }, - { - "name": "path", - "type": "const char *", - "comment": "path to the objects folder for the alternate" - } - ], - "argline": "git_odb *odb, const char *path", - "sig": "git_odb *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Add an on-disk alternate to an existing Object DB.

\n", - "comments": "

Note that the added path must point to an objects, not to a full repository, to use it as an alternate store.

\n\n

Alternate backends are always checked for objects after all the main backends have been exhausted.

\n\n

Writing is disabled on alternate backends.

\n", - "group": "odb" - }, - "git_odb_free": { - "type": "function", - "file": "git2/odb.h", - "line": 125, - "lineto": 125, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "database pointer to close. If NULL no action is taken." - } - ], - "argline": "git_odb *db", - "sig": "git_odb *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open object database.

\n", - "comments": "", - "group": "odb", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_odb_free-20" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_odb_free-41" - ] - } - }, - "git_odb_read": { - "type": "function", - "file": "git2/odb.h", - "line": 143, - "lineto": 143, - "args": [ - { - "name": "out", - "type": "git_odb_object **", - "comment": "pointer where to store the read object" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "database to search for the object in." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the object to read." - } - ], - "argline": "git_odb_object **out, git_odb *db, const git_oid *id", - "sig": "git_odb_object **::git_odb *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is\n not in the database." - }, - "description": "

Read an object from the database.

\n", - "comments": "

This method queries all available ODB backends trying to read the given OID.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", - "group": "odb", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_odb_read-21" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_odb_read-42" - ] - } - }, - "git_odb_read_prefix": { - "type": "function", - "file": "git2/odb.h", - "line": 171, - "lineto": 171, - "args": [ - { - "name": "out", - "type": "git_odb_object **", - "comment": "pointer where to store the read object" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "database to search for the object in." - }, - { - "name": "short_id", - "type": "const git_oid *", - "comment": "a prefix of the id of the object to read." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the prefix" - } - ], - "argline": "git_odb_object **out, git_odb *db, const git_oid *short_id, size_t len", - "sig": "git_odb_object **::git_odb *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is not in the\n database. GIT_EAMBIGUOUS if the prefix is ambiguous\n (several objects match the prefix)" - }, - "description": "

Read an object from the database, given a prefix\n of its identifier.

\n", - "comments": "

This method queries all available ODB backends trying to match the 'len' first hexadecimal characters of the 'short_id'. The remaining (GIT_OID_SHA1_HEXSIZE-len)*4 bits of 'short_id' must be 0s. 'len' must be at least GIT_OID_MINPREFIXLEN, and the prefix must be long enough to identify a unique object in all the backends; the method will fail otherwise.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", - "group": "odb" - }, - "git_odb_read_header": { - "type": "function", - "file": "git2/odb.h", - "line": 190, - "lineto": 190, - "args": [ - { - "name": "len_out", - "type": "size_t *", - "comment": "pointer where to store the length" - }, - { - "name": "type_out", - "type": "git_object_t *", - "comment": "pointer where to store the type" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "database to search for the object in." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the object to read." - } - ], - "argline": "size_t *len_out, git_object_t *type_out, git_odb *db, const git_oid *id", - "sig": "size_t *::git_object_t *::git_odb *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is not\n in the database." - }, - "description": "

Read the header of an object from the database, without\n reading its full contents.

\n", - "comments": "

The header includes the length and the type of an object.

\n\n

Note that most backends do not support reading only the header of an object, so the whole object will be read and then the header will be returned.

\n", - "group": "odb" - }, - "git_odb_exists": { - "type": "function", - "file": "git2/odb.h", - "line": 199, - "lineto": 199, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "database to be searched for the given object." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the object to search for." - } - ], - "argline": "git_odb *db, const git_oid *id", - "sig": "git_odb *::const git_oid *", - "return": { - "type": "int", - "comment": " 1 if the object was found, 0 otherwise" - }, - "description": "

Determine if the given object can be found in the object database.

\n", - "comments": "", - "group": "odb" - }, - "git_odb_exists_ext": { - "type": "function", - "file": "git2/odb.h", - "line": 210, - "lineto": 210, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "database to be searched for the given object." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the object to search for." - }, - { - "name": "flags", - "type": "unsigned int", - "comment": "flags affecting the lookup (see `git_odb_lookup_flags_t`)" - } - ], - "argline": "git_odb *db, const git_oid *id, unsigned int flags", - "sig": "git_odb *::const git_oid *::unsigned int", - "return": { - "type": "int", - "comment": " 1 if the object was found, 0 otherwise" - }, - "description": "

Determine if the given object can be found in the object database, with\n extended options.

\n", - "comments": "", - "group": "odb" - }, - "git_odb_exists_prefix": { - "type": "function", - "file": "git2/odb.h", - "line": 223, - "lineto": 224, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "The full OID of the found object if just one is found." - }, - { - "name": "db", - "type": "git_odb *", - "comment": "The database to be searched for the given object." - }, - { - "name": "short_id", - "type": "const git_oid *", - "comment": "A prefix of the id of the object to read." - }, - { - "name": "len", - "type": "size_t", - "comment": "The length of the prefix." - } - ], - "argline": "git_oid *out, git_odb *db, const git_oid *short_id, size_t len", - "sig": "git_oid *::git_odb *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 if found, GIT_ENOTFOUND if not found, GIT_EAMBIGUOUS if multiple\n matches were found, other value \n<\n 0 if there was a read error." - }, - "description": "

Determine if an object can be found in the object database by an\n abbreviated object ID.

\n", - "comments": "", - "group": "odb" - }, - "git_odb_expand_ids": { - "type": "function", - "file": "git2/odb.h", - "line": 266, - "lineto": 269, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "The database to be searched for the given objects." - }, - { - "name": "ids", - "type": "git_odb_expand_id *", - "comment": "An array of short object IDs to search for" - }, - { - "name": "count", - "type": "size_t", - "comment": "The length of the `ids` array" - } - ], - "argline": "git_odb *db, git_odb_expand_id *ids, size_t count", - "sig": "git_odb *::git_odb_expand_id *::size_t", - "return": { - "type": "int", - "comment": " 0 on success or an error code on failure" - }, - "description": "

Determine if one or more objects can be found in the object database\n by their abbreviated object ID and type.

\n", - "comments": "

The given array will be updated in place: for each abbreviated ID that is unique in the database, and of the given type (if specified), the full object ID, object ID length (GIT_OID_SHA1_HEXSIZE) and type will be written back to the array. For IDs that are not found (or are ambiguous), the array entry will be zeroed.

\n\n

Note that since this function operates on multiple objects, the underlying database will not be asked to be reloaded if an object is not found (which is unlike other object database operations.)

\n", - "group": "odb" - }, - "git_odb_refresh": { - "type": "function", - "file": "git2/odb.h", - "line": 289, - "lineto": 289, - "args": [ - { - "name": "db", - "type": "struct git_odb *", - "comment": "database to refresh" - } - ], - "argline": "struct git_odb *db", - "sig": "struct git_odb *", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Refresh the object database to load newly added files.

\n", - "comments": "

If the object databases have changed on disk while the library is running, this function will force a reload of the underlying indexes.

\n\n

Use this function when you're confident that an external application has tampered with the ODB.

\n\n

NOTE that it is not necessary to call this function at all. The library will automatically attempt to refresh the ODB when a lookup fails, to see if the looked up object exists on disk but hasn't been loaded yet.

\n", - "group": "odb" - }, - "git_odb_foreach": { - "type": "function", - "file": "git2/odb.h", - "line": 304, - "lineto": 304, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "database to use" - }, - { - "name": "cb", - "type": "git_odb_foreach_cb", - "comment": "the callback to call for each object" - }, - { - "name": "payload", - "type": "void *", - "comment": "data to pass to the callback" - } - ], - "argline": "git_odb *db, git_odb_foreach_cb cb, void *payload", - "sig": "git_odb *::git_odb_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

List all objects available in the database

\n", - "comments": "

The callback will be called for each object available in the database. Note that the objects are likely to be returned in the index order, which would make accessing the objects in that order inefficient. Return a non-zero value from the callback to stop looping.

\n", - "group": "odb" - }, - "git_odb_write": { - "type": "function", - "file": "git2/odb.h", - "line": 324, - "lineto": 324, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer to store the OID result of the write" - }, - { - "name": "odb", - "type": "git_odb *", - "comment": "object database where to store the object" - }, - { - "name": "data", - "type": "const void *", - "comment": "buffer with the data to store" - }, - { - "name": "len", - "type": "size_t", - "comment": "size of the buffer" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "type of the data to store" - } - ], - "argline": "git_oid *out, git_odb *odb, const void *data, size_t len, git_object_t type", - "sig": "git_oid *::git_odb *::const void *::size_t::git_object_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write an object directly into the ODB

\n", - "comments": "

This method writes a full object straight into the ODB. For most cases, it is preferred to write objects through a write stream, which is both faster and less memory intensive, specially for big objects.

\n\n

This method is provided for compatibility with custom backends which are not able to support streaming writes

\n", - "group": "odb", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_odb_write-43" - ] - } - }, - "git_odb_open_wstream": { - "type": "function", - "file": "git2/odb.h", - "line": 347, - "lineto": 347, - "args": [ - { - "name": "out", - "type": "git_odb_stream **", - "comment": "pointer where to store the stream" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "object database where the stream will write" - }, - { - "name": "size", - "type": "git_object_size_t", - "comment": "final size of the object that will be written" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "type of the object that will be written" - } - ], - "argline": "git_odb_stream **out, git_odb *db, git_object_size_t size, git_object_t type", - "sig": "git_odb_stream **::git_odb *::git_object_size_t::git_object_t", - "return": { - "type": "int", - "comment": " 0 if the stream was created; error code otherwise" - }, - "description": "

Open a stream to write an object into the ODB

\n", - "comments": "

The type and final length of the object must be specified when opening the stream.

\n\n

The returned stream will be of type GIT_STREAM_WRONLY, and it won't be effective until git_odb_stream_finalize_write is called and returns without an error

\n\n

The stream must always be freed when done with git_odb_stream_free or will leak memory.

\n", - "group": "odb" - }, - "git_odb_stream_write": { - "type": "function", - "file": "git2/odb.h", - "line": 360, - "lineto": 360, - "args": [ - { - "name": "stream", - "type": "git_odb_stream *", - "comment": "the stream" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "the data to write" - }, - { - "name": "len", - "type": "size_t", - "comment": "the buffer's length" - } - ], - "argline": "git_odb_stream *stream, const char *buffer, size_t len", - "sig": "git_odb_stream *::const char *::size_t", - "return": { - "type": "int", - "comment": " 0 if the write succeeded, error code otherwise" - }, - "description": "

Write to an odb stream

\n", - "comments": "

This method will fail if the total number of received bytes exceeds the size declared with git_odb_open_wstream()

\n", - "group": "odb" - }, - "git_odb_stream_finalize_write": { - "type": "function", - "file": "git2/odb.h", - "line": 375, - "lineto": 375, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer to store the resulting object's id" - }, - { - "name": "stream", - "type": "git_odb_stream *", - "comment": "the stream" - } - ], - "argline": "git_oid *out, git_odb_stream *stream", - "sig": "git_oid *::git_odb_stream *", - "return": { - "type": "int", - "comment": " 0 on success, an error code otherwise" - }, - "description": "

Finish writing to an odb stream

\n", - "comments": "

The object will take its final name and will be available to the odb.

\n\n

This method will fail if the total number of received bytes differs from the size declared with git_odb_open_wstream()

\n", - "group": "odb" - }, - "git_odb_stream_read": { - "type": "function", - "file": "git2/odb.h", - "line": 387, - "lineto": 387, - "args": [ - { - "name": "stream", - "type": "git_odb_stream *", - "comment": "the stream" - }, - { - "name": "buffer", - "type": "char *", - "comment": "a user-allocated buffer to store the data in." - }, - { - "name": "len", - "type": "size_t", - "comment": "the buffer's length" - } - ], - "argline": "git_odb_stream *stream, char *buffer, size_t len", - "sig": "git_odb_stream *::char *::size_t", - "return": { - "type": "int", - "comment": " 0 if the read succeeded, error code otherwise" - }, - "description": "

Read from an odb stream

\n", - "comments": "

Most backends don't implement streaming reads

\n", - "group": "odb" - }, - "git_odb_stream_free": { - "type": "function", - "file": "git2/odb.h", - "line": 394, - "lineto": 394, - "args": [ - { - "name": "stream", - "type": "git_odb_stream *", - "comment": "the stream to free" - } - ], - "argline": "git_odb_stream *stream", - "sig": "git_odb_stream *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an odb stream

\n", - "comments": "", - "group": "odb" - }, - "git_odb_open_rstream": { - "type": "function", - "file": "git2/odb.h", - "line": 422, - "lineto": 427, - "args": [ - { - "name": "out", - "type": "git_odb_stream **", - "comment": "pointer where to store the stream" - }, - { - "name": "len", - "type": "size_t *", - "comment": "pointer where to store the length of the object" - }, - { - "name": "type", - "type": "git_object_t *", - "comment": "pointer where to store the type of the object" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "object database where the stream will read from" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "oid of the object the stream will read from" - } - ], - "argline": "git_odb_stream **out, size_t *len, git_object_t *type, git_odb *db, const git_oid *oid", - "sig": "git_odb_stream **::size_t *::git_object_t *::git_odb *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 if the stream was created, error code otherwise" - }, - "description": "

Open a stream to read an object from the ODB

\n", - "comments": "

Note that most backends do not support streaming reads because they store their objects as compressed/delta'ed blobs.

\n\n

It's recommended to use git_odb_read instead, which is assured to work on all backends.

\n\n

The returned stream will be of type GIT_STREAM_RDONLY and will have the following methods:

\n\n
    - stream->read: read `n` bytes from the stream      - stream->free: free the stream\n
\n\n

The stream must always be free'd or will leak memory.

\n", - "group": "odb" - }, - "git_odb_write_pack": { - "type": "function", - "file": "git2/odb.h", - "line": 448, - "lineto": 452, - "args": [ - { - "name": "out", - "type": "git_odb_writepack **", - "comment": "pointer to the writepack functions" - }, - { - "name": "db", - "type": "git_odb *", - "comment": "object database where the stream will read from" - }, - { - "name": "progress_cb", - "type": "git_indexer_progress_cb", - "comment": "function to call with progress information.\n Be aware that this is called inline with network and indexing operations,\n so performance may be affected." - }, - { - "name": "progress_payload", - "type": "void *", - "comment": "payload for the progress callback" - } - ], - "argline": "git_odb_writepack **out, git_odb *db, git_indexer_progress_cb progress_cb, void *progress_payload", - "sig": "git_odb_writepack **::git_odb *::git_indexer_progress_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Open a stream for writing a pack file to the ODB.

\n", - "comments": "

If the ODB layer understands pack files, then the given packfile will likely be streamed directly to disk (and a corresponding index created). If the ODB layer does not understand pack files, the objects will be stored in whatever format the ODB layer uses.

\n", - "group": "odb" - }, - "git_odb_write_multi_pack_index": { - "type": "function", - "file": "git2/odb.h", - "line": 466, - "lineto": 467, - "args": [ - { - "name": "db", - "type": "git_odb *", - "comment": "object database where the `multi-pack-index` file will be written." - } - ], - "argline": "git_odb *db", - "sig": "git_odb *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Write a multi-pack-index file from all the .pack files in the ODB.

\n", - "comments": "

If the ODB layer understands pack files, then this will create a file called multi-pack-index next to the .pack and .idx files, which will contain an index of all objects stored in .pack files. This will allow for O(log n) lookup for n objects (regardless of how many packfiles there exist).

\n", - "group": "odb" - }, - "git_odb_object_dup": { - "type": "function", - "file": "git2/odb.h", - "line": 529, - "lineto": 529, - "args": [ - { - "name": "dest", - "type": "git_odb_object **", - "comment": "pointer where to store the copy" - }, - { - "name": "source", - "type": "git_odb_object *", - "comment": "object to copy" - } - ], - "argline": "git_odb_object **dest, git_odb_object *source", - "sig": "git_odb_object **::git_odb_object *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a copy of an odb_object

\n", - "comments": "

The returned copy must be manually freed with git_odb_object_free. Note that because of an implementation detail, the returned copy will be the same pointer as source: the object is internally refcounted, so the copy still needs to be freed twice.

\n", - "group": "odb" - }, - "git_odb_object_free": { - "type": "function", - "file": "git2/odb.h", - "line": 539, - "lineto": 539, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "object to close" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an ODB object

\n", - "comments": "

This method must always be called once a git_odb_object is no longer needed, otherwise memory will leak.

\n", - "group": "odb", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_odb_object_free-22" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_odb_object_free-44" - ] - } - }, - "git_odb_object_id": { - "type": "function", - "file": "git2/odb.h", - "line": 549, - "lineto": 549, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "the object" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "const git_oid *", - "comment": " a pointer to the OID" - }, - "description": "

Return the OID of an ODB object

\n", - "comments": "

This is the OID from which the object was read from

\n", - "group": "odb" - }, - "git_odb_object_data": { - "type": "function", - "file": "git2/odb.h", - "line": 562, - "lineto": 562, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "the object" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "const void *", - "comment": " a pointer to the data" - }, - "description": "

Return the data of an ODB object

\n", - "comments": "

This is the uncompressed, raw data as read from the ODB, without the leading header.

\n\n

This pointer is owned by the object and shall not be free'd.

\n", - "group": "odb", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_odb_object_data-45" - ] - } - }, - "git_odb_object_size": { - "type": "function", - "file": "git2/odb.h", - "line": 573, - "lineto": 573, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "the object" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "size_t", - "comment": " the size" - }, - "description": "

Return the size of an ODB object

\n", - "comments": "

This is the real size of the data buffer, not the actual size of the object.

\n", - "group": "odb", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_odb_object_size-23" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_odb_object_size-46" - ] - } - }, - "git_odb_object_type": { - "type": "function", - "file": "git2/odb.h", - "line": 581, - "lineto": 581, - "args": [ - { - "name": "object", - "type": "git_odb_object *", - "comment": "the object" - } - ], - "argline": "git_odb_object *object", - "sig": "git_odb_object *", - "return": { - "type": "git_object_t", - "comment": " the type" - }, - "description": "

Return the type of an ODB object

\n", - "comments": "", - "group": "odb", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_odb_object_type-47" - ] - } - }, - "git_odb_add_backend": { - "type": "function", - "file": "git2/odb.h", - "line": 596, - "lineto": 596, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "database to add the backend to" - }, - { - "name": "backend", - "type": "git_odb_backend *", - "comment": "pointer to a git_odb_backend instance" - }, - { - "name": "priority", - "type": "int", - "comment": "Value for ordering the backends queue" - } - ], - "argline": "git_odb *odb, git_odb_backend *backend, int priority", - "sig": "git_odb *::git_odb_backend *::int", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Add a custom backend to an existing Object DB

\n", - "comments": "

The backends are checked in relative ordering, based on the value of the priority parameter.

\n\n

Read for more information.

\n", - "group": "odb" - }, - "git_odb_add_alternate": { - "type": "function", - "file": "git2/odb.h", - "line": 617, - "lineto": 617, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "database to add the backend to" - }, - { - "name": "backend", - "type": "git_odb_backend *", - "comment": "pointer to a git_odb_backend instance" - }, - { - "name": "priority", - "type": "int", - "comment": "Value for ordering the backends queue" - } - ], - "argline": "git_odb *odb, git_odb_backend *backend, int priority", - "sig": "git_odb *::git_odb_backend *::int", - "return": { - "type": "int", - "comment": " 0 on success, error code otherwise" - }, - "description": "

Add a custom backend to an existing Object DB; this\n backend will work as an alternate.

\n", - "comments": "

Alternate backends are always checked for objects after all the main backends have been exhausted.

\n\n

The backends are checked in relative ordering, based on the value of the priority parameter.

\n\n

Writing is disabled on alternate backends.

\n\n

Read for more information.

\n", - "group": "odb" - }, - "git_odb_num_backends": { - "type": "function", - "file": "git2/odb.h", - "line": 625, - "lineto": 625, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "object database" - } - ], - "argline": "git_odb *odb", - "sig": "git_odb *", - "return": { - "type": "size_t", - "comment": " number of backends in the ODB" - }, - "description": "

Get the number of ODB backend objects

\n", - "comments": "", - "group": "odb" - }, - "git_odb_get_backend": { - "type": "function", - "file": "git2/odb.h", - "line": 635, - "lineto": 635, - "args": [ - { - "name": "out", - "type": "git_odb_backend **", - "comment": "output pointer to ODB backend at pos" - }, - { - "name": "odb", - "type": "git_odb *", - "comment": "object database" - }, - { - "name": "pos", - "type": "size_t", - "comment": "index into object database backend list" - } - ], - "argline": "git_odb_backend **out, git_odb *odb, size_t pos", - "sig": "git_odb_backend **::git_odb *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if pos is invalid, other errors \n<\n 0" - }, - "description": "

Lookup an ODB backend object by index

\n", - "comments": "", - "group": "odb" - }, - "git_odb_set_commit_graph": { - "type": "function", - "file": "git2/odb.h", - "line": 650, - "lineto": 650, - "args": [ - { - "name": "odb", - "type": "git_odb *", - "comment": "object database" - }, - { - "name": "cgraph", - "type": "git_commit_graph *", - "comment": "the git commit-graph" - } - ], - "argline": "git_odb *odb, git_commit_graph *cgraph", - "sig": "git_odb *::git_commit_graph *", - "return": { - "type": "int", - "comment": " 0 on success; error code otherwise" - }, - "description": "

Set the git commit-graph for the ODB.

\n", - "comments": "

After a successful call, the ownership of the cgraph parameter will be transferred to libgit2, and the caller should not free it.

\n\n

The commit-graph can also be unset by explicitly passing NULL as the cgraph parameter.

\n", - "group": "odb" - }, - "git_oid_fmt": { - "type": "function", - "file": "git2/oid.h", - "line": 188, - "lineto": 188, - "args": [ - { - "name": "out", - "type": "char *", - "comment": "output hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (40 bytes for SHA1,\n\t\t64 bytes for SHA256). Only the oid digits are written;\n\t\ta '\n\\\n0' terminator must be added by the caller if it is\n\t\trequired." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure to format." - } - ], - "argline": "char *out, const git_oid *id", - "sig": "char *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Format a git_oid into a hex string.

\n", - "comments": "", - "group": "oid", - "examples": { - "fetch.c": [ - "ex/v1.7.2/fetch.html#git_oid_fmt-1", - "ex/v1.7.2/fetch.html#git_oid_fmt-2" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_oid_fmt-48", - "ex/v1.7.2/general.html#git_oid_fmt-49", - "ex/v1.7.2/general.html#git_oid_fmt-50", - "ex/v1.7.2/general.html#git_oid_fmt-51", - "ex/v1.7.2/general.html#git_oid_fmt-52" - ], - "ls-remote.c": [ - "ex/v1.7.2/ls-remote.html#git_oid_fmt-1" - ] - } - }, - "git_oid_nfmt": { - "type": "function", - "file": "git2/oid.h", - "line": 200, - "lineto": 200, - "args": [ - { - "name": "out", - "type": "char *", - "comment": "output hex string; you say how many bytes to write.\n\t\tIf the number of bytes is > GIT_OID_SHA1_HEXSIZE, extra bytes\n\t\twill be zeroed; if not, a '\n\\\n0' terminator is NOT added." - }, - { - "name": "n", - "type": "size_t", - "comment": "number of characters to write into out string" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure to format." - } - ], - "argline": "char *out, size_t n, const git_oid *id", - "sig": "char *::size_t::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Format a git_oid into a partial hex string.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_pathfmt": { - "type": "function", - "file": "git2/oid.h", - "line": 217, - "lineto": 217, - "args": [ - { - "name": "out", - "type": "char *", - "comment": "output hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (41 bytes for SHA1,\n\t\t65 bytes for SHA256). Only the oid digits are written;\n\t\ta '\n\\\n0' terminator must be added by the caller if it\n\t\tis required." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure to format." - } - ], - "argline": "char *out, const git_oid *id", - "sig": "char *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Format a git_oid into a loose-object path string.

\n", - "comments": "

The resulting string is "aa/...", where "aa" is the first two hex digits of the oid and "..." is the remaining 38 digits.

\n", - "group": "oid" - }, - "git_oid_tostr_s": { - "type": "function", - "file": "git2/oid.h", - "line": 230, - "lineto": 230, - "args": [ - { - "name": "oid", - "type": "const git_oid *", - "comment": "The oid structure to format" - } - ], - "argline": "const git_oid *oid", - "sig": "const git_oid *", - "return": { - "type": "char *", - "comment": " the c-string or NULL on failure" - }, - "description": "

Format a git_oid into a statically allocated c-string.

\n", - "comments": "

The c-string is owned by the library and should not be freed by the user. If libgit2 is built with thread support, the string will be stored in TLS (i.e. one buffer per thread) to allow for concurrent calls of the function.

\n", - "group": "oid", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_oid_tostr_s-19", - "ex/v1.7.2/merge.html#git_oid_tostr_s-20" - ] - } - }, - "git_oid_tostr": { - "type": "function", - "file": "git2/oid.h", - "line": 251, - "lineto": 251, - "args": [ - { - "name": "out", - "type": "char *", - "comment": "the buffer into which the oid string is output." - }, - { - "name": "n", - "type": "size_t", - "comment": "the size of the out buffer." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the oid structure to format." - } - ], - "argline": "char *out, size_t n, const git_oid *id", - "sig": "char *::size_t::const git_oid *", - "return": { - "type": "char *", - "comment": " the out buffer pointer, assuming no input parameter\n\t\t\terrors, otherwise a pointer to an empty string." - }, - "description": "

Format a git_oid into a buffer as a hex format c-string.

\n", - "comments": "

If the buffer is smaller than the size of a hex-formatted oid string plus an additional byte (GIT_OID_SHA_HEXSIZE + 1 for SHA1 or GIT_OID_SHA256_HEXSIZE + 1 for SHA256), then the resulting oid c-string will be truncated to n-1 characters (but will still be NUL-byte terminated).

\n\n

If there are any input parameter errors (out == NULL, n == 0, oid == NULL), then a pointer to an empty string is returned, so that the return value can always be printed.

\n", - "group": "oid", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_oid_tostr-16", - "ex/v1.7.2/blame.html#git_oid_tostr-17" - ], - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_oid_tostr-24", - "ex/v1.7.2/cat-file.html#git_oid_tostr-25", - "ex/v1.7.2/cat-file.html#git_oid_tostr-26", - "ex/v1.7.2/cat-file.html#git_oid_tostr-27", - "ex/v1.7.2/cat-file.html#git_oid_tostr-28" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_oid_tostr-38", - "ex/v1.7.2/log.html#git_oid_tostr-39" - ], - "rev-parse.c": [ - "ex/v1.7.2/rev-parse.html#git_oid_tostr-10", - "ex/v1.7.2/rev-parse.html#git_oid_tostr-11", - "ex/v1.7.2/rev-parse.html#git_oid_tostr-12", - "ex/v1.7.2/rev-parse.html#git_oid_tostr-13" - ] - } - }, - "git_oid_cpy": { - "type": "function", - "file": "git2/oid.h", - "line": 260, - "lineto": 260, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "oid structure the result is written into." - }, - { - "name": "src", - "type": "const git_oid *", - "comment": "oid structure to copy from." - } - ], - "argline": "git_oid *out, const git_oid *src", - "sig": "git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Copy an oid from one structure to another.

\n", - "comments": "", - "group": "oid", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_oid_cpy-18", - "ex/v1.7.2/blame.html#git_oid_cpy-19", - "ex/v1.7.2/blame.html#git_oid_cpy-20" - ] - } - }, - "git_oid_cmp": { - "type": "function", - "file": "git2/oid.h", - "line": 269, - "lineto": 269, - "args": [ - { - "name": "a", - "type": "const git_oid *", - "comment": "first oid structure." - }, - { - "name": "b", - "type": "const git_oid *", - "comment": "second oid structure." - } - ], - "argline": "const git_oid *a, const git_oid *b", - "sig": "const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " \n<\n0, 0, >0 if a \n<\n b, a == b, a > b." - }, - "description": "

Compare two oid structures.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_equal": { - "type": "function", - "file": "git2/oid.h", - "line": 278, - "lineto": 278, - "args": [ - { - "name": "a", - "type": "const git_oid *", - "comment": "first oid structure." - }, - { - "name": "b", - "type": "const git_oid *", - "comment": "second oid structure." - } - ], - "argline": "const git_oid *a, const git_oid *b", - "sig": "const git_oid *::const git_oid *", - "return": { - "type": "int", - "comment": " true if equal, false otherwise" - }, - "description": "

Compare two oid structures for equality

\n", - "comments": "", - "group": "oid" - }, - "git_oid_ncmp": { - "type": "function", - "file": "git2/oid.h", - "line": 289, - "lineto": 289, - "args": [ - { - "name": "a", - "type": "const git_oid *", - "comment": "first oid structure." - }, - { - "name": "b", - "type": "const git_oid *", - "comment": "second oid structure." - }, - { - "name": "len", - "type": "size_t", - "comment": "the number of hex chars to compare" - } - ], - "argline": "const git_oid *a, const git_oid *b, size_t len", - "sig": "const git_oid *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 in case of a match" - }, - "description": "

Compare the first 'len' hexadecimal characters (packets of 4 bits)\n of two oid structures.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_streq": { - "type": "function", - "file": "git2/oid.h", - "line": 298, - "lineto": 298, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure." - }, - { - "name": "str", - "type": "const char *", - "comment": "input hex string of an object id." - } - ], - "argline": "const git_oid *id, const char *str", - "sig": "const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 in case of a match, -1 otherwise." - }, - "description": "

Check if an oid equals an hex formatted object id.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_strcmp": { - "type": "function", - "file": "git2/oid.h", - "line": 308, - "lineto": 308, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": "oid structure." - }, - { - "name": "str", - "type": "const char *", - "comment": "input hex string of an object id." - } - ], - "argline": "const git_oid *id, const char *str", - "sig": "const git_oid *::const char *", - "return": { - "type": "int", - "comment": " -1 if str is not valid, \n<\n0 if id sorts before str,\n 0 if id matches str, >0 if id sorts after str." - }, - "description": "

Compare an oid to an hex formatted object id.

\n", - "comments": "", - "group": "oid" - }, - "git_oid_is_zero": { - "type": "function", - "file": "git2/oid.h", - "line": 315, - "lineto": 315, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": null - } - ], - "argline": "const git_oid *id", - "sig": "const git_oid *", - "return": { - "type": "int", - "comment": " 1 if all zeros, 0 otherwise." - }, - "description": "

Check is an oid is all zeros.

\n", - "comments": "", - "group": "oid", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_oid_is_zero-21" - ], - "fetch.c": [ - "ex/v1.7.2/fetch.html#git_oid_is_zero-3" - ] - } - }, - "git_oid_shorten_new": { - "type": "function", - "file": "git2/oid.h", - "line": 336, - "lineto": 336, - "args": [ - { - "name": "min_length", - "type": "size_t", - "comment": "The minimal length for all identifiers,\n\t\twhich will be used even if shorter OIDs would still\n\t\tbe unique." - } - ], - "argline": "size_t min_length", - "sig": "size_t", - "return": { - "type": "git_oid_shorten *", - "comment": " a `git_oid_shorten` instance, NULL if OOM" - }, - "description": "

Create a new OID shortener.

\n", - "comments": "

The OID shortener is used to process a list of OIDs in text form and return the shortest length that would uniquely identify all of them.

\n\n

E.g. look at the result of git log --abbrev.

\n", - "group": "oid" - }, - "git_oid_shorten_add": { - "type": "function", - "file": "git2/oid.h", - "line": 362, - "lineto": 362, - "args": [ - { - "name": "os", - "type": "git_oid_shorten *", - "comment": "a `git_oid_shorten` instance" - }, - { - "name": "text_id", - "type": "const char *", - "comment": "an OID in text form" - } - ], - "argline": "git_oid_shorten *os, const char *text_id", - "sig": "git_oid_shorten *::const char *", - "return": { - "type": "int", - "comment": " the minimal length to uniquely identify all OIDs\n\t\tadded so far to the set; or an error code (\n<\n0) if an\n\t\terror occurs." - }, - "description": "

Add a new OID to set of shortened OIDs and calculate\n the minimal length to uniquely identify all the OIDs in\n the set.

\n", - "comments": "

The OID is expected to be a 40-char hexadecimal string. The OID is owned by the user and will not be modified or freed.

\n\n

For performance reasons, there is a hard-limit of how many OIDs can be added to a single set (around ~32000, assuming a mostly randomized distribution), which should be enough for any kind of program, and keeps the algorithm fast and memory-efficient.

\n\n

Attempting to add more than those OIDs will result in a GIT_ERROR_INVALID error

\n", - "group": "oid" - }, - "git_oid_shorten_free": { - "type": "function", - "file": "git2/oid.h", - "line": 369, - "lineto": 369, - "args": [ - { - "name": "os", - "type": "git_oid_shorten *", - "comment": "a `git_oid_shorten` instance" - } - ], - "argline": "git_oid_shorten *os", - "sig": "git_oid_shorten *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an OID shortener instance

\n", - "comments": "", - "group": "oid" - }, - "git_oidarray_dispose": { - "type": "function", - "file": "git2/oidarray.h", - "line": 31, - "lineto": 31, - "args": [ - { - "name": "array", - "type": "git_oidarray *", - "comment": "git_oidarray from which to free oid data" - } - ], - "argline": "git_oidarray *array", - "sig": "git_oidarray *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the object IDs contained in an oid_array. This method should\n be called on git_oidarray objects that were provided by the\n library. Not doing so will result in a memory leak.

\n", - "comments": "

This does not free the git_oidarray itself, since the library will never allocate that object directly itself.

\n", - "group": "oidarray" - }, - "git_packbuilder_new": { - "type": "function", - "file": "git2/pack.h", - "line": 65, - "lineto": 65, - "args": [ - { - "name": "out", - "type": "git_packbuilder **", - "comment": "The new packbuilder object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository" - } - ], - "argline": "git_packbuilder **out, git_repository *repo", - "sig": "git_packbuilder **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Initialize a new packbuilder

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_set_threads": { - "type": "function", - "file": "git2/pack.h", - "line": 78, - "lineto": 78, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "n", - "type": "unsigned int", - "comment": "Number of threads to spawn" - } - ], - "argline": "git_packbuilder *pb, unsigned int n", - "sig": "git_packbuilder *::unsigned int", - "return": { - "type": "unsigned int", - "comment": " number of actual threads to be used" - }, - "description": "

Set number of threads to spawn

\n", - "comments": "

By default, libgit2 won't spawn any threads at all; when set to 0, libgit2 will autodetect the number of CPUs.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert": { - "type": "function", - "file": "git2/pack.h", - "line": 92, - "lineto": 92, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The oid of the commit" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name; might be NULL" - } - ], - "argline": "git_packbuilder *pb, const git_oid *id, const char *name", - "sig": "git_packbuilder *::const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Insert a single object

\n", - "comments": "

For an optimal pack it's mandatory to insert objects in recency order, commits followed by trees and blobs.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert_tree": { - "type": "function", - "file": "git2/pack.h", - "line": 104, - "lineto": 104, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The oid of the root tree" - } - ], - "argline": "git_packbuilder *pb, const git_oid *id", - "sig": "git_packbuilder *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Insert a root tree object

\n", - "comments": "

This will add the tree as well as all referenced trees and blobs.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert_commit": { - "type": "function", - "file": "git2/pack.h", - "line": 116, - "lineto": 116, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The oid of the commit" - } - ], - "argline": "git_packbuilder *pb, const git_oid *id", - "sig": "git_packbuilder *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Insert a commit object

\n", - "comments": "

This will add a commit as well as the completed referenced tree.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert_walk": { - "type": "function", - "file": "git2/pack.h", - "line": 129, - "lineto": 129, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - }, - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the revwalk to use to fill the packbuilder" - } - ], - "argline": "git_packbuilder *pb, git_revwalk *walk", - "sig": "git_packbuilder *::git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Insert objects as given by the walk

\n", - "comments": "

Those commits and all objects they reference will be inserted into the packbuilder.

\n", - "group": "packbuilder" - }, - "git_packbuilder_insert_recur": { - "type": "function", - "file": "git2/pack.h", - "line": 141, - "lineto": 141, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the id of the root object to insert" - }, - { - "name": "name", - "type": "const char *", - "comment": "optional name for the object" - } - ], - "argline": "git_packbuilder *pb, const git_oid *id, const char *name", - "sig": "git_packbuilder *::const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Recursively insert an object and its referenced objects

\n", - "comments": "

Insert the object as well as any object it references.

\n", - "group": "packbuilder" - }, - "git_packbuilder_write_buf": { - "type": "function", - "file": "git2/pack.h", - "line": 153, - "lineto": 153, - "args": [ - { - "name": "buf", - "type": "git_buf *", - "comment": "Buffer where to write the packfile" - }, - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - } - ], - "argline": "git_buf *buf, git_packbuilder *pb", - "sig": "git_buf *::git_packbuilder *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write the contents of the packfile to an in-memory buffer

\n", - "comments": "

The contents of the buffer will become a valid packfile, even though there will be no attached index

\n", - "group": "packbuilder" - }, - "git_packbuilder_write": { - "type": "function", - "file": "git2/pack.h", - "line": 166, - "lineto": 171, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to the directory where the packfile and index should be stored, or NULL for default location" - }, - { - "name": "mode", - "type": "unsigned int", - "comment": "permissions to use creating a packfile or 0 for defaults" - }, - { - "name": "progress_cb", - "type": "git_indexer_progress_cb", - "comment": "function to call with progress information from the indexer (optional)" - }, - { - "name": "progress_cb_payload", - "type": "void *", - "comment": "payload for the progress callback (optional)" - } - ], - "argline": "git_packbuilder *pb, const char *path, unsigned int mode, git_indexer_progress_cb progress_cb, void *progress_cb_payload", - "sig": "git_packbuilder *::const char *::unsigned int::git_indexer_progress_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write the new pack and corresponding index file to path.

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_hash": { - "type": "function", - "file": "git2/pack.h", - "line": 184, - "lineto": 184, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder object" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "const git_oid *", - "comment": " 0 or an error code" - }, - "description": "

Get the packfile's hash

\n", - "comments": "

A packfile's name is derived from the sorted hashing of all object names. This is only correct after the packfile has been written.

\n", - "group": "packbuilder" - }, - "git_packbuilder_name": { - "type": "function", - "file": "git2/pack.h", - "line": 196, - "lineto": 196, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder instance" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "const char *", - "comment": " a NUL terminated string for the packfile name" - }, - "description": "

Get the unique name for the resulting packfile.

\n", - "comments": "

The packfile's name is derived from the packfile's content. This is only correct after the packfile has been written.

\n", - "group": "packbuilder" - }, - "git_packbuilder_foreach": { - "type": "function", - "file": "git2/pack.h", - "line": 218, - "lineto": 218, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - }, - { - "name": "cb", - "type": "git_packbuilder_foreach_cb", - "comment": "the callback to call with each packed object's buffer" - }, - { - "name": "payload", - "type": "void *", - "comment": "the callback's data" - } - ], - "argline": "git_packbuilder *pb, git_packbuilder_foreach_cb cb, void *payload", - "sig": "git_packbuilder *::git_packbuilder_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create the new pack and pass each object to the callback

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_object_count": { - "type": "function", - "file": "git2/pack.h", - "line": 226, - "lineto": 226, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "size_t", - "comment": " the number of objects in the packfile" - }, - "description": "

Get the total number of objects the packbuilder will write out

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_written": { - "type": "function", - "file": "git2/pack.h", - "line": 234, - "lineto": 234, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "the packbuilder" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "size_t", - "comment": " the number of objects which have already been written" - }, - "description": "

Get the number of objects the packbuilder has already written out

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_set_callbacks": { - "type": "function", - "file": "git2/pack.h", - "line": 253, - "lineto": 256, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder object" - }, - { - "name": "progress_cb", - "type": "git_packbuilder_progress", - "comment": "Function to call with progress information during\n pack building. Be aware that this is called inline with pack building\n operations, so performance may be affected." - }, - { - "name": "progress_cb_payload", - "type": "void *", - "comment": "Payload for progress callback." - } - ], - "argline": "git_packbuilder *pb, git_packbuilder_progress progress_cb, void *progress_cb_payload", - "sig": "git_packbuilder *::git_packbuilder_progress::void *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the callbacks for a packbuilder

\n", - "comments": "", - "group": "packbuilder" - }, - "git_packbuilder_free": { - "type": "function", - "file": "git2/pack.h", - "line": 263, - "lineto": 263, - "args": [ - { - "name": "pb", - "type": "git_packbuilder *", - "comment": "The packbuilder" - } - ], - "argline": "git_packbuilder *pb", - "sig": "git_packbuilder *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the packbuilder and all associated data

\n", - "comments": "", - "group": "packbuilder" - }, - "git_patch_owner": { - "type": "function", - "file": "git2/patch.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "patch", - "type": "const git_patch *", - "comment": "the patch" - } - ], - "argline": "const git_patch *patch", - "sig": "const git_patch *", - "return": { - "type": "git_repository *", - "comment": " a pointer to the repository" - }, - "description": "

Get the repository associated with this patch. May be NULL.

\n", - "comments": "", - "group": "patch" - }, - "git_patch_from_diff": { - "type": "function", - "file": "git2/patch.h", - "line": 59, - "lineto": 60, - "args": [ - { - "name": "out", - "type": "git_patch **", - "comment": "Output parameter for the delta patch object" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "Diff list object" - }, - { - "name": "idx", - "type": "size_t", - "comment": "Index into diff list" - } - ], - "argline": "git_patch **out, git_diff *diff, size_t idx", - "sig": "git_patch **::git_diff *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, other value \n<\n 0 on error" - }, - "description": "

Return a patch for an entry in the diff list.

\n", - "comments": "

The git_patch is a newly created object contains the text diffs for the delta. You have to call git_patch_free() when you are done with it. You can use the patch object to loop over all the hunks and lines in the diff of the one delta.

\n\n

For an unchanged file or a binary file, no git_patch will be created, the output will be set to NULL, and the binary flag will be set true in the git_diff_delta structure.

\n\n

It is okay to pass NULL for either of the output parameters; if you pass NULL for the git_patch, then the text diff will not be calculated.

\n", - "group": "patch" - }, - "git_patch_from_blobs": { - "type": "function", - "file": "git2/patch.h", - "line": 78, - "lineto": 84, - "args": [ - { - "name": "out", - "type": "git_patch **", - "comment": "The generated patch; NULL on error" - }, - { - "name": "old_blob", - "type": "const git_blob *", - "comment": "Blob for old side of diff, or NULL for empty blob" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old blob as if it had this filename; can be NULL" - }, - { - "name": "new_blob", - "type": "const git_blob *", - "comment": "Blob for new side of diff, or NULL for empty blob" - }, - { - "name": "new_as_path", - "type": "const char *", - "comment": "Treat new blob as if it had this filename; can be NULL" - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - } - ], - "argline": "git_patch **out, const git_blob *old_blob, const char *old_as_path, const git_blob *new_blob, const char *new_as_path, const git_diff_options *opts", - "sig": "git_patch **::const git_blob *::const char *::const git_blob *::const char *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code \n<\n 0" - }, - "description": "

Directly generate a patch from the difference between two blobs.

\n", - "comments": "

This is just like git_diff_blobs() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", - "group": "patch" - }, - "git_patch_from_blob_and_buffer": { - "type": "function", - "file": "git2/patch.h", - "line": 103, - "lineto": 110, - "args": [ - { - "name": "out", - "type": "git_patch **", - "comment": "The generated patch; NULL on error" - }, - { - "name": "old_blob", - "type": "const git_blob *", - "comment": "Blob for old side of diff, or NULL for empty blob" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old blob as if it had this filename; can be NULL" - }, - { - "name": "buffer", - "type": "const void *", - "comment": "Raw data for new side of diff, or NULL for empty" - }, - { - "name": "buffer_len", - "type": "size_t", - "comment": "Length of raw data for new side of diff" - }, - { - "name": "buffer_as_path", - "type": "const char *", - "comment": "Treat buffer as if it had this filename; can be NULL" - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - } - ], - "argline": "git_patch **out, const git_blob *old_blob, const char *old_as_path, const void *buffer, size_t buffer_len, const char *buffer_as_path, const git_diff_options *opts", - "sig": "git_patch **::const git_blob *::const char *::const void *::size_t::const char *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code \n<\n 0" - }, - "description": "

Directly generate a patch from the difference between a blob and a buffer.

\n", - "comments": "

This is just like git_diff_blob_to_buffer() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", - "group": "patch" - }, - "git_patch_from_buffers": { - "type": "function", - "file": "git2/patch.h", - "line": 130, - "lineto": 138, - "args": [ - { - "name": "out", - "type": "git_patch **", - "comment": "The generated patch; NULL on error" - }, - { - "name": "old_buffer", - "type": "const void *", - "comment": "Raw data for old side of diff, or NULL for empty" - }, - { - "name": "old_len", - "type": "size_t", - "comment": "Length of the raw data for old side of the diff" - }, - { - "name": "old_as_path", - "type": "const char *", - "comment": "Treat old buffer as if it had this filename; can be NULL" - }, - { - "name": "new_buffer", - "type": "const void *", - "comment": "Raw data for new side of diff, or NULL for empty" - }, - { - "name": "new_len", - "type": "size_t", - "comment": "Length of raw data for new side of diff" - }, - { - "name": "new_as_path", - "type": "const char *", - "comment": "Treat buffer as if it had this filename; can be NULL" - }, - { - "name": "opts", - "type": "const git_diff_options *", - "comment": "Options for diff, or NULL for default options" - } - ], - "argline": "git_patch **out, const void *old_buffer, size_t old_len, const char *old_as_path, const void *new_buffer, size_t new_len, const char *new_as_path, const git_diff_options *opts", - "sig": "git_patch **::const void *::size_t::const char *::const void *::size_t::const char *::const git_diff_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code \n<\n 0" - }, - "description": "

Directly generate a patch from the difference between two buffers.

\n", - "comments": "

This is just like git_diff_buffers() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", - "group": "patch", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_patch_from_buffers-16" - ] - } - }, - "git_patch_free": { - "type": "function", - "file": "git2/patch.h", - "line": 145, - "lineto": 145, - "args": [ - { - "name": "patch", - "type": "git_patch *", - "comment": "The patch to free." - } - ], - "argline": "git_patch *patch", - "sig": "git_patch *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a git_patch object.

\n", - "comments": "", - "group": "patch", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_patch_free-17" - ] - } - }, - "git_patch_get_delta": { - "type": "function", - "file": "git2/patch.h", - "line": 154, - "lineto": 154, - "args": [ - { - "name": "patch", - "type": "const git_patch *", - "comment": "The patch in which to get the delta." - } - ], - "argline": "const git_patch *patch", - "sig": "const git_patch *", - "return": { - "type": "const git_diff_delta *", - "comment": " The delta associated with the patch." - }, - "description": "

Get the delta associated with a patch. This delta points to internal\n data and you do not have to release it when you are done with it.

\n", - "comments": "", - "group": "patch" - }, - "git_patch_num_hunks": { - "type": "function", - "file": "git2/patch.h", - "line": 162, - "lineto": 162, - "args": [ - { - "name": "patch", - "type": "const git_patch *", - "comment": "The patch in which to get the number of hunks." - } - ], - "argline": "const git_patch *patch", - "sig": "const git_patch *", - "return": { - "type": "size_t", - "comment": " The number of hunks of the patch." - }, - "description": "

Get the number of hunks in a patch

\n", - "comments": "", - "group": "patch" - }, - "git_patch_line_stats": { - "type": "function", - "file": "git2/patch.h", - "line": 180, - "lineto": 184, - "args": [ - { - "name": "total_context", - "type": "size_t *", - "comment": "Count of context lines in output, can be NULL." - }, - { - "name": "total_additions", - "type": "size_t *", - "comment": "Count of addition lines in output, can be NULL." - }, - { - "name": "total_deletions", - "type": "size_t *", - "comment": "Count of deletion lines in output, can be NULL." - }, - { - "name": "patch", - "type": "const git_patch *", - "comment": "The git_patch object" - } - ], - "argline": "size_t *total_context, size_t *total_additions, size_t *total_deletions, const git_patch *patch", - "sig": "size_t *::size_t *::size_t *::const git_patch *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on error" - }, - "description": "

Get line counts of each type in a patch.

\n", - "comments": "

This helps imitate a diff --numstat type of output. For that purpose, you only need the total_additions and total_deletions values, but we include the total_context line count in case you want the total number of lines of diff output that will be generated.

\n\n

All outputs are optional. Pass NULL if you don't need a particular count.

\n", - "group": "patch" - }, - "git_patch_get_hunk": { - "type": "function", - "file": "git2/patch.h", - "line": 199, - "lineto": 203, - "args": [ - { - "name": "out", - "type": "const git_diff_hunk **", - "comment": "Output pointer to git_diff_hunk of hunk" - }, - { - "name": "lines_in_hunk", - "type": "size_t *", - "comment": "Output count of total lines in this hunk" - }, - { - "name": "patch", - "type": "git_patch *", - "comment": "Input pointer to patch object" - }, - { - "name": "hunk_idx", - "type": "size_t", - "comment": "Input index of hunk to get information about" - } - ], - "argline": "const git_diff_hunk **out, size_t *lines_in_hunk, git_patch *patch, size_t hunk_idx", - "sig": "const git_diff_hunk **::size_t *::git_patch *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if hunk_idx out of range, \n<\n0 on error" - }, - "description": "

Get the information about a hunk in a patch

\n", - "comments": "

Given a patch and a hunk index into the patch, this returns detailed information about that hunk. Any of the output pointers can be passed as NULL if you don't care about that particular piece of information.

\n", - "group": "patch" - }, - "git_patch_num_lines_in_hunk": { - "type": "function", - "file": "git2/patch.h", - "line": 212, - "lineto": 214, - "args": [ - { - "name": "patch", - "type": "const git_patch *", - "comment": "The git_patch object" - }, - { - "name": "hunk_idx", - "type": "size_t", - "comment": "Index of the hunk" - } - ], - "argline": "const git_patch *patch, size_t hunk_idx", - "sig": "const git_patch *::size_t", - "return": { - "type": "int", - "comment": " Number of lines in hunk or GIT_ENOTFOUND if invalid hunk index" - }, - "description": "

Get the number of lines in a hunk.

\n", - "comments": "", - "group": "patch" - }, - "git_patch_get_line_in_hunk": { - "type": "function", - "file": "git2/patch.h", - "line": 230, - "lineto": 234, - "args": [ - { - "name": "out", - "type": "const git_diff_line **", - "comment": "The git_diff_line data for this line" - }, - { - "name": "patch", - "type": "git_patch *", - "comment": "The patch to look in" - }, - { - "name": "hunk_idx", - "type": "size_t", - "comment": "The index of the hunk" - }, - { - "name": "line_of_hunk", - "type": "size_t", - "comment": "The index of the line in the hunk" - } - ], - "argline": "const git_diff_line **out, git_patch *patch, size_t hunk_idx, size_t line_of_hunk", - "sig": "const git_diff_line **::git_patch *::size_t::size_t", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Get data about a line in a hunk of a patch.

\n", - "comments": "

Given a patch, a hunk index, and a line index in the hunk, this will return a lot of details about that line. If you pass a hunk index larger than the number of hunks or a line index larger than the number of lines in the hunk, this will return -1.

\n", - "group": "patch" - }, - "git_patch_size": { - "type": "function", - "file": "git2/patch.h", - "line": 252, - "lineto": 256, - "args": [ - { - "name": "patch", - "type": "git_patch *", - "comment": "A git_patch representing changes to one file" - }, - { - "name": "include_context", - "type": "int", - "comment": "Include context lines in size if non-zero" - }, - { - "name": "include_hunk_headers", - "type": "int", - "comment": "Include hunk header lines if non-zero" - }, - { - "name": "include_file_headers", - "type": "int", - "comment": "Include file header lines if non-zero" - } - ], - "argline": "git_patch *patch, int include_context, int include_hunk_headers, int include_file_headers", - "sig": "git_patch *::int::int::int", - "return": { - "type": "size_t", - "comment": " The number of bytes of data" - }, - "description": "

Look up size of patch diff data in bytes

\n", - "comments": "

This returns the raw size of the patch data. This only includes the actual data from the lines of the diff, not the file or hunk headers.

\n\n

If you pass include_context as true (non-zero), this will be the size of all of the diff output; if you pass it as false (zero), this will only include the actual changed lines (as if context_lines was 0).

\n", - "group": "patch" - }, - "git_patch_print": { - "type": "function", - "file": "git2/patch.h", - "line": 270, - "lineto": 273, - "args": [ - { - "name": "patch", - "type": "git_patch *", - "comment": "A git_patch representing changes to one file" - }, - { - "name": "print_cb", - "type": "git_diff_line_cb", - "comment": "Callback function to output lines of the patch. Will be\n called for file headers, hunk headers, and diff lines." - }, - { - "name": "payload", - "type": "void *", - "comment": "Reference pointer that will be passed to your callbacks." - } - ], - "argline": "git_patch *patch, git_diff_line_cb print_cb, void *payload", - "sig": "git_patch *::git_diff_line_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Serialize the patch to text via callback.

\n", - "comments": "

Returning a non-zero value from the callback will terminate the iteration and return that value to the caller.

\n", - "group": "patch" - }, - "git_patch_to_buf": { - "type": "function", - "file": "git2/patch.h", - "line": 282, - "lineto": 284, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "The git_buf to be filled in" - }, - { - "name": "patch", - "type": "git_patch *", - "comment": "A git_patch representing changes to one file" - } - ], - "argline": "git_buf *out, git_patch *patch", - "sig": "git_buf *::git_patch *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure." - }, - "description": "

Get the content of a patch as a single diff text.

\n", - "comments": "", - "group": "patch", - "examples": { - "diff.c": [ - "ex/v1.7.2/diff.html#git_patch_to_buf-18" - ] - } - }, - "git_pathspec_new": { - "type": "function", - "file": "git2/pathspec.h", - "line": 82, - "lineto": 83, - "args": [ - { - "name": "out", - "type": "git_pathspec **", - "comment": "Output of the compiled pathspec" - }, - { - "name": "pathspec", - "type": "const git_strarray *", - "comment": "A git_strarray of the paths to match" - } - ], - "argline": "git_pathspec **out, const git_strarray *pathspec", - "sig": "git_pathspec **::const git_strarray *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Compile a pathspec

\n", - "comments": "", - "group": "pathspec", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_pathspec_new-40" - ] - } - }, - "git_pathspec_free": { - "type": "function", - "file": "git2/pathspec.h", - "line": 90, - "lineto": 90, - "args": [ - { - "name": "ps", - "type": "git_pathspec *", - "comment": "The compiled pathspec" - } - ], - "argline": "git_pathspec *ps", - "sig": "git_pathspec *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a pathspec

\n", - "comments": "", - "group": "pathspec", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_pathspec_free-41" - ] - } - }, - "git_pathspec_matches_path": { - "type": "function", - "file": "git2/pathspec.h", - "line": 105, - "lineto": 106, - "args": [ - { - "name": "ps", - "type": "const git_pathspec *", - "comment": "The compiled pathspec" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "path", - "type": "const char *", - "comment": "The pathname to attempt to match" - } - ], - "argline": "const git_pathspec *ps, uint32_t flags, const char *path", - "sig": "const git_pathspec *::uint32_t::const char *", - "return": { - "type": "int", - "comment": " 1 is path matches spec, 0 if it does not" - }, - "description": "

Try to match a path against a pathspec

\n", - "comments": "

Unlike most of the other pathspec matching functions, this will not fall back on the native case-sensitivity for your platform. You must explicitly pass flags to control case sensitivity or else this will fall back on being case sensitive.

\n", - "group": "pathspec" - }, - "git_pathspec_match_workdir": { - "type": "function", - "file": "git2/pathspec.h", - "line": 130, - "lineto": 134, - "args": [ - { - "name": "out", - "type": "git_pathspec_match_list **", - "comment": "Output list of matches; pass NULL to just get return value" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository in which to match; bare repo is an error" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "ps", - "type": "git_pathspec *", - "comment": "Pathspec to be matched" - } - ], - "argline": "git_pathspec_match_list **out, git_repository *repo, uint32_t flags, git_pathspec *ps", - "sig": "git_pathspec_match_list **::git_repository *::uint32_t::git_pathspec *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag was given" - }, - "description": "

Match a pathspec against the working directory of a repository.

\n", - "comments": "

This matches the pathspec against the current files in the working directory of the repository. It is an error to invoke this on a bare repo. This handles git ignores (i.e. ignored files will not be considered to match the pathspec unless the file is tracked in the index).

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", - "group": "pathspec" - }, - "git_pathspec_match_index": { - "type": "function", - "file": "git2/pathspec.h", - "line": 159, - "lineto": 163, - "args": [ - { - "name": "out", - "type": "git_pathspec_match_list **", - "comment": "Output list of matches; pass NULL to just get return value" - }, - { - "name": "index", - "type": "git_index *", - "comment": "The index to match against" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "ps", - "type": "git_pathspec *", - "comment": "Pathspec to be matched" - } - ], - "argline": "git_pathspec_match_list **out, git_index *index, uint32_t flags, git_pathspec *ps", - "sig": "git_pathspec_match_list **::git_index *::uint32_t::git_pathspec *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" - }, - "description": "

Match a pathspec against entries in an index.

\n", - "comments": "

This matches the pathspec against the files in the repository index.

\n\n

NOTE: At the moment, the case sensitivity of this match is controlled by the current case-sensitivity of the index object itself and the USE_CASE and IGNORE_CASE flags will have no effect. This behavior will be corrected in a future release.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", - "group": "pathspec" - }, - "git_pathspec_match_tree": { - "type": "function", - "file": "git2/pathspec.h", - "line": 183, - "lineto": 187, - "args": [ - { - "name": "out", - "type": "git_pathspec_match_list **", - "comment": "Output list of matches; pass NULL to just get return value" - }, - { - "name": "tree", - "type": "git_tree *", - "comment": "The root-level tree to match against" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "ps", - "type": "git_pathspec *", - "comment": "Pathspec to be matched" - } - ], - "argline": "git_pathspec_match_list **out, git_tree *tree, uint32_t flags, git_pathspec *ps", - "sig": "git_pathspec_match_list **::git_tree *::uint32_t::git_pathspec *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" - }, - "description": "

Match a pathspec against files in a tree.

\n", - "comments": "

This matches the pathspec against the files in the given tree.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", - "group": "pathspec", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_pathspec_match_tree-42" - ] - } - }, - "git_pathspec_match_diff": { - "type": "function", - "file": "git2/pathspec.h", - "line": 207, - "lineto": 211, - "args": [ - { - "name": "out", - "type": "git_pathspec_match_list **", - "comment": "Output list of matches; pass NULL to just get return value" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "A generated diff list" - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Combination of git_pathspec_flag_t options to control match" - }, - { - "name": "ps", - "type": "git_pathspec *", - "comment": "Pathspec to be matched" - } - ], - "argline": "git_pathspec_match_list **out, git_diff *diff, uint32_t flags, git_pathspec *ps", - "sig": "git_pathspec_match_list **::git_diff *::uint32_t::git_pathspec *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" - }, - "description": "

Match a pathspec against files in a diff list.

\n", - "comments": "

This matches the pathspec against the files in the given diff list.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", - "group": "pathspec" - }, - "git_pathspec_match_list_free": { - "type": "function", - "file": "git2/pathspec.h", - "line": 218, - "lineto": 218, - "args": [ - { - "name": "m", - "type": "git_pathspec_match_list *", - "comment": "The git_pathspec_match_list to be freed" - } - ], - "argline": "git_pathspec_match_list *m", - "sig": "git_pathspec_match_list *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free memory associates with a git_pathspec_match_list

\n", - "comments": "", - "group": "pathspec" - }, - "git_pathspec_match_list_entrycount": { - "type": "function", - "file": "git2/pathspec.h", - "line": 226, - "lineto": 227, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - } - ], - "argline": "const git_pathspec_match_list *m", - "sig": "const git_pathspec_match_list *", - "return": { - "type": "size_t", - "comment": " Number of items in match list" - }, - "description": "

Get the number of items in a match list.

\n", - "comments": "", - "group": "pathspec" - }, - "git_pathspec_match_list_entry": { - "type": "function", - "file": "git2/pathspec.h", - "line": 239, - "lineto": 240, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - }, - { - "name": "pos", - "type": "size_t", - "comment": "The index into the list" - } - ], - "argline": "const git_pathspec_match_list *m, size_t pos", - "sig": "const git_pathspec_match_list *::size_t", - "return": { - "type": "const char *", - "comment": " The filename of the match" - }, - "description": "

Get a matching filename by position.

\n", - "comments": "

This routine cannot be used if the match list was generated by git_pathspec_match_diff. If so, it will always return NULL.

\n", - "group": "pathspec" - }, - "git_pathspec_match_list_diff_entry": { - "type": "function", - "file": "git2/pathspec.h", - "line": 252, - "lineto": 253, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - }, - { - "name": "pos", - "type": "size_t", - "comment": "The index into the list" - } - ], - "argline": "const git_pathspec_match_list *m, size_t pos", - "sig": "const git_pathspec_match_list *::size_t", - "return": { - "type": "const git_diff_delta *", - "comment": " The filename of the match" - }, - "description": "

Get a matching diff delta by position.

\n", - "comments": "

This routine can only be used if the match list was generated by git_pathspec_match_diff. Otherwise it will always return NULL.

\n", - "group": "pathspec" - }, - "git_pathspec_match_list_failed_entrycount": { - "type": "function", - "file": "git2/pathspec.h", - "line": 264, - "lineto": 265, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - } - ], - "argline": "const git_pathspec_match_list *m", - "sig": "const git_pathspec_match_list *", - "return": { - "type": "size_t", - "comment": " Number of items in original pathspec that had no matches" - }, - "description": "

Get the number of pathspec items that did not match.

\n", - "comments": "

This will be zero unless you passed GIT_PATHSPEC_FIND_FAILURES when generating the git_pathspec_match_list.

\n", - "group": "pathspec" - }, - "git_pathspec_match_list_failed_entry": { - "type": "function", - "file": "git2/pathspec.h", - "line": 276, - "lineto": 277, - "args": [ - { - "name": "m", - "type": "const git_pathspec_match_list *", - "comment": "The git_pathspec_match_list object" - }, - { - "name": "pos", - "type": "size_t", - "comment": "The index into the failed items" - } - ], - "argline": "const git_pathspec_match_list *m, size_t pos", - "sig": "const git_pathspec_match_list *::size_t", - "return": { - "type": "const char *", - "comment": " The pathspec pattern that didn't match anything" - }, - "description": "

Get an original pathspec string that had no matches.

\n", - "comments": "

This will be return NULL for positions out of range.

\n", - "group": "pathspec" - }, - "git_proxy_options_init": { - "type": "function", - "file": "git2/proxy.h", - "line": 94, - "lineto": 94, - "args": [ - { - "name": "opts", - "type": "git_proxy_options *", - "comment": "The `git_proxy_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_PROXY_OPTIONS_VERSION`." - } - ], - "argline": "git_proxy_options *opts, unsigned int version", - "sig": "git_proxy_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_proxy_options structure

\n", - "comments": "

Initializes a git_proxy_options with default values. Equivalent to creating an instance with GIT_PROXY_OPTIONS_INIT.

\n", - "group": "proxy" - }, - "git_rebase_options_init": { - "type": "function", - "file": "git2/rebase.h", - "line": 199, - "lineto": 201, - "args": [ - { - "name": "opts", - "type": "git_rebase_options *", - "comment": "The `git_rebase_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REBASE_OPTIONS_VERSION`." - } - ], - "argline": "git_rebase_options *opts, unsigned int version", - "sig": "git_rebase_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_rebase_options structure

\n", - "comments": "

Initializes a git_rebase_options with default values. Equivalent to creating an instance with GIT_REBASE_OPTIONS_INIT.

\n", - "group": "rebase" - }, - "git_rebase_init": { - "type": "function", - "file": "git2/rebase.h", - "line": 220, - "lineto": 226, - "args": [ - { - "name": "out", - "type": "git_rebase **", - "comment": "Pointer to store the rebase object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository to perform the rebase" - }, - { - "name": "branch", - "type": "const git_annotated_commit *", - "comment": "The terminal commit to rebase, or NULL to rebase the\n current branch" - }, - { - "name": "upstream", - "type": "const git_annotated_commit *", - "comment": "The commit to begin rebasing from, or NULL to rebase all\n reachable commits" - }, - { - "name": "onto", - "type": "const git_annotated_commit *", - "comment": "The branch to rebase onto, or NULL to rebase onto the given\n upstream" - }, - { - "name": "opts", - "type": "const git_rebase_options *", - "comment": "Options to specify how rebase is performed, or NULL" - } - ], - "argline": "git_rebase **out, git_repository *repo, const git_annotated_commit *branch, const git_annotated_commit *upstream, const git_annotated_commit *onto, const git_rebase_options *opts", - "sig": "git_rebase **::git_repository *::const git_annotated_commit *::const git_annotated_commit *::const git_annotated_commit *::const git_rebase_options *", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initializes a rebase operation to rebase the changes in branch\n relative to upstream onto another branch. To begin the rebase\n process, call git_rebase_next. When you have finished with this\n object, call git_rebase_free.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_open": { - "type": "function", - "file": "git2/rebase.h", - "line": 237, - "lineto": 240, - "args": [ - { - "name": "out", - "type": "git_rebase **", - "comment": "Pointer to store the rebase object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository that has a rebase in-progress" - }, - { - "name": "opts", - "type": "const git_rebase_options *", - "comment": "Options to specify how rebase is performed" - } - ], - "argline": "git_rebase **out, git_repository *repo, const git_rebase_options *opts", - "sig": "git_rebase **::git_repository *::const git_rebase_options *", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Opens an existing rebase that was previously started by either an\n invocation of git_rebase_init or by another client.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_orig_head_name": { - "type": "function", - "file": "git2/rebase.h", - "line": 248, - "lineto": 248, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase." - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "const char *", - "comment": " The original `HEAD` ref name" - }, - "description": "

Gets the original HEAD ref name for merge rebases.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_orig_head_id": { - "type": "function", - "file": "git2/rebase.h", - "line": 256, - "lineto": 256, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase." - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "const git_oid *", - "comment": " The original `HEAD` id" - }, - "description": "

Gets the original HEAD id for merge rebases.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_onto_name": { - "type": "function", - "file": "git2/rebase.h", - "line": 264, - "lineto": 264, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase." - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "const char *", - "comment": " The `onto` ref name" - }, - "description": "

Gets the onto ref name for merge rebases.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_onto_id": { - "type": "function", - "file": "git2/rebase.h", - "line": 272, - "lineto": 272, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase." - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "const git_oid *", - "comment": " The `onto` id" - }, - "description": "

Gets the onto id for merge rebases.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_operation_entrycount": { - "type": "function", - "file": "git2/rebase.h", - "line": 280, - "lineto": 280, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase" - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "size_t", - "comment": " The number of rebase operations in total" - }, - "description": "

Gets the count of rebase operations that are to be applied.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_operation_current": { - "type": "function", - "file": "git2/rebase.h", - "line": 291, - "lineto": 291, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase" - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "size_t", - "comment": " The index of the rebase operation currently being applied." - }, - "description": "

Gets the index of the rebase operation that is currently being applied.\n If the first operation has not yet been applied (because you have\n called init but not yet next) then this returns\n GIT_REBASE_NO_OPERATION.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_operation_byindex": { - "type": "function", - "file": "git2/rebase.h", - "line": 300, - "lineto": 302, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase" - }, - { - "name": "idx", - "type": "size_t", - "comment": "The index of the rebase operation to retrieve" - } - ], - "argline": "git_rebase *rebase, size_t idx", - "sig": "git_rebase *::size_t", - "return": { - "type": "git_rebase_operation *", - "comment": " The rebase operation or NULL if `idx` was out of bounds" - }, - "description": "

Gets the rebase operation specified by the given index.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_next": { - "type": "function", - "file": "git2/rebase.h", - "line": 315, - "lineto": 317, - "args": [ - { - "name": "operation", - "type": "git_rebase_operation **", - "comment": "Pointer to store the rebase operation that is to be performed next" - }, - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase in progress" - } - ], - "argline": "git_rebase_operation **operation, git_rebase *rebase", - "sig": "git_rebase_operation **::git_rebase *", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Performs the next rebase operation and returns the information about it.\n If the operation is one that applies a patch (which is any operation except\n GIT_REBASE_OPERATION_EXEC) then the patch will be applied and the index and\n working directory will be updated with the changes. If there are conflicts,\n you will need to address those before committing the changes.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_inmemory_index": { - "type": "function", - "file": "git2/rebase.h", - "line": 334, - "lineto": 336, - "args": [ - { - "name": "index", - "type": "git_index **", - "comment": "The result index of the last operation." - }, - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The in-progress rebase." - } - ], - "argline": "git_index **index, git_rebase *rebase", - "sig": "git_index **::git_rebase *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Gets the index produced by the last operation, which is the result\n of git_rebase_next and which will be committed by the next\n invocation of git_rebase_commit. This is useful for resolving\n conflicts in an in-memory rebase before committing them. You must\n call git_index_free when you are finished with this.

\n", - "comments": "

This is only applicable for in-memory rebases; for rebases within a working directory, the changes were applied to the repository's index.

\n", - "group": "rebase" - }, - "git_rebase_commit": { - "type": "function", - "file": "git2/rebase.h", - "line": 360, - "lineto": 366, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "Pointer in which to store the OID of the newly created commit" - }, - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase that is in-progress" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "The author of the updated commit, or NULL to keep the\n author from the original commit" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "The committer of the rebase" - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": "The encoding for the message in the commit,\n represented with a standard encoding name. If message is NULL,\n this should also be NULL, and the encoding from the original\n commit will be maintained. If message is specified, this may be\n NULL to indicate that \"UTF-8\" is to be used." - }, - { - "name": "message", - "type": "const char *", - "comment": "The message for this commit, or NULL to use the message\n from the original commit." - } - ], - "argline": "git_oid *id, git_rebase *rebase, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message", - "sig": "git_oid *::git_rebase *::const git_signature *::const git_signature *::const char *::const char *", - "return": { - "type": "int", - "comment": " Zero on success, GIT_EUNMERGED if there are unmerged changes in\n the index, GIT_EAPPLIED if the current commit has already\n been applied to the upstream and there is nothing to commit,\n -1 on failure." - }, - "description": "

Commits the current patch. You must have resolved any conflicts that\n were introduced during the patch application from the git_rebase_next\n invocation.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_abort": { - "type": "function", - "file": "git2/rebase.h", - "line": 376, - "lineto": 376, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase that is in-progress" - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "int", - "comment": " Zero on success; GIT_ENOTFOUND if a rebase is not in progress,\n -1 on other errors." - }, - "description": "

Aborts a rebase that is currently in progress, resetting the repository\n and working directory to their state before rebase began.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_finish": { - "type": "function", - "file": "git2/rebase.h", - "line": 386, - "lineto": 388, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase that is in-progress" - }, - { - "name": "signature", - "type": "const git_signature *", - "comment": "The identity that is finishing the rebase (optional)" - } - ], - "argline": "git_rebase *rebase, const git_signature *signature", - "sig": "git_rebase *::const git_signature *", - "return": { - "type": "int", - "comment": " Zero on success; -1 on error" - }, - "description": "

Finishes a rebase that is currently in progress once all patches have\n been applied.

\n", - "comments": "", - "group": "rebase" - }, - "git_rebase_free": { - "type": "function", - "file": "git2/rebase.h", - "line": 395, - "lineto": 395, - "args": [ - { - "name": "rebase", - "type": "git_rebase *", - "comment": "The rebase object" - } - ], - "argline": "git_rebase *rebase", - "sig": "git_rebase *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Frees the git_rebase object.

\n", - "comments": "", - "group": "rebase" - }, - "git_refdb_new": { - "type": "function", - "file": "git2/refdb.h", - "line": 35, - "lineto": 35, - "args": [ - { - "name": "out", - "type": "git_refdb **", - "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_refdb **out, git_repository *repo", - "sig": "git_refdb **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new reference database with no backends.

\n", - "comments": "

Before the Ref DB can be used for read/writing, a custom database backend must be manually set using git_refdb_set_backend()

\n", - "group": "refdb" - }, - "git_refdb_open": { - "type": "function", - "file": "git2/refdb.h", - "line": 49, - "lineto": 49, - "args": [ - { - "name": "out", - "type": "git_refdb **", - "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_refdb **out, git_repository *repo", - "sig": "git_refdb **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new reference database and automatically add\n the default backends:

\n", - "comments": "
    \n
  • git_refdb_dir: read and write loose and packed refs from disk, assuming the repository dir as the folder
  • \n
\n", - "group": "refdb" - }, - "git_refdb_compress": { - "type": "function", - "file": "git2/refdb.h", - "line": 59, - "lineto": 59, - "args": [ - { - "name": "refdb", - "type": "git_refdb *", - "comment": "The reference database to optimize." - } - ], - "argline": "git_refdb *refdb", - "sig": "git_refdb *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Suggests that the given refdb compress or optimize its references.\n This mechanism is implementation specific. For on-disk reference\n databases, for example, this may pack all loose references.

\n", - "comments": "", - "group": "refdb" - }, - "git_refdb_free": { - "type": "function", - "file": "git2/refdb.h", - "line": 66, - "lineto": 66, - "args": [ - { - "name": "refdb", - "type": "git_refdb *", - "comment": "reference database pointer or NULL" - } - ], - "argline": "git_refdb *refdb", - "sig": "git_refdb *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open reference database.

\n", - "comments": "", - "group": "refdb" - }, - "git_reflog_read": { - "type": "function", - "file": "git2/reflog.h", - "line": 38, - "lineto": 38, - "args": [ - { - "name": "out", - "type": "git_reflog **", - "comment": "pointer to reflog" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "name", - "type": "const char *", - "comment": "reference to look up" - } - ], - "argline": "git_reflog **out, git_repository *repo, const char *name", - "sig": "git_reflog **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Read the reflog for the given reference

\n", - "comments": "

If there is no reflog file for the given reference yet, an empty reflog object will be returned.

\n\n

The reflog must be freed manually by using git_reflog_free().

\n", - "group": "reflog" - }, - "git_reflog_write": { - "type": "function", - "file": "git2/reflog.h", - "line": 47, - "lineto": 47, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "an existing reflog object" - } - ], - "argline": "git_reflog *reflog", - "sig": "git_reflog *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write an existing in-memory reflog object back to disk\n using an atomic file lock.

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_append": { - "type": "function", - "file": "git2/reflog.h", - "line": 60, - "lineto": 60, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "an existing reflog object" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the OID the reference is now pointing to" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "the signature of the committer" - }, - { - "name": "msg", - "type": "const char *", - "comment": "the reflog message" - } - ], - "argline": "git_reflog *reflog, const git_oid *id, const git_signature *committer, const char *msg", - "sig": "git_reflog *::const git_oid *::const git_signature *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a new entry to the in-memory reflog.

\n", - "comments": "

msg is optional and can be NULL.

\n", - "group": "reflog" - }, - "git_reflog_rename": { - "type": "function", - "file": "git2/reflog.h", - "line": 75, - "lineto": 75, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "old_name", - "type": "const char *", - "comment": "the old name of the reference" - }, - { - "name": "name", - "type": "const char *", - "comment": "the new name of the reference" - } - ], - "argline": "git_repository *repo, const char *old_name, const char *name", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Rename a reflog

\n", - "comments": "

The reflog to be renamed is expected to already exist

\n\n

The new name will be checked for validity. See git_reference_create_symbolic() for rules about valid names.

\n", - "group": "reflog" - }, - "git_reflog_delete": { - "type": "function", - "file": "git2/reflog.h", - "line": 84, - "lineto": 84, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "name", - "type": "const char *", - "comment": "the reflog to delete" - } - ], - "argline": "git_repository *repo, const char *name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Delete the reflog for the given reference

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entrycount": { - "type": "function", - "file": "git2/reflog.h", - "line": 92, - "lineto": 92, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "the previously loaded reflog" - } - ], - "argline": "git_reflog *reflog", - "sig": "git_reflog *", - "return": { - "type": "size_t", - "comment": " the number of log entries" - }, - "description": "

Get the number of log entries in a reflog

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entry_byindex": { - "type": "function", - "file": "git2/reflog.h", - "line": 105, - "lineto": 105, - "args": [ - { - "name": "reflog", - "type": "const git_reflog *", - "comment": "a previously loaded reflog" - }, - { - "name": "idx", - "type": "size_t", - "comment": "the position of the entry to lookup. Should be greater than or\n equal to 0 (zero) and less than `git_reflog_entrycount()`." - } - ], - "argline": "const git_reflog *reflog, size_t idx", - "sig": "const git_reflog *::size_t", - "return": { - "type": "const git_reflog_entry *", - "comment": " the entry; NULL if not found" - }, - "description": "

Lookup an entry by its index

\n", - "comments": "

Requesting the reflog entry with an index of 0 (zero) will return the most recently created entry.

\n", - "group": "reflog" - }, - "git_reflog_drop": { - "type": "function", - "file": "git2/reflog.h", - "line": 124, - "lineto": 127, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "a previously loaded reflog." - }, - { - "name": "idx", - "type": "size_t", - "comment": "the position of the entry to remove. Should be greater than or\n equal to 0 (zero) and less than `git_reflog_entrycount()`." - }, - { - "name": "rewrite_previous_entry", - "type": "int", - "comment": "1 to rewrite the history; 0 otherwise." - } - ], - "argline": "git_reflog *reflog, size_t idx, int rewrite_previous_entry", - "sig": "git_reflog *::size_t::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if the entry doesn't exist\n or an error code." - }, - "description": "

Remove an entry from the reflog by its index

\n", - "comments": "

To ensure there's no gap in the log history, set rewrite_previous_entry param value to 1. When deleting entry n, member old_oid of entry n-1 (if any) will be updated with the value of member new_oid of entry n+1.

\n", - "group": "reflog" - }, - "git_reflog_entry_id_old": { - "type": "function", - "file": "git2/reflog.h", - "line": 135, - "lineto": 135, - "args": [ - { - "name": "entry", - "type": "const git_reflog_entry *", - "comment": "a reflog entry" - } - ], - "argline": "const git_reflog_entry *entry", - "sig": "const git_reflog_entry *", - "return": { - "type": "const git_oid *", - "comment": " the old oid" - }, - "description": "

Get the old oid

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entry_id_new": { - "type": "function", - "file": "git2/reflog.h", - "line": 143, - "lineto": 143, - "args": [ - { - "name": "entry", - "type": "const git_reflog_entry *", - "comment": "a reflog entry" - } - ], - "argline": "const git_reflog_entry *entry", - "sig": "const git_reflog_entry *", - "return": { - "type": "const git_oid *", - "comment": " the new oid at this time" - }, - "description": "

Get the new oid

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entry_committer": { - "type": "function", - "file": "git2/reflog.h", - "line": 151, - "lineto": 151, - "args": [ - { - "name": "entry", - "type": "const git_reflog_entry *", - "comment": "a reflog entry" - } - ], - "argline": "const git_reflog_entry *entry", - "sig": "const git_reflog_entry *", - "return": { - "type": "const git_signature *", - "comment": " the committer" - }, - "description": "

Get the committer of this entry

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_entry_message": { - "type": "function", - "file": "git2/reflog.h", - "line": 159, - "lineto": 159, - "args": [ - { - "name": "entry", - "type": "const git_reflog_entry *", - "comment": "a reflog entry" - } - ], - "argline": "const git_reflog_entry *entry", - "sig": "const git_reflog_entry *", - "return": { - "type": "const char *", - "comment": " the log msg" - }, - "description": "

Get the log message

\n", - "comments": "", - "group": "reflog" - }, - "git_reflog_free": { - "type": "function", - "file": "git2/reflog.h", - "line": 166, - "lineto": 166, - "args": [ - { - "name": "reflog", - "type": "git_reflog *", - "comment": "reflog to free" - } - ], - "argline": "git_reflog *reflog", - "sig": "git_reflog *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the reflog

\n", - "comments": "", - "group": "reflog" - }, - "git_reference_lookup": { - "type": "function", - "file": "git2/refs.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer to the looked-up reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to look up the reference" - }, - { - "name": "name", - "type": "const char *", - "comment": "the long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...)" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name", - "sig": "git_reference **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code." - }, - "description": "

Lookup a reference by name in a repository.

\n", - "comments": "

The returned reference must be freed by the user.

\n\n

The name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n", - "group": "reference", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_reference_lookup-15", - "ex/v1.7.2/checkout.html#git_reference_lookup-16" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_reference_lookup-53" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_reference_lookup-21" - ] - } - }, - "git_reference_name_to_id": { - "type": "function", - "file": "git2/refs.h", - "line": 54, - "lineto": 55, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer to oid to be filled in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository in which to look up the reference" - }, - { - "name": "name", - "type": "const char *", - "comment": "The long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...)" - } - ], - "argline": "git_oid *out, git_repository *repo, const char *name", - "sig": "git_oid *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code." - }, - "description": "

Lookup a reference by name and resolve immediately to OID.

\n", - "comments": "

This function provides a quick way to resolve a reference name straight through to the object id that it refers to. This avoids having to allocate or free any git_reference objects for simple situations.

\n\n

The name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n", - "group": "reference" - }, - "git_reference_dwim": { - "type": "function", - "file": "git2/refs.h", - "line": 68, - "lineto": 68, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer in which to store the reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to look" - }, - { - "name": "shorthand", - "type": "const char *", - "comment": "the short name for the reference" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *shorthand", - "sig": "git_reference **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a reference by DWIMing its short name

\n", - "comments": "

Apply the git precedence rules to the given shorthand to determine which reference the user is referring to.

\n", - "group": "reference", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_reference_dwim-22" - ] - } - }, - "git_reference_symbolic_create_matching": { - "type": "function", - "file": "git2/refs.h", - "line": 112, - "lineto": 112, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where that reference will live" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the reference" - }, - { - "name": "target", - "type": "const char *", - "comment": "The target of the reference" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - }, - { - "name": "current_value", - "type": "const char *", - "comment": "The expected value of the reference when updating" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *current_value, const char *log_message", - "sig": "git_reference **::git_repository *::const char *::const char *::int::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC, GIT_EMODIFIED or an error code" - }, - "description": "

Conditionally create a new symbolic reference.

\n", - "comments": "

A symbolic reference is a reference name that refers to another reference name. If the other name moves, the symbolic name will move, too. As a simple example, the "HEAD" reference might refer to "refs/heads/master" while on the "master" branch of a repository.

\n\n

The symbolic reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n\n

It will return GIT_EMODIFIED if the reference's value at the time of updating does not match the one passed through current_value (i.e. if the ref has changed since the user read it).

\n\n

If current_value is all zeros, this function will return GIT_EMODIFIED if the ref already exists.

\n", - "group": "reference" - }, - "git_reference_symbolic_create": { - "type": "function", - "file": "git2/refs.h", - "line": 148, - "lineto": 148, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where that reference will live" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the reference" - }, - { - "name": "target", - "type": "const char *", - "comment": "The target of the reference" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *log_message", - "sig": "git_reference **::git_repository *::const char *::const char *::int::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Create a new symbolic reference.

\n", - "comments": "

A symbolic reference is a reference name that refers to another reference name. If the other name moves, the symbolic name will move, too. As a simple example, the "HEAD" reference might refer to "refs/heads/master" while on the "master" branch of a repository.

\n\n

The symbolic reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", - "group": "reference" - }, - "git_reference_create": { - "type": "function", - "file": "git2/refs.h", - "line": 185, - "lineto": 185, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where that reference will live" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the reference" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The object id pointed to by the reference." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const char *log_message", - "sig": "git_reference **::git_repository *::const char *::const git_oid *::int::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Create a new direct reference.

\n", - "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", - "group": "reference", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_reference_create-23" - ] - } - }, - "git_reference_create_matching": { - "type": "function", - "file": "git2/refs.h", - "line": 228, - "lineto": 228, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where that reference will live" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of the reference" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The object id pointed to by the reference." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - }, - { - "name": "current_id", - "type": "const git_oid *", - "comment": "The expected value of the reference at the time of update" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const git_oid *current_id, const char *log_message", - "sig": "git_reference **::git_repository *::const char *::const git_oid *::int::const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EMODIFIED if the value of the reference\n has changed, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Conditionally create new direct reference

\n", - "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n\n

It will return GIT_EMODIFIED if the reference's value at the time of updating does not match the one passed through current_id (i.e. if the ref has changed since the user read it).

\n", - "group": "reference" - }, - "git_reference_target": { - "type": "function", - "file": "git2/refs.h", - "line": 243, - "lineto": 243, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const git_oid *", - "comment": " a pointer to the oid if available, NULL otherwise" - }, - "description": "

Get the OID pointed to by a direct reference.

\n", - "comments": "

Only available if the reference is direct (i.e. an object id reference, not a symbolic one).

\n\n

To find the OID of a symbolic ref, call git_reference_resolve() and then this function (or maybe use git_reference_name_to_id() to directly resolve a reference name all the way through to an OID).

\n", - "group": "reference", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_reference_target-54" - ] - } - }, - "git_reference_target_peel": { - "type": "function", - "file": "git2/refs.h", - "line": 254, - "lineto": 254, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const git_oid *", - "comment": " a pointer to the oid if available, NULL otherwise" - }, - "description": "

Return the peeled OID target of this reference.

\n", - "comments": "

This peeled OID only applies to direct references that point to a hard Tag object: it is the result of peeling such Tag.

\n", - "group": "reference" - }, - "git_reference_symbolic_target": { - "type": "function", - "file": "git2/refs.h", - "line": 264, - "lineto": 264, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const char *", - "comment": " a pointer to the name if available, NULL otherwise" - }, - "description": "

Get full name to the reference pointed to by a symbolic reference.

\n", - "comments": "

Only available if the reference is symbolic.

\n", - "group": "reference", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_reference_symbolic_target-55" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_reference_symbolic_target-24" - ] - } - }, - "git_reference_type": { - "type": "function", - "file": "git2/refs.h", - "line": 274, - "lineto": 274, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "git_reference_t", - "comment": " the type" - }, - "description": "

Get the type of a reference.

\n", - "comments": "

Either direct (GIT_REFERENCE_DIRECT) or symbolic (GIT_REFERENCE_SYMBOLIC)

\n", - "group": "reference", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_reference_type-56" - ] - } - }, - "git_reference_name": { - "type": "function", - "file": "git2/refs.h", - "line": 284, - "lineto": 284, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const char *", - "comment": " the full name for the ref" - }, - "description": "

Get the full name of a reference.

\n", - "comments": "

See git_reference_symbolic_create() for rules about valid names.

\n", - "group": "reference", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_reference_name-17" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_reference_name-25" - ] - } - }, - "git_reference_resolve": { - "type": "function", - "file": "git2/refs.h", - "line": 302, - "lineto": 302, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the peeled reference" - }, - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "git_reference **out, const git_reference *ref", - "sig": "git_reference **::const git_reference *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Resolve a symbolic reference to a direct reference.

\n", - "comments": "

This method iteratively peels a symbolic reference until it resolves to a direct reference to an OID.

\n\n

The peeled reference is returned in the resolved_ref argument, and must be freed manually once it's no longer needed.

\n\n

If a direct reference is passed as an argument, a copy of that reference is returned. This copy must be manually freed too.

\n", - "group": "reference" - }, - "git_reference_owner": { - "type": "function", - "file": "git2/refs.h", - "line": 310, - "lineto": 310, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "git_repository *", - "comment": " a pointer to the repo" - }, - "description": "

Get the repository where a reference resides.

\n", - "comments": "", - "group": "reference" - }, - "git_reference_symbolic_set_target": { - "type": "function", - "file": "git2/refs.h", - "line": 332, - "lineto": 336, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "ref", - "type": "git_reference *", - "comment": "The reference" - }, - { - "name": "target", - "type": "const char *", - "comment": "The new target for the reference" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_reference *ref, const char *target, const char *log_message", - "sig": "git_reference **::git_reference *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Create a new reference with the same name as the given reference but a\n different symbolic target. The reference must be a symbolic reference,\n otherwise this will fail.

\n", - "comments": "

The new reference will be written to disk, overwriting the given reference.

\n\n

The target name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", - "group": "reference" - }, - "git_reference_set_target": { - "type": "function", - "file": "git2/refs.h", - "line": 352, - "lineto": 356, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "Pointer to the newly created reference" - }, - { - "name": "ref", - "type": "git_reference *", - "comment": "The reference" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "The new target OID for the reference" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **out, git_reference *ref, const git_oid *id, const char *log_message", - "sig": "git_reference **::git_reference *::const git_oid *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EMODIFIED if the value of the reference\n has changed since it was read, or an error code" - }, - "description": "

Conditionally create a new reference with the same name as the given reference but a\n different OID target. The reference must be a direct reference, otherwise\n this will fail.

\n", - "comments": "

The new reference will be written to disk, overwriting the given reference.

\n", - "group": "reference", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_reference_set_target-26" - ] - } - }, - "git_reference_rename": { - "type": "function", - "file": "git2/refs.h", - "line": 381, - "lineto": 386, - "args": [ - { - "name": "new_ref", - "type": "git_reference **", - "comment": null - }, - { - "name": "ref", - "type": "git_reference *", - "comment": "The reference to rename" - }, - { - "name": "new_name", - "type": "const char *", - "comment": "The new name for the reference" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite an existing reference" - }, - { - "name": "log_message", - "type": "const char *", - "comment": "The one line long message to be appended to the reflog" - } - ], - "argline": "git_reference **new_ref, git_reference *ref, const char *new_name, int force, const char *log_message", - "sig": "git_reference **::git_reference *::const char *::int::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Rename an existing reference.

\n", - "comments": "

This method works for both direct and symbolic references.

\n\n

The new name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n\n

If the force flag is not enabled, and there's already a reference with the given name, the renaming will fail.

\n\n

IMPORTANT: The user needs to write a proper reflog entry if the reflog is enabled for the repository. We only rename the reflog if it exists.

\n", - "group": "reference" - }, - "git_reference_delete": { - "type": "function", - "file": "git2/refs.h", - "line": 401, - "lineto": 401, - "args": [ - { - "name": "ref", - "type": "git_reference *", - "comment": "The reference to remove" - } - ], - "argline": "git_reference *ref", - "sig": "git_reference *", - "return": { - "type": "int", - "comment": " 0, GIT_EMODIFIED or an error code" - }, - "description": "

Delete an existing reference.

\n", - "comments": "

This method works for both direct and symbolic references. The reference will be immediately removed on disk but the memory will not be freed. Callers must call git_reference_free.

\n\n

This function will return an error if the reference has changed from the time it was looked up.

\n", - "group": "reference" - }, - "git_reference_remove": { - "type": "function", - "file": "git2/refs.h", - "line": 412, - "lineto": 412, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "name", - "type": "const char *", - "comment": "The reference to remove" - } - ], - "argline": "git_repository *repo, const char *name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Delete an existing reference by name

\n", - "comments": "

This method removes the named reference from the repository without looking at its old value.

\n", - "group": "reference" - }, - "git_reference_list": { - "type": "function", - "file": "git2/refs.h", - "line": 426, - "lineto": 426, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": "Pointer to a git_strarray structure where\n\t\tthe reference names will be stored" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the refs" - } - ], - "argline": "git_strarray *array, git_repository *repo", - "sig": "git_strarray *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Fill a list with all the references that can be found in a repository.

\n", - "comments": "

The string array will be filled with the names of all references; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free().

\n", - "group": "reference", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_reference_list-57" - ] - } - }, - "git_reference_foreach": { - "type": "function", - "file": "git2/refs.h", - "line": 466, - "lineto": 469, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the refs" - }, - { - "name": "callback", - "type": "git_reference_foreach_cb", - "comment": "Function which will be called for every listed ref" - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback" - } - ], - "argline": "git_repository *repo, git_reference_foreach_cb callback, void *payload", - "sig": "git_repository *::git_reference_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Perform a callback on each reference in the repository.

\n", - "comments": "

The callback function will be called for each reference in the repository, receiving the reference object and the payload value passed to this method. Returning a non-zero value from the callback will terminate the iteration.

\n\n

Note that the callback function is responsible to call git_reference_free on each reference passed to it.

\n", - "group": "reference" - }, - "git_reference_foreach_name": { - "type": "function", - "file": "git2/refs.h", - "line": 484, - "lineto": 487, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the refs" - }, - { - "name": "callback", - "type": "git_reference_foreach_name_cb", - "comment": "Function which will be called for every listed ref name" - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback" - } - ], - "argline": "git_repository *repo, git_reference_foreach_name_cb callback, void *payload", - "sig": "git_repository *::git_reference_foreach_name_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Perform a callback on the fully-qualified name of each reference.

\n", - "comments": "

The callback function will be called for each reference in the repository, receiving the name of the reference and the payload value passed to this method. Returning a non-zero value from the callback will terminate the iteration.

\n", - "group": "reference" - }, - "git_reference_dup": { - "type": "function", - "file": "git2/refs.h", - "line": 498, - "lineto": 498, - "args": [ - { - "name": "dest", - "type": "git_reference **", - "comment": "pointer where to store the copy" - }, - { - "name": "source", - "type": "git_reference *", - "comment": "object to copy" - } - ], - "argline": "git_reference **dest, git_reference *source", - "sig": "git_reference **::git_reference *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a copy of an existing reference.

\n", - "comments": "

Call git_reference_free to free the data.

\n", - "group": "reference" - }, - "git_reference_free": { - "type": "function", - "file": "git2/refs.h", - "line": 505, - "lineto": 505, - "args": [ - { - "name": "ref", - "type": "git_reference *", - "comment": "git_reference" - } - ], - "argline": "git_reference *ref", - "sig": "git_reference *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the given reference.

\n", - "comments": "", - "group": "reference", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_reference_free-18", - "ex/v1.7.2/checkout.html#git_reference_free-19", - "ex/v1.7.2/checkout.html#git_reference_free-20" - ], - "commit.c": [ - "ex/v1.7.2/commit.html#git_reference_free-7" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_reference_free-58" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_reference_free-27", - "ex/v1.7.2/merge.html#git_reference_free-28", - "ex/v1.7.2/merge.html#git_reference_free-29" - ], - "status.c": [ - "ex/v1.7.2/status.html#git_reference_free-1" - ] - } - }, - "git_reference_cmp": { - "type": "function", - "file": "git2/refs.h", - "line": 514, - "lineto": 516, - "args": [ - { - "name": "ref1", - "type": "const git_reference *", - "comment": "The first git_reference" - }, - { - "name": "ref2", - "type": "const git_reference *", - "comment": "The second git_reference" - } - ], - "argline": "const git_reference *ref1, const git_reference *ref2", - "sig": "const git_reference *::const git_reference *", - "return": { - "type": "int", - "comment": " 0 if the same, else a stable but meaningless ordering." - }, - "description": "

Compare two references.

\n", - "comments": "", - "group": "reference" - }, - "git_reference_iterator_new": { - "type": "function", - "file": "git2/refs.h", - "line": 525, - "lineto": 527, - "args": [ - { - "name": "out", - "type": "git_reference_iterator **", - "comment": "pointer in which to store the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_reference_iterator **out, git_repository *repo", - "sig": "git_reference_iterator **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an iterator for the repo's references

\n", - "comments": "", - "group": "reference" - }, - "git_reference_iterator_glob_new": { - "type": "function", - "file": "git2/refs.h", - "line": 538, - "lineto": 541, - "args": [ - { - "name": "out", - "type": "git_reference_iterator **", - "comment": "pointer in which to store the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "glob", - "type": "const char *", - "comment": "the glob to match against the reference names" - } - ], - "argline": "git_reference_iterator **out, git_repository *repo, const char *glob", - "sig": "git_reference_iterator **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an iterator for the repo's references that match the\n specified glob

\n", - "comments": "", - "group": "reference" - }, - "git_reference_next": { - "type": "function", - "file": "git2/refs.h", - "line": 550, - "lineto": 550, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer in which to store the reference" - }, - { - "name": "iter", - "type": "git_reference_iterator *", - "comment": "the iterator" - } - ], - "argline": "git_reference **out, git_reference_iterator *iter", - "sig": "git_reference **::git_reference_iterator *", - "return": { - "type": "int", - "comment": " 0, GIT_ITEROVER if there are no more; or an error code" - }, - "description": "

Get the next reference

\n", - "comments": "", - "group": "reference" - }, - "git_reference_next_name": { - "type": "function", - "file": "git2/refs.h", - "line": 563, - "lineto": 563, - "args": [ - { - "name": "out", - "type": "const char **", - "comment": "pointer in which to store the string" - }, - { - "name": "iter", - "type": "git_reference_iterator *", - "comment": "the iterator" - } - ], - "argline": "const char **out, git_reference_iterator *iter", - "sig": "const char **::git_reference_iterator *", - "return": { - "type": "int", - "comment": " 0, GIT_ITEROVER if there are no more; or an error code" - }, - "description": "

Get the next reference's name

\n", - "comments": "

This function is provided for convenience in case only the names are interesting as it avoids the allocation of the git_reference object which git_reference_next() needs.

\n", - "group": "reference" - }, - "git_reference_iterator_free": { - "type": "function", - "file": "git2/refs.h", - "line": 570, - "lineto": 570, - "args": [ - { - "name": "iter", - "type": "git_reference_iterator *", - "comment": "the iterator to free" - } - ], - "argline": "git_reference_iterator *iter", - "sig": "git_reference_iterator *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the iterator and its associated resources

\n", - "comments": "", - "group": "reference" - }, - "git_reference_foreach_glob": { - "type": "function", - "file": "git2/refs.h", - "line": 590, - "lineto": 594, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the refs" - }, - { - "name": "glob", - "type": "const char *", - "comment": "Pattern to match (fnmatch-style) against reference name." - }, - { - "name": "callback", - "type": "git_reference_foreach_name_cb", - "comment": "Function which will be called for every listed ref" - }, - { - "name": "payload", - "type": "void *", - "comment": "Additional data to pass to the callback" - } - ], - "argline": "git_repository *repo, const char *glob, git_reference_foreach_name_cb callback, void *payload", - "sig": "git_repository *::const char *::git_reference_foreach_name_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUSER on non-zero callback, or error code" - }, - "description": "

Perform a callback on each reference in the repository whose name\n matches the given pattern.

\n", - "comments": "

This function acts like git_reference_foreach() with an additional pattern match being applied to the reference name before issuing the callback function. See that function for more information.

\n\n

The pattern is matched using fnmatch or "glob" style where a '*' matches any sequence of letters, a '?' matches any letter, and square brackets can be used to define character ranges (such as "[0-9]" for digits).

\n", - "group": "reference" - }, - "git_reference_has_log": { - "type": "function", - "file": "git2/refs.h", - "line": 604, - "lineto": 604, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference's name" - } - ], - "argline": "git_repository *repo, const char *refname", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 when no reflog can be found, 1 when it exists;\n otherwise an error code." - }, - "description": "

Check if a reflog exists for the specified reference.

\n", - "comments": "", - "group": "reference" - }, - "git_reference_ensure_log": { - "type": "function", - "file": "git2/refs.h", - "line": 616, - "lineto": 616, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference's name" - } - ], - "argline": "git_repository *repo, const char *refname", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Ensure there is a reflog for a particular reference.

\n", - "comments": "

Make sure that successive updates to the reference will append to its log.

\n", - "group": "reference" - }, - "git_reference_is_branch": { - "type": "function", - "file": "git2/refs.h", - "line": 626, - "lineto": 626, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "A git reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 when the reference lives in the refs/heads\n namespace; 0 otherwise." - }, - "description": "

Check if a reference is a local branch.

\n", - "comments": "", - "group": "reference" - }, - "git_reference_is_remote": { - "type": "function", - "file": "git2/refs.h", - "line": 636, - "lineto": 636, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "A git reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 when the reference lives in the refs/remotes\n namespace; 0 otherwise." - }, - "description": "

Check if a reference is a remote tracking branch

\n", - "comments": "", - "group": "reference", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_reference_is_remote-21" - ] - } - }, - "git_reference_is_tag": { - "type": "function", - "file": "git2/refs.h", - "line": 646, - "lineto": 646, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "A git reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 when the reference lives in the refs/tags\n namespace; 0 otherwise." - }, - "description": "

Check if a reference is a tag

\n", - "comments": "", - "group": "reference" - }, - "git_reference_is_note": { - "type": "function", - "file": "git2/refs.h", - "line": 656, - "lineto": 656, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "A git reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "int", - "comment": " 1 when the reference lives in the refs/notes\n namespace; 0 otherwise." - }, - "description": "

Check if a reference is a note

\n", - "comments": "", - "group": "reference" - }, - "git_reference_normalize_name": { - "type": "function", - "file": "git2/refs.h", - "line": 712, - "lineto": 716, - "args": [ - { - "name": "buffer_out", - "type": "char *", - "comment": "User allocated buffer to store normalized name" - }, - { - "name": "buffer_size", - "type": "size_t", - "comment": "Size of buffer_out" - }, - { - "name": "name", - "type": "const char *", - "comment": "Reference name to be checked." - }, - { - "name": "flags", - "type": "unsigned int", - "comment": "Flags to constrain name validation rules - see the\n GIT_REFERENCE_FORMAT constants above." - } - ], - "argline": "char *buffer_out, size_t buffer_size, const char *name, unsigned int flags", - "sig": "char *::size_t::const char *::unsigned int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EBUFS if buffer is too small, GIT_EINVALIDSPEC\n or an error code." - }, - "description": "

Normalize reference name and check validity.

\n", - "comments": "

This will normalize the reference name by removing any leading slash '/' characters and collapsing runs of adjacent slashes between name components into a single slash.

\n\n

Once normalized, if the reference name is valid, it will be returned in the user allocated buffer.

\n\n

See git_reference_symbolic_create() for rules about valid names.

\n", - "group": "reference" - }, - "git_reference_peel": { - "type": "function", - "file": "git2/refs.h", - "line": 733, - "lineto": 736, - "args": [ - { - "name": "out", - "type": "git_object **", - "comment": "Pointer to the peeled git_object" - }, - { - "name": "ref", - "type": "const git_reference *", - "comment": "The reference to be processed" - }, - { - "name": "type", - "type": "git_object_t", - "comment": "The type of the requested object (GIT_OBJECT_COMMIT,\n GIT_OBJECT_TAG, GIT_OBJECT_TREE, GIT_OBJECT_BLOB or GIT_OBJECT_ANY)." - } - ], - "argline": "git_object **out, const git_reference *ref, git_object_t type", - "sig": "git_object **::const git_reference *::git_object_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EAMBIGUOUS, GIT_ENOTFOUND or an error code" - }, - "description": "

Recursively peel reference until object of the specified type is found.

\n", - "comments": "

The retrieved peeled object is owned by the repository and should be closed with the git_object_free method.

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until a non-tag object is met.

\n", - "group": "reference", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_reference_peel-30" - ] - } - }, - "git_reference_name_is_valid": { - "type": "function", - "file": "git2/refs.h", - "line": 753, - "lineto": 753, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "output pointer to set with validity of given reference name" - }, - { - "name": "refname", - "type": "const char *", - "comment": "name to be checked." - } - ], - "argline": "int *valid, const char *refname", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Ensure the reference name is well-formed.

\n", - "comments": "

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n", - "group": "reference" - }, - "git_reference_shorthand": { - "type": "function", - "file": "git2/refs.h", - "line": 767, - "lineto": 767, - "args": [ - { - "name": "ref", - "type": "const git_reference *", - "comment": "a reference" - } - ], - "argline": "const git_reference *ref", - "sig": "const git_reference *", - "return": { - "type": "const char *", - "comment": " the human-readable version of the name" - }, - "description": "

Get the reference's short name

\n", - "comments": "

This will transform the reference name into a name "human-readable" version. If no shortname is appropriate, it will return the full name.

\n\n

The memory is owned by the reference and must not be freed.

\n", - "group": "reference", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_reference_shorthand-2" - ] - } - }, - "git_refspec_parse": { - "type": "function", - "file": "git2/refspec.h", - "line": 32, - "lineto": 32, - "args": [ - { - "name": "refspec", - "type": "git_refspec **", - "comment": "a pointer to hold the refspec handle" - }, - { - "name": "input", - "type": "const char *", - "comment": "the refspec string" - }, - { - "name": "is_fetch", - "type": "int", - "comment": "is this a refspec for a fetch" - } - ], - "argline": "git_refspec **refspec, const char *input, int is_fetch", - "sig": "git_refspec **::const char *::int", - "return": { - "type": "int", - "comment": " 0 if the refspec string could be parsed, -1 otherwise" - }, - "description": "

Parse a given refspec string

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_free": { - "type": "function", - "file": "git2/refspec.h", - "line": 39, - "lineto": 39, - "args": [ - { - "name": "refspec", - "type": "git_refspec *", - "comment": "the refspec object" - } - ], - "argline": "git_refspec *refspec", - "sig": "git_refspec *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a refspec object which has been created by git_refspec_parse

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_src": { - "type": "function", - "file": "git2/refspec.h", - "line": 47, - "lineto": 47, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - } - ], - "argline": "const git_refspec *refspec", - "sig": "const git_refspec *", - "return": { - "type": "const char *", - "comment": " the refspec's source specifier" - }, - "description": "

Get the source specifier

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_dst": { - "type": "function", - "file": "git2/refspec.h", - "line": 55, - "lineto": 55, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - } - ], - "argline": "const git_refspec *refspec", - "sig": "const git_refspec *", - "return": { - "type": "const char *", - "comment": " the refspec's destination specifier" - }, - "description": "

Get the destination specifier

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_string": { - "type": "function", - "file": "git2/refspec.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - } - ], - "argline": "const git_refspec *refspec", - "sig": "const git_refspec *", - "return": { - "type": "const char *", - "comment": null - }, - "description": "

Get the refspec's string

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_force": { - "type": "function", - "file": "git2/refspec.h", - "line": 71, - "lineto": 71, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - } - ], - "argline": "const git_refspec *refspec", - "sig": "const git_refspec *", - "return": { - "type": "int", - "comment": " 1 if force update has been set, 0 otherwise" - }, - "description": "

Get the force update setting

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_direction": { - "type": "function", - "file": "git2/refspec.h", - "line": 79, - "lineto": 79, - "args": [ - { - "name": "spec", - "type": "const git_refspec *", - "comment": "refspec" - } - ], - "argline": "const git_refspec *spec", - "sig": "const git_refspec *", - "return": { - "type": "git_direction", - "comment": " GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" - }, - "description": "

Get the refspec's direction.

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_src_matches": { - "type": "function", - "file": "git2/refspec.h", - "line": 88, - "lineto": 88, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the name of the reference to check" - } - ], - "argline": "const git_refspec *refspec, const char *refname", - "sig": "const git_refspec *::const char *", - "return": { - "type": "int", - "comment": " 1 if the refspec matches, 0 otherwise" - }, - "description": "

Check if a refspec's source descriptor matches a reference

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_dst_matches": { - "type": "function", - "file": "git2/refspec.h", - "line": 97, - "lineto": 97, - "args": [ - { - "name": "refspec", - "type": "const git_refspec *", - "comment": "the refspec" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the name of the reference to check" - } - ], - "argline": "const git_refspec *refspec, const char *refname", - "sig": "const git_refspec *::const char *", - "return": { - "type": "int", - "comment": " 1 if the refspec matches, 0 otherwise" - }, - "description": "

Check if a refspec's destination descriptor matches a reference

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_transform": { - "type": "function", - "file": "git2/refspec.h", - "line": 107, - "lineto": 107, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "where to store the target name" - }, - { - "name": "spec", - "type": "const git_refspec *", - "comment": "the refspec" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the reference to transform" - } - ], - "argline": "git_buf *out, const git_refspec *spec, const char *name", - "sig": "git_buf *::const git_refspec *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EBUFS or another error" - }, - "description": "

Transform a reference to its target following the refspec's rules

\n", - "comments": "", - "group": "refspec" - }, - "git_refspec_rtransform": { - "type": "function", - "file": "git2/refspec.h", - "line": 117, - "lineto": 117, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "where to store the source reference name" - }, - { - "name": "spec", - "type": "const git_refspec *", - "comment": "the refspec" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the reference to transform" - } - ], - "argline": "git_buf *out, const git_refspec *spec, const char *name", - "sig": "git_buf *::const git_refspec *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EBUFS or another error" - }, - "description": "

Transform a target reference to its source reference following the refspec's rules

\n", - "comments": "", - "group": "refspec" - }, - "git_remote_create": { - "type": "function", - "file": "git2/remote.h", - "line": 38, - "lineto": 42, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "the resulting remote" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to create the remote" - }, - { - "name": "name", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote's url" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *name, const char *url", - "sig": "git_remote **::git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Add a remote with the default fetch refspec to the repository's configuration.

\n", - "comments": "", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_create-1" - ] - } - }, - "git_remote_create_options_init": { - "type": "function", - "file": "git2/remote.h", - "line": 121, - "lineto": 123, - "args": [ - { - "name": "opts", - "type": "git_remote_create_options *", - "comment": "The `git_remote_create_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REMOTE_CREATE_OPTIONS_VERSION`." - } - ], - "argline": "git_remote_create_options *opts, unsigned int version", - "sig": "git_remote_create_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_remote_create_options structure

\n", - "comments": "

Initializes a git_remote_create_options with default values. Equivalent to creating an instance with GIT_REMOTE_CREATE_OPTIONS_INIT.

\n", - "group": "remote" - }, - "git_remote_create_with_opts": { - "type": "function", - "file": "git2/remote.h", - "line": 137, - "lineto": 140, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "the resulting remote" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote's url" - }, - { - "name": "opts", - "type": "const git_remote_create_options *", - "comment": "the remote creation options" - } - ], - "argline": "git_remote **out, const char *url, const git_remote_create_options *opts", - "sig": "git_remote **::const char *::const git_remote_create_options *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Create a remote, with options.

\n", - "comments": "

This function allows more fine-grained control over the remote creation.

\n\n

Passing NULL as the opts argument will result in a detached remote.

\n", - "group": "remote" - }, - "git_remote_create_with_fetchspec": { - "type": "function", - "file": "git2/remote.h", - "line": 153, - "lineto": 158, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "the resulting remote" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to create the remote" - }, - { - "name": "name", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote's url" - }, - { - "name": "fetch", - "type": "const char *", - "comment": "the remote fetch value" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *name, const char *url, const char *fetch", - "sig": "git_remote **::git_repository *::const char *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Add a remote with the provided fetch refspec (or default if NULL) to the repository's\n configuration.

\n", - "comments": "", - "group": "remote" - }, - "git_remote_create_anonymous": { - "type": "function", - "file": "git2/remote.h", - "line": 171, - "lineto": 174, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "pointer to the new remote objects" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the associated repository" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote repository's URL" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *url", - "sig": "git_remote **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create an anonymous remote

\n", - "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.7.2/fetch.html#git_remote_create_anonymous-4" - ], - "ls-remote.c": [ - "ex/v1.7.2/ls-remote.html#git_remote_create_anonymous-2" - ] - } - }, - "git_remote_create_detached": { - "type": "function", - "file": "git2/remote.h", - "line": 190, - "lineto": 192, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "pointer to the new remote objects" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote repository's URL" - } - ], - "argline": "git_remote **out, const char *url", - "sig": "git_remote **::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a remote without a connected local repo

\n", - "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n\n

Contrasted with git_remote_create_anonymous, a detached remote will not consider any repo configuration values (such as insteadof url substitutions).

\n", - "group": "remote" - }, - "git_remote_lookup": { - "type": "function", - "file": "git2/remote.h", - "line": 205, - "lineto": 205, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "pointer to the new remote object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the associated repository" - }, - { - "name": "name", - "type": "const char *", - "comment": "the remote's name" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *name", - "sig": "git_remote **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Get the information for a particular remote

\n", - "comments": "

The name will be checked for validity. See git_tag_create() for rules about valid names.

\n", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.7.2/fetch.html#git_remote_lookup-5" - ], - "ls-remote.c": [ - "ex/v1.7.2/ls-remote.html#git_remote_lookup-3" - ], - "push.c": [ - "ex/v1.7.2/push.html#git_remote_lookup-1" - ], - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_lookup-2" - ] - } - }, - "git_remote_dup": { - "type": "function", - "file": "git2/remote.h", - "line": 217, - "lineto": 217, - "args": [ - { - "name": "dest", - "type": "git_remote **", - "comment": "pointer where to store the copy" - }, - { - "name": "source", - "type": "git_remote *", - "comment": "object to copy" - } - ], - "argline": "git_remote **dest, git_remote *source", - "sig": "git_remote **::git_remote *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a copy of an existing remote. All internal strings are also\n duplicated. Callbacks are not duplicated.

\n", - "comments": "

Call git_remote_free to free the data.

\n", - "group": "remote" - }, - "git_remote_owner": { - "type": "function", - "file": "git2/remote.h", - "line": 225, - "lineto": 225, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "git_repository *", - "comment": " a pointer to the repository" - }, - "description": "

Get the remote's repository

\n", - "comments": "", - "group": "remote" - }, - "git_remote_name": { - "type": "function", - "file": "git2/remote.h", - "line": 233, - "lineto": 233, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "const char *", - "comment": " a pointer to the name or NULL for in-memory remotes" - }, - "description": "

Get the remote's name

\n", - "comments": "", - "group": "remote" - }, - "git_remote_url": { - "type": "function", - "file": "git2/remote.h", - "line": 245, - "lineto": 245, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "const char *", - "comment": " a pointer to the url" - }, - "description": "

Get the remote's url

\n", - "comments": "

If url.*.insteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_url-3" - ] - } - }, - "git_remote_pushurl": { - "type": "function", - "file": "git2/remote.h", - "line": 257, - "lineto": 257, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "const char *", - "comment": " a pointer to the url or NULL if no special url for pushing is set" - }, - "description": "

Get the remote's url for pushing.

\n", - "comments": "

If url.*.pushInsteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_pushurl-4" - ] - } - }, - "git_remote_set_url": { - "type": "function", - "file": "git2/remote.h", - "line": 270, - "lineto": 270, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the change" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the url to set" - } - ], - "argline": "git_repository *repo, const char *remote, const char *url", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error value" - }, - "description": "

Set the remote's url in the configuration

\n", - "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_set_url-5" - ] - } - }, - "git_remote_set_pushurl": { - "type": "function", - "file": "git2/remote.h", - "line": 284, - "lineto": 284, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to perform the change" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the url to set" - } - ], - "argline": "git_repository *repo, const char *remote, const char *url", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Set the remote's url for pushing in the configuration.

\n", - "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_set_pushurl-6" - ] - } - }, - "git_remote_set_instance_url": { - "type": "function", - "file": "git2/remote.h", - "line": 294, - "lineto": 294, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the url to set" - } - ], - "argline": "git_remote *remote, const char *url", - "sig": "git_remote *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error value" - }, - "description": "

Set the url for this particular url instance. The URL in the\n configuration will be ignored, and will not be changed.

\n", - "comments": "", - "group": "remote" - }, - "git_remote_set_instance_pushurl": { - "type": "function", - "file": "git2/remote.h", - "line": 304, - "lineto": 304, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the url to set" - } - ], - "argline": "git_remote *remote, const char *url", - "sig": "git_remote *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error value" - }, - "description": "

Set the push url for this particular url instance. The URL in the\n configuration will be ignored, and will not be changed.

\n", - "comments": "", - "group": "remote" - }, - "git_remote_add_fetch": { - "type": "function", - "file": "git2/remote.h", - "line": 317, - "lineto": 317, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to change the configuration" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the name of the remote to change" - }, - { - "name": "refspec", - "type": "const char *", - "comment": "the new fetch refspec" - } - ], - "argline": "git_repository *repo, const char *remote, const char *refspec", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC if refspec is invalid or an error value" - }, - "description": "

Add a fetch refspec to the remote's configuration

\n", - "comments": "

Add the given refspec to the fetch list in the configuration. No loaded remote instances will be affected.

\n", - "group": "remote" - }, - "git_remote_get_fetch_refspecs": { - "type": "function", - "file": "git2/remote.h", - "line": 329, - "lineto": 329, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": "pointer to the array in which to store the strings" - }, - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - } - ], - "argline": "git_strarray *array, const git_remote *remote", - "sig": "git_strarray *::const git_remote *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Get the remote's list of fetch refspecs

\n", - "comments": "

The memory is owned by the user and should be freed with git_strarray_free.

\n", - "group": "remote" - }, - "git_remote_add_push": { - "type": "function", - "file": "git2/remote.h", - "line": 342, - "lineto": 342, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to change the configuration" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the name of the remote to change" - }, - { - "name": "refspec", - "type": "const char *", - "comment": "the new push refspec" - } - ], - "argline": "git_repository *repo, const char *remote, const char *refspec", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC if refspec is invalid or an error value" - }, - "description": "

Add a push refspec to the remote's configuration

\n", - "comments": "

Add the given refspec to the push list in the configuration. No loaded remote instances will be affected.

\n", - "group": "remote" - }, - "git_remote_get_push_refspecs": { - "type": "function", - "file": "git2/remote.h", - "line": 354, - "lineto": 354, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": "pointer to the array in which to store the strings" - }, - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - } - ], - "argline": "git_strarray *array, const git_remote *remote", - "sig": "git_strarray *::const git_remote *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Get the remote's list of push refspecs

\n", - "comments": "

The memory is owned by the user and should be freed with git_strarray_free.

\n", - "group": "remote" - }, - "git_remote_refspec_count": { - "type": "function", - "file": "git2/remote.h", - "line": 362, - "lineto": 362, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "size_t", - "comment": " the amount of refspecs configured in this remote" - }, - "description": "

Get the number of refspecs for a remote

\n", - "comments": "", - "group": "remote" - }, - "git_remote_get_refspec": { - "type": "function", - "file": "git2/remote.h", - "line": 371, - "lineto": 371, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - }, - { - "name": "n", - "type": "size_t", - "comment": "the refspec to get" - } - ], - "argline": "const git_remote *remote, size_t n", - "sig": "const git_remote *::size_t", - "return": { - "type": "const git_refspec *", - "comment": " the nth refspec" - }, - "description": "

Get a refspec from the remote

\n", - "comments": "", - "group": "remote" - }, - "git_remote_ls": { - "type": "function", - "file": "git2/remote.h", - "line": 393, - "lineto": 393, - "args": [ - { - "name": "out", - "type": "const git_remote_head ***", - "comment": "pointer to the array" - }, - { - "name": "size", - "type": "size_t *", - "comment": "the number of remote heads" - }, - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote_head ***out, size_t *size, git_remote *remote", - "sig": "const git_remote_head ***::size_t *::git_remote *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Get the remote repository's reference advertisement list

\n", - "comments": "

Get the list of references with which the server responds to a new connection.

\n\n

The remote (or more exactly its transport) must have connected to the remote repository. This list is available as soon as the connection to the remote is initiated and it remains available after disconnecting.

\n\n

The memory belongs to the remote. The pointer will be valid as long as a new connection is not initiated, but it is recommended that you make a copy in order to make use of the data.

\n", - "group": "remote", - "examples": { - "ls-remote.c": [ - "ex/v1.7.2/ls-remote.html#git_remote_ls-4" - ] - } - }, - "git_remote_connected": { - "type": "function", - "file": "git2/remote.h", - "line": 404, - "lineto": 404, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "int", - "comment": " 1 if it's connected, 0 otherwise." - }, - "description": "

Check whether the remote is connected

\n", - "comments": "

Check whether the remote's underlying transport is connected to the remote host.

\n", - "group": "remote" - }, - "git_remote_stop": { - "type": "function", - "file": "git2/remote.h", - "line": 415, - "lineto": 415, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - } - ], - "argline": "git_remote *remote", - "sig": "git_remote *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Cancel the operation

\n", - "comments": "

At certain points in its operation, the network code checks whether the operation has been cancelled and if so stops the operation.

\n", - "group": "remote" - }, - "git_remote_disconnect": { - "type": "function", - "file": "git2/remote.h", - "line": 425, - "lineto": 425, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to disconnect from" - } - ], - "argline": "git_remote *remote", - "sig": "git_remote *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Disconnect from the remote

\n", - "comments": "

Close the connection to the remote.

\n", - "group": "remote" - }, - "git_remote_free": { - "type": "function", - "file": "git2/remote.h", - "line": 435, - "lineto": 435, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to free" - } - ], - "argline": "git_remote *remote", - "sig": "git_remote *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the memory associated with a remote

\n", - "comments": "

This also disconnects from the remote, if the connection has not been closed yet (using git_remote_disconnect).

\n", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.7.2/fetch.html#git_remote_free-6", - "ex/v1.7.2/fetch.html#git_remote_free-7" - ], - "ls-remote.c": [ - "ex/v1.7.2/ls-remote.html#git_remote_free-5" - ], - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_free-7" - ] - } - }, - "git_remote_list": { - "type": "function", - "file": "git2/remote.h", - "line": 446, - "lineto": 446, - "args": [ - { - "name": "out", - "type": "git_strarray *", - "comment": "a string array which receives the names of the remotes" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to query" - } - ], - "argline": "git_strarray *out, git_repository *repo", - "sig": "git_strarray *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get a list of the configured remotes for a repo

\n", - "comments": "

The string array must be freed by the user.

\n", - "group": "remote", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_remote_list-22" - ], - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_list-8" - ] - } - }, - "git_remote_init_callbacks": { - "type": "function", - "file": "git2/remote.h", - "line": 660, - "lineto": 662, - "args": [ - { - "name": "opts", - "type": "git_remote_callbacks *", - "comment": "the `git_remote_callbacks` struct to initialize" - }, - { - "name": "version", - "type": "unsigned int", - "comment": "Version of struct; pass `GIT_REMOTE_CALLBACKS_VERSION`" - } - ], - "argline": "git_remote_callbacks *opts, unsigned int version", - "sig": "git_remote_callbacks *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initializes a git_remote_callbacks with default values. Equivalent to\n creating an instance with GIT_REMOTE_CALLBACKS_INIT.

\n", - "comments": "", - "group": "remote" - }, - "git_fetch_options_init": { - "type": "function", - "file": "git2/remote.h", - "line": 791, - "lineto": 793, - "args": [ - { - "name": "opts", - "type": "git_fetch_options *", - "comment": "The `git_fetch_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_FETCH_OPTIONS_VERSION`." - } - ], - "argline": "git_fetch_options *opts, unsigned int version", - "sig": "git_fetch_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_fetch_options structure

\n", - "comments": "

Initializes a git_fetch_options with default values. Equivalent to creating an instance with GIT_FETCH_OPTIONS_INIT.

\n", - "group": "fetch" - }, - "git_push_options_init": { - "type": "function", - "file": "git2/remote.h", - "line": 848, - "lineto": 850, - "args": [ - { - "name": "opts", - "type": "git_push_options *", - "comment": "The `git_push_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_PUSH_OPTIONS_VERSION`." - } - ], - "argline": "git_push_options *opts, unsigned int version", - "sig": "git_push_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_push_options structure

\n", - "comments": "

Initializes a git_push_options with default values. Equivalent to creating an instance with GIT_PUSH_OPTIONS_INIT.

\n", - "group": "push", - "examples": { - "push.c": [ - "ex/v1.7.2/push.html#git_push_options_init-2" - ] - } - }, - "git_remote_connect_options_init": { - "type": "function", - "file": "git2/remote.h", - "line": 896, - "lineto": 898, - "args": [ - { - "name": "opts", - "type": "git_remote_connect_options *", - "comment": "The `git_remote_connect_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REMOTE_CONNECT_OPTIONS_VERSION`." - } - ], - "argline": "git_remote_connect_options *opts, unsigned int version", - "sig": "git_remote_connect_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_remote_connect_options structure.

\n", - "comments": "

Initializes a git_remote_connect_options with default values. Equivalent to creating an instance with GIT_REMOTE_CONNECT_OPTIONS_INIT.

\n", - "group": "remote" - }, - "git_remote_connect": { - "type": "function", - "file": "git2/remote.h", - "line": 915, - "lineto": 920, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to connect to" - }, - { - "name": "direction", - "type": "git_direction", - "comment": "GIT_DIRECTION_FETCH if you want to fetch or\n GIT_DIRECTION_PUSH if you want to push" - }, - { - "name": "callbacks", - "type": "const git_remote_callbacks *", - "comment": "the callbacks to use for this connection" - }, - { - "name": "proxy_opts", - "type": "const git_proxy_options *", - "comment": "proxy settings" - }, - { - "name": "custom_headers", - "type": "const git_strarray *", - "comment": "extra HTTP headers to use in this connection" - } - ], - "argline": "git_remote *remote, git_direction direction, const git_remote_callbacks *callbacks, const git_proxy_options *proxy_opts, const git_strarray *custom_headers", - "sig": "git_remote *::git_direction::const git_remote_callbacks *::const git_proxy_options *::const git_strarray *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open a connection to a remote.

\n", - "comments": "

The transport is selected based on the URL; the direction argument is due to a limitation of the git protocol which starts up a specific binary which can only do the one or the other.

\n", - "group": "remote", - "examples": { - "ls-remote.c": [ - "ex/v1.7.2/ls-remote.html#git_remote_connect-6" - ] - } - }, - "git_remote_connect_ext": { - "type": "function", - "file": "git2/remote.h", - "line": 940, - "lineto": 943, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to connect to" - }, - { - "name": "direction", - "type": "git_direction", - "comment": "GIT_DIRECTION_FETCH if you want to fetch or\n GIT_DIRECTION_PUSH if you want to push" - }, - { - "name": "opts", - "type": "const git_remote_connect_options *", - "comment": "the remote connection options" - } - ], - "argline": "git_remote *remote, git_direction direction, const git_remote_connect_options *opts", - "sig": "git_remote *::git_direction::const git_remote_connect_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open a connection to a remote with extended options.

\n", - "comments": "

The transport is selected based on the URL; the direction argument is due to a limitation of the git protocol which starts up a specific binary which can only do the one or the other.

\n\n

The given options structure will form the defaults for connection options and callback setup. Callers may override these defaults by specifying git_fetch_options or git_push_options in subsequent calls.

\n", - "group": "remote" - }, - "git_remote_download": { - "type": "function", - "file": "git2/remote.h", - "line": 965, - "lineto": 968, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - }, - { - "name": "refspecs", - "type": "const git_strarray *", - "comment": "the refspecs to use for this negotiation and\n download. Use NULL or an empty array to use the base refspecs" - }, - { - "name": "opts", - "type": "const git_fetch_options *", - "comment": "the options to use for this fetch or NULL" - } - ], - "argline": "git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts", - "sig": "git_remote *::const git_strarray *::const git_fetch_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Download and index the packfile.

\n", - "comments": "

Connect to the remote if it hasn't been done yet, negotiate with the remote git which objects are missing, download and index the packfile.

\n\n

The .idx file will be created and both it and the packfile with be renamed to their final name.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", - "group": "remote" - }, - "git_remote_upload": { - "type": "function", - "file": "git2/remote.h", - "line": 987, - "lineto": 990, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - }, - { - "name": "refspecs", - "type": "const git_strarray *", - "comment": "the refspecs to use for this negotiation and\n upload. Use NULL or an empty array to use the base refspecs" - }, - { - "name": "opts", - "type": "const git_push_options *", - "comment": "the options to use for this push" - } - ], - "argline": "git_remote *remote, const git_strarray *refspecs, const git_push_options *opts", - "sig": "git_remote *::const git_strarray *::const git_push_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a packfile and send it to the server

\n", - "comments": "

Connect to the remote if it hasn't been done yet, negotiate with the remote git which objects are missing, create a packfile with the missing objects and send it.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", - "group": "remote" - }, - "git_remote_update_tips": { - "type": "function", - "file": "git2/remote.h", - "line": 1009, - "lineto": 1014, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to update" - }, - { - "name": "callbacks", - "type": "const git_remote_callbacks *", - "comment": "pointer to the callback structure to use or NULL" - }, - { - "name": "update_fetchhead", - "type": "int", - "comment": "whether to write to FETCH_HEAD. Pass 1 to behave like git." - }, - { - "name": "download_tags", - "type": "git_remote_autotag_option_t", - "comment": "what the behaviour for downloading tags is for this fetch. This is\n ignored for push. This must be the same value passed to `git_remote_download()`." - }, - { - "name": "reflog_message", - "type": "const char *", - "comment": "The message to insert into the reflogs. If\n NULL and fetching, the default is \"fetch \n\", where \n is\n the name of the remote (or its url, for in-memory remotes). This\n parameter is ignored when pushing." - } - ], - "argline": "git_remote *remote, const git_remote_callbacks *callbacks, int update_fetchhead, git_remote_autotag_option_t download_tags, const char *reflog_message", - "sig": "git_remote *::const git_remote_callbacks *::int::git_remote_autotag_option_t::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Update the tips to the new state.

\n", - "comments": "

If callbacks are not specified then the callbacks specified to git_remote_connect will be used (if it was called).

\n", - "group": "remote" - }, - "git_remote_fetch": { - "type": "function", - "file": "git2/remote.h", - "line": 1034, - "lineto": 1038, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to fetch from" - }, - { - "name": "refspecs", - "type": "const git_strarray *", - "comment": "the refspecs to use for this fetch. Pass NULL or an\n empty array to use the base refspecs." - }, - { - "name": "opts", - "type": "const git_fetch_options *", - "comment": "options to use for this fetch or NULL" - }, - { - "name": "reflog_message", - "type": "const char *", - "comment": "The message to insert into the reflogs. If NULL, the\n\t\t\t\t\t\t\t\t default is \"fetch\"" - } - ], - "argline": "git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts, const char *reflog_message", - "sig": "git_remote *::const git_strarray *::const git_fetch_options *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Download new data and update tips.

\n", - "comments": "

Convenience function to connect to a remote, download the data, disconnect and update the remote-tracking branches.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.7.2/fetch.html#git_remote_fetch-8" - ] - } - }, - "git_remote_prune": { - "type": "function", - "file": "git2/remote.h", - "line": 1050, - "lineto": 1052, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to prune" - }, - { - "name": "callbacks", - "type": "const git_remote_callbacks *", - "comment": "callbacks to use for this prune" - } - ], - "argline": "git_remote *remote, const git_remote_callbacks *callbacks", - "sig": "git_remote *::const git_remote_callbacks *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Prune tracking refs that are no longer present on remote.

\n", - "comments": "

If callbacks are not specified then the callbacks specified to git_remote_connect will be used (if it was called).

\n", - "group": "remote" - }, - "git_remote_push": { - "type": "function", - "file": "git2/remote.h", - "line": 1067, - "lineto": 1070, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote to push to" - }, - { - "name": "refspecs", - "type": "const git_strarray *", - "comment": "the refspecs to use for pushing. If NULL or an empty\n array, the configured refspecs will be used" - }, - { - "name": "opts", - "type": "const git_push_options *", - "comment": "options to use for this push" - } - ], - "argline": "git_remote *remote, const git_strarray *refspecs, const git_push_options *opts", - "sig": "git_remote *::const git_strarray *::const git_push_options *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Perform a push.

\n", - "comments": "

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", - "group": "remote", - "examples": { - "push.c": [ - "ex/v1.7.2/push.html#git_remote_push-3" - ] - } - }, - "git_remote_stats": { - "type": "function", - "file": "git2/remote.h", - "line": 1075, - "lineto": 1075, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": null - } - ], - "argline": "git_remote *remote", - "sig": "git_remote *", - "return": { - "type": "const git_indexer_progress *", - "comment": null - }, - "description": "

Get the statistics structure that is filled in by the fetch operation.

\n", - "comments": "", - "group": "remote", - "examples": { - "fetch.c": [ - "ex/v1.7.2/fetch.html#git_remote_stats-9" - ] - } - }, - "git_remote_autotag": { - "type": "function", - "file": "git2/remote.h", - "line": 1083, - "lineto": 1083, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "git_remote_autotag_option_t", - "comment": " the auto-follow setting" - }, - "description": "

Retrieve the tag auto-follow setting

\n", - "comments": "", - "group": "remote" - }, - "git_remote_set_autotag": { - "type": "function", - "file": "git2/remote.h", - "line": 1096, - "lineto": 1096, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to make the change" - }, - { - "name": "remote", - "type": "const char *", - "comment": "the name of the remote" - }, - { - "name": "value", - "type": "git_remote_autotag_option_t", - "comment": "the new value to take." - } - ], - "argline": "git_repository *repo, const char *remote, git_remote_autotag_option_t value", - "sig": "git_repository *::const char *::git_remote_autotag_option_t", - "return": { - "type": "int", - "comment": " 0, or an error code." - }, - "description": "

Set the remote's tag following setting.

\n", - "comments": "

The change will be made in the configuration. No loaded remotes will be affected.

\n", - "group": "remote" - }, - "git_remote_prune_refs": { - "type": "function", - "file": "git2/remote.h", - "line": 1104, - "lineto": 1104, - "args": [ - { - "name": "remote", - "type": "const git_remote *", - "comment": "the remote to query" - } - ], - "argline": "const git_remote *remote", - "sig": "const git_remote *", - "return": { - "type": "int", - "comment": " the ref-prune setting" - }, - "description": "

Retrieve the ref-prune setting

\n", - "comments": "", - "group": "remote" - }, - "git_remote_rename": { - "type": "function", - "file": "git2/remote.h", - "line": 1126, - "lineto": 1130, - "args": [ - { - "name": "problems", - "type": "git_strarray *", - "comment": "non-default refspecs cannot be renamed and will be\n stored here for further processing by the caller. Always free this\n strarray on successful return." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to rename" - }, - { - "name": "name", - "type": "const char *", - "comment": "the current name of the remote" - }, - { - "name": "new_name", - "type": "const char *", - "comment": "the new name the remote should bear" - } - ], - "argline": "git_strarray *problems, git_repository *repo, const char *name, const char *new_name", - "sig": "git_strarray *::git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

Give the remote a new name

\n", - "comments": "

All remote-tracking branches and configuration settings for the remote are updated.

\n\n

The new name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

No loaded instances of a the remote with the old name will change their name or their list of refspecs.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_rename-9" - ] - } - }, - "git_remote_name_is_valid": { - "type": "function", - "file": "git2/remote.h", - "line": 1139, - "lineto": 1139, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "output pointer to set with validity of given remote name" - }, - { - "name": "remote_name", - "type": "const char *", - "comment": "name to be checked." - } - ], - "argline": "int *valid, const char *remote_name", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Ensure the remote name is well-formed.

\n", - "comments": "", - "group": "remote" - }, - "git_remote_delete": { - "type": "function", - "file": "git2/remote.h", - "line": 1151, - "lineto": 1151, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to act" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the remote to delete" - } - ], - "argline": "git_repository *repo, const char *name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code." - }, - "description": "

Delete an existing persisted remote.

\n", - "comments": "

All remote-tracking branches and configuration settings for the remote will be removed.

\n", - "group": "remote", - "examples": { - "remote.c": [ - "ex/v1.7.2/remote.html#git_remote_delete-10" - ] - } - }, - "git_remote_default_branch": { - "type": "function", - "file": "git2/remote.h", - "line": 1169, - "lineto": 1169, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer in which to store the reference name" - }, - { - "name": "remote", - "type": "git_remote *", - "comment": "the remote" - } - ], - "argline": "git_buf *out, git_remote *remote", - "sig": "git_buf *::git_remote *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the remote does not have any references\n or none of them point to HEAD's commit, or an error message." - }, - "description": "

Retrieve the name of the remote's default branch

\n", - "comments": "

The default branch of a repository is the branch which HEAD points to. If the remote does not support reporting this information directly, it performs the guess as git does; that is, if there are multiple branches which point to the same commit, the first one is chosen. If the master branch is a candidate, it wins.

\n\n

This function must only be called after connecting.

\n", - "group": "remote" - }, - "git_repository_open": { - "type": "function", - "file": "git2/repository.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "pointer to the repo which will be opened" - }, - { - "name": "path", - "type": "const char *", - "comment": "the path to the repository" - } - ], - "argline": "git_repository **out, const char *path", - "sig": "git_repository **::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open a git repository.

\n", - "comments": "

The 'path' argument must point to either a git repository folder, or an existing work dir.

\n\n

The method will automatically detect if 'path' is a normal or bare repository or fail is 'path' is neither.

\n", - "group": "repository", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_repository_open-59" - ] - } - }, - "git_repository_open_from_worktree": { - "type": "function", - "file": "git2/repository.h", - "line": 48, - "lineto": 48, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Output pointer containing opened repository" - }, - { - "name": "wt", - "type": "git_worktree *", - "comment": "Working tree to open" - } - ], - "argline": "git_repository **out, git_worktree *wt", - "sig": "git_repository **::git_worktree *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open working tree as a repository

\n", - "comments": "

Open the working directory of the working tree as a normal repository that can then be worked on.

\n", - "group": "repository" - }, - "git_repository_discover": { - "type": "function", - "file": "git2/repository.h", - "line": 99, - "lineto": 103, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "A pointer to a user-allocated git_buf which will contain\n the found path." - }, - { - "name": "start_path", - "type": "const char *", - "comment": "The base path where the lookup starts." - }, - { - "name": "across_fs", - "type": "int", - "comment": "If true, then the lookup will not stop when a\n filesystem device change is detected while exploring parent directories." - }, - { - "name": "ceiling_dirs", - "type": "const char *", - "comment": "A GIT_PATH_LIST_SEPARATOR separated list of\n absolute symbolic link free paths. The lookup will stop when any\n of this paths is reached. Note that the lookup always performs on\n start_path no matter start_path appears in ceiling_dirs ceiling_dirs\n might be NULL (which is equivalent to an empty string)" - } - ], - "argline": "git_buf *out, const char *start_path, int across_fs, const char *ceiling_dirs", - "sig": "git_buf *::const char *::int::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Look for a git repository and copy its path in the given buffer.\n The lookup start from base_path and walk across parent directories\n if nothing has been found. The lookup ends when the first repository\n is found, or when reaching a directory referenced in ceiling_dirs\n or when the filesystem changes (in case across_fs is true).

\n", - "comments": "

The method will automatically detect if the repository is bare (if there is a repository).

\n", - "group": "repository" - }, - "git_repository_open_ext": { - "type": "function", - "file": "git2/repository.h", - "line": 175, - "lineto": 179, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Pointer to the repo which will be opened. This can\n actually be NULL if you only want to use the error code to\n see if a repo at this path could be opened." - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to open as git repository. If the flags\n permit \"searching\", then this can be a path to a subdirectory\n inside the working directory of the repository. May be NULL if\n flags is GIT_REPOSITORY_OPEN_FROM_ENV." - }, - { - "name": "flags", - "type": "unsigned int", - "comment": "A combination of the GIT_REPOSITORY_OPEN flags above." - }, - { - "name": "ceiling_dirs", - "type": "const char *", - "comment": "A GIT_PATH_LIST_SEPARATOR delimited list of path\n prefixes at which the search for a containing repository should\n terminate." - } - ], - "argline": "git_repository **out, const char *path, unsigned int flags, const char *ceiling_dirs", - "sig": "git_repository **::const char *::unsigned int::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if no repository could be found,\n or -1 if there was a repository but open failed for some reason\n (such as repo corruption or system errors)." - }, - "description": "

Find and open a repository with extended controls.

\n", - "comments": "", - "group": "repository", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_repository_open_ext-43" - ] - } - }, - "git_repository_open_bare": { - "type": "function", - "file": "git2/repository.h", - "line": 192, - "lineto": 192, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Pointer to the repo which will be opened." - }, - { - "name": "bare_path", - "type": "const char *", - "comment": "Direct path to the bare repository" - } - ], - "argline": "git_repository **out, const char *bare_path", - "sig": "git_repository **::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Open a bare repository on the serverside.

\n", - "comments": "

This is a fast open for bare repositories that will come in handy if you're e.g. hosting git repositories and need to access them efficiently

\n", - "group": "repository" - }, - "git_repository_free": { - "type": "function", - "file": "git2/repository.h", - "line": 205, - "lineto": 205, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository handle to close. If NULL nothing occurs." - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a previously allocated repository

\n", - "comments": "

Note that after a repository is free'd, all the objects it has spawned will still exist until they are manually closed by the user with git_object_free, but accessing any of the attributes of an object without a backing repository will result in undefined behavior

\n", - "group": "repository", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_repository_free-60" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_repository_free-4" - ] - } - }, - "git_repository_init": { - "type": "function", - "file": "git2/repository.h", - "line": 222, - "lineto": 225, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "pointer to the repo which will be created or reinitialized" - }, - { - "name": "path", - "type": "const char *", - "comment": "the path to the repository" - }, - { - "name": "is_bare", - "type": "unsigned int", - "comment": "if true, a Git repository without a working directory is\n\t\tcreated at the pointed path. If false, provided path will be\n\t\tconsidered as the working directory into which the .git directory\n\t\twill be created." - } - ], - "argline": "git_repository **out, const char *path, unsigned int is_bare", - "sig": "git_repository **::const char *::unsigned int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Creates a new Git repository in the given folder.

\n", - "comments": "

TODO: - Reinit the repository

\n", - "group": "repository", - "examples": { - "init.c": [ - "ex/v1.7.2/init.html#git_repository_init-5" - ] - } - }, - "git_repository_init_options_init": { - "type": "function", - "file": "git2/repository.h", - "line": 388, - "lineto": 390, - "args": [ - { - "name": "opts", - "type": "git_repository_init_options *", - "comment": "The `git_repository_init_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REPOSITORY_INIT_OPTIONS_VERSION`." - } - ], - "argline": "git_repository_init_options *opts, unsigned int version", - "sig": "git_repository_init_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_repository_init_options structure

\n", - "comments": "

Initializes a git_repository_init_options with default values. Equivalent to creating an instance with GIT_REPOSITORY_INIT_OPTIONS_INIT.

\n", - "group": "repository" - }, - "git_repository_init_ext": { - "type": "function", - "file": "git2/repository.h", - "line": 405, - "lineto": 408, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Pointer to the repo which will be created or reinitialized." - }, - { - "name": "repo_path", - "type": "const char *", - "comment": "The path to the repository." - }, - { - "name": "opts", - "type": "git_repository_init_options *", - "comment": "Pointer to git_repository_init_options struct." - } - ], - "argline": "git_repository **out, const char *repo_path, git_repository_init_options *opts", - "sig": "git_repository **::const char *::git_repository_init_options *", - "return": { - "type": "int", - "comment": " 0 or an error code on failure." - }, - "description": "

Create a new Git repository in the given folder with extended controls.

\n", - "comments": "

This will initialize a new git repository (creating the repo_path if requested by flags) and working directory as needed. It will auto-detect the case sensitivity of the file system and if the file system supports file mode bits correctly.

\n", - "group": "repository", - "examples": { - "init.c": [ - "ex/v1.7.2/init.html#git_repository_init_ext-6" - ] - } - }, - "git_repository_head": { - "type": "function", - "file": "git2/repository.h", - "line": 423, - "lineto": 423, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer to the reference which will be retrieved" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "a repository object" - } - ], - "argline": "git_reference **out, git_repository *repo", - "sig": "git_reference **::git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing\n branch, GIT_ENOTFOUND when HEAD is missing; an error code otherwise" - }, - "description": "

Retrieve and resolve the reference pointed at by HEAD.

\n", - "comments": "

The returned git_reference will be owned by caller and git_reference_free() must be called when done with it to release the allocated memory and prevent a leak.

\n", - "group": "repository", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_repository_head-31", - "ex/v1.7.2/merge.html#git_repository_head-32" - ], - "status.c": [ - "ex/v1.7.2/status.html#git_repository_head-3" - ] - } - }, - "git_repository_head_for_worktree": { - "type": "function", - "file": "git2/repository.h", - "line": 433, - "lineto": 434, - "args": [ - { - "name": "out", - "type": "git_reference **", - "comment": "pointer to the reference which will be retrieved" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "a repository object" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the worktree to retrieve HEAD for" - } - ], - "argline": "git_reference **out, git_repository *repo, const char *name", - "sig": "git_reference **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 when successful, error-code otherwise" - }, - "description": "

Retrieve the referenced HEAD for the worktree

\n", - "comments": "", - "group": "repository" - }, - "git_repository_head_detached": { - "type": "function", - "file": "git2/repository.h", - "line": 446, - "lineto": 446, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repo to test" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 1 if HEAD is detached, 0 if it's not; error code if there\n was an error." - }, - "description": "

Check if a repository's HEAD is detached

\n", - "comments": "

A repository's HEAD is detached when it points directly to a commit instead of a branch.

\n", - "group": "repository" - }, - "git_repository_head_detached_for_worktree": { - "type": "function", - "file": "git2/repository.h", - "line": 459, - "lineto": 460, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "a repository object" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the worktree to retrieve HEAD for" - } - ], - "argline": "git_repository *repo, const char *name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 1 if HEAD is detached, 0 if its not; error code if\n there was an error" - }, - "description": "

Check if a worktree's HEAD is detached

\n", - "comments": "

A worktree's HEAD is detached when it points directly to a commit instead of a branch.

\n", - "group": "repository" - }, - "git_repository_head_unborn": { - "type": "function", - "file": "git2/repository.h", - "line": 472, - "lineto": 472, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repo to test" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 1 if the current branch is unborn, 0 if it's not; error\n code if there was an error" - }, - "description": "

Check if the current branch is unborn

\n", - "comments": "

An unborn branch is one named from HEAD but which doesn't exist in the refs namespace, because it doesn't have any commit to point to.

\n", - "group": "repository" - }, - "git_repository_is_empty": { - "type": "function", - "file": "git2/repository.h", - "line": 486, - "lineto": 486, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repo to test" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 1 if the repository is empty, 0 if it isn't, error code\n if the repository is corrupted" - }, - "description": "

Check if a repository is empty

\n", - "comments": "

An empty repository has just been initialized and contains no references apart from HEAD, which must be pointing to the unborn master branch, or the branch specified for the repository in the init.defaultBranch configuration variable.

\n", - "group": "repository" - }, - "git_repository_item_path": { - "type": "function", - "file": "git2/repository.h", - "line": 523, - "lineto": 523, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "Buffer to store the path at" - }, - { - "name": "repo", - "type": "const git_repository *", - "comment": "Repository to get path for" - }, - { - "name": "item", - "type": "git_repository_item_t", - "comment": "The repository item for which to retrieve the path" - } - ], - "argline": "git_buf *out, const git_repository *repo, git_repository_item_t item", - "sig": "git_buf *::const git_repository *::git_repository_item_t", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the path cannot exist or an error code" - }, - "description": "

Get the location of a specific repository file or directory

\n", - "comments": "

This function will retrieve the path of a specific repository item. It will thereby honor things like the repository's common directory, gitdir, etc. In case a file path cannot exist for a given item (e.g. the working directory of a bare repository), GIT_ENOTFOUND is returned.

\n", - "group": "repository" - }, - "git_repository_path": { - "type": "function", - "file": "git2/repository.h", - "line": 534, - "lineto": 534, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "A repository object" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "const char *", - "comment": " the path to the repository" - }, - "description": "

Get the path of this repository

\n", - "comments": "

This is the path of the .git folder for normal repositories, or of the repository itself for bare repositories.

\n", - "group": "repository", - "examples": { - "init.c": [ - "ex/v1.7.2/init.html#git_repository_path-7" - ], - "status.c": [ - "ex/v1.7.2/status.html#git_repository_path-4" - ] - } - }, - "git_repository_workdir": { - "type": "function", - "file": "git2/repository.h", - "line": 545, - "lineto": 545, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "A repository object" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "const char *", - "comment": " the path to the working dir, if it exists" - }, - "description": "

Get the path of the working directory for this repository

\n", - "comments": "

If the repository is bare, this function will always return NULL.

\n", - "group": "repository", - "examples": { - "init.c": [ - "ex/v1.7.2/init.html#git_repository_workdir-8" - ] - } - }, - "git_repository_commondir": { - "type": "function", - "file": "git2/repository.h", - "line": 557, - "lineto": 557, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "A repository object" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "const char *", - "comment": " the path to the common dir" - }, - "description": "

Get the path of the shared common directory for this repository.

\n", - "comments": "

If the repository is bare, it is the root directory for the repository. If the repository is a worktree, it is the parent repo's gitdir. Otherwise, it is the gitdir.

\n", - "group": "repository" - }, - "git_repository_set_workdir": { - "type": "function", - "file": "git2/repository.h", - "line": 576, - "lineto": 577, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "workdir", - "type": "const char *", - "comment": "The path to a working directory" - }, - { - "name": "update_gitlink", - "type": "int", - "comment": "Create/update gitlink in workdir and set config\n \"core.worktree\" (if workdir is not the parent of the .git directory)" - } - ], - "argline": "git_repository *repo, const char *workdir, int update_gitlink", - "sig": "git_repository *::const char *::int", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Set the path to the working directory for this repository

\n", - "comments": "

The working directory doesn't need to be the same one that contains the .git folder for this repository.

\n\n

If this repository is bare, setting its working directory will turn it into a normal repository, capable of performing all the common workdir operations (checkout, status, index manipulation, etc).

\n", - "group": "repository" - }, - "git_repository_is_bare": { - "type": "function", - "file": "git2/repository.h", - "line": 585, - "lineto": 585, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "Repo to test" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "int", - "comment": " 1 if the repository is bare, 0 otherwise." - }, - "description": "

Check if a repository is bare

\n", - "comments": "", - "group": "repository", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_repository_is_bare-5" - ] - } - }, - "git_repository_is_worktree": { - "type": "function", - "file": "git2/repository.h", - "line": 593, - "lineto": 593, - "args": [ - { - "name": "repo", - "type": "const git_repository *", - "comment": "Repo to test" - } - ], - "argline": "const git_repository *repo", - "sig": "const git_repository *", - "return": { - "type": "int", - "comment": " 1 if the repository is a linked work tree, 0 otherwise." - }, - "description": "

Check if a repository is a linked work tree

\n", - "comments": "", - "group": "repository" - }, - "git_repository_config": { - "type": "function", - "file": "git2/repository.h", - "line": 609, - "lineto": 609, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "Pointer to store the loaded configuration" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_config **out, git_repository *repo", - "sig": "git_config **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get the configuration file for this repository.

\n", - "comments": "

If a configuration file has not been set, the default config set for the repository will be returned, including global and system configurations (if they are available).

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", - "group": "repository", - "examples": { - "config.c": [ - "ex/v1.7.2/config.html#git_repository_config-9" - ] - } - }, - "git_repository_config_snapshot": { - "type": "function", - "file": "git2/repository.h", - "line": 625, - "lineto": 625, - "args": [ - { - "name": "out", - "type": "git_config **", - "comment": "Pointer to store the loaded configuration" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_config **out, git_repository *repo", - "sig": "git_config **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get a snapshot of the repository's configuration

\n", - "comments": "

Convenience function to take a snapshot from the repository's configuration. The contents of this snapshot will not change, even if the underlying config files are modified.

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", - "group": "repository", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_repository_config_snapshot-61", - "ex/v1.7.2/general.html#git_repository_config_snapshot-62" - ] - } - }, - "git_repository_odb": { - "type": "function", - "file": "git2/repository.h", - "line": 641, - "lineto": 641, - "args": [ - { - "name": "out", - "type": "git_odb **", - "comment": "Pointer to store the loaded ODB" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_odb **out, git_repository *repo", - "sig": "git_odb **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get the Object Database for this repository.

\n", - "comments": "

If a custom ODB has not been set, the default database for the repository will be returned (the one located in .git/objects).

\n\n

The ODB must be freed once it's no longer being used by the user.

\n", - "group": "repository", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_repository_odb-29" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_repository_odb-63" - ] - } - }, - "git_repository_refdb": { - "type": "function", - "file": "git2/repository.h", - "line": 657, - "lineto": 657, - "args": [ - { - "name": "out", - "type": "git_refdb **", - "comment": "Pointer to store the loaded refdb" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_refdb **out, git_repository *repo", - "sig": "git_refdb **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get the Reference Database Backend for this repository.

\n", - "comments": "

If a custom refsdb has not been set, the default database for the repository will be returned (the one that manipulates loose and packed references in the .git directory).

\n\n

The refdb must be freed once it's no longer being used by the user.

\n", - "group": "repository" - }, - "git_repository_index": { - "type": "function", - "file": "git2/repository.h", - "line": 673, - "lineto": 673, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "Pointer to store the loaded index" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_index **out, git_repository *repo", - "sig": "git_index **::git_repository *", - "return": { - "type": "int", - "comment": " 0, or an error code" - }, - "description": "

Get the Index file for this repository.

\n", - "comments": "

If a custom index has not been set, the default index for the repository will be returned (the one located in .git/index).

\n\n

The index must be freed once it's no longer being used by the user.

\n", - "group": "repository", - "examples": { - "add.c": [ - "ex/v1.7.2/add.html#git_repository_index-5" - ], - "commit.c": [ - "ex/v1.7.2/commit.html#git_repository_index-8" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_repository_index-64" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_repository_index-9" - ], - "ls-files.c": [ - "ex/v1.7.2/ls-files.html#git_repository_index-5" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_repository_index-33" - ] - } - }, - "git_repository_message": { - "type": "function", - "file": "git2/repository.h", - "line": 691, - "lineto": 691, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "git_buf to write data into" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository to read prepared message from" - } - ], - "argline": "git_buf *out, git_repository *repo", - "sig": "git_buf *::git_repository *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if no message exists or an error code" - }, - "description": "

Retrieve git's prepared message

\n", - "comments": "

Operations such as git revert/cherry-pick/merge with the -n option stop just short of creating a commit with the changes and save their prepared message in .git/MERGE_MSG so the next git-commit execution can present it to the user for them to amend if they wish.

\n\n

Use this function to get the contents of this file. Don't forget to remove the file after you create the commit.

\n", - "group": "repository" - }, - "git_repository_message_remove": { - "type": "function", - "file": "git2/repository.h", - "line": 701, - "lineto": 701, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository to remove prepared message from." - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Remove git's prepared message.

\n", - "comments": "

Remove the message that git_repository_message retrieves.

\n", - "group": "repository" - }, - "git_repository_state_cleanup": { - "type": "function", - "file": "git2/repository.h", - "line": 710, - "lineto": 710, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, or error" - }, - "description": "

Remove all the metadata associated with an ongoing command like merge,\n revert, cherry-pick, etc. For example: MERGE_HEAD, MERGE_MSG, etc.

\n", - "comments": "", - "group": "repository", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_repository_state_cleanup-34" - ] - } - }, - "git_repository_fetchhead_foreach": { - "type": "function", - "file": "git2/repository.h", - "line": 741, - "lineto": 744, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "callback", - "type": "git_repository_fetchhead_foreach_cb", - "comment": "Callback function" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to callback data (optional)" - } - ], - "argline": "git_repository *repo, git_repository_fetchhead_foreach_cb callback, void *payload", - "sig": "git_repository *::git_repository_fetchhead_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, GIT_ENOTFOUND if\n there is no FETCH_HEAD file, or other error code." - }, - "description": "

Invoke 'callback' for each entry in the given FETCH_HEAD file.

\n", - "comments": "

Return a non-zero value from the callback to stop the loop.

\n", - "group": "repository" - }, - "git_repository_mergehead_foreach": { - "type": "function", - "file": "git2/repository.h", - "line": 770, - "lineto": 773, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "callback", - "type": "git_repository_mergehead_foreach_cb", - "comment": "Callback function" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to callback data (optional)" - } - ], - "argline": "git_repository *repo, git_repository_mergehead_foreach_cb callback, void *payload", - "sig": "git_repository *::git_repository_mergehead_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, GIT_ENOTFOUND if\n there is no MERGE_HEAD file, or other error code." - }, - "description": "

If a merge is in progress, invoke 'callback' for each commit ID in the\n MERGE_HEAD file.

\n", - "comments": "

Return a non-zero value from the callback to stop the loop.

\n", - "group": "repository" - }, - "git_repository_hashfile": { - "type": "function", - "file": "git2/repository.h", - "line": 800, - "lineto": 805, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Output value of calculated SHA" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to file on disk whose contents should be hashed. This\n may be an absolute path or a relative path, in which case it\n will be treated as a path within the working directory." - }, - { - "name": "type", - "type": "git_object_t", - "comment": "The object type to hash as (e.g. GIT_OBJECT_BLOB)" - }, - { - "name": "as_path", - "type": "const char *", - "comment": "The path to use to look up filtering rules. If this is\n an empty string then no filters will be applied when\n calculating the hash. If this is `NULL` and the `path`\n parameter is a file within the repository's working\n directory, then the `path` will be used." - } - ], - "argline": "git_oid *out, git_repository *repo, const char *path, git_object_t type, const char *as_path", - "sig": "git_oid *::git_repository *::const char *::git_object_t::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Calculate hash of file using repository filtering rules.

\n", - "comments": "

If you simply want to calculate the hash of a file on disk with no filters, you can just use the git_odb_hashfile() API. However, if you want to hash a file in the repository and you want to apply filtering rules (e.g. crlf filters) before generating the SHA, then use this function.

\n\n

Note: if the repository has core.safecrlf set to fail and the filtering triggers that failure, then this function will return an error and not calculate the hash of the file.

\n", - "group": "repository" - }, - "git_repository_set_head": { - "type": "function", - "file": "git2/repository.h", - "line": 825, - "lineto": 827, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - }, - { - "name": "refname", - "type": "const char *", - "comment": "Canonical name of the reference the HEAD should point at" - } - ], - "argline": "git_repository *repo, const char *refname", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Make the repository HEAD point to the specified reference.

\n", - "comments": "

If the provided reference points to a Tree or a Blob, the HEAD is unaltered and -1 is returned.

\n\n

If the provided reference points to a branch, the HEAD will point to that branch, staying attached, or become attached if it isn't yet. If the branch doesn't exist yet, no error will be return. The HEAD will then be attached to an unborn branch.

\n\n

Otherwise, the HEAD will be detached and will directly point to the Commit.

\n", - "group": "repository", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_repository_set_head-23" - ] - } - }, - "git_repository_set_head_detached": { - "type": "function", - "file": "git2/repository.h", - "line": 845, - "lineto": 847, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - }, - { - "name": "committish", - "type": "const git_oid *", - "comment": "Object id of the Commit the HEAD should point to" - } - ], - "argline": "git_repository *repo, const git_oid *committish", - "sig": "git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 on success, or an error code" - }, - "description": "

Make the repository HEAD directly point to the Commit.

\n", - "comments": "

If the provided committish cannot be found in the repository, the HEAD is unaltered and GIT_ENOTFOUND is returned.

\n\n

If the provided committish cannot be peeled into a commit, the HEAD is unaltered and -1 is returned.

\n\n

Otherwise, the HEAD will eventually be detached and will directly point to the peeled Commit.

\n", - "group": "repository" - }, - "git_repository_set_head_detached_from_annotated": { - "type": "function", - "file": "git2/repository.h", - "line": 861, - "lineto": 863, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "committish", - "type": "const git_annotated_commit *", - "comment": null - } - ], - "argline": "git_repository *repo, const git_annotated_commit *committish", - "sig": "git_repository *::const git_annotated_commit *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Make the repository HEAD directly point to the Commit.

\n", - "comments": "

This behaves like git_repository_set_head_detached() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_repository_set_head_detached().

\n", - "group": "repository", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_repository_set_head_detached_from_annotated-24" - ] - } - }, - "git_repository_detach_head": { - "type": "function", - "file": "git2/repository.h", - "line": 882, - "lineto": 883, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing\n branch or an error code" - }, - "description": "

Detach the HEAD.

\n", - "comments": "

If the HEAD is already detached and points to a Commit, 0 is returned.

\n\n

If the HEAD is already detached and points to a Tag, the HEAD is updated into making it point to the peeled Commit, and 0 is returned.

\n\n

If the HEAD is already detached and points to a non committish, the HEAD is unaltered, and -1 is returned.

\n\n

Otherwise, the HEAD will be detached and point to the peeled Commit.

\n", - "group": "repository" - }, - "git_repository_state": { - "type": "function", - "file": "git2/repository.h", - "line": 913, - "lineto": 913, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository pointer" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " The state of the repository" - }, - "description": "

Determines the status of a git repository - ie, whether an operation\n (merge, cherry-pick, etc) is in progress.

\n", - "comments": "", - "group": "repository", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_repository_state-25" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_repository_state-35" - ] - } - }, - "git_repository_set_namespace": { - "type": "function", - "file": "git2/repository.h", - "line": 927, - "lineto": 927, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repo" - }, - { - "name": "nmspace", - "type": "const char *", - "comment": "The namespace. This should not include the refs\n\tfolder, e.g. to namespace all references under `refs/namespaces/foo/`,\n\tuse `foo` as the namespace." - } - ], - "argline": "git_repository *repo, const char *nmspace", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error" - }, - "description": "

Sets the active namespace for this Git Repository

\n", - "comments": "

This namespace affects all reference operations for the repo. See man gitnamespaces

\n", - "group": "repository" - }, - "git_repository_get_namespace": { - "type": "function", - "file": "git2/repository.h", - "line": 935, - "lineto": 935, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repo" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "const char *", - "comment": " the active namespace, or NULL if there isn't one" - }, - "description": "

Get the currently active namespace for this repository

\n", - "comments": "", - "group": "repository" - }, - "git_repository_is_shallow": { - "type": "function", - "file": "git2/repository.h", - "line": 944, - "lineto": 944, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "int", - "comment": " 1 if shallow, zero if not" - }, - "description": "

Determine if the repository was a shallow clone

\n", - "comments": "", - "group": "repository" - }, - "git_repository_ident": { - "type": "function", - "file": "git2/repository.h", - "line": 957, - "lineto": 957, - "args": [ - { - "name": "name", - "type": "const char **", - "comment": "where to store the pointer to the name" - }, - { - "name": "email", - "type": "const char **", - "comment": "where to store the pointer to the email" - }, - { - "name": "repo", - "type": "const git_repository *", - "comment": "the repository" - } - ], - "argline": "const char **name, const char **email, const git_repository *repo", - "sig": "const char **::const char **::const git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Retrieve the configured identity to use for reflogs

\n", - "comments": "

The memory is owned by the repository and must not be freed by the user.

\n", - "group": "repository" - }, - "git_repository_set_ident": { - "type": "function", - "file": "git2/repository.h", - "line": 971, - "lineto": 971, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to configure" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name to use for the reflog entries" - }, - { - "name": "email", - "type": "const char *", - "comment": "the email to use for the reflog entries" - } - ], - "argline": "git_repository *repo, const char *name, const char *email", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Set the identity to be used for writing reflogs

\n", - "comments": "

If both are set, this name and email will be used to write to the reflog. Pass NULL to unset. When unset, the identity will be taken from the repository's configuration.

\n", - "group": "repository" - }, - "git_repository_oid_type": { - "type": "function", - "file": "git2/repository.h", - "line": 979, - "lineto": 979, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository" - } - ], - "argline": "git_repository *repo", - "sig": "git_repository *", - "return": { - "type": "git_oid_t", - "comment": " the object id type" - }, - "description": "

Gets the object type used by this repository.

\n", - "comments": "", - "group": "repository" - }, - "git_reset": { - "type": "function", - "file": "git2/reset.h", - "line": 62, - "lineto": 66, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to perform the reset operation." - }, - { - "name": "target", - "type": "const git_object *", - "comment": "Committish to which the Head should be moved to. This object\n must belong to the given `repo` and can either be a git_commit or a\n git_tag. When a git_tag is being passed, it should be dereferenceable\n to a git_commit which oid will be used as the target of the branch." - }, - { - "name": "reset_type", - "type": "git_reset_t", - "comment": "Kind of reset operation to perform." - }, - { - "name": "checkout_opts", - "type": "const git_checkout_options *", - "comment": "Optional checkout options to be used for a HARD reset.\n The checkout_strategy field will be overridden (based on reset_type).\n This parameter can be used to propagate notify and progress callbacks." - } - ], - "argline": "git_repository *repo, const git_object *target, git_reset_t reset_type, const git_checkout_options *checkout_opts", - "sig": "git_repository *::const git_object *::git_reset_t::const git_checkout_options *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", - "comments": "

SOFT reset means the Head will be moved to the commit.

\n\n

MIXED reset will trigger a SOFT reset, plus the index will be replaced with the content of the commit tree.

\n\n

HARD reset will trigger a MIXED reset and the working directory will be replaced with the content of the index. (Untracked and ignored files will be left alone, however.)

\n\n

TODO: Implement remaining kinds of resets.

\n", - "group": "reset" - }, - "git_reset_from_annotated": { - "type": "function", - "file": "git2/reset.h", - "line": 80, - "lineto": 84, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": null - }, - { - "name": "commit", - "type": "const git_annotated_commit *", - "comment": null - }, - { - "name": "reset_type", - "type": "git_reset_t", - "comment": null - }, - { - "name": "checkout_opts", - "type": "const git_checkout_options *", - "comment": null - } - ], - "argline": "git_repository *repo, const git_annotated_commit *commit, git_reset_t reset_type, const git_checkout_options *checkout_opts", - "sig": "git_repository *::const git_annotated_commit *::git_reset_t::const git_checkout_options *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", - "comments": "

This behaves like git_reset() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_reset().

\n", - "group": "reset" - }, - "git_reset_default": { - "type": "function", - "file": "git2/reset.h", - "line": 104, - "lineto": 107, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to perform the reset operation." - }, - { - "name": "target", - "type": "const git_object *", - "comment": "The committish which content will be used to reset the content\n of the index." - }, - { - "name": "pathspecs", - "type": "const git_strarray *", - "comment": "List of pathspecs to operate on." - } - ], - "argline": "git_repository *repo, const git_object *target, const git_strarray *pathspecs", - "sig": "git_repository *::const git_object *::const git_strarray *", - "return": { - "type": "int", - "comment": " 0 on success or an error code \n<\n 0" - }, - "description": "

Updates some entries in the index from the target commit tree.

\n", - "comments": "

The scope of the updated entries is determined by the paths being passed in the pathspec parameters.

\n\n

Passing a NULL target will result in removing entries in the index matching the provided pathspecs.

\n", - "group": "reset" - }, - "git_revert_options_init": { - "type": "function", - "file": "git2/revert.h", - "line": 49, - "lineto": 51, - "args": [ - { - "name": "opts", - "type": "git_revert_options *", - "comment": "The `git_revert_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_REVERT_OPTIONS_VERSION`." - } - ], - "argline": "git_revert_options *opts, unsigned int version", - "sig": "git_revert_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_revert_options structure

\n", - "comments": "

Initializes a git_revert_options with default values. Equivalent to creating an instance with GIT_REVERT_OPTIONS_INIT.

\n", - "group": "revert" - }, - "git_revert_commit": { - "type": "function", - "file": "git2/revert.h", - "line": 67, - "lineto": 73, - "args": [ - { - "name": "out", - "type": "git_index **", - "comment": "pointer to store the index result in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository that contains the given commits" - }, - { - "name": "revert_commit", - "type": "git_commit *", - "comment": "the commit to revert" - }, - { - "name": "our_commit", - "type": "git_commit *", - "comment": "the commit to revert against (eg, HEAD)" - }, - { - "name": "mainline", - "type": "unsigned int", - "comment": "the parent of the revert commit, if it is a merge" - }, - { - "name": "merge_options", - "type": "const git_merge_options *", - "comment": "the merge options (or null for defaults)" - } - ], - "argline": "git_index **out, git_repository *repo, git_commit *revert_commit, git_commit *our_commit, unsigned int mainline, const git_merge_options *merge_options", - "sig": "git_index **::git_repository *::git_commit *::git_commit *::unsigned int::const git_merge_options *", - "return": { - "type": "int", - "comment": " zero on success, -1 on failure." - }, - "description": "

Reverts the given commit against the given "our" commit, producing an\n index that reflects the result of the revert.

\n", - "comments": "

The returned index must be freed explicitly with git_index_free.

\n", - "group": "revert" - }, - "git_revert": { - "type": "function", - "file": "git2/revert.h", - "line": 83, - "lineto": 86, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to revert" - }, - { - "name": "commit", - "type": "git_commit *", - "comment": "the commit to revert" - }, - { - "name": "given_opts", - "type": "const git_revert_options *", - "comment": "the revert options (or null for defaults)" - } - ], - "argline": "git_repository *repo, git_commit *commit, const git_revert_options *given_opts", - "sig": "git_repository *::git_commit *::const git_revert_options *", - "return": { - "type": "int", - "comment": " zero on success, -1 on failure." - }, - "description": "

Reverts the given commit, producing changes in the index and working directory.

\n", - "comments": "", - "group": "revert" - }, - "git_revparse_single": { - "type": "function", - "file": "git2/revparse.h", - "line": 37, - "lineto": 38, - "args": [ - { - "name": "out", - "type": "git_object **", - "comment": "pointer to output object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to search in" - }, - { - "name": "spec", - "type": "const char *", - "comment": "the textual specification for an object" - } - ], - "argline": "git_object **out, git_repository *repo, const char *spec", - "sig": "git_object **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Find a single object, as specified by a revision string.

\n", - "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

The returned object should be released with git_object_free when no longer needed.

\n", - "group": "revparse", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_revparse_single-22" - ], - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_revparse_single-30" - ], - "describe.c": [ - "ex/v1.7.2/describe.html#git_revparse_single-6" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_revparse_single-44" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_revparse_single-9", - "ex/v1.7.2/tag.html#git_revparse_single-10", - "ex/v1.7.2/tag.html#git_revparse_single-11", - "ex/v1.7.2/tag.html#git_revparse_single-12" - ] - } - }, - "git_revparse_ext": { - "type": "function", - "file": "git2/revparse.h", - "line": 61, - "lineto": 65, - "args": [ - { - "name": "object_out", - "type": "git_object **", - "comment": "pointer to output object" - }, - { - "name": "reference_out", - "type": "git_reference **", - "comment": "pointer to output reference or NULL" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to search in" - }, - { - "name": "spec", - "type": "const char *", - "comment": "the textual specification for an object" - } - ], - "argline": "git_object **object_out, git_reference **reference_out, git_repository *repo, const char *spec", - "sig": "git_object **::git_reference **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC\n or an error code" - }, - "description": "

Find a single object and intermediate reference by a revision string.

\n", - "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

In some cases (@{<-n>} or <branchname>@{upstream}), the expression may point to an intermediate reference. When such expressions are being passed in, reference_out will be valued as well.

\n\n

The returned object should be released with git_object_free and the returned reference with git_reference_free when no longer needed.

\n", - "group": "revparse", - "examples": { - "commit.c": [ - "ex/v1.7.2/commit.html#git_revparse_ext-9" - ] - } - }, - "git_revparse": { - "type": "function", - "file": "git2/revparse.h", - "line": 105, - "lineto": 108, - "args": [ - { - "name": "revspec", - "type": "git_revspec *", - "comment": "Pointer to an user-allocated git_revspec struct where\n\t the result of the rev-parse will be stored" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to search in" - }, - { - "name": "spec", - "type": "const char *", - "comment": "the rev-parse spec to parse" - } - ], - "argline": "git_revspec *revspec, git_repository *repo, const char *spec", - "sig": "git_revspec *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_INVALIDSPEC, GIT_ENOTFOUND, GIT_EAMBIGUOUS or an error code" - }, - "description": "

Parse a revision string for from, to, and intent.

\n", - "comments": "

See man gitrevisions or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", - "group": "revparse", - "examples": { - "blame.c": [ - "ex/v1.7.2/blame.html#git_revparse-23" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_revparse-45" - ], - "rev-parse.c": [ - "ex/v1.7.2/rev-parse.html#git_revparse-14", - "ex/v1.7.2/rev-parse.html#git_revparse-15" - ] - } - }, - "git_revwalk_new": { - "type": "function", - "file": "git2/revwalk.h", - "line": 73, - "lineto": 73, - "args": [ - { - "name": "out", - "type": "git_revwalk **", - "comment": "pointer to the new revision walker" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to walk through" - } - ], - "argline": "git_revwalk **out, git_repository *repo", - "sig": "git_revwalk **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Allocate a new revision walker to iterate through a repo.

\n", - "comments": "

This revision walker uses a custom memory pool and an internal commit cache, so it is relatively expensive to allocate.

\n\n

For maximum performance, this revision walker should be reused for different walks.

\n\n

This revision walker is not thread safe: it may only be used to walk a repository on a single thread; however, it is possible to have several revision walkers in several different threads walking the same repository.

\n", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_revwalk_new-65" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_revwalk_new-46", - "ex/v1.7.2/log.html#git_revwalk_new-47" - ] - } - }, - "git_revwalk_reset": { - "type": "function", - "file": "git2/revwalk.h", - "line": 89, - "lineto": 89, - "args": [ - { - "name": "walker", - "type": "git_revwalk *", - "comment": "handle to reset." - } - ], - "argline": "git_revwalk *walker", - "sig": "git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Reset the revision walker for reuse.

\n", - "comments": "

This will clear all the pushed and hidden commits, and leave the walker in a blank state (just like at creation) ready to receive new commit pushes and start a new walk.

\n\n

The revision walk is automatically reset when a walk is over.

\n", - "group": "revwalk" - }, - "git_revwalk_push": { - "type": "function", - "file": "git2/revwalk.h", - "line": 108, - "lineto": 108, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the oid of the commit to start from." - } - ], - "argline": "git_revwalk *walk, const git_oid *id", - "sig": "git_revwalk *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a new root for the traversal

\n", - "comments": "

The pushed commit will be marked as one of the roots from which to start the walk. This commit may not be walked if it or a child is hidden.

\n\n

At least one commit must be pushed onto the walker before a walk can be started.

\n\n

The given id must belong to a committish on the walked repository.

\n", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_revwalk_push-66" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_revwalk_push-48" - ] - } - }, - "git_revwalk_push_glob": { - "type": "function", - "file": "git2/revwalk.h", - "line": 126, - "lineto": 126, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "glob", - "type": "const char *", - "comment": "the glob pattern references should match" - } - ], - "argline": "git_revwalk *walk, const char *glob", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Push matching references

\n", - "comments": "

The OIDs pointed to by the references that match the given glob pattern will be pushed to the revision walker.

\n\n

A leading 'refs/' is implied if not present as well as a trailing '/*' if the glob lacks '?', '*' or '['.

\n\n

Any references matching this glob which do not point to a committish will be ignored.

\n", - "group": "revwalk" - }, - "git_revwalk_push_head": { - "type": "function", - "file": "git2/revwalk.h", - "line": 134, - "lineto": 134, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Push the repository's HEAD

\n", - "comments": "", - "group": "revwalk", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_revwalk_push_head-49" - ] - } - }, - "git_revwalk_hide": { - "type": "function", - "file": "git2/revwalk.h", - "line": 149, - "lineto": 149, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal." - }, - { - "name": "commit_id", - "type": "const git_oid *", - "comment": "the oid of commit that will be ignored during the traversal" - } - ], - "argline": "git_revwalk *walk, const git_oid *commit_id", - "sig": "git_revwalk *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Mark a commit (and its ancestors) uninteresting for the output.

\n", - "comments": "

The given id must belong to a committish on the walked repository.

\n\n

The resolved commit and all its parents will be hidden from the output on the revision walk.

\n", - "group": "revwalk", - "examples": { - "log.c": [ - "ex/v1.7.2/log.html#git_revwalk_hide-50" - ] - } - }, - "git_revwalk_hide_glob": { - "type": "function", - "file": "git2/revwalk.h", - "line": 168, - "lineto": 168, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "glob", - "type": "const char *", - "comment": "the glob pattern references should match" - } - ], - "argline": "git_revwalk *walk, const char *glob", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Hide matching references.

\n", - "comments": "

The OIDs pointed to by the references that match the given glob pattern and their ancestors will be hidden from the output on the revision walk.

\n\n

A leading 'refs/' is implied if not present as well as a trailing '/*' if the glob lacks '?', '*' or '['.

\n\n

Any references matching this glob which do not point to a committish will be ignored.

\n", - "group": "revwalk" - }, - "git_revwalk_hide_head": { - "type": "function", - "file": "git2/revwalk.h", - "line": 176, - "lineto": 176, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Hide the repository's HEAD

\n", - "comments": "", - "group": "revwalk" - }, - "git_revwalk_push_ref": { - "type": "function", - "file": "git2/revwalk.h", - "line": 187, - "lineto": 187, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference to push" - } - ], - "argline": "git_revwalk *walk, const char *refname", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Push the OID pointed to by a reference

\n", - "comments": "

The reference must point to a committish.

\n", - "group": "revwalk" - }, - "git_revwalk_hide_ref": { - "type": "function", - "file": "git2/revwalk.h", - "line": 198, - "lineto": 198, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference to hide" - } - ], - "argline": "git_revwalk *walk, const char *refname", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Hide the OID pointed to by a reference

\n", - "comments": "

The reference must point to a committish.

\n", - "group": "revwalk" - }, - "git_revwalk_next": { - "type": "function", - "file": "git2/revwalk.h", - "line": 218, - "lineto": 218, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Pointer where to store the oid of the next commit" - }, - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker to pop the commit from." - } - ], - "argline": "git_oid *out, git_revwalk *walk", - "sig": "git_oid *::git_revwalk *", - "return": { - "type": "int", - "comment": " 0 if the next commit was found;\n\tGIT_ITEROVER if there are no commits left to iterate" - }, - "description": "

Get the next commit from the revision walk.

\n", - "comments": "

The initial call to this method is not blocking when iterating through a repo with a time-sorting mode.

\n\n

Iterating with Topological or inverted modes makes the initial call blocking to preprocess the commit list, but this block should be mostly unnoticeable on most repositories (topological preprocessing times at 0.3s on the git.git repo).

\n\n

The revision walker is reset when the walk is over.

\n", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_revwalk_next-67" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_revwalk_next-51" - ] - } - }, - "git_revwalk_sorting": { - "type": "function", - "file": "git2/revwalk.h", - "line": 230, - "lineto": 230, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal." - }, - { - "name": "sort_mode", - "type": "unsigned int", - "comment": "combination of GIT_SORT_XXX flags" - } - ], - "argline": "git_revwalk *walk, unsigned int sort_mode", - "sig": "git_revwalk *::unsigned int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Change the sorting mode when iterating through the\n repository's contents.

\n", - "comments": "

Changing the sorting mode resets the walker.

\n", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_revwalk_sorting-68" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_revwalk_sorting-52", - "ex/v1.7.2/log.html#git_revwalk_sorting-53" - ] - } - }, - "git_revwalk_push_range": { - "type": "function", - "file": "git2/revwalk.h", - "line": 245, - "lineto": 245, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the walker being used for the traversal" - }, - { - "name": "range", - "type": "const char *", - "comment": "the range" - } - ], - "argline": "git_revwalk *walk, const char *range", - "sig": "git_revwalk *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Push and hide the respective endpoints of the given range.

\n", - "comments": "

The range should be of the form .. where each is in the form accepted by 'git_revparse_single'. The left-hand commit will be hidden and the right-hand commit pushed.

\n", - "group": "revwalk" - }, - "git_revwalk_simplify_first_parent": { - "type": "function", - "file": "git2/revwalk.h", - "line": 255, - "lineto": 255, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "The revision walker." - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Simplify the history by first-parent

\n", - "comments": "

No parents other than the first for each commit will be enqueued.

\n", - "group": "revwalk" - }, - "git_revwalk_free": { - "type": "function", - "file": "git2/revwalk.h", - "line": 263, - "lineto": 263, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "traversal handle to close. If NULL nothing occurs." - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a revision walker previously allocated.

\n", - "comments": "", - "group": "revwalk", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_revwalk_free-69" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_revwalk_free-54" - ] - } - }, - "git_revwalk_repository": { - "type": "function", - "file": "git2/revwalk.h", - "line": 272, - "lineto": 272, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the revision walker" - } - ], - "argline": "git_revwalk *walk", - "sig": "git_revwalk *", - "return": { - "type": "git_repository *", - "comment": " the repository being walked" - }, - "description": "

Return the repository on which this walker\n is operating.

\n", - "comments": "", - "group": "revwalk" - }, - "git_revwalk_add_hide_cb": { - "type": "function", - "file": "git2/revwalk.h", - "line": 295, - "lineto": 298, - "args": [ - { - "name": "walk", - "type": "git_revwalk *", - "comment": "the revision walker" - }, - { - "name": "hide_cb", - "type": "git_revwalk_hide_cb", - "comment": "callback function to hide a commit and its parents" - }, - { - "name": "payload", - "type": "void *", - "comment": "data payload to be passed to callback function" - } - ], - "argline": "git_revwalk *walk, git_revwalk_hide_cb hide_cb, void *payload", - "sig": "git_revwalk *::git_revwalk_hide_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Adds, changes or removes a callback function to hide a commit and its parents

\n", - "comments": "", - "group": "revwalk" - }, - "git_signature_new": { - "type": "function", - "file": "git2/signature.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature, in case of error NULL" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the person" - }, - { - "name": "email", - "type": "const char *", - "comment": "email of the person" - }, - { - "name": "time", - "type": "git_time_t", - "comment": "time (in seconds from epoch) when the action happened" - }, - { - "name": "offset", - "type": "int", - "comment": "timezone offset (in minutes) for the time" - } - ], - "argline": "git_signature **out, const char *name, const char *email, git_time_t time, int offset", - "sig": "git_signature **::const char *::const char *::git_time_t::int", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new action signature.

\n", - "comments": "

Call git_signature_free() to free the data.

\n\n

Note: angle brackets ('<' and '>') characters are not allowed to be used in either the name or the email parameter.

\n", - "group": "signature", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_signature_new-70", - "ex/v1.7.2/general.html#git_signature_new-71" - ] - } - }, - "git_signature_now": { - "type": "function", - "file": "git2/signature.h", - "line": 49, - "lineto": 49, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature, in case of error NULL" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the person" - }, - { - "name": "email", - "type": "const char *", - "comment": "email of the person" - } - ], - "argline": "git_signature **out, const char *name, const char *email", - "sig": "git_signature **::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new action signature with a timestamp of 'now'.

\n", - "comments": "

Call git_signature_free() to free the data.

\n", - "group": "signature", - "examples": { - "merge.c": [ - "ex/v1.7.2/merge.html#git_signature_now-36" - ] - } - }, - "git_signature_default": { - "type": "function", - "file": "git2/signature.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository pointer" - } - ], - "argline": "git_signature **out, git_repository *repo", - "sig": "git_signature **::git_repository *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if config is missing, or error code" - }, - "description": "

Create a new action signature with default user and now timestamp.

\n", - "comments": "

This looks up the user.name and user.email from the configuration and uses the current time as the timestamp, and creates a new signature based on that information. It will return GIT_ENOTFOUND if either the user.name or user.email are not set.

\n", - "group": "signature", - "examples": { - "commit.c": [ - "ex/v1.7.2/commit.html#git_signature_default-10" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_signature_default-10" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_signature_default-13" - ] - } - }, - "git_signature_from_buffer": { - "type": "function", - "file": "git2/signature.h", - "line": 76, - "lineto": 76, - "args": [ - { - "name": "out", - "type": "git_signature **", - "comment": "new signature" - }, - { - "name": "buf", - "type": "const char *", - "comment": "signature string" - } - ], - "argline": "git_signature **out, const char *buf", - "sig": "git_signature **::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALID if the signature is not parseable, or an error code" - }, - "description": "

Create a new signature by parsing the given buffer, which is\n expected to be in the format "Real Name \n<email

\n\n
\n

timestamp tzoffset",\n where timestamp is the number of seconds since the Unix epoch and\n tzoffset is the timezone offset in hhmm format (note the lack\n of a colon separator).

\n
\n", - "comments": "", - "group": "signature" - }, - "git_signature_dup": { - "type": "function", - "file": "git2/signature.h", - "line": 88, - "lineto": 88, - "args": [ - { - "name": "dest", - "type": "git_signature **", - "comment": "pointer where to store the copy" - }, - { - "name": "sig", - "type": "const git_signature *", - "comment": "signature to duplicate" - } - ], - "argline": "git_signature **dest, const git_signature *sig", - "sig": "git_signature **::const git_signature *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a copy of an existing signature. All internal strings are also\n duplicated.

\n", - "comments": "

Call git_signature_free() to free the data.

\n", - "group": "signature" - }, - "git_signature_free": { - "type": "function", - "file": "git2/signature.h", - "line": 99, - "lineto": 99, - "args": [ - { - "name": "sig", - "type": "git_signature *", - "comment": "signature to free" - } - ], - "argline": "git_signature *sig", - "sig": "git_signature *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an existing signature.

\n", - "comments": "

Because the signature is not an opaque structure, it is legal to free it manually, but be sure to free the "name" and "email" strings in addition to the structure itself.

\n", - "group": "signature", - "examples": { - "commit.c": [ - "ex/v1.7.2/commit.html#git_signature_free-11" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_signature_free-72", - "ex/v1.7.2/general.html#git_signature_free-73" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_signature_free-11" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_signature_free-14" - ] - } - }, - "git_stash_save": { - "type": "function", - "file": "git2/stash.h", - "line": 67, - "lineto": 72, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Object id of the commit containing the stashed state.\n This commit is also the target of the direct reference refs/stash." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "stasher", - "type": "const git_signature *", - "comment": "The identity of the person performing the stashing." - }, - { - "name": "message", - "type": "const char *", - "comment": "Optional description along with the stashed state." - }, - { - "name": "flags", - "type": "uint32_t", - "comment": "Flags to control the stashing process. (see GIT_STASH_* above)" - } - ], - "argline": "git_oid *out, git_repository *repo, const git_signature *stasher, const char *message, uint32_t flags", - "sig": "git_oid *::git_repository *::const git_signature *::const char *::uint32_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND where there's nothing to stash,\n or error code." - }, - "description": "

Save the local modifications to a new stash.

\n", - "comments": "", - "group": "stash" - }, - "git_stash_save_options_init": { - "type": "function", - "file": "git2/stash.h", - "line": 110, - "lineto": 111, - "args": [ - { - "name": "opts", - "type": "git_stash_save_options *", - "comment": "The `git_stash_save_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_STASH_SAVE_OPTIONS_VERSION`." - } - ], - "argline": "git_stash_save_options *opts, unsigned int version", - "sig": "git_stash_save_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_stash_save_options structure

\n", - "comments": "

Initializes a git_stash_save_options with default values. Equivalent to creating an instance with GIT_STASH_SAVE_OPTIONS_INIT.

\n", - "group": "stash" - }, - "git_stash_save_with_opts": { - "type": "function", - "file": "git2/stash.h", - "line": 123, - "lineto": 126, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "Object id of the commit containing the stashed state.\n This commit is also the target of the direct reference refs/stash." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "opts", - "type": "const git_stash_save_options *", - "comment": "The stash options." - } - ], - "argline": "git_oid *out, git_repository *repo, const git_stash_save_options *opts", - "sig": "git_oid *::git_repository *::const git_stash_save_options *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND where there's nothing to stash,\n or error code." - }, - "description": "

Save the local modifications to a new stash, with options.

\n", - "comments": "", - "group": "stash" - }, - "git_stash_apply_options_init": { - "type": "function", - "file": "git2/stash.h", - "line": 210, - "lineto": 211, - "args": [ - { - "name": "opts", - "type": "git_stash_apply_options *", - "comment": "The `git_stash_apply_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_STASH_APPLY_OPTIONS_VERSION`." - } - ], - "argline": "git_stash_apply_options *opts, unsigned int version", - "sig": "git_stash_apply_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_stash_apply_options structure

\n", - "comments": "

Initializes a git_stash_apply_options with default values. Equivalent to creating an instance with GIT_STASH_APPLY_OPTIONS_INIT.

\n", - "group": "stash" - }, - "git_stash_apply": { - "type": "function", - "file": "git2/stash.h", - "line": 239, - "lineto": 242, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "index", - "type": "size_t", - "comment": "The position within the stash list. 0 points to the\n most recent stashed state." - }, - { - "name": "options", - "type": "const git_stash_apply_options *", - "comment": "Optional options to control how stashes are applied." - } - ], - "argline": "git_repository *repo, size_t index, const git_stash_apply_options *options", - "sig": "git_repository *::size_t::const git_stash_apply_options *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the\n given index, GIT_EMERGECONFLICT if changes exist in the working\n directory, or an error code" - }, - "description": "

Apply a single stashed state from the stash list.

\n", - "comments": "

If local changes in the working directory conflict with changes in the stash then GIT_EMERGECONFLICT will be returned. In this case, the index will always remain unmodified and all files in the working directory will remain unmodified. However, if you are restoring untracked files or ignored files and there is a conflict when applying the modified files, then those files will remain in the working directory.

\n\n

If passing the GIT_STASH_APPLY_REINSTATE_INDEX flag and there would be conflicts when reinstating the index, the function will return GIT_EMERGECONFLICT and both the working directory and index will be left unmodified.

\n\n

Note that a minimum checkout strategy of GIT_CHECKOUT_SAFE is implied.

\n", - "group": "stash" - }, - "git_stash_foreach": { - "type": "function", - "file": "git2/stash.h", - "line": 275, - "lineto": 278, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the stash." - }, - { - "name": "callback", - "type": "git_stash_cb", - "comment": "Callback to invoke per found stashed state. The most\n recent stash state will be enumerated first." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra parameter to callback function." - } - ], - "argline": "git_repository *repo, git_stash_cb callback, void *payload", - "sig": "git_repository *::git_stash_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code." - }, - "description": "

Loop over all the stashed states and issue a callback for each one.

\n", - "comments": "

If the callback returns a non-zero value, this will stop looping.

\n", - "group": "stash" - }, - "git_stash_drop": { - "type": "function", - "file": "git2/stash.h", - "line": 291, - "lineto": 293, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "index", - "type": "size_t", - "comment": "The position within the stash list. 0 points to the\n most recent stashed state." - } - ], - "argline": "git_repository *repo, size_t index", - "sig": "git_repository *::size_t", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the given\n index, or error code." - }, - "description": "

Remove a single stashed state from the stash list.

\n", - "comments": "", - "group": "stash" - }, - "git_stash_pop": { - "type": "function", - "file": "git2/stash.h", - "line": 307, - "lineto": 310, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The owning repository." - }, - { - "name": "index", - "type": "size_t", - "comment": "The position within the stash list. 0 points to the\n most recent stashed state." - }, - { - "name": "options", - "type": "const git_stash_apply_options *", - "comment": "Optional options to control how stashes are applied." - } - ], - "argline": "git_repository *repo, size_t index, const git_stash_apply_options *options", - "sig": "git_repository *::size_t::const git_stash_apply_options *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the given\n index, or error code. (see git_stash_apply() above for details)" - }, - "description": "

Apply a single stashed state from the stash list and remove it from the list\n if successful.

\n", - "comments": "", - "group": "stash" - }, - "git_status_options_init": { - "type": "function", - "file": "git2/status.h", - "line": 277, - "lineto": 279, - "args": [ - { - "name": "opts", - "type": "git_status_options *", - "comment": "The `git_status_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_STATUS_OPTIONS_VERSION`." - } - ], - "argline": "git_status_options *opts, unsigned int version", - "sig": "git_status_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_status_options structure

\n", - "comments": "

Initializes a git_status_options with default values. Equivalent to creating an instance with GIT_STATUS_OPTIONS_INIT.

\n", - "group": "status" - }, - "git_status_foreach": { - "type": "function", - "file": "git2/status.h", - "line": 317, - "lineto": 320, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "callback", - "type": "git_status_cb", - "comment": "The function to call on each file" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to pass through to callback function" - } - ], - "argline": "git_repository *repo, git_status_cb callback, void *payload", - "sig": "git_repository *::git_status_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Gather file statuses and run a callback for each one.

\n", - "comments": "

The callback is passed the path of the file, the status (a combination of the git_status_t values above) and the payload data pointer passed into this function.

\n\n

If the callback returns a non-zero value, this function will stop looping and return that value to caller.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_status_foreach-6" - ] - } - }, - "git_status_foreach_ext": { - "type": "function", - "file": "git2/status.h", - "line": 341, - "lineto": 345, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository object" - }, - { - "name": "opts", - "type": "const git_status_options *", - "comment": "Status options structure" - }, - { - "name": "callback", - "type": "git_status_cb", - "comment": "The function to call on each file" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to pass through to callback function" - } - ], - "argline": "git_repository *repo, const git_status_options *opts, git_status_cb callback, void *payload", - "sig": "git_repository *::const git_status_options *::git_status_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Gather file status information and run callbacks as requested.

\n", - "comments": "

This is an extended version of the git_status_foreach() API that allows for more granular control over which paths will be processed and in what order. See the git_status_options structure for details about the additional controls that this makes available.

\n\n

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_status_foreach_ext-7" - ] - } - }, - "git_status_file": { - "type": "function", - "file": "git2/status.h", - "line": 373, - "lineto": 376, - "args": [ - { - "name": "status_flags", - "type": "unsigned int *", - "comment": "Output combination of git_status_t values for file" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "path", - "type": "const char *", - "comment": "The exact path to retrieve status for relative to the\n repository working directory" - } - ], - "argline": "unsigned int *status_flags, git_repository *repo, const char *path", - "sig": "unsigned int *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if the file is not found in the HEAD,\n index, and work tree, GIT_EAMBIGUOUS if `path` matches multiple files\n or if it refers to a folder, and -1 on other errors." - }, - "description": "

Get file status for a single file.

\n", - "comments": "

This tries to get status for the filename that you give. If no files match that name (in either the HEAD, index, or working directory), this returns GIT_ENOTFOUND.

\n\n

If the name matches multiple files (for example, if the path names a directory or if running on a case- insensitive filesystem and yet the HEAD has two entries that both match the path), then this returns GIT_EAMBIGUOUS because it cannot give correct results.

\n\n

This does not do any sort of rename detection. Renames require a set of targets and because of the path filtering, there is not enough information to check renames correctly. To check file status with rename detection, there is no choice but to do a full git_status_list_new and scan through looking for the path that you are interested in.

\n", - "group": "status", - "examples": { - "add.c": [ - "ex/v1.7.2/add.html#git_status_file-6" - ] - } - }, - "git_status_list_new": { - "type": "function", - "file": "git2/status.h", - "line": 391, - "lineto": 394, - "args": [ - { - "name": "out", - "type": "git_status_list **", - "comment": "Pointer to store the status results in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository object" - }, - { - "name": "opts", - "type": "const git_status_options *", - "comment": "Status options structure" - } - ], - "argline": "git_status_list **out, git_repository *repo, const git_status_options *opts", - "sig": "git_status_list **::git_repository *::const git_status_options *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Gather file status information and populate the git_status_list.

\n", - "comments": "

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_status_list_new-8", - "ex/v1.7.2/status.html#git_status_list_new-9" - ] - } - }, - "git_status_list_entrycount": { - "type": "function", - "file": "git2/status.h", - "line": 405, - "lineto": 406, - "args": [ - { - "name": "statuslist", - "type": "git_status_list *", - "comment": "Existing status list object" - } - ], - "argline": "git_status_list *statuslist", - "sig": "git_status_list *", - "return": { - "type": "size_t", - "comment": " the number of status entries" - }, - "description": "

Gets the count of status entries in this list.

\n", - "comments": "

If there are no changes in status (at least according the options given when the status list was created), this can return 0.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_status_list_entrycount-10", - "ex/v1.7.2/status.html#git_status_list_entrycount-11" - ] - } - }, - "git_status_byindex": { - "type": "function", - "file": "git2/status.h", - "line": 417, - "lineto": 419, - "args": [ - { - "name": "statuslist", - "type": "git_status_list *", - "comment": "Existing status list object" - }, - { - "name": "idx", - "type": "size_t", - "comment": "Position of the entry" - } - ], - "argline": "git_status_list *statuslist, size_t idx", - "sig": "git_status_list *::size_t", - "return": { - "type": "const git_status_entry *", - "comment": " Pointer to the entry; NULL if out of bounds" - }, - "description": "

Get a pointer to one of the entries in the status list.

\n", - "comments": "

The entry is not modifiable and should not be freed.

\n", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_status_byindex-12", - "ex/v1.7.2/status.html#git_status_byindex-13", - "ex/v1.7.2/status.html#git_status_byindex-14", - "ex/v1.7.2/status.html#git_status_byindex-15", - "ex/v1.7.2/status.html#git_status_byindex-16", - "ex/v1.7.2/status.html#git_status_byindex-17" - ] - } - }, - "git_status_list_free": { - "type": "function", - "file": "git2/status.h", - "line": 426, - "lineto": 427, - "args": [ - { - "name": "statuslist", - "type": "git_status_list *", - "comment": "Existing status list object" - } - ], - "argline": "git_status_list *statuslist", - "sig": "git_status_list *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free an existing status list

\n", - "comments": "", - "group": "status", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_status_list_free-18" - ] - } - }, - "git_status_should_ignore": { - "type": "function", - "file": "git2/status.h", - "line": 445, - "lineto": 448, - "args": [ - { - "name": "ignored", - "type": "int *", - "comment": "Boolean returning 0 if the file is not ignored, 1 if it is" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "A repository object" - }, - { - "name": "path", - "type": "const char *", - "comment": "The file to check ignores for, rooted at the repo's workdir." - } - ], - "argline": "int *ignored, git_repository *repo, const char *path", - "sig": "int *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 if ignore rules could be processed for the file (regardless\n of whether it exists or not), or an error \n<\n 0 if they could not." - }, - "description": "

Test if the ignore rules apply to a given file.

\n", - "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git add ." on the directory containing the file, would it be added or not?

\n", - "group": "status" - }, - "git_strarray_dispose": { - "type": "function", - "file": "git2/strarray.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "array", - "type": "git_strarray *", - "comment": "The git_strarray that contains strings to free" - } - ], - "argline": "git_strarray *array", - "sig": "git_strarray *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the strings contained in a string array. This method should\n be called on git_strarray objects that were provided by the\n library. Not doing so, will result in a memory leak.

\n", - "comments": "

This does not free the git_strarray itself, since the library will never allocate that object directly itself.

\n", - "group": "strarray", - "examples": { - "checkout.c": [ - "ex/v1.7.2/checkout.html#git_strarray_dispose-26" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_strarray_dispose-74" - ], - "remote.c": [ - "ex/v1.7.2/remote.html#git_strarray_dispose-11", - "ex/v1.7.2/remote.html#git_strarray_dispose-12" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_strarray_dispose-15" - ] - } - }, - "git_submodule_update_options_init": { - "type": "function", - "file": "git2/submodule.h", - "line": 171, - "lineto": 172, - "args": [ - { - "name": "opts", - "type": "git_submodule_update_options *", - "comment": "The `git_submodule_update_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_SUBMODULE_UPDATE_OPTIONS_VERSION`." - } - ], - "argline": "git_submodule_update_options *opts, unsigned int version", - "sig": "git_submodule_update_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_submodule_update_options structure

\n", - "comments": "

Initializes a git_submodule_update_options with default values. Equivalent to creating an instance with GIT_SUBMODULE_UPDATE_OPTIONS_INIT.

\n", - "group": "submodule" - }, - "git_submodule_update": { - "type": "function", - "file": "git2/submodule.h", - "line": 192, - "lineto": 192, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Submodule object" - }, - { - "name": "init", - "type": "int", - "comment": "If the submodule is not initialized, setting this flag to true\n will initialize the submodule before updating. Otherwise, this will\n return an error if attempting to update an uninitialized repository.\n but setting this to true forces them to be updated." - }, - { - "name": "options", - "type": "git_submodule_update_options *", - "comment": "configuration options for the update. If NULL, the\n function works as though GIT_SUBMODULE_UPDATE_OPTIONS_INIT was passed." - } - ], - "argline": "git_submodule *submodule, int init, git_submodule_update_options *options", - "sig": "git_submodule *::int::git_submodule_update_options *", - "return": { - "type": "int", - "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)." - }, - "description": "

Update a submodule. This will clone a missing submodule and\n checkout the subrepository to the commit specified in the index of\n the containing repository. If the submodule repository doesn't contain\n the target commit (e.g. because fetchRecurseSubmodules isn't set), then\n the submodule is fetched using the fetch options supplied in options.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_lookup": { - "type": "function", - "file": "git2/submodule.h", - "line": 221, - "lineto": 224, - "args": [ - { - "name": "out", - "type": "git_submodule **", - "comment": "Output ptr to submodule; pass NULL to just get return code" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The parent repository" - }, - { - "name": "name", - "type": "const char *", - "comment": "The name of or path to the submodule; trailing slashes okay" - } - ], - "argline": "git_submodule **out, git_repository *repo, const char *name", - "sig": "git_submodule **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_ENOTFOUND if submodule does not exist,\n GIT_EEXISTS if a repository is found in working directory only,\n -1 on other errors." - }, - "description": "

Lookup submodule information by name or path.

\n", - "comments": "

Given either the submodule name or path (they are usually the same), this returns a structure describing the submodule.

\n\n

There are two expected error scenarios:

\n\n
    \n
  • The submodule is not mentioned in the HEAD, the index, and the config, but does "exist" in the working directory (i.e. there is a subdirectory that appears to be a Git repository). In this case, this function returns GIT_EEXISTS to indicate a sub-repository exists but not in a state where a git_submodule can be instantiated. - The submodule is not mentioned in the HEAD, index, or config and the working directory doesn't contain a value git repo at that path. There may or may not be anything else at that path, but nothing that looks like a submodule. In this case, this returns GIT_ENOTFOUND.
  • \n
\n\n

You must call git_submodule_free when done with the submodule.

\n", - "group": "submodule" - }, - "git_submodule_dup": { - "type": "function", - "file": "git2/submodule.h", - "line": 234, - "lineto": 234, - "args": [ - { - "name": "out", - "type": "git_submodule **", - "comment": "Pointer to store the copy of the submodule." - }, - { - "name": "source", - "type": "git_submodule *", - "comment": "Original submodule to copy." - } - ], - "argline": "git_submodule **out, git_submodule *source", - "sig": "git_submodule **::git_submodule *", - "return": { - "type": "int", - "comment": " 0" - }, - "description": "

Create an in-memory copy of a submodule. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_free": { - "type": "function", - "file": "git2/submodule.h", - "line": 241, - "lineto": 241, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Release a submodule

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_foreach": { - "type": "function", - "file": "git2/submodule.h", - "line": 261, - "lineto": 264, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository" - }, - { - "name": "callback", - "type": "git_submodule_cb", - "comment": "Function to be called with the name of each submodule.\n Return a non-zero value to terminate the iteration." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra data to pass to callback" - } - ], - "argline": "git_repository *repo, git_submodule_cb callback, void *payload", - "sig": "git_repository *::git_submodule_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on error, or non-zero return value of callback" - }, - "description": "

Iterate over all tracked submodules of a repository.

\n", - "comments": "

See the note on git_submodule above. This iterates over the tracked submodules as described therein.

\n\n

If you are concerned about items in the working directory that look like submodules but are not tracked, the diff API will generate a diff record for workdir items that look like submodules but are not tracked, showing them as added in the workdir. Also, the status API will treat the entire subdirectory of a contained git repo as a single GIT_STATUS_WT_NEW item.

\n", - "group": "submodule", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_submodule_foreach-19" - ] - } - }, - "git_submodule_add_setup": { - "type": "function", - "file": "git2/submodule.h", - "line": 292, - "lineto": 297, - "args": [ - { - "name": "out", - "type": "git_submodule **", - "comment": "The newly created submodule ready to open for clone" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository in which you want to create the submodule" - }, - { - "name": "url", - "type": "const char *", - "comment": "URL for the submodule's remote" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path at which the submodule should be created" - }, - { - "name": "use_gitlink", - "type": "int", - "comment": "Should workdir contain a gitlink to the repo in\n .git/modules vs. repo directly in workdir." - } - ], - "argline": "git_submodule **out, git_repository *repo, const char *url, const char *path, int use_gitlink", - "sig": "git_submodule **::git_repository *::const char *::const char *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EEXISTS if submodule already exists,\n -1 on other errors." - }, - "description": "

Set up a new git submodule for checkout.

\n", - "comments": "

This does "git submodule add" up to the fetch and checkout of the submodule contents. It preps a new submodule, creates an entry in .gitmodules and creates an empty initialized repository either at the given path in the working directory or in .git/modules with a gitlink from the working directory to the new repo.

\n\n

To fully emulate "git submodule add" call this function, then open the submodule repo and perform the clone step as needed (if you don't need anything custom see git_submodule_add_clone()). Lastly, call git_submodule_add_finalize() to wrap up adding the new submodule and .gitmodules to the index to be ready to commit.

\n\n

You must call git_submodule_free on the submodule object when done.

\n", - "group": "submodule" - }, - "git_submodule_clone": { - "type": "function", - "file": "git2/submodule.h", - "line": 310, - "lineto": 313, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "The newly created repository object. Optional." - }, - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule currently waiting for its clone." - }, - { - "name": "opts", - "type": "const git_submodule_update_options *", - "comment": "The options to use." - } - ], - "argline": "git_repository **out, git_submodule *submodule, const git_submodule_update_options *opts", - "sig": "git_repository **::git_submodule *::const git_submodule_update_options *", - "return": { - "type": "int", - "comment": " 0 on success, -1 on other errors (see git_clone)." - }, - "description": "

Perform the clone step for a newly created submodule.

\n", - "comments": "

This performs the necessary git_clone to setup a newly-created submodule.

\n", - "group": "submodule" - }, - "git_submodule_add_finalize": { - "type": "function", - "file": "git2/submodule.h", - "line": 326, - "lineto": 326, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to finish adding." - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Resolve the setup of a new git submodule.

\n", - "comments": "

This should be called on a submodule once you have called add setup and done the clone of the submodule. This adds the .gitmodules file and the newly cloned submodule to the index to be ready to be committed (but doesn't actually do the commit).

\n", - "group": "submodule" - }, - "git_submodule_add_to_index": { - "type": "function", - "file": "git2/submodule.h", - "line": 338, - "lineto": 340, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to add to the index" - }, - { - "name": "write_index", - "type": "int", - "comment": "Boolean if this should immediately write the index\n file. If you pass this as false, you will have to get the\n git_index and explicitly call `git_index_write()` on it to\n save the change." - } - ], - "argline": "git_submodule *submodule, int write_index", - "sig": "git_submodule *::int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Add current submodule HEAD commit to index of superproject.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_owner": { - "type": "function", - "file": "git2/submodule.h", - "line": 353, - "lineto": 353, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "git_repository *", - "comment": " Pointer to `git_repository`" - }, - "description": "

Get the containing repository for a submodule.

\n", - "comments": "

This returns a pointer to the repository that contains the submodule. This is a just a reference to the repository that was passed to the original git_submodule_lookup() call, so if that repository has been freed, then this may be a dangling reference.

\n", - "group": "submodule" - }, - "git_submodule_name": { - "type": "function", - "file": "git2/submodule.h", - "line": 361, - "lineto": 361, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const char *", - "comment": " Pointer to the submodule name" - }, - "description": "

Get the name of submodule.

\n", - "comments": "", - "group": "submodule", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_submodule_name-20" - ] - } - }, - "git_submodule_path": { - "type": "function", - "file": "git2/submodule.h", - "line": 372, - "lineto": 372, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const char *", - "comment": " Pointer to the submodule path" - }, - "description": "

Get the path to the submodule.

\n", - "comments": "

The path is almost always the same as the submodule name, but the two are actually not required to match.

\n", - "group": "submodule", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_submodule_path-21" - ] - } - }, - "git_submodule_url": { - "type": "function", - "file": "git2/submodule.h", - "line": 380, - "lineto": 380, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const char *", - "comment": " Pointer to the submodule url" - }, - "description": "

Get the URL for the submodule.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_resolve_url": { - "type": "function", - "file": "git2/submodule.h", - "line": 390, - "lineto": 390, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer to store the absolute submodule url in" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Pointer to repository object" - }, - { - "name": "url", - "type": "const char *", - "comment": "Relative url" - } - ], - "argline": "git_buf *out, git_repository *repo, const char *url", - "sig": "git_buf *::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Resolve a submodule url relative to the given repository.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_branch": { - "type": "function", - "file": "git2/submodule.h", - "line": 398, - "lineto": 398, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const char *", - "comment": " Pointer to the submodule branch" - }, - "description": "

Get the branch for the submodule.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_set_branch": { - "type": "function", - "file": "git2/submodule.h", - "line": 411, - "lineto": 411, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the submodule to configure" - }, - { - "name": "branch", - "type": "const char *", - "comment": "Branch that should be used for the submodule" - } - ], - "argline": "git_repository *repo, const char *name, const char *branch", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Set the branch for the submodule in the configuration

\n", - "comments": "

After calling this, you may wish to call git_submodule_sync() to write the changes to the checked out submodule repository.

\n", - "group": "submodule" - }, - "git_submodule_set_url": { - "type": "function", - "file": "git2/submodule.h", - "line": 425, - "lineto": 425, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the submodule to configure" - }, - { - "name": "url", - "type": "const char *", - "comment": "URL that should be used for the submodule" - } - ], - "argline": "git_repository *repo, const char *name, const char *url", - "sig": "git_repository *::const char *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure" - }, - "description": "

Set the URL for the submodule in the configuration

\n", - "comments": "

After calling this, you may wish to call git_submodule_sync() to write the changes to the checked out submodule repository.

\n", - "group": "submodule" - }, - "git_submodule_index_id": { - "type": "function", - "file": "git2/submodule.h", - "line": 433, - "lineto": 433, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const git_oid *", - "comment": " Pointer to git_oid or NULL if submodule is not in index." - }, - "description": "

Get the OID for the submodule in the index.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_head_id": { - "type": "function", - "file": "git2/submodule.h", - "line": 441, - "lineto": 441, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const git_oid *", - "comment": " Pointer to git_oid or NULL if submodule is not in the HEAD." - }, - "description": "

Get the OID for the submodule in the current HEAD tree.

\n", - "comments": "", - "group": "submodule" - }, - "git_submodule_wd_id": { - "type": "function", - "file": "git2/submodule.h", - "line": 454, - "lineto": 454, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Pointer to submodule object" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "const git_oid *", - "comment": " Pointer to git_oid or NULL if submodule is not checked out." - }, - "description": "

Get the OID for the submodule in the current working directory.

\n", - "comments": "

This returns the OID that corresponds to looking up 'HEAD' in the checked out submodule. If there are pending changes in the index or anything else, this won't notice that. You should call git_submodule_status() for a more complete picture about the state of the working directory.

\n", - "group": "submodule" - }, - "git_submodule_ignore": { - "type": "function", - "file": "git2/submodule.h", - "line": 479, - "lineto": 480, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to check" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "git_submodule_ignore_t", - "comment": " The current git_submodule_ignore_t valyue what will be used for\n this submodule." - }, - "description": "

Get the ignore rule that will be used for the submodule.

\n", - "comments": "

These values control the behavior of git_submodule_status() for this submodule. There are four ignore values:

\n\n
    \n
  • GIT_SUBMODULE_IGNORE_NONE will consider any change to the contents of the submodule from a clean checkout to be dirty, including the addition of untracked files. This is the default if unspecified. - GIT_SUBMODULE_IGNORE_UNTRACKED examines the contents of the working tree (i.e. call git_status_foreach() on the submodule) but UNTRACKED files will not count as making the submodule dirty. - GIT_SUBMODULE_IGNORE_DIRTY means to only check if the HEAD of the submodule has moved for status. This is fast since it does not need to scan the working tree of the submodule at all. - GIT_SUBMODULE_IGNORE_ALL means not to open the submodule repo. The working directory will be consider clean so long as there is a checked out version present.
  • \n
\n", - "group": "submodule" - }, - "git_submodule_set_ignore": { - "type": "function", - "file": "git2/submodule.h", - "line": 492, - "lineto": 495, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the submdule" - }, - { - "name": "ignore", - "type": "git_submodule_ignore_t", - "comment": "The new value for the ignore rule" - } - ], - "argline": "git_repository *repo, const char *name, git_submodule_ignore_t ignore", - "sig": "git_repository *::const char *::git_submodule_ignore_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the ignore rule for the submodule in the configuration

\n", - "comments": "

This does not affect any currently-loaded instances.

\n", - "group": "submodule" - }, - "git_submodule_update_strategy": { - "type": "function", - "file": "git2/submodule.h", - "line": 507, - "lineto": 508, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to check" - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "git_submodule_update_t", - "comment": " The current git_submodule_update_t value that will be used\n for this submodule." - }, - "description": "

Get the update rule that will be used for the submodule.

\n", - "comments": "

This value controls the behavior of the git submodule update command. There are four useful values documented with git_submodule_update_t.

\n", - "group": "submodule" - }, - "git_submodule_set_update": { - "type": "function", - "file": "git2/submodule.h", - "line": 520, - "lineto": 523, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the name of the submodule to configure" - }, - { - "name": "update", - "type": "git_submodule_update_t", - "comment": "The new value to use" - } - ], - "argline": "git_repository *repo, const char *name, git_submodule_update_t update", - "sig": "git_repository *::const char *::git_submodule_update_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Set the update rule for the submodule in the configuration

\n", - "comments": "

This setting won't affect any existing instances.

\n", - "group": "submodule" - }, - "git_submodule_fetch_recurse_submodules": { - "type": "function", - "file": "git2/submodule.h", - "line": 536, - "lineto": 537, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": null - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "git_submodule_recurse_t", - "comment": " 0 if fetchRecurseSubmodules is false, 1 if true" - }, - "description": "

Read the fetchRecurseSubmodules rule for a submodule.

\n", - "comments": "

This accesses the submodule..fetchRecurseSubmodules value for the submodule that controls fetching behavior for the submodule.

\n\n

Note that at this time, libgit2 does not honor this setting and the fetch functionality current ignores submodules.

\n", - "group": "submodule" - }, - "git_submodule_set_fetch_recurse_submodules": { - "type": "function", - "file": "git2/submodule.h", - "line": 549, - "lineto": 552, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository to affect" - }, - { - "name": "name", - "type": "const char *", - "comment": "the submodule to configure" - }, - { - "name": "fetch_recurse_submodules", - "type": "git_submodule_recurse_t", - "comment": "Boolean value" - } - ], - "argline": "git_repository *repo, const char *name, git_submodule_recurse_t fetch_recurse_submodules", - "sig": "git_repository *::const char *::git_submodule_recurse_t", - "return": { - "type": "int", - "comment": " old value for fetchRecurseSubmodules" - }, - "description": "

Set the fetchRecurseSubmodules rule for a submodule in the configuration

\n", - "comments": "

This setting won't affect any existing instances.

\n", - "group": "submodule" - }, - "git_submodule_init": { - "type": "function", - "file": "git2/submodule.h", - "line": 567, - "lineto": 567, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to write into the superproject config" - }, - { - "name": "overwrite", - "type": "int", - "comment": "By default, existing entries will not be overwritten,\n but setting this to true forces them to be updated." - } - ], - "argline": "git_submodule *submodule, int overwrite", - "sig": "git_submodule *::int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure." - }, - "description": "

Copy submodule info into ".git/config" file.

\n", - "comments": "

Just like "git submodule init", this copies information about the submodule into ".git/config". You can use the accessor functions above to alter the in-memory git_submodule object and control what is written to the config, overriding what is in .gitmodules.

\n", - "group": "submodule" - }, - "git_submodule_repo_init": { - "type": "function", - "file": "git2/submodule.h", - "line": 582, - "lineto": 585, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "Output pointer to the created git repository." - }, - { - "name": "sm", - "type": "const git_submodule *", - "comment": "The submodule to create a new subrepository from." - }, - { - "name": "use_gitlink", - "type": "int", - "comment": "Should the workdir contain a gitlink to\n the repo in .git/modules vs. repo directly in workdir." - } - ], - "argline": "git_repository **out, const git_submodule *sm, int use_gitlink", - "sig": "git_repository **::const git_submodule *::int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on failure." - }, - "description": "

Set up the subrepository for a submodule in preparation for clone.

\n", - "comments": "

This function can be called to init and set up a submodule repository from a submodule in preparation to clone it from its remote.

\n", - "group": "submodule" - }, - "git_submodule_sync": { - "type": "function", - "file": "git2/submodule.h", - "line": 598, - "lineto": 598, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to copy." - } - ], - "argline": "git_submodule *submodule", - "sig": "git_submodule *", - "return": { - "type": "int", - "comment": " 0 or an error code." - }, - "description": "

Copy submodule remote info into submodule repo.

\n", - "comments": "

This copies the information about the submodules URL into the checked out submodule config, acting like "git submodule sync". This is useful if you have altered the URL for the submodule (or it has been altered by a fetch of upstream changes) and you need to update your local repo.

\n", - "group": "submodule" - }, - "git_submodule_open": { - "type": "function", - "file": "git2/submodule.h", - "line": 612, - "lineto": 614, - "args": [ - { - "name": "repo", - "type": "git_repository **", - "comment": "Pointer to the submodule repo which was opened" - }, - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Submodule to be opened" - } - ], - "argline": "git_repository **repo, git_submodule *submodule", - "sig": "git_repository **::git_submodule *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 if submodule repo could not be opened." - }, - "description": "

Open the repository for a submodule.

\n", - "comments": "

This is a newly opened repository object. The caller is responsible for calling git_repository_free() on it when done. Multiple calls to this function will return distinct git_repository objects. This will only work if the submodule is checked out into the working directory.

\n", - "group": "submodule" - }, - "git_submodule_reload": { - "type": "function", - "file": "git2/submodule.h", - "line": 626, - "lineto": 626, - "args": [ - { - "name": "submodule", - "type": "git_submodule *", - "comment": "The submodule to reload" - }, - { - "name": "force", - "type": "int", - "comment": "Force reload even if the data doesn't seem out of date" - } - ], - "argline": "git_submodule *submodule, int force", - "sig": "git_submodule *::int", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on error" - }, - "description": "

Reread submodule info from config, index, and HEAD.

\n", - "comments": "

Call this to reread cached submodule information for this submodule if you have reason to believe that it has changed.

\n", - "group": "submodule" - }, - "git_submodule_status": { - "type": "function", - "file": "git2/submodule.h", - "line": 642, - "lineto": 646, - "args": [ - { - "name": "status", - "type": "unsigned int *", - "comment": "Combination of `GIT_SUBMODULE_STATUS` flags" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to look" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the submodule" - }, - { - "name": "ignore", - "type": "git_submodule_ignore_t", - "comment": "the ignore rules to follow" - } - ], - "argline": "unsigned int *status, git_repository *repo, const char *name, git_submodule_ignore_t ignore", - "sig": "unsigned int *::git_repository *::const char *::git_submodule_ignore_t", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on error" - }, - "description": "

Get the status for a submodule.

\n", - "comments": "

This looks at a submodule and tries to determine the status. It will return a combination of the GIT_SUBMODULE_STATUS values above. How deeply it examines the working directory to do this will depend on the git_submodule_ignore_t value for the submodule.

\n", - "group": "submodule", - "examples": { - "status.c": [ - "ex/v1.7.2/status.html#git_submodule_status-22" - ] - } - }, - "git_submodule_location": { - "type": "function", - "file": "git2/submodule.h", - "line": 662, - "lineto": 664, - "args": [ - { - "name": "location_status", - "type": "unsigned int *", - "comment": "Combination of first four `GIT_SUBMODULE_STATUS` flags" - }, - { - "name": "submodule", - "type": "git_submodule *", - "comment": "Submodule for which to get status" - } - ], - "argline": "unsigned int *location_status, git_submodule *submodule", - "sig": "unsigned int *::git_submodule *", - "return": { - "type": "int", - "comment": " 0 on success, \n<\n0 on error" - }, - "description": "

Get the locations of submodule information.

\n", - "comments": "

This is a bit like a very lightweight version of git_submodule_status. It just returns a made of the first four submodule status values (i.e. the ones like GIT_SUBMODULE_STATUS_IN_HEAD, etc) that tell you where the submodule data comes from (i.e. the HEAD commit, gitmodules file, etc.). This can be useful if you want to know if the submodule is present in the working directory at this point in time, etc.

\n", - "group": "submodule" - }, - "git_tag_lookup": { - "type": "function", - "file": "git2/tag.h", - "line": 33, - "lineto": 34, - "args": [ - { - "name": "out", - "type": "git_tag **", - "comment": "pointer to the looked up tag" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the tag." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the tag to locate." - } - ], - "argline": "git_tag **out, git_repository *repo, const git_oid *id", - "sig": "git_tag **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a tag object from the repository.

\n", - "comments": "", - "group": "tag", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_tag_lookup-75" - ] - } - }, - "git_tag_lookup_prefix": { - "type": "function", - "file": "git2/tag.h", - "line": 48, - "lineto": 49, - "args": [ - { - "name": "out", - "type": "git_tag **", - "comment": "pointer to the looked up tag" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the tag." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the tag to locate." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - } - ], - "argline": "git_tag **out, git_repository *repo, const git_oid *id, size_t len", - "sig": "git_tag **::git_repository *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a tag object from the repository,\n given a prefix of its identifier (short id).

\n", - "comments": "", - "group": "tag" - }, - "git_tag_free": { - "type": "function", - "file": "git2/tag.h", - "line": 61, - "lineto": 61, - "args": [ - { - "name": "tag", - "type": "git_tag *", - "comment": "the tag to close" - } - ], - "argline": "git_tag *tag", - "sig": "git_tag *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open tag

\n", - "comments": "

You can no longer use the git_tag pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you are through with a tag to release memory. Failure to do so will cause a memory leak.

\n", - "group": "tag", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_tag_free-76" - ] - } - }, - "git_tag_id": { - "type": "function", - "file": "git2/tag.h", - "line": 69, - "lineto": 69, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const git_oid *", - "comment": " object identity for the tag." - }, - "description": "

Get the id of a tag.

\n", - "comments": "", - "group": "tag" - }, - "git_tag_owner": { - "type": "function", - "file": "git2/tag.h", - "line": 77, - "lineto": 77, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "A previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "git_repository *", - "comment": " Repository that contains this tag." - }, - "description": "

Get the repository that contains the tag.

\n", - "comments": "", - "group": "tag" - }, - "git_tag_target": { - "type": "function", - "file": "git2/tag.h", - "line": 89, - "lineto": 89, - "args": [ - { - "name": "target_out", - "type": "git_object **", - "comment": "pointer where to store the target" - }, - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "git_object **target_out, const git_tag *tag", - "sig": "git_object **::const git_tag *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Get the tagged object of a tag

\n", - "comments": "

This method performs a repository lookup for the given object and returns it

\n", - "group": "tag", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_tag_target-77" - ] - } - }, - "git_tag_target_id": { - "type": "function", - "file": "git2/tag.h", - "line": 97, - "lineto": 97, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const git_oid *", - "comment": " pointer to the OID" - }, - "description": "

Get the OID of the tagged object of a tag

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tag_target_id-31" - ] - } - }, - "git_tag_target_type": { - "type": "function", - "file": "git2/tag.h", - "line": 105, - "lineto": 105, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "git_object_t", - "comment": " type of the tagged object" - }, - "description": "

Get the type of a tag's tagged object

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tag_target_type-32" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_tag_target_type-78" - ] - } - }, - "git_tag_name": { - "type": "function", - "file": "git2/tag.h", - "line": 113, - "lineto": 113, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const char *", - "comment": " name of the tag" - }, - "description": "

Get the name of a tag

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tag_name-33" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_tag_name-79" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_tag_name-16" - ] - } - }, - "git_tag_tagger": { - "type": "function", - "file": "git2/tag.h", - "line": 121, - "lineto": 121, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const git_signature *", - "comment": " reference to the tag's author or NULL when unspecified" - }, - "description": "

Get the tagger (author) of a tag

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tag_tagger-34" - ] - } - }, - "git_tag_message": { - "type": "function", - "file": "git2/tag.h", - "line": 129, - "lineto": 129, - "args": [ - { - "name": "tag", - "type": "const git_tag *", - "comment": "a previously loaded tag." - } - ], - "argline": "const git_tag *tag", - "sig": "const git_tag *", - "return": { - "type": "const char *", - "comment": " message of the tag or NULL when unspecified" - }, - "description": "

Get the message of a tag

\n", - "comments": "", - "group": "tag", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tag_message-35", - "ex/v1.7.2/cat-file.html#git_tag_message-36" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_tag_message-80" - ], - "tag.c": [ - "ex/v1.7.2/tag.html#git_tag_message-17" - ] - } - }, - "git_tag_create": { - "type": "function", - "file": "git2/tag.h", - "line": 171, - "lineto": 178, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the\n newly created tag. If the tag already exists, this parameter\n will be the oid of the existing tag, and the function will\n return a GIT_EEXISTS error code." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the tag" - }, - { - "name": "tag_name", - "type": "const char *", - "comment": "Name for the tag; this name is validated\n for consistency. It should also not conflict with an\n already existing tag name" - }, - { - "name": "target", - "type": "const git_object *", - "comment": "Object to which this tag points. This object\n must belong to the given `repo`." - }, - { - "name": "tagger", - "type": "const git_signature *", - "comment": "Signature of the tagger for this tag, and\n of the tagging time" - }, - { - "name": "message", - "type": "const char *", - "comment": "Full message for this tag" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - } - ], - "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, const git_signature *tagger, const char *message, int force", - "sig": "git_oid *::git_repository *::const char *::const git_object *::const git_signature *::const char *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code\n\tA tag object is written to the ODB, and a proper reference\n\tis written in the /refs/tags folder, pointing to it" - }, - "description": "

Create a new tag in the repository from an object

\n", - "comments": "

A new reference will also be created pointing to this tag object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n\n

The tag name will be checked for validity. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.

\n", - "group": "tag", - "examples": { - "tag.c": [ - "ex/v1.7.2/tag.html#git_tag_create-18" - ] - } - }, - "git_tag_annotation_create": { - "type": "function", - "file": "git2/tag.h", - "line": 203, - "lineto": 209, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the\n newly created tag" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the tag" - }, - { - "name": "tag_name", - "type": "const char *", - "comment": "Name for the tag" - }, - { - "name": "target", - "type": "const git_object *", - "comment": "Object to which this tag points. This object\n must belong to the given `repo`." - }, - { - "name": "tagger", - "type": "const git_signature *", - "comment": "Signature of the tagger for this tag, and\n of the tagging time" - }, - { - "name": "message", - "type": "const char *", - "comment": "Full message for this tag" - } - ], - "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, const git_signature *tagger, const char *message", - "sig": "git_oid *::git_repository *::const char *::const git_object *::const git_signature *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Create a new tag in the object database pointing to a git_object

\n", - "comments": "

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n", - "group": "tag" - }, - "git_tag_create_from_buffer": { - "type": "function", - "file": "git2/tag.h", - "line": 220, - "lineto": 224, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the newly created tag" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the tag" - }, - { - "name": "buffer", - "type": "const char *", - "comment": "Raw tag data" - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing tags" - } - ], - "argline": "git_oid *oid, git_repository *repo, const char *buffer, int force", - "sig": "git_oid *::git_repository *::const char *::int", - "return": { - "type": "int", - "comment": " 0 on success; error code otherwise" - }, - "description": "

Create a new tag in the repository from a buffer

\n", - "comments": "", - "group": "tag" - }, - "git_tag_create_lightweight": { - "type": "function", - "file": "git2/tag.h", - "line": 256, - "lineto": 261, - "args": [ - { - "name": "oid", - "type": "git_oid *", - "comment": "Pointer where to store the OID of the provided\n target object. If the tag already exists, this parameter\n will be filled with the oid of the existing pointed object\n and the function will return a GIT_EEXISTS error code." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to store the lightweight tag" - }, - { - "name": "tag_name", - "type": "const char *", - "comment": "Name for the tag; this name is validated\n for consistency. It should also not conflict with an\n already existing tag name" - }, - { - "name": "target", - "type": "const git_object *", - "comment": "Object to which this tag points. This object\n must belong to the given `repo`." - }, - { - "name": "force", - "type": "int", - "comment": "Overwrite existing references" - } - ], - "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, int force", - "sig": "git_oid *::git_repository *::const char *::const git_object *::int", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code\n\tA proper reference is written in the /refs/tags folder,\n pointing to the provided target object" - }, - "description": "

Create a new lightweight tag pointing at a target object

\n", - "comments": "

A new direct reference will be created pointing to this target object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", - "group": "tag", - "examples": { - "tag.c": [ - "ex/v1.7.2/tag.html#git_tag_create_lightweight-19" - ] - } - }, - "git_tag_delete": { - "type": "function", - "file": "git2/tag.h", - "line": 276, - "lineto": 278, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where lives the tag" - }, - { - "name": "tag_name", - "type": "const char *", - "comment": "Name of the tag to be deleted;\n this name is validated for consistency." - } - ], - "argline": "git_repository *repo, const char *tag_name", - "sig": "git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" - }, - "description": "

Delete an existing tag reference.

\n", - "comments": "

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", - "group": "tag", - "examples": { - "tag.c": [ - "ex/v1.7.2/tag.html#git_tag_delete-20" - ] - } - }, - "git_tag_list": { - "type": "function", - "file": "git2/tag.h", - "line": 293, - "lineto": 295, - "args": [ - { - "name": "tag_names", - "type": "git_strarray *", - "comment": "Pointer to a git_strarray structure where\n\t\tthe tag names will be stored" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the tags" - } - ], - "argline": "git_strarray *tag_names, git_repository *repo", - "sig": "git_strarray *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Fill a list with all the tags in the Repository

\n", - "comments": "

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", - "group": "tag" - }, - "git_tag_list_match": { - "type": "function", - "file": "git2/tag.h", - "line": 315, - "lineto": 318, - "args": [ - { - "name": "tag_names", - "type": "git_strarray *", - "comment": "Pointer to a git_strarray structure where\n\t\tthe tag names will be stored" - }, - { - "name": "pattern", - "type": "const char *", - "comment": "Standard fnmatch pattern" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the tags" - } - ], - "argline": "git_strarray *tag_names, const char *pattern, git_repository *repo", - "sig": "git_strarray *::const char *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Fill a list with all the tags in the Repository\n which name match a defined pattern

\n", - "comments": "

If an empty pattern is provided, all the tags will be returned.

\n\n

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", - "group": "tag", - "examples": { - "tag.c": [ - "ex/v1.7.2/tag.html#git_tag_list_match-21" - ] - } - }, - "git_tag_foreach": { - "type": "function", - "file": "git2/tag.h", - "line": 339, - "lineto": 342, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository" - }, - { - "name": "callback", - "type": "git_tag_foreach_cb", - "comment": "Callback function" - }, - { - "name": "payload", - "type": "void *", - "comment": "Pointer to callback data (optional)" - } - ], - "argline": "git_repository *repo, git_tag_foreach_cb callback, void *payload", - "sig": "git_repository *::git_tag_foreach_cb::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Call callback `cb' for each tag in the repository

\n", - "comments": "", - "group": "tag" - }, - "git_tag_peel": { - "type": "function", - "file": "git2/tag.h", - "line": 355, - "lineto": 357, - "args": [ - { - "name": "tag_target_out", - "type": "git_object **", - "comment": "Pointer to the peeled git_object" - }, - { - "name": "tag", - "type": "const git_tag *", - "comment": "The tag to be processed" - } - ], - "argline": "git_object **tag_target_out, const git_tag *tag", - "sig": "git_object **::const git_tag *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Recursively peel a tag until a non tag git_object is found

\n", - "comments": "

The retrieved tag_target object is owned by the repository and should be closed with the git_object_free method.

\n", - "group": "tag" - }, - "git_tag_dup": { - "type": "function", - "file": "git2/tag.h", - "line": 367, - "lineto": 367, - "args": [ - { - "name": "out", - "type": "git_tag **", - "comment": "Pointer to store the copy of the tag" - }, - { - "name": "source", - "type": "git_tag *", - "comment": "Original tag to copy" - } - ], - "argline": "git_tag **out, git_tag *source", - "sig": "git_tag **::git_tag *", - "return": { - "type": "int", - "comment": " 0" - }, - "description": "

Create an in-memory copy of a tag. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "tag" - }, - "git_tag_name_is_valid": { - "type": "function", - "file": "git2/tag.h", - "line": 379, - "lineto": 379, - "args": [ - { - "name": "valid", - "type": "int *", - "comment": "output pointer to set with validity of given tag name" - }, - { - "name": "name", - "type": "const char *", - "comment": "a tag name to test" - } - ], - "argline": "int *valid, const char *name", - "sig": "int *::const char *", - "return": { - "type": "int", - "comment": " 0 on success or an error code" - }, - "description": "

Determine whether a tag name is valid, meaning that (when prefixed\n with refs/tags/) that it is a valid reference name, and that any\n additional tag name restrictions are imposed (eg, it cannot start\n with a -).

\n", - "comments": "", - "group": "tag" - }, - "git_trace_set": { - "type": "function", - "file": "git2/trace.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "level", - "type": "git_trace_level_t", - "comment": "Level to set tracing to" - }, - { - "name": "cb", - "type": "git_trace_cb", - "comment": "Function to call with trace data" - } - ], - "argline": "git_trace_level_t level, git_trace_cb cb", - "sig": "git_trace_level_t::git_trace_cb", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Sets the system tracing configuration to the specified level with the\n specified callback. When system events occur at a level equal to, or\n lower than, the given level they will be reported to the given callback.

\n", - "comments": "", - "group": "trace" - }, - "git_transaction_new": { - "type": "function", - "file": "git2/transaction.h", - "line": 32, - "lineto": 32, - "args": [ - { - "name": "out", - "type": "git_transaction **", - "comment": "the resulting transaction" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to lock" - } - ], - "argline": "git_transaction **out, git_repository *repo", - "sig": "git_transaction **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a new transaction object

\n", - "comments": "

This does not lock anything, but sets up the transaction object to know from which repository to lock.

\n", - "group": "transaction" - }, - "git_transaction_lock_ref": { - "type": "function", - "file": "git2/transaction.h", - "line": 44, - "lineto": 44, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference to lock" - } - ], - "argline": "git_transaction *tx, const char *refname", - "sig": "git_transaction *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error message" - }, - "description": "

Lock a reference

\n", - "comments": "

Lock the specified reference. This is the first step to updating a reference.

\n", - "group": "transaction" - }, - "git_transaction_set_target": { - "type": "function", - "file": "git2/transaction.h", - "line": 59, - "lineto": 59, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "reference to update" - }, - { - "name": "target", - "type": "const git_oid *", - "comment": "target to set the reference to" - }, - { - "name": "sig", - "type": "const git_signature *", - "comment": "signature to use in the reflog; pass NULL to read the identity from the config" - }, - { - "name": "msg", - "type": "const char *", - "comment": "message to use in the reflog" - } - ], - "argline": "git_transaction *tx, const char *refname, const git_oid *target, const git_signature *sig, const char *msg", - "sig": "git_transaction *::const char *::const git_oid *::const git_signature *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" - }, - "description": "

Set the target of a reference

\n", - "comments": "

Set the target of the specified reference. This reference must be locked.

\n", - "group": "transaction" - }, - "git_transaction_set_symbolic_target": { - "type": "function", - "file": "git2/transaction.h", - "line": 74, - "lineto": 74, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "reference to update" - }, - { - "name": "target", - "type": "const char *", - "comment": "target to set the reference to" - }, - { - "name": "sig", - "type": "const git_signature *", - "comment": "signature to use in the reflog; pass NULL to read the identity from the config" - }, - { - "name": "msg", - "type": "const char *", - "comment": "message to use in the reflog" - } - ], - "argline": "git_transaction *tx, const char *refname, const char *target, const git_signature *sig, const char *msg", - "sig": "git_transaction *::const char *::const char *::const git_signature *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" - }, - "description": "

Set the target of a reference

\n", - "comments": "

Set the target of the specified reference. This reference must be locked.

\n", - "group": "transaction" - }, - "git_transaction_set_reflog": { - "type": "function", - "file": "git2/transaction.h", - "line": 87, - "lineto": 87, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference whose reflog to set" - }, - { - "name": "reflog", - "type": "const git_reflog *", - "comment": "the reflog as it should be written out" - } - ], - "argline": "git_transaction *tx, const char *refname, const git_reflog *reflog", - "sig": "git_transaction *::const char *::const git_reflog *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" - }, - "description": "

Set the reflog of a reference

\n", - "comments": "

Set the specified reference's reflog. If this is combined with setting the target, that update won't be written to the reflog.

\n", - "group": "transaction" - }, - "git_transaction_remove": { - "type": "function", - "file": "git2/transaction.h", - "line": 96, - "lineto": 96, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - }, - { - "name": "refname", - "type": "const char *", - "comment": "the reference to remove" - } - ], - "argline": "git_transaction *tx, const char *refname", - "sig": "git_transaction *::const char *", - "return": { - "type": "int", - "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" - }, - "description": "

Remove a reference

\n", - "comments": "", - "group": "transaction" - }, - "git_transaction_commit": { - "type": "function", - "file": "git2/transaction.h", - "line": 107, - "lineto": 107, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - } - ], - "argline": "git_transaction *tx", - "sig": "git_transaction *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Commit the changes from the transaction

\n", - "comments": "

Perform the changes that have been queued. The updates will be made one by one, and the first failure will stop the processing.

\n", - "group": "transaction" - }, - "git_transaction_free": { - "type": "function", - "file": "git2/transaction.h", - "line": 117, - "lineto": 117, - "args": [ - { - "name": "tx", - "type": "git_transaction *", - "comment": "the transaction" - } - ], - "argline": "git_transaction *tx", - "sig": "git_transaction *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free the resources allocated by this transaction

\n", - "comments": "

If any references remain locked, they will be unlocked without any changes made to them.

\n", - "group": "transaction" - }, - "git_tree_lookup": { - "type": "function", - "file": "git2/tree.h", - "line": 32, - "lineto": 33, - "args": [ - { - "name": "out", - "type": "git_tree **", - "comment": "Pointer to the looked up tree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repo to use when locating the tree." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "Identity of the tree to locate." - } - ], - "argline": "git_tree **out, git_repository *repo, const git_oid *id", - "sig": "git_tree **::git_repository *::const git_oid *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a tree object from the repository.

\n", - "comments": "", - "group": "tree", - "examples": { - "commit.c": [ - "ex/v1.7.2/commit.html#git_tree_lookup-12" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_tree_lookup-81", - "ex/v1.7.2/general.html#git_tree_lookup-82" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_tree_lookup-12" - ], - "merge.c": [ - "ex/v1.7.2/merge.html#git_tree_lookup-37" - ] - } - }, - "git_tree_lookup_prefix": { - "type": "function", - "file": "git2/tree.h", - "line": 47, - "lineto": 51, - "args": [ - { - "name": "out", - "type": "git_tree **", - "comment": "pointer to the looked up tree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when locating the tree." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "identity of the tree to locate." - }, - { - "name": "len", - "type": "size_t", - "comment": "the length of the short identifier" - } - ], - "argline": "git_tree **out, git_repository *repo, const git_oid *id, size_t len", - "sig": "git_tree **::git_repository *::const git_oid *::size_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a tree object from the repository,\n given a prefix of its identifier (short id).

\n", - "comments": "", - "group": "tree" - }, - "git_tree_free": { - "type": "function", - "file": "git2/tree.h", - "line": 63, - "lineto": 63, - "args": [ - { - "name": "tree", - "type": "git_tree *", - "comment": "The tree to close" - } - ], - "argline": "git_tree *tree", - "sig": "git_tree *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Close an open tree

\n", - "comments": "

You can no longer use the git_tree pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you stop using a tree to release memory. Failure to do so will cause a memory leak.

\n", - "group": "tree", - "examples": { - "commit.c": [ - "ex/v1.7.2/commit.html#git_tree_free-13" - ], - "diff.c": [ - "ex/v1.7.2/diff.html#git_tree_free-19", - "ex/v1.7.2/diff.html#git_tree_free-20" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_tree_free-83", - "ex/v1.7.2/general.html#git_tree_free-84" - ], - "init.c": [ - "ex/v1.7.2/init.html#git_tree_free-13" - ], - "log.c": [ - "ex/v1.7.2/log.html#git_tree_free-55", - "ex/v1.7.2/log.html#git_tree_free-56", - "ex/v1.7.2/log.html#git_tree_free-57", - "ex/v1.7.2/log.html#git_tree_free-58", - "ex/v1.7.2/log.html#git_tree_free-59" - ] - } - }, - "git_tree_id": { - "type": "function", - "file": "git2/tree.h", - "line": 71, - "lineto": 71, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - } - ], - "argline": "const git_tree *tree", - "sig": "const git_tree *", - "return": { - "type": "const git_oid *", - "comment": " object identity for the tree." - }, - "description": "

Get the id of a tree.

\n", - "comments": "", - "group": "tree" - }, - "git_tree_owner": { - "type": "function", - "file": "git2/tree.h", - "line": 79, - "lineto": 79, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "A previously loaded tree." - } - ], - "argline": "const git_tree *tree", - "sig": "const git_tree *", - "return": { - "type": "git_repository *", - "comment": " Repository that contains this tree." - }, - "description": "

Get the repository that contains the tree.

\n", - "comments": "", - "group": "tree" - }, - "git_tree_entrycount": { - "type": "function", - "file": "git2/tree.h", - "line": 87, - "lineto": 87, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - } - ], - "argline": "const git_tree *tree", - "sig": "const git_tree *", - "return": { - "type": "size_t", - "comment": " the number of entries in the tree" - }, - "description": "

Get the number of entries listed in a tree

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tree_entrycount-37" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_tree_entrycount-85" - ] - } - }, - "git_tree_entry_byname": { - "type": "function", - "file": "git2/tree.h", - "line": 99, - "lineto": 100, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - }, - { - "name": "filename", - "type": "const char *", - "comment": "the filename of the desired entry" - } - ], - "argline": "const git_tree *tree, const char *filename", - "sig": "const git_tree *::const char *", - "return": { - "type": "const git_tree_entry *", - "comment": " the tree entry; NULL if not found" - }, - "description": "

Lookup a tree entry by its filename

\n", - "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", - "group": "tree", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_tree_entry_byname-86" - ] - } - }, - "git_tree_entry_byindex": { - "type": "function", - "file": "git2/tree.h", - "line": 112, - "lineto": 113, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - }, - { - "name": "idx", - "type": "size_t", - "comment": "the position in the entry list" - } - ], - "argline": "const git_tree *tree, size_t idx", - "sig": "const git_tree *::size_t", - "return": { - "type": "const git_tree_entry *", - "comment": " the tree entry; NULL if not found" - }, - "description": "

Lookup a tree entry by its position in the tree

\n", - "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tree_entry_byindex-38" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_tree_entry_byindex-87" - ] - } - }, - "git_tree_entry_byid": { - "type": "function", - "file": "git2/tree.h", - "line": 127, - "lineto": 128, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "a previously loaded tree." - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "the sha being looked for" - } - ], - "argline": "const git_tree *tree, const git_oid *id", - "sig": "const git_tree *::const git_oid *", - "return": { - "type": "const git_tree_entry *", - "comment": " the tree entry; NULL if not found" - }, - "description": "

Lookup a tree entry by SHA value.

\n", - "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n\n

Warning: this must examine every entry in the tree, so it is not fast.

\n", - "group": "tree" - }, - "git_tree_entry_bypath": { - "type": "function", - "file": "git2/tree.h", - "line": 142, - "lineto": 145, - "args": [ - { - "name": "out", - "type": "git_tree_entry **", - "comment": "Pointer where to store the tree entry" - }, - { - "name": "root", - "type": "const git_tree *", - "comment": "Previously loaded tree which is the root of the relative path" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to the contained entry" - } - ], - "argline": "git_tree_entry **out, const git_tree *root, const char *path", - "sig": "git_tree_entry **::const git_tree *::const char *", - "return": { - "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND if the path does not exist" - }, - "description": "

Retrieve a tree entry contained in a tree or in any of its subtrees,\n given its relative path.

\n", - "comments": "

Unlike the other lookup functions, the returned tree entry is owned by the user and must be freed explicitly with git_tree_entry_free().

\n", - "group": "tree" - }, - "git_tree_entry_dup": { - "type": "function", - "file": "git2/tree.h", - "line": 157, - "lineto": 157, - "args": [ - { - "name": "dest", - "type": "git_tree_entry **", - "comment": "pointer where to store the copy" - }, - { - "name": "source", - "type": "const git_tree_entry *", - "comment": "tree entry to duplicate" - } - ], - "argline": "git_tree_entry **dest, const git_tree_entry *source", - "sig": "git_tree_entry **::const git_tree_entry *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Duplicate a tree entry

\n", - "comments": "

Create a copy of a tree entry. The returned copy is owned by the user, and must be freed explicitly with git_tree_entry_free().

\n", - "group": "tree" - }, - "git_tree_entry_free": { - "type": "function", - "file": "git2/tree.h", - "line": 168, - "lineto": 168, - "args": [ - { - "name": "entry", - "type": "git_tree_entry *", - "comment": "The entry to free" - } - ], - "argline": "git_tree_entry *entry", - "sig": "git_tree_entry *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a user-owned tree entry

\n", - "comments": "

IMPORTANT: This function is only needed for tree entries owned by the user, such as the ones returned by git_tree_entry_dup() or git_tree_entry_bypath().

\n", - "group": "tree" - }, - "git_tree_entry_name": { - "type": "function", - "file": "git2/tree.h", - "line": 176, - "lineto": 176, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "const char *", - "comment": " the name of the file" - }, - "description": "

Get the filename of a tree entry

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tree_entry_name-39" - ], - "general.c": [ - "ex/v1.7.2/general.html#git_tree_entry_name-88", - "ex/v1.7.2/general.html#git_tree_entry_name-89" - ] - } - }, - "git_tree_entry_id": { - "type": "function", - "file": "git2/tree.h", - "line": 184, - "lineto": 184, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "const git_oid *", - "comment": " the oid of the object" - }, - "description": "

Get the id of the object pointed by the entry

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tree_entry_id-40" - ] - } - }, - "git_tree_entry_type": { - "type": "function", - "file": "git2/tree.h", - "line": 192, - "lineto": 192, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "git_object_t", - "comment": " the type of the pointed object" - }, - "description": "

Get the type of the object pointed by the entry

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tree_entry_type-41" - ] - } - }, - "git_tree_entry_filemode": { - "type": "function", - "file": "git2/tree.h", - "line": 200, - "lineto": 200, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "git_filemode_t", - "comment": " filemode as an integer" - }, - "description": "

Get the UNIX file attributes of a tree entry

\n", - "comments": "", - "group": "tree", - "examples": { - "cat-file.c": [ - "ex/v1.7.2/cat-file.html#git_tree_entry_filemode-42" - ] - } - }, - "git_tree_entry_filemode_raw": { - "type": "function", - "file": "git2/tree.h", - "line": 212, - "lineto": 212, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "const git_tree_entry *entry", - "sig": "const git_tree_entry *", - "return": { - "type": "git_filemode_t", - "comment": " filemode as an integer" - }, - "description": "

Get the raw UNIX file attributes of a tree entry

\n", - "comments": "

This function does not perform any normalization and is only useful if you need to be able to recreate the original tree object.

\n", - "group": "tree" - }, - "git_tree_entry_cmp": { - "type": "function", - "file": "git2/tree.h", - "line": 220, - "lineto": 220, - "args": [ - { - "name": "e1", - "type": "const git_tree_entry *", - "comment": "first tree entry" - }, - { - "name": "e2", - "type": "const git_tree_entry *", - "comment": "second tree entry" - } - ], - "argline": "const git_tree_entry *e1, const git_tree_entry *e2", - "sig": "const git_tree_entry *::const git_tree_entry *", - "return": { - "type": "int", - "comment": " \n<\n0 if e1 is before e2, 0 if e1 == e2, >0 if e1 is after e2" - }, - "description": "

Compare two tree entries

\n", - "comments": "", - "group": "tree" - }, - "git_tree_entry_to_object": { - "type": "function", - "file": "git2/tree.h", - "line": 232, - "lineto": 235, - "args": [ - { - "name": "object_out", - "type": "git_object **", - "comment": "pointer to the converted object" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to lookup the pointed object" - }, - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": "a tree entry" - } - ], - "argline": "git_object **object_out, git_repository *repo, const git_tree_entry *entry", - "sig": "git_object **::git_repository *::const git_tree_entry *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Convert a tree entry to the git_object it points to.

\n", - "comments": "

You must call git_object_free() on the object when you are done with it.

\n", - "group": "tree", - "examples": { - "general.c": [ - "ex/v1.7.2/general.html#git_tree_entry_to_object-90" - ] - } - }, - "git_treebuilder_new": { - "type": "function", - "file": "git2/tree.h", - "line": 254, - "lineto": 255, - "args": [ - { - "name": "out", - "type": "git_treebuilder **", - "comment": "Pointer where to store the tree builder" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository in which to store the object" - }, - { - "name": "source", - "type": "const git_tree *", - "comment": "Source tree to initialize the builder (optional)" - } - ], - "argline": "git_treebuilder **out, git_repository *repo, const git_tree *source", - "sig": "git_treebuilder **::git_repository *::const git_tree *", - "return": { - "type": "int", - "comment": " 0 on success; error code otherwise" - }, - "description": "

Create a new tree builder.

\n", - "comments": "

The tree builder can be used to create or modify trees in memory and write them as tree objects to the database.

\n\n

If the source parameter is not NULL, the tree builder will be initialized with the entries of the given tree.

\n\n

If the source parameter is NULL, the tree builder will start with no entries and will have to be filled manually.

\n", - "group": "treebuilder" - }, - "git_treebuilder_clear": { - "type": "function", - "file": "git2/tree.h", - "line": 263, - "lineto": 263, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Builder to clear" - } - ], - "argline": "git_treebuilder *bld", - "sig": "git_treebuilder *", - "return": { - "type": "int", - "comment": " 0 on success; error code otherwise" - }, - "description": "

Clear all the entries in the builder

\n", - "comments": "", - "group": "treebuilder" - }, - "git_treebuilder_entrycount": { - "type": "function", - "file": "git2/tree.h", - "line": 271, - "lineto": 271, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "a previously loaded treebuilder." - } - ], - "argline": "git_treebuilder *bld", - "sig": "git_treebuilder *", - "return": { - "type": "size_t", - "comment": " the number of entries in the treebuilder" - }, - "description": "

Get the number of entries listed in a treebuilder

\n", - "comments": "", - "group": "treebuilder" - }, - "git_treebuilder_free": { - "type": "function", - "file": "git2/tree.h", - "line": 282, - "lineto": 282, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Builder to free" - } - ], - "argline": "git_treebuilder *bld", - "sig": "git_treebuilder *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a tree builder

\n", - "comments": "

This will clear all the entries and free to builder. Failing to free the builder after you're done using it will result in a memory leak

\n", - "group": "treebuilder" - }, - "git_treebuilder_get": { - "type": "function", - "file": "git2/tree.h", - "line": 294, - "lineto": 295, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder" - }, - { - "name": "filename", - "type": "const char *", - "comment": "Name of the entry" - } - ], - "argline": "git_treebuilder *bld, const char *filename", - "sig": "git_treebuilder *::const char *", - "return": { - "type": "const git_tree_entry *", - "comment": " pointer to the entry; NULL if not found" - }, - "description": "

Get an entry from the builder from its filename

\n", - "comments": "

The returned entry is owned by the builder and should not be freed manually.

\n", - "group": "treebuilder" - }, - "git_treebuilder_insert": { - "type": "function", - "file": "git2/tree.h", - "line": 325, - "lineto": 330, - "args": [ - { - "name": "out", - "type": "const git_tree_entry **", - "comment": "Pointer to store the entry (optional)" - }, - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder" - }, - { - "name": "filename", - "type": "const char *", - "comment": "Filename of the entry" - }, - { - "name": "id", - "type": "const git_oid *", - "comment": "SHA1 oid of the entry" - }, - { - "name": "filemode", - "type": "git_filemode_t", - "comment": "Folder attributes of the entry. This parameter must\n\t\t\tbe valued with one of the following entries: 0040000, 0100644,\n\t\t\t0100755, 0120000 or 0160000." - } - ], - "argline": "const git_tree_entry **out, git_treebuilder *bld, const char *filename, const git_oid *id, git_filemode_t filemode", - "sig": "const git_tree_entry **::git_treebuilder *::const char *::const git_oid *::git_filemode_t", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add or update an entry to the builder

\n", - "comments": "

Insert a new entry for filename in the builder with the given attributes.

\n\n

If an entry named filename already exists, its attributes will be updated with the given ones.

\n\n

The optional pointer out can be used to retrieve a pointer to the newly created/updated entry. Pass NULL if you do not need it. The pointer may not be valid past the next operation in this builder. Duplicate the entry if you want to keep it.

\n\n

By default the entry that you are inserting will be checked for validity; that it exists in the object database and is of the correct type. If you do not want this behavior, set the GIT_OPT_ENABLE_STRICT_OBJECT_CREATION library option to false.

\n", - "group": "treebuilder" - }, - "git_treebuilder_remove": { - "type": "function", - "file": "git2/tree.h", - "line": 339, - "lineto": 340, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder" - }, - { - "name": "filename", - "type": "const char *", - "comment": "Filename of the entry to remove" - } - ], - "argline": "git_treebuilder *bld, const char *filename", - "sig": "git_treebuilder *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Remove an entry from the builder by its filename

\n", - "comments": "", - "group": "treebuilder" - }, - "git_treebuilder_filter": { - "type": "function", - "file": "git2/tree.h", - "line": 364, - "lineto": 367, - "args": [ - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder" - }, - { - "name": "filter", - "type": "git_treebuilder_filter_cb", - "comment": "Callback to filter entries" - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra data to pass to filter callback" - } - ], - "argline": "git_treebuilder *bld, git_treebuilder_filter_cb filter, void *payload", - "sig": "git_treebuilder *::git_treebuilder_filter_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Selectively remove entries in the tree

\n", - "comments": "

The filter callback will be called for each entry in the tree with a pointer to the entry and the provided payload; if the callback returns non-zero, the entry will be filtered (removed from the builder).

\n", - "group": "treebuilder" - }, - "git_treebuilder_write": { - "type": "function", - "file": "git2/tree.h", - "line": 379, - "lineto": 380, - "args": [ - { - "name": "id", - "type": "git_oid *", - "comment": "Pointer to store the OID of the newly written tree" - }, - { - "name": "bld", - "type": "git_treebuilder *", - "comment": "Tree builder to write" - } - ], - "argline": "git_oid *id, git_treebuilder *bld", - "sig": "git_oid *::git_treebuilder *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Write the contents of the tree builder as a tree object

\n", - "comments": "

The tree builder will be written to the given repo, and its identifying SHA1 hash will be stored in the id pointer.

\n", - "group": "treebuilder" - }, - "git_tree_walk": { - "type": "function", - "file": "git2/tree.h", - "line": 409, - "lineto": 413, - "args": [ - { - "name": "tree", - "type": "const git_tree *", - "comment": "The tree to walk" - }, - { - "name": "mode", - "type": "git_treewalk_mode", - "comment": "Traversal mode (pre or post-order)" - }, - { - "name": "callback", - "type": "git_treewalk_cb", - "comment": "Function to call on each tree entry" - }, - { - "name": "payload", - "type": "void *", - "comment": "Opaque pointer to be passed on each callback" - } - ], - "argline": "const git_tree *tree, git_treewalk_mode mode, git_treewalk_cb callback, void *payload", - "sig": "const git_tree *::git_treewalk_mode::git_treewalk_cb::void *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Traverse the entries in a tree and its subtrees in post or pre order.

\n", - "comments": "

The entries will be traversed in the specified order, children subtrees will be automatically loaded as required, and the callback will be called once per entry with the current (relative) root for the entry and the entry data itself.

\n\n

If the callback returns a positive value, the passed entry will be skipped on the traversal (in pre mode). A negative value stops the walk.

\n", - "group": "tree" - }, - "git_tree_dup": { - "type": "function", - "file": "git2/tree.h", - "line": 423, - "lineto": 423, - "args": [ - { - "name": "out", - "type": "git_tree **", - "comment": "Pointer to store the copy of the tree" - }, - { - "name": "source", - "type": "git_tree *", - "comment": "Original tree to copy" - } - ], - "argline": "git_tree **out, git_tree *source", - "sig": "git_tree **::git_tree *", - "return": { - "type": "int", - "comment": " 0" - }, - "description": "

Create an in-memory copy of a tree. The copy must be explicitly\n free'd or it will leak.

\n", - "comments": "", - "group": "tree" - }, - "git_tree_create_updated": { - "type": "function", - "file": "git2/tree.h", - "line": 470, - "lineto": 470, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "id of the new tree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to create the tree, must be the\n same as for `baseline`" - }, - { - "name": "baseline", - "type": "git_tree *", - "comment": "the tree to base these changes on" - }, - { - "name": "nupdates", - "type": "size_t", - "comment": "the number of elements in the update list" - }, - { - "name": "updates", - "type": "const git_tree_update *", - "comment": "the list of updates to perform" - } - ], - "argline": "git_oid *out, git_repository *repo, git_tree *baseline, size_t nupdates, const git_tree_update *updates", - "sig": "git_oid *::git_repository *::git_tree *::size_t::const git_tree_update *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Create a tree based on another one with the specified modifications

\n", - "comments": "

Given the baseline perform the changes described in the list of updates and create a new tree.

\n\n

This function is optimized for common file/directory addition, removal and replacement in trees. It is much more efficient than reading the tree into a git_index and modifying that, but in exchange it is not as flexible.

\n\n

Deleting and adding the same entry is undefined behaviour, changing a tree to a blob or viceversa is not supported.

\n", - "group": "tree" - }, - "git_worktree_list": { - "type": "function", - "file": "git2/worktree.h", - "line": 34, - "lineto": 34, - "args": [ - { - "name": "out", - "type": "git_strarray *", - "comment": "pointer to the array of working tree names" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repo to use when listing working trees" - } - ], - "argline": "git_strarray *out, git_repository *repo", - "sig": "git_strarray *::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

List names of linked working trees

\n", - "comments": "

The returned list should be released with git_strarray_free when no longer needed.

\n", - "group": "worktree" - }, - "git_worktree_lookup": { - "type": "function", - "file": "git2/worktree.h", - "line": 44, - "lineto": 44, - "args": [ - { - "name": "out", - "type": "git_worktree **", - "comment": "Output pointer to looked up worktree or `NULL`" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The repository containing worktrees" - }, - { - "name": "name", - "type": "const char *", - "comment": "Name of the working tree to look up" - } - ], - "argline": "git_worktree **out, git_repository *repo, const char *name", - "sig": "git_worktree **::git_repository *::const char *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Lookup a working tree by its name for a given repository

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_open_from_repository": { - "type": "function", - "file": "git2/worktree.h", - "line": 57, - "lineto": 57, - "args": [ - { - "name": "out", - "type": "git_worktree **", - "comment": "Out-pointer for the newly allocated worktree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository to look up worktree for" - } - ], - "argline": "git_worktree **out, git_repository *repo", - "sig": "git_worktree **::git_repository *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Open a worktree of a given repository

\n", - "comments": "

If a repository is not the main tree but a worktree, this function will look up the worktree inside the parent repository and create a new git_worktree structure.

\n", - "group": "worktree" - }, - "git_worktree_free": { - "type": "function", - "file": "git2/worktree.h", - "line": 64, - "lineto": 64, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "worktree handle to close. If NULL nothing occurs." - } - ], - "argline": "git_worktree *wt", - "sig": "git_worktree *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Free a previously allocated worktree

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_validate": { - "type": "function", - "file": "git2/worktree.h", - "line": 76, - "lineto": 76, - "args": [ - { - "name": "wt", - "type": "const git_worktree *", - "comment": "Worktree to check" - } - ], - "argline": "const git_worktree *wt", - "sig": "const git_worktree *", - "return": { - "type": "int", - "comment": " 0 when worktree is valid, error-code otherwise" - }, - "description": "

Check if worktree is valid

\n", - "comments": "

A valid worktree requires both the git data structures inside the linked parent repository and the linked working copy to be present.

\n", - "group": "worktree" - }, - "git_worktree_add_options_init": { - "type": "function", - "file": "git2/worktree.h", - "line": 110, - "lineto": 111, - "args": [ - { - "name": "opts", - "type": "git_worktree_add_options *", - "comment": "The `git_worktree_add_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_WORKTREE_ADD_OPTIONS_VERSION`." - } - ], - "argline": "git_worktree_add_options *opts, unsigned int version", - "sig": "git_worktree_add_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_worktree_add_options structure

\n", - "comments": "

Initializes a git_worktree_add_options with default values. Equivalent to creating an instance with GIT_WORKTREE_ADD_OPTIONS_INIT.

\n", - "group": "worktree" - }, - "git_worktree_add": { - "type": "function", - "file": "git2/worktree.h", - "line": 127, - "lineto": 129, - "args": [ - { - "name": "out", - "type": "git_worktree **", - "comment": "Output pointer containing new working tree" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository to create working tree for" - }, - { - "name": "name", - "type": "const char *", - "comment": "Name of the working tree" - }, - { - "name": "path", - "type": "const char *", - "comment": "Path to create working tree at" - }, - { - "name": "opts", - "type": "const git_worktree_add_options *", - "comment": "Options to modify default behavior. May be NULL" - } - ], - "argline": "git_worktree **out, git_repository *repo, const char *name, const char *path, const git_worktree_add_options *opts", - "sig": "git_worktree **::git_repository *::const char *::const char *::const git_worktree_add_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Add a new working tree

\n", - "comments": "

Add a new working tree for the repository, that is create the required data structures inside the repository and check out the current HEAD at path

\n", - "group": "worktree" - }, - "git_worktree_lock": { - "type": "function", - "file": "git2/worktree.h", - "line": 141, - "lineto": 141, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "Worktree to lock" - }, - { - "name": "reason", - "type": "const char *", - "comment": "Reason why the working tree is being locked" - } - ], - "argline": "git_worktree *wt, const char *reason", - "sig": "git_worktree *::const char *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero otherwise" - }, - "description": "

Lock worktree if not already locked

\n", - "comments": "

Lock a worktree, optionally specifying a reason why the linked working tree is being locked.

\n", - "group": "worktree" - }, - "git_worktree_unlock": { - "type": "function", - "file": "git2/worktree.h", - "line": 150, - "lineto": 150, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "Worktree to unlock" - } - ], - "argline": "git_worktree *wt", - "sig": "git_worktree *", - "return": { - "type": "int", - "comment": " 0 on success, 1 if worktree was not locked, error-code\n otherwise" - }, - "description": "

Unlock a locked worktree

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_is_locked": { - "type": "function", - "file": "git2/worktree.h", - "line": 164, - "lineto": 164, - "args": [ - { - "name": "reason", - "type": "git_buf *", - "comment": "Buffer to store reason in. If NULL no reason is stored." - }, - { - "name": "wt", - "type": "const git_worktree *", - "comment": "Worktree to check" - } - ], - "argline": "git_buf *reason, const git_worktree *wt", - "sig": "git_buf *::const git_worktree *", - "return": { - "type": "int", - "comment": " 0 when the working tree not locked, a value greater\n than zero if it is locked, less than zero if there was an\n error" - }, - "description": "

Check if worktree is locked

\n", - "comments": "

A worktree may be locked if the linked working tree is stored on a portable device which is not available.

\n", - "group": "worktree" - }, - "git_worktree_name": { - "type": "function", - "file": "git2/worktree.h", - "line": 173, - "lineto": 173, - "args": [ - { - "name": "wt", - "type": "const git_worktree *", - "comment": "Worktree to get the name for" - } - ], - "argline": "const git_worktree *wt", - "sig": "const git_worktree *", - "return": { - "type": "const char *", - "comment": " The worktree's name. The pointer returned is valid for the\n lifetime of the git_worktree" - }, - "description": "

Retrieve the name of the worktree

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_path": { - "type": "function", - "file": "git2/worktree.h", - "line": 182, - "lineto": 182, - "args": [ - { - "name": "wt", - "type": "const git_worktree *", - "comment": "Worktree to get the path for" - } - ], - "argline": "const git_worktree *wt", - "sig": "const git_worktree *", - "return": { - "type": "const char *", - "comment": " The worktree's filesystem path. The pointer returned\n is valid for the lifetime of the git_worktree." - }, - "description": "

Retrieve the filesystem path for the worktree

\n", - "comments": "", - "group": "worktree" - }, - "git_worktree_prune_options_init": { - "type": "function", - "file": "git2/worktree.h", - "line": 224, - "lineto": 226, - "args": [ - { - "name": "opts", - "type": "git_worktree_prune_options *", - "comment": "The `git_worktree_prune_options` struct to initialize." - }, - { - "name": "version", - "type": "unsigned int", - "comment": "The struct version; pass `GIT_WORKTREE_PRUNE_OPTIONS_VERSION`." - } - ], - "argline": "git_worktree_prune_options *opts, unsigned int version", - "sig": "git_worktree_prune_options *::unsigned int", - "return": { - "type": "int", - "comment": " Zero on success; -1 on failure." - }, - "description": "

Initialize git_worktree_prune_options structure

\n", - "comments": "

Initializes a git_worktree_prune_options with default values. Equivalent to creating an instance with GIT_WORKTREE_PRUNE_OPTIONS_INIT.

\n", - "group": "worktree" - }, - "git_worktree_is_prunable": { - "type": "function", - "file": "git2/worktree.h", - "line": 248, - "lineto": 249, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "Worktree to check." - }, - { - "name": "opts", - "type": "git_worktree_prune_options *", - "comment": "The prunable options." - } - ], - "argline": "git_worktree *wt, git_worktree_prune_options *opts", - "sig": "git_worktree *::git_worktree_prune_options *", - "return": { - "type": "int", - "comment": " 1 if the worktree is prunable, 0 otherwise, or an error code." - }, - "description": "

Is the worktree prunable with the given options?

\n", - "comments": "

A worktree is not prunable in the following scenarios:

\n\n
    \n
  • the worktree is linking to a valid on-disk worktree. The valid member will cause this check to be ignored. - the worktree is locked. The locked flag will cause this check to be ignored.
  • \n
\n\n

If the worktree is not valid and not locked or if the above flags have been passed in, this function will return a positive value. If the worktree is not prunable, an error message will be set (visible in giterr_last) with details about why.

\n", - "group": "worktree" - }, - "git_worktree_prune": { - "type": "function", - "file": "git2/worktree.h", - "line": 263, - "lineto": 264, - "args": [ - { - "name": "wt", - "type": "git_worktree *", - "comment": "Worktree to prune" - }, - { - "name": "opts", - "type": "git_worktree_prune_options *", - "comment": "Specifies which checks to override. See\n `git_worktree_is_prunable`. May be NULL" - } - ], - "argline": "git_worktree *wt, git_worktree_prune_options *opts", - "sig": "git_worktree *::git_worktree_prune_options *", - "return": { - "type": "int", - "comment": " 0 or an error code" - }, - "description": "

Prune working tree

\n", - "comments": "

Prune the working tree, that is remove the git data structures on disk. The repository will only be pruned of git_worktree_is_prunable succeeds.

\n", - "group": "worktree" - } - }, - "callbacks": { - "git_apply_delta_cb": { - "type": "callback", - "file": "git2/apply.h", - "line": 38, - "lineto": 40, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": "The delta to be applied" - }, - { - "name": "payload", - "type": "void *", - "comment": "User-specified payload" - } - ], - "argline": "const git_diff_delta *delta, void *payload", - "sig": "const git_diff_delta *::void *", - "return": { - "type": "int", - "comment": " 0 if the delta is applied, \n<\n 0 if the apply process will be aborted\n\tor > 0 if the delta will not be applied." - }, - "description": "

When applying a patch, callback that will be made per delta (file).

\n", - "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the delta will not be applied, but the apply process continues - returns 0, the delta is applied, and the apply process continues.

\n" - }, - "git_apply_hunk_cb": { - "type": "callback", - "file": "git2/apply.h", - "line": 56, - "lineto": 58, - "args": [ - { - "name": "hunk", - "type": "const git_diff_hunk *", - "comment": "The hunk to be applied" - }, - { - "name": "payload", - "type": "void *", - "comment": "User-specified payload" - } - ], - "argline": "const git_diff_hunk *hunk, void *payload", - "sig": "const git_diff_hunk *::void *", - "return": { - "type": "int", - "comment": " 0 if the hunk is applied, \n<\n 0 if the apply process will be aborted\n\tor > 0 if the hunk will not be applied." - }, - "description": "

When applying a patch, callback that will be made per hunk.

\n", - "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the hunk will not be applied, but the apply process continues - returns 0, the hunk is applied, and the apply process continues.

\n" - }, - "git_attr_foreach_cb": { - "type": "callback", - "file": "git2/attr.h", - "line": 291, - "lineto": 291, - "args": [ - { - "name": "name", - "type": "const char *", - "comment": "The attribute name." - }, - { - "name": "value", - "type": "const char *", - "comment": "The attribute value. May be NULL if the attribute is explicitly\n set to UNSPECIFIED using the '!' sign." - }, - { - "name": "payload", - "type": "void *", - "comment": "A user-specified pointer." - } - ], - "argline": "const char *name, const char *value, void *payload", - "sig": "const char *::const char *::void *", - "return": { - "type": "int", - "comment": " 0 to continue looping, non-zero to stop. This value will be returned\n from git_attr_foreach." - }, - "description": "

The callback used with git_attr_foreach.

\n", - "comments": "

This callback will be invoked only once per attribute name, even if there are multiple rules for a given file. The highest priority rule will be used.

\n" - }, - "git_transport_certificate_check_cb": { - "type": "callback", - "file": "git2/cert.h", - "line": 72, - "lineto": 72, - "args": [ - { - "name": "cert", - "type": "git_cert *", - "comment": "The host certificate" - }, - { - "name": "valid", - "type": "int", - "comment": "Whether the libgit2 checks (OpenSSL or WinHTTP) think\n this certificate is valid" - }, - { - "name": "host", - "type": "const char *", - "comment": "Hostname of the host libgit2 connected to" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "git_cert *cert, int valid, const char *host, void *payload", - "sig": "git_cert *::int::const char *::void *", - "return": { - "type": "int", - "comment": " 0 to proceed with the connection, \n<\n 0 to fail the connection\n or > 0 to indicate that the callback refused to act and that\n the existing validity determination should be honored" - }, - "description": "

Callback for the user's custom certificate checks.

\n", - "comments": "" + "files": [ + { + "file": "git2/annotated_commit.h", + "functions": [ + "git_annotated_commit_from_ref", + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_lookup", + "git_annotated_commit_from_revspec", + "git_annotated_commit_id", + "git_annotated_commit_ref", + "git_annotated_commit_free" + ], + "meta": {}, + "lines": 121 + }, + { + "file": "git2/apply.h", + "functions": [ + "git_apply_delta_cb", + "git_apply_hunk_cb", + "git_apply_options_init", + "git_apply_to_tree", + "git_apply" + ], + "meta": {}, + "lines": 161 + }, + { + "file": "git2/attr.h", + "functions": [ + "git_attr_value", + "git_attr_get", + "git_attr_get_ext", + "git_attr_get_many", + "git_attr_get_many_ext", + "git_attr_foreach_cb", + "git_attr_foreach", + "git_attr_foreach_ext", + "git_attr_cache_flush", + "git_attr_add_macro" + ], + "meta": {}, + "lines": 363 + }, + { + "file": "git2/blame.h", + "functions": [ + "git_blame_options_init", + "git_blame_get_hunk_count", + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline", + "git_blame_file", + "git_blame_buffer", + "git_blame_free" + ], + "meta": {}, + "lines": 280 + }, + { + "file": "git2/blob.h", + "functions": [ + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_blob_free", + "git_blob_id", + "git_blob_owner", + "git_blob_rawcontent", + "git_blob_rawsize", + "git_blob_filter_options_init", + "git_blob_filter", + "git_blob_create_from_workdir", + "git_blob_create_from_disk", + "git_blob_create_from_stream", + "git_blob_create_from_stream_commit", + "git_blob_create_from_buffer", + "git_blob_is_binary", + "git_blob_data_is_binary", + "git_blob_dup" + ], + "meta": {}, + "lines": 307 + }, + { + "file": "git2/branch.h", + "functions": [ + "git_branch_create", + "git_branch_create_from_annotated", + "git_branch_delete", + "git_branch_iterator_new", + "git_branch_next", + "git_branch_iterator_free", + "git_branch_move", + "git_branch_lookup", + "git_branch_name", + "git_branch_upstream", + "git_branch_set_upstream", + "git_branch_upstream_name", + "git_branch_is_head", + "git_branch_is_checked_out", + "git_branch_remote_name", + "git_branch_upstream_remote", + "git_branch_upstream_merge", + "git_branch_name_is_valid" + ], + "meta": {}, + "lines": 332 + }, + { + "file": "git2/buffer.h", + "functions": ["git_buf_dispose"], + "meta": {}, + "lines": 68 + }, + { + "file": "git2/cert.h", + "functions": ["git_transport_certificate_check_cb"], + "meta": {}, + "lines": 168 + }, + { + "file": "git2/checkout.h", + "functions": [ + "git_checkout_notify_cb", + "git_checkout_progress_cb", + "git_checkout_perfdata_cb", + "git_checkout_options_init", + "git_checkout_head", + "git_checkout_index", + "git_checkout_tree" + ], + "meta": {}, + "lines": 413 + }, + { + "file": "git2/cherrypick.h", + "functions": [ + "git_cherrypick_options_init", + "git_cherrypick_commit", + "git_cherrypick" + ], + "meta": {}, + "lines": 86 + }, + { + "file": "git2/clone.h", + "functions": [ + "git_remote_create_cb", + "git_repository_create_cb", + "git_clone_options_init", + "git_clone" + ], + "meta": {}, + "lines": 205 + }, + { + "file": "git2/commit.h", + "functions": [ + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_commit_free", + "git_commit_id", + "git_commit_owner", + "git_commit_message_encoding", + "git_commit_message", + "git_commit_message_raw", + "git_commit_summary", + "git_commit_body", + "git_commit_time", + "git_commit_time_offset", + "git_commit_committer", + "git_commit_author", + "git_commit_committer_with_mailmap", + "git_commit_author_with_mailmap", + "git_commit_raw_header", + "git_commit_tree", + "git_commit_tree_id", + "git_commit_parentcount", + "git_commit_parent", + "git_commit_parent_id", + "git_commit_nth_gen_ancestor", + "git_commit_header_field", + "git_commit_extract_signature", + "git_commit_create", + "git_commit_create_v", + "git_commit_create_from_stage", + "git_commit_amend", + "git_commit_create_buffer", + "git_commit_create_with_signature", + "git_commit_dup", + "git_commit_create_cb", + "git_commitarray_dispose" + ], + "meta": {}, + "lines": 603 + }, + { + "file": "git2/common.h", + "functions": [ + "git_libgit2_version", + "git_libgit2_prerelease", + "git_libgit2_features", + "git_libgit2_opts" + ], + "meta": {}, + "lines": 530 + }, + { + "file": "git2/config.h", + "functions": [ + "git_config_entry_free", + "git_config_foreach_cb", + "git_config_find_global", + "git_config_find_xdg", + "git_config_find_system", + "git_config_find_programdata", + "git_config_open_default", + "git_config_new", + "git_config_add_file_ondisk", + "git_config_open_ondisk", + "git_config_open_level", + "git_config_open_global", + "git_config_snapshot", + "git_config_free", + "git_config_get_entry", + "git_config_get_int32", + "git_config_get_int64", + "git_config_get_bool", + "git_config_get_path", + "git_config_get_string", + "git_config_get_string_buf", + "git_config_get_multivar_foreach", + "git_config_multivar_iterator_new", + "git_config_next", + "git_config_iterator_free", + "git_config_set_int32", + "git_config_set_int64", + "git_config_set_bool", + "git_config_set_string", + "git_config_set_multivar", + "git_config_delete_entry", + "git_config_delete_multivar", + "git_config_foreach", + "git_config_iterator_new", + "git_config_iterator_glob_new", + "git_config_foreach_match", + "git_config_get_mapped", + "git_config_lookup_map_value", + "git_config_parse_bool", + "git_config_parse_int32", + "git_config_parse_int64", + "git_config_parse_path", + "git_config_backend_foreach_match", + "git_config_lock" + ], + "meta": {}, + "lines": 818 + }, + { + "file": "git2/credential.h", + "functions": [ + "git_credential_acquire_cb", + "git_credential_free", + "git_credential_has_username", + "git_credential_get_username", + "git_credential_userpass_plaintext_new", + "git_credential_default_new", + "git_credential_username_new", + "git_credential_ssh_key_new", + "git_credential_ssh_key_memory_new", + "git_credential_ssh_interactive_new", + "git_credential_ssh_key_from_agent", + "git_credential_ssh_custom_new" + ], + "meta": {}, + "lines": 311 + }, + { + "file": "git2/credential_helpers.h", + "functions": ["git_credential_userpass"], + "meta": {}, + "lines": 49 + }, + { + "file": "git2/deprecated.h", + "functions": [ + "git_blob_filtered_content", + "git_filter_list_stream_data", + "git_filter_list_apply_to_data", + "git_treebuilder_write_with_buffer", + "git_buf_grow", + "git_buf_set", + "git_buf_is_binary", + "git_buf_contains_nul", + "git_buf_free", + "git_commit_signing_cb", + "git_diff_format_email", + "git_diff_commit_as_email", + "git_diff_format_email_options_init", + "giterr_last", + "giterr_clear", + "giterr_set_str", + "giterr_set_oom", + "git_object__size", + "git_remote_is_valid_name", + "git_reference_is_valid_name", + "git_oidarray_free", + "git_headlist_cb", + "git_strarray_copy", + "git_strarray_free", + "git_blame_init_options" + ], + "meta": {}, + "lines": 905 + }, + { + "file": "git2/describe.h", + "functions": [ + "git_describe_options_init", + "git_describe_format_options_init", + "git_describe_commit", + "git_describe_workdir", + "git_describe_format", + "git_describe_result_free" + ], + "meta": {}, + "lines": 189 + }, + { + "file": "git2/diff.h", + "functions": [ + "git_diff_notify_cb", + "git_diff_progress_cb", + "git_diff_options_init", + "git_diff_file_cb", + "git_diff_binary_cb", + "git_diff_hunk_cb", + "git_diff_line_cb", + "git_diff_find_options_init", + "git_diff_free", + "git_diff_tree_to_tree", + "git_diff_tree_to_index", + "git_diff_index_to_workdir", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_diff_index_to_index", + "git_diff_merge", + "git_diff_find_similar", + "git_diff_num_deltas", + "git_diff_num_deltas_of_type", + "git_diff_get_delta", + "git_diff_is_sorted_icase", + "git_diff_foreach", + "git_diff_status_char", + "git_diff_print", + "git_diff_to_buf", + "git_diff_blobs", + "git_diff_blob_to_buffer", + "git_diff_buffers", + "git_diff_from_buffer", + "git_diff_get_stats", + "git_diff_stats_files_changed", + "git_diff_stats_insertions", + "git_diff_stats_deletions", + "git_diff_stats_to_buf", + "git_diff_stats_free", + "git_diff_patchid_options_init", + "git_diff_patchid" + ], + "meta": {}, + "lines": 1471 + }, + { + "file": "git2/email.h", + "functions": [ + "git_email_create_from_diff", + "git_email_create_from_commit" + ], + "meta": {}, + "lines": 122 + }, + { + "file": "git2/errors.h", + "functions": ["git_error_last"], + "meta": {}, + "lines": 139 + }, + { + "file": "git2/filter.h", + "functions": [ + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_contains", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_file", + "git_filter_list_apply_to_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_file", + "git_filter_list_stream_blob", + "git_filter_list_free" + ], + "meta": {}, + "lines": 269 + }, + { + "file": "git2/global.h", + "functions": ["git_libgit2_init", "git_libgit2_shutdown"], + "meta": {}, + "lines": 39 + }, + { + "file": "git2/graph.h", + "functions": [ + "git_graph_ahead_behind", + "git_graph_descendant_of", + "git_graph_reachable_from_any" + ], + "meta": {}, + "lines": 73 + }, + { + "file": "git2/ignore.h", + "functions": [ + "git_ignore_add_rule", + "git_ignore_clear_internal_rules", + "git_ignore_path_is_ignored" + ], + "meta": {}, + "lines": 74 + }, + { + "file": "git2/index.h", + "functions": [ + "git_index_matched_path_cb", + "git_index_free", + "git_index_owner", + "git_index_caps", + "git_index_set_caps", + "git_index_version", + "git_index_set_version", + "git_index_read", + "git_index_write", + "git_index_path", + "git_index_checksum", + "git_index_read_tree", + "git_index_write_tree", + "git_index_write_tree_to", + "git_index_entrycount", + "git_index_clear", + "git_index_get_byindex", + "git_index_get_bypath", + "git_index_remove", + "git_index_remove_directory", + "git_index_add", + "git_index_entry_stage", + "git_index_entry_is_conflict", + "git_index_iterator_new", + "git_index_iterator_next", + "git_index_iterator_free", + "git_index_add_bypath", + "git_index_add_from_buffer", + "git_index_remove_bypath", + "git_index_add_all", + "git_index_remove_all", + "git_index_update_all", + "git_index_find", + "git_index_find_prefix", + "git_index_conflict_add", + "git_index_conflict_get", + "git_index_conflict_remove", + "git_index_conflict_cleanup", + "git_index_has_conflicts", + "git_index_conflict_iterator_new", + "git_index_conflict_next", + "git_index_conflict_iterator_free" + ], + "meta": {}, + "lines": 844 + }, + { + "file": "git2/indexer.h", + "functions": [ + "git_indexer_progress_cb", + "git_indexer_options_init", + "git_indexer_new", + "git_indexer_append", + "git_indexer_commit", + "git_indexer_hash", + "git_indexer_name", + "git_indexer_free" + ], + "meta": {}, + "lines": 191 + }, + { + "file": "git2/mailmap.h", + "functions": [ + "git_mailmap_new", + "git_mailmap_free", + "git_mailmap_add_entry", + "git_mailmap_from_buffer", + "git_mailmap_from_repository", + "git_mailmap_resolve", + "git_mailmap_resolve_signature" + ], + "meta": {}, + "lines": 111 + }, + { + "file": "git2/merge.h", + "functions": [ + "git_merge_file_input_init", + "git_merge_file_options_init", + "git_merge_options_init", + "git_merge_analysis", + "git_merge_analysis_for_ref", + "git_merge_base", + "git_merge_bases", + "git_merge_base_many", + "git_merge_bases_many", + "git_merge_base_octopus", + "git_merge_file", + "git_merge_file_from_index", + "git_merge_file_result_free", + "git_merge_trees", + "git_merge_commits", + "git_merge" + ], + "meta": {}, + "lines": 622 + }, + { + "file": "git2/message.h", + "functions": [ + "git_message_prettify", + "git_message_trailers", + "git_message_trailer_array_free" + ], + "meta": {}, + "lines": 81 + }, + { "file": "git2/net.h", "functions": [], "meta": {}, "lines": 50 }, + { + "file": "git2/notes.h", + "functions": [ + "git_note_foreach_cb", + "git_note_iterator_new", + "git_note_commit_iterator_new", + "git_note_iterator_free", + "git_note_next", + "git_note_read", + "git_note_commit_read", + "git_note_author", + "git_note_committer", + "git_note_message", + "git_note_id", + "git_note_create", + "git_note_commit_create", + "git_note_remove", + "git_note_commit_remove", + "git_note_free", + "git_note_default_ref", + "git_note_foreach" + ], + "meta": {}, + "lines": 302 + }, + { + "file": "git2/object.h", + "functions": [ + "git_object_lookup", + "git_object_lookup_prefix", + "git_object_lookup_bypath", + "git_object_id", + "git_object_short_id", + "git_object_type", + "git_object_owner", + "git_object_free", + "git_object_type2string", + "git_object_string2type", + "git_object_typeisloose", + "git_object_peel", + "git_object_dup", + "git_object_rawcontent_is_valid" + ], + "meta": {}, + "lines": 273 + }, + { + "file": "git2/odb.h", + "functions": [ + "git_odb_foreach_cb", + "git_odb_add_disk_alternate", + "git_odb_free", + "git_odb_read", + "git_odb_read_prefix", + "git_odb_read_header", + "git_odb_exists", + "git_odb_exists_ext", + "git_odb_exists_prefix", + "git_odb_expand_ids", + "git_odb_refresh", + "git_odb_foreach", + "git_odb_write", + "git_odb_open_wstream", + "git_odb_stream_write", + "git_odb_stream_finalize_write", + "git_odb_stream_read", + "git_odb_stream_free", + "git_odb_open_rstream", + "git_odb_write_pack", + "git_odb_write_multi_pack_index", + "git_odb_object_dup", + "git_odb_object_free", + "git_odb_object_id", + "git_odb_object_data", + "git_odb_object_size", + "git_odb_object_type", + "git_odb_add_backend", + "git_odb_add_alternate", + "git_odb_num_backends", + "git_odb_get_backend", + "git_odb_set_commit_graph" + ], + "meta": {}, + "lines": 650 + }, + { "file": "git2/odb_backend.h", "functions": [], "meta": {}, "lines": 219 }, + { + "file": "git2/oid.h", + "functions": [ + "git_oid_fmt", + "git_oid_nfmt", + "git_oid_pathfmt", + "git_oid_tostr_s", + "git_oid_tostr", + "git_oid_cpy", + "git_oid_cmp", + "git_oid_equal", + "git_oid_ncmp", + "git_oid_streq", + "git_oid_strcmp", + "git_oid_is_zero", + "git_oid_shorten_new", + "git_oid_shorten_add", + "git_oid_shorten_free" + ], + "meta": {}, + "lines": 369 + }, + { + "file": "git2/oidarray.h", + "functions": ["git_oidarray_dispose"], + "meta": {}, + "lines": 31 + }, + { + "file": "git2/pack.h", + "functions": [ + "git_packbuilder_new", + "git_packbuilder_set_threads", + "git_packbuilder_insert", + "git_packbuilder_insert_tree", + "git_packbuilder_insert_commit", + "git_packbuilder_insert_walk", + "git_packbuilder_insert_recur", + "git_packbuilder_write_buf", + "git_packbuilder_write", + "git_packbuilder_hash", + "git_packbuilder_name", + "git_packbuilder_foreach_cb", + "git_packbuilder_foreach", + "git_packbuilder_object_count", + "git_packbuilder_written", + "git_packbuilder_progress", + "git_packbuilder_set_callbacks", + "git_packbuilder_free" + ], + "meta": {}, + "lines": 263 + }, + { + "file": "git2/patch.h", + "functions": [ + "git_patch_owner", + "git_patch_from_diff", + "git_patch_from_blobs", + "git_patch_from_blob_and_buffer", + "git_patch_from_buffers", + "git_patch_free", + "git_patch_get_delta", + "git_patch_num_hunks", + "git_patch_line_stats", + "git_patch_get_hunk", + "git_patch_num_lines_in_hunk", + "git_patch_get_line_in_hunk", + "git_patch_size", + "git_patch_print", + "git_patch_to_buf" + ], + "meta": {}, + "lines": 284 + }, + { + "file": "git2/pathspec.h", + "functions": [ + "git_pathspec_new", + "git_pathspec_free", + "git_pathspec_matches_path", + "git_pathspec_match_workdir", + "git_pathspec_match_index", + "git_pathspec_match_tree", + "git_pathspec_match_diff", + "git_pathspec_match_list_free", + "git_pathspec_match_list_entrycount", + "git_pathspec_match_list_entry", + "git_pathspec_match_list_diff_entry", + "git_pathspec_match_list_failed_entrycount", + "git_pathspec_match_list_failed_entry" + ], + "meta": {}, + "lines": 277 + }, + { + "file": "git2/proxy.h", + "functions": ["git_proxy_options_init"], + "meta": {}, + "lines": 94 + }, + { + "file": "git2/rebase.h", + "functions": [ + "git_rebase_options_init", + "git_rebase_init", + "git_rebase_open", + "git_rebase_orig_head_name", + "git_rebase_orig_head_id", + "git_rebase_onto_name", + "git_rebase_onto_id", + "git_rebase_operation_entrycount", + "git_rebase_operation_current", + "git_rebase_operation_byindex", + "git_rebase_next", + "git_rebase_inmemory_index", + "git_rebase_commit", + "git_rebase_abort", + "git_rebase_finish", + "git_rebase_free" + ], + "meta": {}, + "lines": 395 + }, + { + "file": "git2/refdb.h", + "functions": [ + "git_refdb_new", + "git_refdb_open", + "git_refdb_compress", + "git_refdb_free" + ], + "meta": {}, + "lines": 66 + }, + { + "file": "git2/reflog.h", + "functions": [ + "git_reflog_read", + "git_reflog_write", + "git_reflog_append", + "git_reflog_rename", + "git_reflog_delete", + "git_reflog_entrycount", + "git_reflog_entry_byindex", + "git_reflog_drop", + "git_reflog_entry_id_old", + "git_reflog_entry_id_new", + "git_reflog_entry_committer", + "git_reflog_entry_message", + "git_reflog_free" + ], + "meta": {}, + "lines": 166 + }, + { + "file": "git2/refs.h", + "functions": [ + "git_reference_lookup", + "git_reference_name_to_id", + "git_reference_dwim", + "git_reference_symbolic_create_matching", + "git_reference_symbolic_create", + "git_reference_create", + "git_reference_create_matching", + "git_reference_target", + "git_reference_target_peel", + "git_reference_symbolic_target", + "git_reference_type", + "git_reference_name", + "git_reference_resolve", + "git_reference_owner", + "git_reference_symbolic_set_target", + "git_reference_set_target", + "git_reference_rename", + "git_reference_delete", + "git_reference_remove", + "git_reference_list", + "git_reference_foreach_cb", + "git_reference_foreach_name_cb", + "git_reference_foreach", + "git_reference_foreach_name", + "git_reference_dup", + "git_reference_free", + "git_reference_cmp", + "git_reference_iterator_new", + "git_reference_iterator_glob_new", + "git_reference_next", + "git_reference_next_name", + "git_reference_iterator_free", + "git_reference_foreach_glob", + "git_reference_has_log", + "git_reference_ensure_log", + "git_reference_is_branch", + "git_reference_is_remote", + "git_reference_is_tag", + "git_reference_is_note", + "git_reference_normalize_name", + "git_reference_peel", + "git_reference_name_is_valid", + "git_reference_shorthand" + ], + "meta": {}, + "lines": 767 + }, + { + "file": "git2/refspec.h", + "functions": [ + "git_refspec_parse", + "git_refspec_free", + "git_refspec_src", + "git_refspec_dst", + "git_refspec_string", + "git_refspec_force", + "git_refspec_direction", + "git_refspec_src_matches", + "git_refspec_dst_matches", + "git_refspec_transform", + "git_refspec_rtransform" + ], + "meta": {}, + "lines": 117 + }, + { + "file": "git2/remote.h", + "functions": [ + "git_remote_create", + "git_remote_create_options_init", + "git_remote_create_with_opts", + "git_remote_create_with_fetchspec", + "git_remote_create_anonymous", + "git_remote_create_detached", + "git_remote_lookup", + "git_remote_dup", + "git_remote_owner", + "git_remote_name", + "git_remote_url", + "git_remote_pushurl", + "git_remote_set_url", + "git_remote_set_pushurl", + "git_remote_set_instance_url", + "git_remote_set_instance_pushurl", + "git_remote_add_fetch", + "git_remote_get_fetch_refspecs", + "git_remote_add_push", + "git_remote_get_push_refspecs", + "git_remote_refspec_count", + "git_remote_get_refspec", + "git_remote_ls", + "git_remote_connected", + "git_remote_stop", + "git_remote_disconnect", + "git_remote_free", + "git_remote_list", + "git_push_transfer_progress_cb", + "git_push_negotiation", + "git_push_update_reference_cb", + "git_url_resolve_cb", + "git_remote_ready_cb", + "git_remote_init_callbacks", + "git_fetch_options_init", + "git_push_options_init", + "git_remote_connect_options_init", + "git_remote_connect", + "git_remote_connect_ext", + "git_remote_download", + "git_remote_upload", + "git_remote_update_tips", + "git_remote_fetch", + "git_remote_prune", + "git_remote_push", + "git_remote_stats", + "git_remote_autotag", + "git_remote_set_autotag", + "git_remote_prune_refs", + "git_remote_rename", + "git_remote_name_is_valid", + "git_remote_delete", + "git_remote_default_branch" + ], + "meta": {}, + "lines": 1189 + }, + { + "file": "git2/repository.h", + "functions": [ + "git_repository_open", + "git_repository_open_from_worktree", + "git_repository_discover", + "git_repository_open_ext", + "git_repository_open_bare", + "git_repository_free", + "git_repository_init", + "git_repository_init_options_init", + "git_repository_init_ext", + "git_repository_head", + "git_repository_head_for_worktree", + "git_repository_head_detached", + "git_repository_head_detached_for_worktree", + "git_repository_head_unborn", + "git_repository_is_empty", + "git_repository_item_path", + "git_repository_path", + "git_repository_workdir", + "git_repository_commondir", + "git_repository_set_workdir", + "git_repository_is_bare", + "git_repository_is_worktree", + "git_repository_config", + "git_repository_config_snapshot", + "git_repository_odb", + "git_repository_refdb", + "git_repository_index", + "git_repository_message", + "git_repository_message_remove", + "git_repository_state_cleanup", + "git_repository_fetchhead_foreach_cb", + "git_repository_fetchhead_foreach", + "git_repository_mergehead_foreach_cb", + "git_repository_mergehead_foreach", + "git_repository_hashfile", + "git_repository_set_head", + "git_repository_set_head_detached", + "git_repository_set_head_detached_from_annotated", + "git_repository_detach_head", + "git_repository_state", + "git_repository_set_namespace", + "git_repository_get_namespace", + "git_repository_is_shallow", + "git_repository_ident", + "git_repository_set_ident", + "git_repository_oid_type", + "git_repository_commit_parents" + ], + "meta": {}, + "lines": 992 + }, + { + "file": "git2/reset.h", + "functions": [ + "git_reset", + "git_reset_from_annotated", + "git_reset_default" + ], + "meta": {}, + "lines": 107 + }, + { + "file": "git2/revert.h", + "functions": [ + "git_revert_options_init", + "git_revert_commit", + "git_revert" + ], + "meta": {}, + "lines": 86 + }, + { + "file": "git2/revparse.h", + "functions": ["git_revparse_single", "git_revparse_ext", "git_revparse"], + "meta": {}, + "lines": 108 + }, + { + "file": "git2/revwalk.h", + "functions": [ + "git_revwalk_new", + "git_revwalk_reset", + "git_revwalk_push", + "git_revwalk_push_glob", + "git_revwalk_push_head", + "git_revwalk_hide", + "git_revwalk_hide_glob", + "git_revwalk_hide_head", + "git_revwalk_push_ref", + "git_revwalk_hide_ref", + "git_revwalk_next", + "git_revwalk_sorting", + "git_revwalk_push_range", + "git_revwalk_simplify_first_parent", + "git_revwalk_free", + "git_revwalk_repository", + "git_revwalk_hide_cb", + "git_revwalk_add_hide_cb" + ], + "meta": {}, + "lines": 298 + }, + { + "file": "git2/signature.h", + "functions": [ + "git_signature_new", + "git_signature_now", + "git_signature_default", + "git_signature_from_buffer", + "git_signature_dup", + "git_signature_free" + ], + "meta": {}, + "lines": 99 + }, + { + "file": "git2/stash.h", + "functions": [ + "git_stash_save", + "git_stash_save_options_init", + "git_stash_save_with_opts", + "git_stash_apply_progress_cb", + "git_stash_apply_options_init", + "git_stash_apply", + "git_stash_cb", + "git_stash_foreach", + "git_stash_drop", + "git_stash_pop" + ], + "meta": {}, + "lines": 310 + }, + { + "file": "git2/status.h", + "functions": [ + "git_status_cb", + "git_status_options_init", + "git_status_foreach", + "git_status_foreach_ext", + "git_status_file", + "git_status_list_new", + "git_status_list_entrycount", + "git_status_byindex", + "git_status_list_free", + "git_status_should_ignore" + ], + "meta": {}, + "lines": 448 + }, + { + "file": "git2/strarray.h", + "functions": ["git_strarray_dispose"], + "meta": {}, + "lines": 37 + }, + { + "file": "git2/submodule.h", + "functions": [ + "git_submodule_cb", + "git_submodule_update_options_init", + "git_submodule_update", + "git_submodule_lookup", + "git_submodule_dup", + "git_submodule_free", + "git_submodule_foreach", + "git_submodule_add_setup", + "git_submodule_clone", + "git_submodule_add_finalize", + "git_submodule_add_to_index", + "git_submodule_owner", + "git_submodule_name", + "git_submodule_path", + "git_submodule_url", + "git_submodule_resolve_url", + "git_submodule_branch", + "git_submodule_set_branch", + "git_submodule_set_url", + "git_submodule_index_id", + "git_submodule_head_id", + "git_submodule_wd_id", + "git_submodule_ignore", + "git_submodule_set_ignore", + "git_submodule_update_strategy", + "git_submodule_set_update", + "git_submodule_fetch_recurse_submodules", + "git_submodule_set_fetch_recurse_submodules", + "git_submodule_init", + "git_submodule_repo_init", + "git_submodule_sync", + "git_submodule_open", + "git_submodule_reload", + "git_submodule_status", + "git_submodule_location" + ], + "meta": {}, + "lines": 664 + }, + { + "file": "git2/sys/commit_graph.h", + "functions": [], + "meta": {}, + "lines": 108 + }, + { "file": "git2/sys/config.h", "functions": [], "meta": {}, "lines": 143 }, + { "file": "git2/sys/filter.h", "functions": [], "meta": {}, "lines": 95 }, + { "file": "git2/sys/hashsig.h", "functions": [], "meta": {}, "lines": 45 }, + { "file": "git2/sys/merge.h", "functions": [], "meta": {}, "lines": 41 }, + { "file": "git2/sys/path.h", "functions": [], "meta": {}, "lines": 41 }, + { "file": "git2/sys/stream.h", "functions": [], "meta": {}, "lines": 97 }, + { + "file": "git2/sys/transport.h", + "functions": [], + "meta": {}, + "lines": 318 + }, + { + "file": "git2/tag.h", + "functions": [ + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_tag_free", + "git_tag_id", + "git_tag_owner", + "git_tag_target", + "git_tag_target_id", + "git_tag_target_type", + "git_tag_name", + "git_tag_tagger", + "git_tag_message", + "git_tag_create", + "git_tag_annotation_create", + "git_tag_create_from_buffer", + "git_tag_create_lightweight", + "git_tag_delete", + "git_tag_list", + "git_tag_list_match", + "git_tag_foreach_cb", + "git_tag_foreach", + "git_tag_peel", + "git_tag_dup", + "git_tag_name_is_valid" + ], + "meta": {}, + "lines": 379 + }, + { + "file": "git2/trace.h", + "functions": ["git_trace_cb", "git_trace_set"], + "meta": {}, + "lines": 63 + }, + { + "file": "git2/transaction.h", + "functions": [ + "git_transaction_new", + "git_transaction_lock_ref", + "git_transaction_set_target", + "git_transaction_set_symbolic_target", + "git_transaction_set_reflog", + "git_transaction_remove", + "git_transaction_commit", + "git_transaction_free" + ], + "meta": {}, + "lines": 117 + }, + { + "file": "git2/transport.h", + "functions": ["git_transport_message_cb", "git_transport_cb"], + "meta": {}, + "lines": 37 + }, + { + "file": "git2/tree.h", + "functions": [ + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_tree_free", + "git_tree_id", + "git_tree_owner", + "git_tree_entrycount", + "git_tree_entry_byname", + "git_tree_entry_byindex", + "git_tree_entry_byid", + "git_tree_entry_bypath", + "git_tree_entry_dup", + "git_tree_entry_free", + "git_tree_entry_name", + "git_tree_entry_id", + "git_tree_entry_type", + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw", + "git_tree_entry_cmp", + "git_tree_entry_to_object", + "git_treebuilder_new", + "git_treebuilder_clear", + "git_treebuilder_entrycount", + "git_treebuilder_free", + "git_treebuilder_get", + "git_treebuilder_insert", + "git_treebuilder_remove", + "git_treebuilder_filter_cb", + "git_treebuilder_filter", + "git_treebuilder_write", + "git_treewalk_cb", + "git_tree_walk", + "git_tree_dup", + "git_tree_create_updated" + ], + "meta": {}, + "lines": 470 + }, + { "file": "git2/types.h", "functions": [], "meta": {}, "lines": 366 }, + { + "file": "git2/worktree.h", + "functions": [ + "git_worktree_list", + "git_worktree_lookup", + "git_worktree_open_from_repository", + "git_worktree_free", + "git_worktree_validate", + "git_worktree_add_options_init", + "git_worktree_add", + "git_worktree_lock", + "git_worktree_unlock", + "git_worktree_is_locked", + "git_worktree_name", + "git_worktree_path", + "git_worktree_prune_options_init", + "git_worktree_is_prunable", + "git_worktree_prune" + ], + "meta": {}, + "lines": 267 + } + ], + "functions": { + "git_annotated_commit_from_ref": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 33, + "lineto": 36, + "args": [ + { + "name": "out", + "type": "git_annotated_commit **", + "comment": "pointer to store the git_annotated_commit result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given reference" + }, + { + "name": "ref", + "type": "const git_reference *", + "comment": "reference to use to lookup the git_annotated_commit" + } + ], + "argline": "git_annotated_commit **out, git_repository *repo, const git_reference *ref", + "sig": "git_annotated_commit **::git_repository *::const git_reference *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Creates a git_annotated_commit from the given reference.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", + "comments": "", + "group": "annotated", + "examples": { + "checkout.c": [ + "ex/v1.8.4/checkout.html#git_annotated_commit_from_ref-1" + ] + } + }, + "git_annotated_commit_from_fetchhead": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 50, + "lineto": 55, + "args": [ + { + "name": "out", + "type": "git_annotated_commit **", + "comment": "pointer to store the git_annotated_commit result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given commit" + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "name of the (remote) branch" + }, + { + "name": "remote_url", + "type": "const char *", + "comment": "url of the remote" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the commit object id of the remote branch" + } + ], + "argline": "git_annotated_commit **out, git_repository *repo, const char *branch_name, const char *remote_url, const git_oid *id", + "sig": "git_annotated_commit **::git_repository *::const char *::const char *::const git_oid *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Creates a git_annotated_commit from the given fetch head data.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", + "comments": "", + "group": "annotated" + }, + "git_annotated_commit_lookup": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 75, + "lineto": 78, + "args": [ + { + "name": "out", + "type": "git_annotated_commit **", + "comment": "pointer to store the git_annotated_commit result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given commit" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the commit object id to lookup" + } + ], + "argline": "git_annotated_commit **out, git_repository *repo, const git_oid *id", + "sig": "git_annotated_commit **::git_repository *::const git_oid *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Creates a git_annotated_commit from the given commit id.\n The resulting git_annotated_commit must be freed with\n git_annotated_commit_free.

\n", + "comments": "

An annotated commit contains information about how it was looked up, which may be useful for functions like merge or rebase to provide context to the operation. For example, conflict files will include the name of the source or target branches being merged. It is therefore preferable to use the most specific function (eg git_annotated_commit_from_ref) instead of this one when that data is known.

\n", + "group": "annotated" + }, + "git_annotated_commit_from_revspec": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 92, + "lineto": 95, + "args": [ + { + "name": "out", + "type": "git_annotated_commit **", + "comment": "pointer to store the git_annotated_commit result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given commit" + }, + { + "name": "revspec", + "type": "const char *", + "comment": "the extended sha syntax string to use to lookup the commit" + } + ], + "argline": "git_annotated_commit **out, git_repository *repo, const char *revspec", + "sig": "git_annotated_commit **::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Creates a git_annotated_commit from a revision string.

\n", + "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", + "group": "annotated" + }, + "git_annotated_commit_id": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 103, + "lineto": 104, + "args": [ + { + "name": "commit", + "type": "const git_annotated_commit *", + "comment": "the given annotated commit" + } + ], + "argline": "const git_annotated_commit *commit", + "sig": "const git_annotated_commit *", + "return": { "type": "const git_oid *", "comment": " commit id" }, + "description": "

Gets the commit ID that the given git_annotated_commit refers to.

\n", + "comments": "", + "group": "annotated", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_annotated_commit_id-2"], + "merge.c": [ + "ex/v1.8.4/merge.html#git_annotated_commit_id-1", + "ex/v1.8.4/merge.html#git_annotated_commit_id-2", + "ex/v1.8.4/merge.html#git_annotated_commit_id-3" + ] + } + }, + "git_annotated_commit_ref": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 112, + "lineto": 113, + "args": [ + { + "name": "commit", + "type": "const git_annotated_commit *", + "comment": "the given annotated commit" + } + ], + "argline": "const git_annotated_commit *commit", + "sig": "const git_annotated_commit *", + "return": { "type": "const char *", "comment": " ref name." }, + "description": "

Get the refname that the given git_annotated_commit refers to.

\n", + "comments": "", + "group": "annotated", + "examples": { + "checkout.c": [ + "ex/v1.8.4/checkout.html#git_annotated_commit_ref-3", + "ex/v1.8.4/checkout.html#git_annotated_commit_ref-4", + "ex/v1.8.4/checkout.html#git_annotated_commit_ref-5" + ] + } + }, + "git_annotated_commit_free": { + "type": "function", + "file": "git2/annotated_commit.h", + "line": 120, + "lineto": 121, + "args": [ + { + "name": "commit", + "type": "git_annotated_commit *", + "comment": "annotated commit to free" + } + ], + "argline": "git_annotated_commit *commit", + "sig": "git_annotated_commit *", + "return": { "type": "void", "comment": null }, + "description": "

Frees a git_annotated_commit.

\n", + "comments": "", + "group": "annotated", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_annotated_commit_free-6"] + } + }, + "git_apply_options_init": { + "type": "function", + "file": "git2/apply.h", + "line": 106, + "lineto": 106, + "args": [ + { + "name": "opts", + "type": "git_apply_options *", + "comment": "The `git_apply_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_APPLY_OPTIONS_VERSION`" + } + ], + "argline": "git_apply_options *opts, unsigned int version", + "sig": "git_apply_options *::unsigned int", + "return": { "type": "int", "comment": " 0 on success or -1 on failure." }, + "description": "

Initialize git_apply_options structure

\n", + "comments": "

Initialize a git_apply_options with default values. Equivalent to creating an instance with GIT_APPLY_OPTIONS_INIT.

\n", + "group": "apply" + }, + "git_apply_to_tree": { + "type": "function", + "file": "git2/apply.h", + "line": 119, + "lineto": 124, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "the postimage of the application" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to apply" + }, + { + "name": "preimage", + "type": "git_tree *", + "comment": "the tree to apply the diff to" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "the diff to apply" + }, + { + "name": "options", + "type": "const git_apply_options *", + "comment": "the options for the apply (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, git_tree *preimage, git_diff *diff, const git_apply_options *options", + "sig": "git_index **::git_repository *::git_tree *::git_diff *::const git_apply_options *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Apply a git_diff to a git_tree, and return the resulting image\n as an index.

\n", + "comments": "", + "group": "apply" + }, + "git_apply": { + "type": "function", + "file": "git2/apply.h", + "line": 157, + "lineto": 161, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to apply to" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "the diff to apply" + }, + { + "name": "location", + "type": "git_apply_location_t", + "comment": "the location to apply (workdir, index or both)" + }, + { + "name": "options", + "type": "const git_apply_options *", + "comment": "the options for the apply (or null for defaults)" + } + ], + "argline": "git_repository *repo, git_diff *diff, git_apply_location_t location, const git_apply_options *options", + "sig": "git_repository *::git_diff *::git_apply_location_t::const git_apply_options *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Apply a git_diff to the given repository, making changes directly\n in the working directory, the index, or both.

\n", + "comments": "", + "group": "apply" + }, + "git_attr_value": { + "type": "function", + "file": "git2/attr.h", + "line": 102, + "lineto": 102, + "args": [ + { "name": "attr", "type": "const char *", "comment": "The attribute" } + ], + "argline": "const char *attr", + "sig": "const char *", + "return": { + "type": "git_attr_value_t", + "comment": " the value type for the attribute" + }, + "description": "

Return the value type for a given attribute.

\n", + "comments": "

This can be either TRUE, FALSE, UNSPECIFIED (if the attribute was not set at all), or VALUE, if the attribute was set to an actual string.

\n\n

If the attribute has a VALUE string, it can be accessed normally as a NULL-terminated C string.

\n", + "group": "attr" + }, + "git_attr_get": { + "type": "function", + "file": "git2/attr.h", + "line": 180, + "lineto": 185, + "args": [ + { + "name": "value_out", + "type": "const char **", + "comment": "Output of the value of the attribute. Use the GIT_ATTR_...\n macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just\n use the string value for attributes set to a value. You\n should NOT modify or free this value." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "A combination of GIT_ATTR_CHECK... flags." + }, + { + "name": "path", + "type": "const char *", + "comment": "The path to check for attributes. Relative paths are\n interpreted relative to the repo root. The file does\n not have to exist, but if it does not, then it will be\n treated as a plain file (not a directory)." + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the attribute to look up." + } + ], + "argline": "const char **value_out, git_repository *repo, uint32_t flags, const char *path, const char *name", + "sig": "const char **::git_repository *::uint32_t::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Look up the value of one git attribute for path.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_get_ext": { + "type": "function", + "file": "git2/attr.h", + "line": 203, + "lineto": 208, + "args": [ + { + "name": "value_out", + "type": "const char **", + "comment": "Output of the value of the attribute. Use the GIT_ATTR_...\n macros to test for TRUE, FALSE, UNSPECIFIED, etc. or just\n use the string value for attributes set to a value. You\n should NOT modify or free this value." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "opts", + "type": "git_attr_options *", + "comment": "The `git_attr_options` to use when querying these attributes." + }, + { + "name": "path", + "type": "const char *", + "comment": "The path to check for attributes. Relative paths are\n interpreted relative to the repo root. The file does\n not have to exist, but if it does not, then it will be\n treated as a plain file (not a directory)." + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the attribute to look up." + } + ], + "argline": "const char **value_out, git_repository *repo, git_attr_options *opts, const char *path, const char *name", + "sig": "const char **::git_repository *::git_attr_options *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Look up the value of one git attribute for path with extended options.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_get_many": { + "type": "function", + "file": "git2/attr.h", + "line": 240, + "lineto": 246, + "args": [ + { + "name": "values_out", + "type": "const char **", + "comment": "An array of num_attr entries that will have string\n pointers written into it for the values of the attributes.\n You should not modify or free the values that are written\n into this array (although of course, you should free the\n array itself if you allocated it)." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "A combination of GIT_ATTR_CHECK... flags." + }, + { + "name": "path", + "type": "const char *", + "comment": "The path inside the repo to check attributes. This\n does not have to exist, but if it does not, then\n it will be treated as a plain file (i.e. not a directory)." + }, + { + "name": "num_attr", + "type": "size_t", + "comment": "The number of attributes being looked up" + }, + { + "name": "names", + "type": "const char **", + "comment": "An array of num_attr strings containing attribute names." + } + ], + "argline": "const char **values_out, git_repository *repo, uint32_t flags, const char *path, size_t num_attr, const char **names", + "sig": "const char **::git_repository *::uint32_t::const char *::size_t::const char **", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Look up a list of git attributes for path.

\n", + "comments": "

Use this if you have a known list of attributes that you want to look up in a single call. This is somewhat more efficient than calling git_attr_get() multiple times.

\n\n

For example, you might write:

\n\n
 const char *attrs[] = { "crlf", "diff", "foo" };     const char **values[3];     git_attr_get_many(values, repo, 0, "my/fun/file.c", 3, attrs);\n
\n\n

Then you could loop through the 3 values to get the settings for the three attributes you asked about.

\n", + "group": "attr" + }, + "git_attr_get_many_ext": { + "type": "function", + "file": "git2/attr.h", + "line": 265, + "lineto": 271, + "args": [ + { + "name": "values_out", + "type": "const char **", + "comment": "An array of num_attr entries that will have string\n pointers written into it for the values of the attributes.\n You should not modify or free the values that are written\n into this array (although of course, you should free the\n array itself if you allocated it)." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "opts", + "type": "git_attr_options *", + "comment": "The `git_attr_options` to use when querying these attributes." + }, + { + "name": "path", + "type": "const char *", + "comment": "The path inside the repo to check attributes. This\n does not have to exist, but if it does not, then\n it will be treated as a plain file (i.e. not a directory)." + }, + { + "name": "num_attr", + "type": "size_t", + "comment": "The number of attributes being looked up" + }, + { + "name": "names", + "type": "const char **", + "comment": "An array of num_attr strings containing attribute names." + } + ], + "argline": "const char **values_out, git_repository *repo, git_attr_options *opts, const char *path, size_t num_attr, const char **names", + "sig": "const char **::git_repository *::git_attr_options *::const char *::size_t::const char **", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Look up a list of git attributes for path with extended options.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_foreach": { + "type": "function", + "file": "git2/attr.h", + "line": 304, + "lineto": 309, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "A combination of GIT_ATTR_CHECK... flags." + }, + { + "name": "path", + "type": "const char *", + "comment": "Path inside the repo to check attributes. This does not have\n to exist, but if it does not, then it will be treated as a\n plain file (i.e. not a directory)." + }, + { + "name": "callback", + "type": "git_attr_foreach_cb", + "comment": "Function to invoke on each attribute name and value.\n See git_attr_foreach_cb." + }, + { + "name": "payload", + "type": "void *", + "comment": "Passed on as extra parameter to callback function." + } + ], + "argline": "git_repository *repo, uint32_t flags, const char *path, git_attr_foreach_cb callback, void *payload", + "sig": "git_repository *::uint32_t::const char *::git_attr_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Loop over all the git attributes for a path.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_foreach_ext": { + "type": "function", + "file": "git2/attr.h", + "line": 324, + "lineto": 329, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the path." + }, + { + "name": "opts", + "type": "git_attr_options *", + "comment": "The `git_attr_options` to use when querying these attributes." + }, + { + "name": "path", + "type": "const char *", + "comment": "Path inside the repo to check attributes. This does not have\n to exist, but if it does not, then it will be treated as a\n plain file (i.e. not a directory)." + }, + { + "name": "callback", + "type": "git_attr_foreach_cb", + "comment": "Function to invoke on each attribute name and value.\n See git_attr_foreach_cb." + }, + { + "name": "payload", + "type": "void *", + "comment": "Passed on as extra parameter to callback function." + } + ], + "argline": "git_repository *repo, git_attr_options *opts, const char *path, git_attr_foreach_cb callback, void *payload", + "sig": "git_repository *::git_attr_options *::const char *::git_attr_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Loop over all the git attributes for a path with extended options.

\n", + "comments": "", + "group": "attr" + }, + "git_attr_cache_flush": { + "type": "function", + "file": "git2/attr.h", + "line": 342, + "lineto": 343, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the gitattributes cache" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Flush the gitattributes cache.

\n", + "comments": "

Call this if you have reason to believe that the attributes files on disk no longer match the cached contents of memory. This will cause the attributes files to be reloaded the next time that an attribute access function is called.

\n", + "group": "attr" + }, + "git_attr_add_macro": { + "type": "function", + "file": "git2/attr.h", + "line": 360, + "lineto": 363, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to add the macro in." + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the macro." + }, + { + "name": "values", + "type": "const char *", + "comment": "The value for the macro." + } + ], + "argline": "git_repository *repo, const char *name, const char *values", + "sig": "git_repository *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Add a macro definition.

\n", + "comments": "

Macros will automatically be loaded from the top level .gitattributes file of the repository (plus the built-in "binary" macro). This function allows you to add others. For example, to add the default macro, you would call:

\n\n
 git_attr_add_macro(repo, "binary", "-diff -crlf");\n
\n", + "group": "attr" + }, + "git_blame_options_init": { + "type": "function", + "file": "git2/blame.h", + "line": 138, + "lineto": 140, + "args": [ + { + "name": "opts", + "type": "git_blame_options *", + "comment": "The `git_blame_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_BLAME_OPTIONS_VERSION`." + } + ], + "argline": "git_blame_options *opts, unsigned int version", + "sig": "git_blame_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_blame_options structure

\n", + "comments": "

Initializes a git_blame_options with default values. Equivalent to creating an instance with GIT_BLAME_OPTIONS_INIT.

\n", + "group": "blame" + }, + "git_blame_get_hunk_count": { + "type": "function", + "file": "git2/blame.h", + "line": 210, + "lineto": 210, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "The blame structure to query." + } + ], + "argline": "git_blame *blame", + "sig": "git_blame *", + "return": { "type": "uint32_t", "comment": " The number of hunks." }, + "description": "

Gets the number of hunks that exist in the blame structure.

\n", + "comments": "", + "group": "blame" + }, + "git_blame_get_hunk_byindex": { + "type": "function", + "file": "git2/blame.h", + "line": 219, + "lineto": 221, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to query" + }, + { + "name": "index", + "type": "uint32_t", + "comment": "index of the hunk to retrieve" + } + ], + "argline": "git_blame *blame, uint32_t index", + "sig": "git_blame *::uint32_t", + "return": { + "type": "const git_blame_hunk *", + "comment": " the hunk at the given index, or NULL on error" + }, + "description": "

Gets the blame hunk at the given index.

\n", + "comments": "", + "group": "blame" + }, + "git_blame_get_hunk_byline": { + "type": "function", + "file": "git2/blame.h", + "line": 230, + "lineto": 232, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to query" + }, + { + "name": "lineno", + "type": "size_t", + "comment": "the (1-based) line number to find a hunk for" + } + ], + "argline": "git_blame *blame, size_t lineno", + "sig": "git_blame *::size_t", + "return": { + "type": "const git_blame_hunk *", + "comment": " the hunk that contains the given line, or NULL on error" + }, + "description": "

Gets the hunk that relates to the given line number in the newest commit.

\n", + "comments": "", + "group": "blame", + "examples": { + "blame.c": ["ex/v1.8.4/blame.html#git_blame_get_hunk_byline-1"] + } + }, + "git_blame_file": { + "type": "function", + "file": "git2/blame.h", + "line": 245, + "lineto": 249, + "args": [ + { + "name": "out", + "type": "git_blame **", + "comment": "pointer that will receive the blame object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository whose history is to be walked" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to file to consider" + }, + { + "name": "options", + "type": "git_blame_options *", + "comment": "options for the blame operation. If NULL, this is treated as\n though GIT_BLAME_OPTIONS_INIT were passed." + } + ], + "argline": "git_blame **out, git_repository *repo, const char *path, git_blame_options *options", + "sig": "git_blame **::git_repository *::const char *::git_blame_options *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error.)" + }, + "description": "

Get the blame for a single file.

\n", + "comments": "", + "group": "blame", + "examples": { "blame.c": ["ex/v1.8.4/blame.html#git_blame_file-2"] } + }, + "git_blame_buffer": { + "type": "function", + "file": "git2/blame.h", + "line": 269, + "lineto": 273, + "args": [ + { + "name": "out", + "type": "git_blame **", + "comment": "pointer that will receive the resulting blame data" + }, + { + "name": "reference", + "type": "git_blame *", + "comment": "cached blame from the history of the file (usually the output\n from git_blame_file)" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "the (possibly) modified contents of the file" + }, + { + "name": "buffer_len", + "type": "size_t", + "comment": "number of valid bytes in the buffer" + } + ], + "argline": "git_blame **out, git_blame *reference, const char *buffer, size_t buffer_len", + "sig": "git_blame **::git_blame *::const char *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error)" + }, + "description": "

Get blame data for a file that has been modified in memory. The reference\n parameter is a pre-calculated blame for the in-odb history of the file. This\n means that once a file blame is completed (which can be expensive), updating\n the buffer blame is very fast.

\n", + "comments": "

Lines that differ between the buffer and the committed version are marked as having a zero OID for their final_commit_id.

\n", + "group": "blame" + }, + "git_blame_free": { + "type": "function", + "file": "git2/blame.h", + "line": 280, + "lineto": 280, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to free" + } + ], + "argline": "git_blame *blame", + "sig": "git_blame *", + "return": { "type": "void", "comment": null }, + "description": "

Free memory allocated by git_blame_file or git_blame_buffer.

\n", + "comments": "", + "group": "blame", + "examples": { "blame.c": ["ex/v1.8.4/blame.html#git_blame_free-3"] } + }, + "git_blob_lookup": { + "type": "function", + "file": "git2/blob.h", + "line": 33, + "lineto": 33, + "args": [ + { + "name": "blob", + "type": "git_blob **", + "comment": "pointer to the looked up blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the blob." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the blob to locate." + } + ], + "argline": "git_blob **blob, git_repository *repo, const git_oid *id", + "sig": "git_blob **::git_repository *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a blob object from a repository.

\n", + "comments": "", + "group": "blob", + "examples": { + "blame.c": ["ex/v1.8.4/blame.html#git_blob_lookup-4"], + "general.c": ["ex/v1.8.4/general.html#git_blob_lookup-1"] + } + }, + "git_blob_lookup_prefix": { + "type": "function", + "file": "git2/blob.h", + "line": 47, + "lineto": 47, + "args": [ + { + "name": "blob", + "type": "git_blob **", + "comment": "pointer to the looked up blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the blob." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the blob to locate." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + } + ], + "argline": "git_blob **blob, git_repository *repo, const git_oid *id, size_t len", + "sig": "git_blob **::git_repository *::const git_oid *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a blob object from a repository,\n given a prefix of its identifier (short id).

\n", + "comments": "", + "group": "blob" + }, + "git_blob_free": { + "type": "function", + "file": "git2/blob.h", + "line": 60, + "lineto": 60, + "args": [ + { "name": "blob", "type": "git_blob *", "comment": "the blob to close" } + ], + "argline": "git_blob *blob", + "sig": "git_blob *", + "return": { "type": "void", "comment": null }, + "description": "

Close an open blob

\n", + "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a blob. Failure to do so will cause a memory leak.

\n", + "group": "blob", + "examples": { + "blame.c": ["ex/v1.8.4/blame.html#git_blob_free-5"], + "general.c": ["ex/v1.8.4/general.html#git_blob_free-2"] + } + }, + "git_blob_id": { + "type": "function", + "file": "git2/blob.h", + "line": 68, + "lineto": 68, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "a previously loaded blob." + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "const git_oid *", + "comment": " SHA1 hash for this blob." + }, + "description": "

Get the id of a blob.

\n", + "comments": "", + "group": "blob" + }, + "git_blob_owner": { + "type": "function", + "file": "git2/blob.h", + "line": 76, + "lineto": 76, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "A previously loaded blob." + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "git_repository *", + "comment": " Repository that contains this blob." + }, + "description": "

Get the repository that contains the blob.

\n", + "comments": "", + "group": "blob" + }, + "git_blob_rawcontent": { + "type": "function", + "file": "git2/blob.h", + "line": 89, + "lineto": 89, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "pointer to the blob" + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "const void *", + "comment": " the pointer, or NULL on error" + }, + "description": "

Get a read-only buffer with the raw content of a blob.

\n", + "comments": "

A pointer to the raw content of a blob is returned; this pointer is owned internally by the object and shall not be free'd. The pointer may be invalidated at a later time.

\n", + "group": "blob", + "examples": { + "blame.c": ["ex/v1.8.4/blame.html#git_blob_rawcontent-6"], + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_blob_rawcontent-1"], + "general.c": ["ex/v1.8.4/general.html#git_blob_rawcontent-3"] + } + }, + "git_blob_rawsize": { + "type": "function", + "file": "git2/blob.h", + "line": 97, + "lineto": 97, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "pointer to the blob" + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { "type": "git_object_size_t", "comment": " size on bytes" }, + "description": "

Get the size in bytes of the contents of a blob

\n", + "comments": "", + "group": "blob", + "examples": { + "blame.c": ["ex/v1.8.4/blame.html#git_blob_rawsize-7"], + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_blob_rawsize-2"], + "general.c": [ + "ex/v1.8.4/general.html#git_blob_rawsize-4", + "ex/v1.8.4/general.html#git_blob_rawsize-5" + ] + } + }, + "git_blob_filter_options_init": { + "type": "function", + "file": "git2/blob.h", + "line": 164, + "lineto": 164, + "args": [ + { + "name": "opts", + "type": "git_blob_filter_options *", + "comment": "The `git_blob_filter_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_BLOB_FILTER_OPTIONS_VERSION`." + } + ], + "argline": "git_blob_filter_options *opts, unsigned int version", + "sig": "git_blob_filter_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_blob_filter_options structure

\n", + "comments": "

Initializes a git_blob_filter_options with default values. Equivalent to creating an instance with GIT_BLOB_FILTER_OPTIONS_INIT.

\n", + "group": "blob" + }, + "git_blob_filter": { + "type": "function", + "file": "git2/blob.h", + "line": 188, + "lineto": 192, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The git_buf to be filled in" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "Pointer to the blob" + }, + { + "name": "as_path", + "type": "const char *", + "comment": "Path used for file attribute lookups, etc." + }, + { + "name": "opts", + "type": "git_blob_filter_options *", + "comment": "Options to use for filtering the blob" + } + ], + "argline": "git_buf *out, git_blob *blob, const char *as_path, git_blob_filter_options *opts", + "sig": "git_buf *::git_blob *::const char *::git_blob_filter_options *", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Get a buffer with the filtered content of a blob.

\n", + "comments": "

This applies filters as if the blob was being checked out to the working directory under the specified filename. This may apply CRLF filtering or other types of changes depending on the file attributes set for the blob and the content detected in it.

\n\n

The output is written into a git_buf which the caller must free when done (via git_buf_dispose).

\n\n

If no filters need to be applied, then the out buffer will just be populated with a pointer to the raw content of the blob. In that case, be careful to not free the blob until done with the buffer or copy it into memory you own.

\n", + "group": "blob" + }, + "git_blob_create_from_workdir": { + "type": "function", + "file": "git2/blob.h", + "line": 205, + "lineto": 205, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "return the id of the written blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the blob will be written.\n\tthis repository cannot be bare" + }, + { + "name": "relative_path", + "type": "const char *", + "comment": "file from which the blob will be created,\n\trelative to the repository's working dir" + } + ], + "argline": "git_oid *id, git_repository *repo, const char *relative_path", + "sig": "git_oid *::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Read a file from the working folder of a repository\n and write it to the Object Database as a loose blob

\n", + "comments": "", + "group": "blob" + }, + "git_blob_create_from_disk": { + "type": "function", + "file": "git2/blob.h", + "line": 217, + "lineto": 217, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "return the id of the written blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the blob will be written.\n\tthis repository can be bare or not" + }, + { + "name": "path", + "type": "const char *", + "comment": "file from which the blob will be created" + } + ], + "argline": "git_oid *id, git_repository *repo, const char *path", + "sig": "git_oid *::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Read a file from the filesystem and write its content\n to the Object Database as a loose blob

\n", + "comments": "", + "group": "blob" + }, + "git_blob_create_from_stream": { + "type": "function", + "file": "git2/blob.h", + "line": 244, + "lineto": 247, + "args": [ + { + "name": "out", + "type": "git_writestream **", + "comment": "the stream into which to write" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where the blob will be written.\n This repository can be bare or not." + }, + { + "name": "hintpath", + "type": "const char *", + "comment": "If not NULL, will be used to select data filters\n to apply onto the content of the blob to be created." + } + ], + "argline": "git_writestream **out, git_repository *repo, const char *hintpath", + "sig": "git_writestream **::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or error code" }, + "description": "

Create a stream to write a new blob into the object db

\n", + "comments": "

This function may need to buffer the data on disk and will in general not be the right choice if you know the size of the data to write. If you have data in memory, use git_blob_create_from_buffer(). If you do not, but know the size of the contents (and don't want/need to perform filtering), use git_odb_open_wstream().

\n\n

Don't close this stream yourself but pass it to git_blob_create_from_stream_commit() to commit the write to the object db and get the object id.

\n\n

If the hintpath parameter is filled, it will be used to determine what git filters should be applied to the object before it is written to the object database.

\n", + "group": "blob" + }, + "git_blob_create_from_stream_commit": { + "type": "function", + "file": "git2/blob.h", + "line": 258, + "lineto": 260, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the id of the new blob" + }, + { + "name": "stream", + "type": "git_writestream *", + "comment": "the stream to close" + } + ], + "argline": "git_oid *out, git_writestream *stream", + "sig": "git_oid *::git_writestream *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Close the stream and write the blob to the object db

\n", + "comments": "

The stream will be closed and freed.

\n", + "group": "blob" + }, + "git_blob_create_from_buffer": { + "type": "function", + "file": "git2/blob.h", + "line": 271, + "lineto": 272, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "return the id of the written blob" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the blob will be written" + }, + { + "name": "buffer", + "type": "const void *", + "comment": "data to be written into the blob" + }, + { "name": "len", "type": "size_t", "comment": "length of the data" } + ], + "argline": "git_oid *id, git_repository *repo, const void *buffer, size_t len", + "sig": "git_oid *::git_repository *::const void *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Write an in-memory buffer to the ODB as a blob

\n", + "comments": "", + "group": "blob" + }, + "git_blob_is_binary": { + "type": "function", + "file": "git2/blob.h", + "line": 285, + "lineto": 285, + "args": [ + { + "name": "blob", + "type": "const git_blob *", + "comment": "The blob which content should be analyzed" + } + ], + "argline": "const git_blob *blob", + "sig": "const git_blob *", + "return": { + "type": "int", + "comment": " 1 if the content of the blob is detected\n as binary; 0 otherwise." + }, + "description": "

Determine if the blob content is most certainly binary or not.

\n", + "comments": "

The heuristic used to guess if a file is binary is taken from core git: Searching for NUL bytes and looking for a reasonable ratio of printable to non-printable characters among the first 8000 bytes.

\n", + "group": "blob" + }, + "git_blob_data_is_binary": { + "type": "function", + "file": "git2/blob.h", + "line": 297, + "lineto": 297, + "args": [ + { + "name": "data", + "type": "const char *", + "comment": "The blob data which content should be analyzed" + }, + { "name": "len", "type": "size_t", "comment": "The length of the data" } + ], + "argline": "const char *data, size_t len", + "sig": "const char *::size_t", + "return": { + "type": "int", + "comment": " 1 if the content of the blob is detected\n as binary; 0 otherwise." + }, + "description": "

Determine if the given content is most certainly binary or not;\n this is the same mechanism used by git_blob_is_binary but only\n looking at raw data.

\n", + "comments": "", + "group": "blob" + }, + "git_blob_dup": { + "type": "function", + "file": "git2/blob.h", + "line": 307, + "lineto": 307, + "args": [ + { + "name": "out", + "type": "git_blob **", + "comment": "Pointer to store the copy of the object" + }, + { + "name": "source", + "type": "git_blob *", + "comment": "Original object to copy" + } + ], + "argline": "git_blob **out, git_blob *source", + "sig": "git_blob **::git_blob *", + "return": { "type": "int", "comment": " 0." }, + "description": "

Create an in-memory copy of a blob. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "blob" + }, + "git_branch_create": { + "type": "function", + "file": "git2/branch.h", + "line": 52, + "lineto": 57, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer where to store the underlying reference." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to create the branch in." + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "Name for the branch; this name is\n validated for consistency. It should also not conflict with\n an already existing branch name." + }, + { + "name": "target", + "type": "const git_commit *", + "comment": "Commit to which this branch should point. This object\n must belong to the given `repo`." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing branch." + } + ], + "argline": "git_reference **out, git_repository *repo, const char *branch_name, const git_commit *target, int force", + "sig": "git_reference **::git_repository *::const char *::const git_commit *::int", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC or an error code.\n A proper reference is written in the refs/heads namespace\n pointing to the provided target commit." + }, + "description": "

Create a new branch pointing at a target commit

\n", + "comments": "

A new direct reference will be created pointing to this target commit. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The returned reference must be freed by the user.

\n\n

The branch name will be checked for validity. See git_tag_create() for rules about valid names.

\n", + "group": "branch" + }, + "git_branch_create_from_annotated": { + "type": "function", + "file": "git2/branch.h", + "line": 70, + "lineto": 75, + "args": [ + { "name": "ref_out", "type": "git_reference **", "comment": null }, + { "name": "repository", "type": "git_repository *", "comment": null }, + { "name": "branch_name", "type": "const char *", "comment": null }, + { + "name": "commit", + "type": "const git_annotated_commit *", + "comment": null + }, + { "name": "force", "type": "int", "comment": null } + ], + "argline": "git_reference **ref_out, git_repository *repository, const char *branch_name, const git_annotated_commit *commit, int force", + "sig": "git_reference **::git_repository *::const char *::const git_annotated_commit *::int", + "return": { "type": "int", "comment": null }, + "description": "

Create a new branch pointing at a target commit

\n", + "comments": "

This behaves like git_branch_create() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_branch_create().

\n", + "group": "branch", + "examples": { + "checkout.c": [ + "ex/v1.8.4/checkout.html#git_branch_create_from_annotated-7" + ] + } + }, + "git_branch_delete": { + "type": "function", + "file": "git2/branch.h", + "line": 87, + "lineto": 87, + "args": [ + { + "name": "branch", + "type": "git_reference *", + "comment": "A valid reference representing a branch" + } + ], + "argline": "git_reference *branch", + "sig": "git_reference *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code." + }, + "description": "

Delete an existing branch reference.

\n", + "comments": "

Note that if the deletion succeeds, the reference object will not be valid anymore, and should be freed immediately by the user using git_reference_free().

\n", + "group": "branch" + }, + "git_branch_iterator_new": { + "type": "function", + "file": "git2/branch.h", + "line": 103, + "lineto": 106, + "args": [ + { + "name": "out", + "type": "git_branch_iterator **", + "comment": "the iterator" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the branches." + }, + { + "name": "list_flags", + "type": "git_branch_t", + "comment": "Filtering flags for the branch\n listing. Valid values are GIT_BRANCH_LOCAL, GIT_BRANCH_REMOTE\n or GIT_BRANCH_ALL." + } + ], + "argline": "git_branch_iterator **out, git_repository *repo, git_branch_t list_flags", + "sig": "git_branch_iterator **::git_repository *::git_branch_t", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Create an iterator which loops over the requested branches.

\n", + "comments": "", + "group": "branch" + }, + "git_branch_next": { + "type": "function", + "file": "git2/branch.h", + "line": 116, + "lineto": 116, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "the reference" + }, + { + "name": "out_type", + "type": "git_branch_t *", + "comment": "the type of branch (local or remote-tracking)" + }, + { + "name": "iter", + "type": "git_branch_iterator *", + "comment": "the branch iterator" + } + ], + "argline": "git_reference **out, git_branch_t *out_type, git_branch_iterator *iter", + "sig": "git_reference **::git_branch_t *::git_branch_iterator *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ITEROVER if there are no more branches or an error code." + }, + "description": "

Retrieve the next branch from the iterator

\n", + "comments": "", + "group": "branch" + }, + "git_branch_iterator_free": { + "type": "function", + "file": "git2/branch.h", + "line": 123, + "lineto": 123, + "args": [ + { + "name": "iter", + "type": "git_branch_iterator *", + "comment": "the iterator to free" + } + ], + "argline": "git_branch_iterator *iter", + "sig": "git_branch_iterator *", + "return": { "type": "void", "comment": null }, + "description": "

Free a branch iterator

\n", + "comments": "", + "group": "branch" + }, + "git_branch_move": { + "type": "function", + "file": "git2/branch.h", + "line": 146, + "lineto": 150, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "New reference object for the updated name." + }, + { + "name": "branch", + "type": "git_reference *", + "comment": "Current underlying reference of the branch." + }, + { + "name": "new_branch_name", + "type": "const char *", + "comment": "Target name of the branch once the move\n is performed; this name is validated for consistency." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing branch." + } + ], + "argline": "git_reference **out, git_reference *branch, const char *new_branch_name, int force", + "sig": "git_reference **::git_reference *::const char *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code." + }, + "description": "

Move/rename an existing local branch reference.

\n", + "comments": "

The new branch name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

Note that if the move succeeds, the old reference object will not be valid anymore, and should be freed immediately by the user using git_reference_free().

\n", + "group": "branch" + }, + "git_branch_lookup": { + "type": "function", + "file": "git2/branch.h", + "line": 170, + "lineto": 174, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer to the looked-up branch reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to look up the branch" + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "Name of the branch to be looked-up;\n this name is validated for consistency." + }, + { + "name": "branch_type", + "type": "git_branch_t", + "comment": "Type of the considered branch. This should\n be valued with either GIT_BRANCH_LOCAL or GIT_BRANCH_REMOTE." + } + ], + "argline": "git_reference **out, git_repository *repo, const char *branch_name, git_branch_t branch_type", + "sig": "git_reference **::git_repository *::const char *::git_branch_t", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND when no matching branch\n exists, GIT_EINVALIDSPEC, otherwise an error code." + }, + "description": "

Lookup a branch by its name in a repository.

\n", + "comments": "

The generated reference must be freed by the user. The branch name will be checked for validity.

\n", + "group": "branch" + }, + "git_branch_name": { + "type": "function", + "file": "git2/branch.h", + "line": 191, + "lineto": 193, + "args": [ + { + "name": "out", + "type": "const char **", + "comment": "Pointer to the abbreviated reference name.\n Owned by ref, do not free." + }, + { + "name": "ref", + "type": "const git_reference *", + "comment": "A reference object, ideally pointing to a branch" + } + ], + "argline": "const char **out, const git_reference *ref", + "sig": "const char **::const git_reference *", + "return": { + "type": "int", + "comment": " 0 on success; GIT_EINVALID if the reference isn't either a local or\n remote branch, otherwise an error code." + }, + "description": "

Get the branch name

\n", + "comments": "

Given a reference object, this will check that it really is a branch (ie. it lives under "refs/heads/" or "refs/remotes/"), and return the branch part of it.

\n", + "group": "branch", + "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_branch_name-4"] } + }, + "git_branch_upstream": { + "type": "function", + "file": "git2/branch.h", + "line": 209, + "lineto": 211, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer where to store the retrieved reference." + }, + { + "name": "branch", + "type": "const git_reference *", + "comment": "Current underlying reference of the branch." + } + ], + "argline": "git_reference **out, const git_reference *branch", + "sig": "git_reference **::const git_reference *", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND when no remote tracking\n reference exists, otherwise an error code." + }, + "description": "

Get the upstream of a branch

\n", + "comments": "

Given a reference, this will return a new reference object corresponding to its remote tracking branch. The reference must be a local branch.

\n", + "group": "branch" + }, + "git_branch_set_upstream": { + "type": "function", + "file": "git2/branch.h", + "line": 228, + "lineto": 230, + "args": [ + { + "name": "branch", + "type": "git_reference *", + "comment": "the branch to configure" + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "remote-tracking or local branch to set as upstream." + } + ], + "argline": "git_reference *branch, const char *branch_name", + "sig": "git_reference *::const char *", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name`\n or an error code" + }, + "description": "

Set a branch's upstream branch

\n", + "comments": "

This will update the configuration to set the branch named branch_name as the upstream of branch. Pass a NULL name to unset the upstream information.

\n", + "group": "branch" + }, + "git_branch_upstream_name": { + "type": "function", + "file": "git2/branch.h", + "line": 246, + "lineto": 249, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer into which the name will be written." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the branches live." + }, + { + "name": "refname", + "type": "const char *", + "comment": "reference name of the local branch." + } + ], + "argline": "git_buf *out, git_repository *repo, const char *refname", + "sig": "git_buf *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND when no remote tracking reference exists,\n or an error code." + }, + "description": "

Get the upstream name of a branch

\n", + "comments": "

Given a local branch, this will return its remote-tracking branch information, as a full reference name, ie. "feature/nice" would become "refs/remote/origin/feature/nice", depending on that branch's configuration.

\n", + "group": "branch" + }, + "git_branch_is_head": { + "type": "function", + "file": "git2/branch.h", + "line": 259, + "lineto": 260, + "args": [ + { + "name": "branch", + "type": "const git_reference *", + "comment": "A reference to a local branch." + } + ], + "argline": "const git_reference *branch", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 if HEAD points at the branch, 0 if it isn't, or a negative value\n \t\t as an error code." + }, + "description": "

Determine if HEAD points to the given branch

\n", + "comments": "", + "group": "branch" + }, + "git_branch_is_checked_out": { + "type": "function", + "file": "git2/branch.h", + "line": 272, + "lineto": 273, + "args": [ + { + "name": "branch", + "type": "const git_reference *", + "comment": "A reference to a local branch." + } + ], + "argline": "const git_reference *branch", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 if branch is checked out, 0 if it isn't, an error code otherwise." + }, + "description": "

Determine if any HEAD points to the current branch

\n", + "comments": "

This will iterate over all known linked repositories (usually in the form of worktrees) and report whether any HEAD is pointing at the current branch.

\n", + "group": "branch" + }, + "git_branch_remote_name": { + "type": "function", + "file": "git2/branch.h", + "line": 291, + "lineto": 294, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The buffer into which the name will be written." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository where the branch lives." + }, + { + "name": "refname", + "type": "const char *", + "comment": "complete name of the remote tracking branch." + } + ], + "argline": "git_buf *out, git_repository *repo, const char *refname", + "sig": "git_buf *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND when no matching remote was found,\n GIT_EAMBIGUOUS when the branch maps to several remotes,\n otherwise an error code." + }, + "description": "

Find the remote name of a remote-tracking branch

\n", + "comments": "

This will return the name of the remote whose fetch refspec is matching the given branch. E.g. given a branch "refs/remotes/test/master", it will extract the "test" part. If refspecs from multiple remotes match, the function will return GIT_EAMBIGUOUS.

\n", + "group": "branch" + }, + "git_branch_upstream_remote": { + "type": "function", + "file": "git2/branch.h", + "line": 307, + "lineto": 307, + "args": [ + { + "name": "buf", + "type": "git_buf *", + "comment": "the buffer into which to write the name" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to look" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the full name of the branch" + } + ], + "argline": "git_buf *buf, git_repository *repo, const char *refname", + "sig": "git_buf *::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Retrieve the upstream remote of a local branch

\n", + "comments": "

This will return the currently configured "branch.*.remote" for a given branch. This branch must be local.

\n", + "group": "branch" + }, + "git_branch_upstream_merge": { + "type": "function", + "file": "git2/branch.h", + "line": 320, + "lineto": 320, + "args": [ + { + "name": "buf", + "type": "git_buf *", + "comment": "the buffer into which to write the name" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to look" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the full name of the branch" + } + ], + "argline": "git_buf *buf, git_repository *repo, const char *refname", + "sig": "git_buf *::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Retrieve the upstream merge of a local branch

\n", + "comments": "

This will return the currently configured "branch.*.merge" for a given branch. This branch must be local.

\n", + "group": "branch" + }, + "git_branch_name_is_valid": { + "type": "function", + "file": "git2/branch.h", + "line": 332, + "lineto": 332, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "output pointer to set with validity of given branch name" + }, + { + "name": "name", + "type": "const char *", + "comment": "a branch name to test" + } + ], + "argline": "int *valid, const char *name", + "sig": "int *::const char *", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Determine whether a branch name is valid, meaning that (when prefixed\n with refs/heads/) that it is a valid reference name, and that any\n additional branch name restrictions are imposed (eg, it cannot start\n with a -).

\n", + "comments": "", + "group": "branch" + }, + "git_buf_dispose": { + "type": "function", + "file": "git2/buffer.h", + "line": 68, + "lineto": 68, + "args": [ + { + "name": "buffer", + "type": "git_buf *", + "comment": "The buffer to deallocate" + } + ], + "argline": "git_buf *buffer", + "sig": "git_buf *", + "return": { "type": "void", "comment": null }, + "description": "

Free the memory referred to by the git_buf.

\n", + "comments": "

Note that this does not free the git_buf itself, just the memory pointed to by buffer->ptr.

\n", + "group": "buf", + "examples": { + "diff.c": [ + "ex/v1.8.4/diff.html#git_buf_dispose-1", + "ex/v1.8.4/diff.html#git_buf_dispose-2" + ], + "tag.c": ["ex/v1.8.4/tag.html#git_buf_dispose-1"] + } + }, + "git_checkout_options_init": { + "type": "function", + "file": "git2/checkout.h", + "line": 360, + "lineto": 362, + "args": [ + { + "name": "opts", + "type": "git_checkout_options *", + "comment": "The `git_checkout_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_CHECKOUT_OPTIONS_VERSION`." + } + ], + "argline": "git_checkout_options *opts, unsigned int version", + "sig": "git_checkout_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_checkout_options structure

\n", + "comments": "

Initializes a git_checkout_options with default values. Equivalent to creating an instance with GIT_CHECKOUT_OPTIONS_INIT.

\n", + "group": "checkout" + }, + "git_checkout_head": { + "type": "function", + "file": "git2/checkout.h", + "line": 381, + "lineto": 383, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository to check out (must be non-bare)" + }, + { + "name": "opts", + "type": "const git_checkout_options *", + "comment": "specifies checkout options (may be NULL)" + } + ], + "argline": "git_repository *repo, const git_checkout_options *opts", + "sig": "git_repository *::const git_checkout_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNBORNBRANCH if HEAD points to a non\n existing branch, non-zero value returned by `notify_cb`, or\n other error code \n<\n 0 (use git_error_last for error details)" + }, + "description": "

Updates files in the index and the working tree to match the content of\n the commit pointed at by HEAD.

\n", + "comments": "

Note that this is not the correct mechanism used to switch branches; do not change your HEAD and then call this method, that would leave you with checkout conflicts since your working directory would then appear to be dirty. Instead, checkout the target of the branch and then update HEAD using git_repository_set_head to point to the branch you checked out.

\n", + "group": "checkout" + }, + "git_checkout_index": { + "type": "function", + "file": "git2/checkout.h", + "line": 394, + "lineto": 397, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository into which to check out (must be non-bare)" + }, + { + "name": "index", + "type": "git_index *", + "comment": "index to be checked out (or NULL to use repository index)" + }, + { + "name": "opts", + "type": "const git_checkout_options *", + "comment": "specifies checkout options (may be NULL)" + } + ], + "argline": "git_repository *repo, git_index *index, const git_checkout_options *opts", + "sig": "git_repository *::git_index *::const git_checkout_options *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero return value from `notify_cb`, or error\n code \n<\n 0 (use git_error_last for error details)" + }, + "description": "

Updates files in the working tree to match the content of the index.

\n", + "comments": "", + "group": "checkout" + }, + "git_checkout_tree": { + "type": "function", + "file": "git2/checkout.h", + "line": 410, + "lineto": 413, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository to check out (must be non-bare)" + }, + { + "name": "treeish", + "type": "const git_object *", + "comment": "a commit, tag or tree which content will be used to update\n the working directory (or NULL to use HEAD)" + }, + { + "name": "opts", + "type": "const git_checkout_options *", + "comment": "specifies checkout options (may be NULL)" + } + ], + "argline": "git_repository *repo, const git_object *treeish, const git_checkout_options *opts", + "sig": "git_repository *::const git_object *::const git_checkout_options *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero return value from `notify_cb`, or error\n code \n<\n 0 (use git_error_last for error details)" + }, + "description": "

Updates files in the index and working tree to match the content of the\n tree pointed at by the treeish.

\n", + "comments": "", + "group": "checkout", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_checkout_tree-8"], + "merge.c": ["ex/v1.8.4/merge.html#git_checkout_tree-5"] + } + }, + "git_cherrypick_options_init": { + "type": "function", + "file": "git2/cherrypick.h", + "line": 49, + "lineto": 51, + "args": [ + { + "name": "opts", + "type": "git_cherrypick_options *", + "comment": "The `git_cherrypick_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_CHERRYPICK_OPTIONS_VERSION`." + } + ], + "argline": "git_cherrypick_options *opts, unsigned int version", + "sig": "git_cherrypick_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_cherrypick_options structure

\n", + "comments": "

Initializes a git_cherrypick_options with default values. Equivalent to creating an instance with GIT_CHERRYPICK_OPTIONS_INIT.

\n", + "group": "cherrypick" + }, + "git_cherrypick_commit": { + "type": "function", + "file": "git2/cherrypick.h", + "line": 67, + "lineto": 73, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "pointer to store the index result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository that contains the given commits" + }, + { + "name": "cherrypick_commit", + "type": "git_commit *", + "comment": "the commit to cherry-pick" + }, + { + "name": "our_commit", + "type": "git_commit *", + "comment": "the commit to cherry-pick against (eg, HEAD)" + }, + { + "name": "mainline", + "type": "unsigned int", + "comment": "the parent of the `cherrypick_commit`, if it is a merge" + }, + { + "name": "merge_options", + "type": "const git_merge_options *", + "comment": "the merge options (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, git_commit *cherrypick_commit, git_commit *our_commit, unsigned int mainline, const git_merge_options *merge_options", + "sig": "git_index **::git_repository *::git_commit *::git_commit *::unsigned int::const git_merge_options *", + "return": { + "type": "int", + "comment": " zero on success, -1 on failure." + }, + "description": "

Cherry-picks the given commit against the given "our" commit, producing an\n index that reflects the result of the cherry-pick.

\n", + "comments": "

The returned index must be freed explicitly with git_index_free.

\n", + "group": "cherrypick" + }, + "git_cherrypick": { + "type": "function", + "file": "git2/cherrypick.h", + "line": 83, + "lineto": 86, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to cherry-pick" + }, + { + "name": "commit", + "type": "git_commit *", + "comment": "the commit to cherry-pick" + }, + { + "name": "cherrypick_options", + "type": "const git_cherrypick_options *", + "comment": "the cherry-pick options (or null for defaults)" + } + ], + "argline": "git_repository *repo, git_commit *commit, const git_cherrypick_options *cherrypick_options", + "sig": "git_repository *::git_commit *::const git_cherrypick_options *", + "return": { + "type": "int", + "comment": " zero on success, -1 on failure." + }, + "description": "

Cherry-pick the given commit, producing changes in the index and working directory.

\n", + "comments": "", + "group": "cherrypick" + }, + "git_clone_options_init": { + "type": "function", + "file": "git2/clone.h", + "line": 181, + "lineto": 183, + "args": [ + { + "name": "opts", + "type": "git_clone_options *", + "comment": "The `git_clone_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_CLONE_OPTIONS_VERSION`." + } + ], + "argline": "git_clone_options *opts, unsigned int version", + "sig": "git_clone_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_clone_options structure

\n", + "comments": "

Initializes a git_clone_options with default values. Equivalent to creating an instance with GIT_CLONE_OPTIONS_INIT.

\n", + "group": "clone" + }, + "git_clone": { + "type": "function", + "file": "git2/clone.h", + "line": 201, + "lineto": 205, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "pointer that will receive the resulting repository object" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote repository to clone" + }, + { + "name": "local_path", + "type": "const char *", + "comment": "local directory to clone to" + }, + { + "name": "options", + "type": "const git_clone_options *", + "comment": "configuration options for the clone. If NULL, the\n function works as though GIT_OPTIONS_INIT were passed." + } + ], + "argline": "git_repository **out, const char *url, const char *local_path, const git_clone_options *options", + "sig": "git_repository **::const char *::const char *::const git_clone_options *", + "return": { + "type": "int", + "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)" + }, + "description": "

Clone a remote repository.

\n", + "comments": "

By default this creates its repository and initial remote to match git's defaults. You can use the options in the callback to customize how these are created.

\n", + "group": "clone" + }, + "git_commit_lookup": { + "type": "function", + "file": "git2/commit.h", + "line": 36, + "lineto": 37, + "args": [ + { + "name": "commit", + "type": "git_commit **", + "comment": "pointer to the looked up commit" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the commit." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the commit to locate. If the object is\n\t\tan annotated tag it will be peeled back to the commit." + } + ], + "argline": "git_commit **commit, git_repository *repo, const git_oid *id", + "sig": "git_commit **::git_repository *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a commit object from a repository.

\n", + "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", + "group": "commit", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_commit_lookup-9"], + "general.c": [ + "ex/v1.8.4/general.html#git_commit_lookup-6", + "ex/v1.8.4/general.html#git_commit_lookup-7", + "ex/v1.8.4/general.html#git_commit_lookup-8" + ], + "log.c": ["ex/v1.8.4/log.html#git_commit_lookup-1"], + "merge.c": ["ex/v1.8.4/merge.html#git_commit_lookup-6"] + } + }, + "git_commit_lookup_prefix": { + "type": "function", + "file": "git2/commit.h", + "line": 55, + "lineto": 56, + "args": [ + { + "name": "commit", + "type": "git_commit **", + "comment": "pointer to the looked up commit" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the commit." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the commit to locate. If the object is\n\t\tan annotated tag it will be peeled back to the commit." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + } + ], + "argline": "git_commit **commit, git_repository *repo, const git_oid *id, size_t len", + "sig": "git_commit **::git_repository *::const git_oid *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a commit object from a repository, given a prefix of its\n identifier (short id).

\n", + "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", + "group": "commit" + }, + "git_commit_free": { + "type": "function", + "file": "git2/commit.h", + "line": 70, + "lineto": 70, + "args": [ + { + "name": "commit", + "type": "git_commit *", + "comment": "the commit to close" + } + ], + "argline": "git_commit *commit", + "sig": "git_commit *", + "return": { "type": "void", "comment": null }, + "description": "

Close an open commit

\n", + "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a commit. Failure to do so will cause a memory leak.

\n", + "group": "commit", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_commit_free-10"], + "general.c": [ + "ex/v1.8.4/general.html#git_commit_free-9", + "ex/v1.8.4/general.html#git_commit_free-10", + "ex/v1.8.4/general.html#git_commit_free-11", + "ex/v1.8.4/general.html#git_commit_free-12", + "ex/v1.8.4/general.html#git_commit_free-13" + ], + "log.c": [ + "ex/v1.8.4/log.html#git_commit_free-2", + "ex/v1.8.4/log.html#git_commit_free-3", + "ex/v1.8.4/log.html#git_commit_free-4", + "ex/v1.8.4/log.html#git_commit_free-5" + ] + } + }, + "git_commit_id": { + "type": "function", + "file": "git2/commit.h", + "line": 78, + "lineto": 78, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const git_oid *", + "comment": " object identity for the commit." + }, + "description": "

Get the id of a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_commit_id-14"], + "log.c": ["ex/v1.8.4/log.html#git_commit_id-6"] + } + }, + "git_commit_owner": { + "type": "function", + "file": "git2/commit.h", + "line": 86, + "lineto": 86, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "A previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "git_repository *", + "comment": " Repository that contains this commit." + }, + "description": "

Get the repository that contains the commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "log.c": [ + "ex/v1.8.4/log.html#git_commit_owner-7", + "ex/v1.8.4/log.html#git_commit_owner-8" + ] + } + }, + "git_commit_message_encoding": { + "type": "function", + "file": "git2/commit.h", + "line": 98, + "lineto": 98, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { "type": "const char *", "comment": " NULL, or the encoding" }, + "description": "

Get the encoding for the message of a commit,\n as a string representing a standard encoding name.

\n", + "comments": "

The encoding may be NULL if the encoding header in the commit is missing; in that case UTF-8 is assumed.

\n", + "group": "commit" + }, + "git_commit_message": { + "type": "function", + "file": "git2/commit.h", + "line": 109, + "lineto": 109, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const char *", + "comment": " the message of a commit" + }, + "description": "

Get the full message of a commit.

\n", + "comments": "

The returned message will be slightly prettified by removing any potential leading newlines.

\n", + "group": "commit", + "examples": { + "cat-file.c": [ + "ex/v1.8.4/cat-file.html#git_commit_message-3", + "ex/v1.8.4/cat-file.html#git_commit_message-4" + ], + "general.c": [ + "ex/v1.8.4/general.html#git_commit_message-15", + "ex/v1.8.4/general.html#git_commit_message-16", + "ex/v1.8.4/general.html#git_commit_message-17" + ], + "log.c": [ + "ex/v1.8.4/log.html#git_commit_message-9", + "ex/v1.8.4/log.html#git_commit_message-10", + "ex/v1.8.4/log.html#git_commit_message-11" + ], + "tag.c": ["ex/v1.8.4/tag.html#git_commit_message-2"] + } + }, + "git_commit_message_raw": { + "type": "function", + "file": "git2/commit.h", + "line": 117, + "lineto": 117, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const char *", + "comment": " the raw message of a commit" + }, + "description": "

Get the full raw message of a commit.

\n", + "comments": "", + "group": "commit" + }, + "git_commit_summary": { + "type": "function", + "file": "git2/commit.h", + "line": 128, + "lineto": 128, + "args": [ + { + "name": "commit", + "type": "git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "git_commit *commit", + "sig": "git_commit *", + "return": { + "type": "const char *", + "comment": " the summary of a commit or NULL on error" + }, + "description": "

Get the short "summary" of the git commit message.

\n", + "comments": "

The returned message is the summary of the commit, comprising the first paragraph of the message with whitespace trimmed and squashed.

\n", + "group": "commit" + }, + "git_commit_body": { + "type": "function", + "file": "git2/commit.h", + "line": 141, + "lineto": 141, + "args": [ + { + "name": "commit", + "type": "git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "git_commit *commit", + "sig": "git_commit *", + "return": { + "type": "const char *", + "comment": " the body of a commit or NULL when no the message only\n consists of a summary" + }, + "description": "

Get the long "body" of the git commit message.

\n", + "comments": "

The returned message is the body of the commit, comprising everything but the first paragraph of the message. Leading and trailing whitespaces are trimmed.

\n", + "group": "commit" + }, + "git_commit_time": { + "type": "function", + "file": "git2/commit.h", + "line": 149, + "lineto": 149, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { "type": "git_time_t", "comment": " the time of a commit" }, + "description": "

Get the commit time (i.e. committer time) of a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "general.c": [ + "ex/v1.8.4/general.html#git_commit_time-18", + "ex/v1.8.4/general.html#git_commit_time-19" + ] + } + }, + "git_commit_time_offset": { + "type": "function", + "file": "git2/commit.h", + "line": 157, + "lineto": 157, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "int", + "comment": " positive or negative timezone offset, in minutes from UTC" + }, + "description": "

Get the commit timezone offset (i.e. committer's preferred timezone) of a commit.

\n", + "comments": "", + "group": "commit" + }, + "git_commit_committer": { + "type": "function", + "file": "git2/commit.h", + "line": 165, + "lineto": 165, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const git_signature *", + "comment": " the committer of a commit" + }, + "description": "

Get the committer of a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_committer-5"], + "general.c": ["ex/v1.8.4/general.html#git_commit_committer-20"], + "log.c": ["ex/v1.8.4/log.html#git_commit_committer-12"] + } + }, + "git_commit_author": { + "type": "function", + "file": "git2/commit.h", + "line": 173, + "lineto": 173, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const git_signature *", + "comment": " the author of a commit" + }, + "description": "

Get the author of a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_author-6"], + "general.c": [ + "ex/v1.8.4/general.html#git_commit_author-21", + "ex/v1.8.4/general.html#git_commit_author-22" + ], + "log.c": [ + "ex/v1.8.4/log.html#git_commit_author-13", + "ex/v1.8.4/log.html#git_commit_author-14" + ] + } + }, + "git_commit_committer_with_mailmap": { + "type": "function", + "file": "git2/commit.h", + "line": 186, + "lineto": 187, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "a pointer to store the resolved signature." + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "mailmap", + "type": "const git_mailmap *", + "comment": "the mailmap to resolve with. (may be NULL)" + } + ], + "argline": "git_signature **out, const git_commit *commit, const git_mailmap *mailmap", + "sig": "git_signature **::const git_commit *::const git_mailmap *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the committer of a commit, using the mailmap to map names and email\n addresses to canonical real names and email addresses.

\n", + "comments": "

Call git_signature_free to free the signature.

\n", + "group": "commit" + }, + "git_commit_author_with_mailmap": { + "type": "function", + "file": "git2/commit.h", + "line": 200, + "lineto": 201, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "a pointer to store the resolved signature." + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "mailmap", + "type": "const git_mailmap *", + "comment": "the mailmap to resolve with. (may be NULL)" + } + ], + "argline": "git_signature **out, const git_commit *commit, const git_mailmap *mailmap", + "sig": "git_signature **::const git_commit *::const git_mailmap *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the author of a commit, using the mailmap to map names and email\n addresses to canonical real names and email addresses.

\n", + "comments": "

Call git_signature_free to free the signature.

\n", + "group": "commit" + }, + "git_commit_raw_header": { + "type": "function", + "file": "git2/commit.h", + "line": 209, + "lineto": 209, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit" + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const char *", + "comment": " the header text of the commit" + }, + "description": "

Get the full raw text of the commit header.

\n", + "comments": "", + "group": "commit" + }, + "git_commit_tree": { + "type": "function", + "file": "git2/commit.h", + "line": 218, + "lineto": 218, + "args": [ + { + "name": "tree_out", + "type": "git_tree **", + "comment": "pointer where to store the tree object" + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "git_tree **tree_out, const git_commit *commit", + "sig": "git_tree **::const git_commit *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the tree pointed to by a commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "log.c": [ + "ex/v1.8.4/log.html#git_commit_tree-15", + "ex/v1.8.4/log.html#git_commit_tree-16", + "ex/v1.8.4/log.html#git_commit_tree-17", + "ex/v1.8.4/log.html#git_commit_tree-18", + "ex/v1.8.4/log.html#git_commit_tree-19" + ] + } + }, + "git_commit_tree_id": { + "type": "function", + "file": "git2/commit.h", + "line": 228, + "lineto": 228, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "const git_oid *", + "comment": " the id of tree pointed to by commit." + }, + "description": "

Get the id of the tree pointed to by a commit. This differs from\n git_commit_tree in that no attempts are made to fetch an object\n from the ODB.

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_tree_id-7"] + } + }, + "git_commit_parentcount": { + "type": "function", + "file": "git2/commit.h", + "line": 236, + "lineto": 236, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + } + ], + "argline": "const git_commit *commit", + "sig": "const git_commit *", + "return": { + "type": "unsigned int", + "comment": " integer of count of parents" + }, + "description": "

Get the number of parents of this commit

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_parentcount-8"], + "general.c": ["ex/v1.8.4/general.html#git_commit_parentcount-23"], + "log.c": [ + "ex/v1.8.4/log.html#git_commit_parentcount-20", + "ex/v1.8.4/log.html#git_commit_parentcount-21" + ] + } + }, + "git_commit_parent": { + "type": "function", + "file": "git2/commit.h", + "line": 246, + "lineto": 249, + "args": [ + { + "name": "out", + "type": "git_commit **", + "comment": "Pointer where to store the parent commit" + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "n", + "type": "unsigned int", + "comment": "the position of the parent (from 0 to `parentcount`)" + } + ], + "argline": "git_commit **out, const git_commit *commit, unsigned int n", + "sig": "git_commit **::const git_commit *::unsigned int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the specified parent of the commit.

\n", + "comments": "", + "group": "commit", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_commit_parent-24"], + "log.c": [ + "ex/v1.8.4/log.html#git_commit_parent-22", + "ex/v1.8.4/log.html#git_commit_parent-23" + ] + } + }, + "git_commit_parent_id": { + "type": "function", + "file": "git2/commit.h", + "line": 260, + "lineto": 262, + "args": [ + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "n", + "type": "unsigned int", + "comment": "the position of the parent (from 0 to `parentcount`)" + } + ], + "argline": "const git_commit *commit, unsigned int n", + "sig": "const git_commit *::unsigned int", + "return": { + "type": "const git_oid *", + "comment": " the id of the parent, NULL on error." + }, + "description": "

Get the oid of a specified parent for a commit. This is different from\n git_commit_parent, which will attempt to load the parent commit from\n the ODB.

\n", + "comments": "", + "group": "commit", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_parent_id-9"], + "log.c": ["ex/v1.8.4/log.html#git_commit_parent_id-24"] + } + }, + "git_commit_nth_gen_ancestor": { + "type": "function", + "file": "git2/commit.h", + "line": 278, + "lineto": 281, + "args": [ + { + "name": "ancestor", + "type": "git_commit **", + "comment": "Pointer where to store the ancestor commit" + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "a previously loaded commit." + }, + { + "name": "n", + "type": "unsigned int", + "comment": "the requested generation" + } + ], + "argline": "git_commit **ancestor, const git_commit *commit, unsigned int n", + "sig": "git_commit **::const git_commit *::unsigned int", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND if no matching ancestor exists\n or an error code" + }, + "description": "

Get the commit object that is the \n<n

\n\n
\n

th generation ancestor\n of the named commit object, following only the first parents.\n The returned commit has to be freed by the caller.

\n
\n", + "comments": "

Passing 0 as the generation number returns another instance of the base commit itself.

\n", + "group": "commit" + }, + "git_commit_header_field": { + "type": "function", + "file": "git2/commit.h", + "line": 293, + "lineto": 293, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer to fill; existing content will be\n overwritten" + }, + { + "name": "commit", + "type": "const git_commit *", + "comment": "the commit to look in" + }, + { + "name": "field", + "type": "const char *", + "comment": "the header field to return" + } + ], + "argline": "git_buf *out, const git_commit *commit, const char *field", + "sig": "git_buf *::const git_commit *::const char *", + "return": { + "type": "int", + "comment": " 0 on succeess, GIT_ENOTFOUND if the field does not exist,\n or an error code" + }, + "description": "

Get an arbitrary header field

\n", + "comments": "", + "group": "commit" + }, + "git_commit_extract_signature": { + "type": "function", + "file": "git2/commit.h", + "line": 313, + "lineto": 313, + "args": [ + { + "name": "signature", + "type": "git_buf *", + "comment": "the signature block; existing content will be\n overwritten" + }, + { + "name": "signed_data", + "type": "git_buf *", + "comment": "signed data; this is the commit contents minus the signature block;\n existing content will be overwritten" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which the commit exists" + }, + { + "name": "commit_id", + "type": "git_oid *", + "comment": "the commit from which to extract the data" + }, + { + "name": "field", + "type": "const char *", + "comment": "the name of the header field containing the signature\n block; pass `NULL` to extract the default 'gpgsig'" + } + ], + "argline": "git_buf *signature, git_buf *signed_data, git_repository *repo, git_oid *commit_id, const char *field", + "sig": "git_buf *::git_buf *::git_repository *::git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if the id is not for a commit\n or the commit does not have a signature." + }, + "description": "

Extract the signature from a commit

\n", + "comments": "

If the id is not for a commit, the error class will be GIT_ERROR_INVALID. If the commit does not have a signature, the error class will be GIT_ERROR_OBJECT.

\n", + "group": "commit" + }, + "git_commit_create": { + "type": "function", + "file": "git2/commit.h", + "line": 359, + "lineto": 369, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "Pointer in which to store the OID of the newly created commit" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the commit" + }, + { + "name": "update_ref", + "type": "const char *", + "comment": "If not NULL, name of the reference that\n\twill be updated to point to this commit. If the reference\n\tis not direct, it will be resolved to a direct reference.\n\tUse \"HEAD\" to update the HEAD of the current branch and\n\tmake it point to this commit. If the reference doesn't\n\texist yet, it will be created. If it does exist, the first\n\tparent must be the tip of this branch." + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "Signature with author and author time of commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "Signature with committer and * commit time of commit" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this commit" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." + }, + { + "name": "parent_count", + "type": "size_t", + "comment": "Number of parents for this commit" + }, + { + "name": "parents", + "type": "const git_commit *[]", + "comment": "Array of `parent_count` pointers to `git_commit`\n objects that will be used as the parents for this commit. This\n array may be NULL if `parent_count` is 0 (root commit). All the\n given commits must be owned by the `repo`." + } + ], + "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents", + "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]", + "return": { + "type": "int", + "comment": " 0 or an error code\n\tThe created commit will be written to the Object Database and\n\tthe given reference will be updated to point to it" + }, + "description": "

Create new commit in the repository from a list of git_object pointers

\n", + "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n", + "group": "commit", + "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_commit_create-7"] } + }, + "git_commit_create_v": { + "type": "function", + "file": "git2/commit.h", + "line": 385, + "lineto": 395, + "args": [ + { "name": "id", "type": "git_oid *", "comment": null }, + { "name": "repo", "type": "git_repository *", "comment": null }, + { "name": "update_ref", "type": "const char *", "comment": null }, + { "name": "author", "type": "const git_signature *", "comment": null }, + { + "name": "committer", + "type": "const git_signature *", + "comment": null + }, + { "name": "message_encoding", "type": "const char *", "comment": null }, + { "name": "message", "type": "const char *", "comment": null }, + { "name": "tree", "type": "const git_tree *", "comment": null }, + { "name": "parent_count", "type": "size_t", "comment": null } + ], + "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count", + "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t", + "return": { "type": "int", "comment": null }, + "description": "

Create new commit in the repository using a variable argument list.

\n", + "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n\n

The parents for the commit are specified as a variable list of pointers to const git_commit *. Note that this is a convenience method which may not be safe to export for certain languages or compilers

\n\n

All other parameters remain the same as git_commit_create().

\n", + "group": "commit", + "examples": { + "commit.c": ["ex/v1.8.4/commit.html#git_commit_create_v-1"], + "general.c": ["ex/v1.8.4/general.html#git_commit_create_v-25"], + "init.c": ["ex/v1.8.4/init.html#git_commit_create_v-1"] + } + }, + "git_commit_create_from_stage": { + "type": "function", + "file": "git2/commit.h", + "line": 434, + "lineto": 438, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "pointer to store the new commit's object id" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository to commit changes in" + }, + { + "name": "message", + "type": "const char *", + "comment": "the commit message" + }, + { + "name": "opts", + "type": "const git_commit_create_options *", + "comment": "options for creating the commit" + } + ], + "argline": "git_oid *id, git_repository *repo, const char *message, const git_commit_create_options *opts", + "sig": "git_oid *::git_repository *::const char *::const git_commit_create_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNCHANGED if there were no changes to commit, or an error code" + }, + "description": "

Commits the staged changes in the repository; this is a near analog to\n git commit -m message.

\n", + "comments": "

By default, empty commits are not allowed.

\n", + "group": "commit" + }, + "git_commit_amend": { + "type": "function", + "file": "git2/commit.h", + "line": 461, + "lineto": 469, + "args": [ + { "name": "id", "type": "git_oid *", "comment": null }, + { + "name": "commit_to_amend", + "type": "const git_commit *", + "comment": null + }, + { "name": "update_ref", "type": "const char *", "comment": null }, + { "name": "author", "type": "const git_signature *", "comment": null }, + { + "name": "committer", + "type": "const git_signature *", + "comment": null + }, + { "name": "message_encoding", "type": "const char *", "comment": null }, + { "name": "message", "type": "const char *", "comment": null }, + { "name": "tree", "type": "const git_tree *", "comment": null } + ], + "argline": "git_oid *id, const git_commit *commit_to_amend, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree", + "sig": "git_oid *::const git_commit *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *", + "return": { "type": "int", "comment": null }, + "description": "

Amend an existing commit by replacing only non-NULL values.

\n", + "comments": "

This creates a new commit that is exactly the same as the old commit, except that any non-NULL values will be updated. The new commit has the same parents as the old commit.

\n\n

The update_ref value works as in the regular git_commit_create(), updating the ref to point to the newly rewritten commit. If you want to amend a commit that is not currently the tip of the branch and then rewrite the following commits to reach a ref, pass this as NULL and update the rest of the commit chain and ref separately.

\n\n

Unlike git_commit_create(), the author, committer, message, message_encoding, and tree parameters can be NULL in which case this will use the values from the original commit_to_amend.

\n\n

All parameters have the same meanings as in git_commit_create().

\n", + "group": "commit" + }, + "git_commit_create_buffer": { + "type": "function", + "file": "git2/commit.h", + "line": 506, + "lineto": 515, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer into which to write the commit object content" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where the referenced tree and parents live" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "Signature with author and author time of commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "Signature with committer and * commit time of commit" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this commit" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." + }, + { + "name": "parent_count", + "type": "size_t", + "comment": "Number of parents for this commit" + }, + { + "name": "parents", + "type": "const git_commit *[]", + "comment": "Array of `parent_count` pointers to `git_commit`\n objects that will be used as the parents for this commit. This\n array may be NULL if `parent_count` is 0 (root commit). All the\n given commits must be owned by the `repo`." + } + ], + "argline": "git_buf *out, git_repository *repo, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents", + "sig": "git_buf *::git_repository *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a commit and write it into a buffer

\n", + "comments": "

Create a commit as with git_commit_create() but instead of writing it to the objectdb, write the contents of the object into a buffer.

\n", + "group": "commit" + }, + "git_commit_create_with_signature": { + "type": "function", + "file": "git2/commit.h", + "line": 533, + "lineto": 538, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the resulting commit id" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to create the commit in." + }, + { + "name": "commit_content", + "type": "const char *", + "comment": "the content of the unsigned commit object" + }, + { + "name": "signature", + "type": "const char *", + "comment": "the signature to add to the commit. Leave `NULL`\n to create a commit without adding a signature field." + }, + { + "name": "signature_field", + "type": "const char *", + "comment": "which header field should contain this\n signature. Leave `NULL` for the default of \"gpgsig\"" + } + ], + "argline": "git_oid *out, git_repository *repo, const char *commit_content, const char *signature, const char *signature_field", + "sig": "git_oid *::git_repository *::const char *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a commit object from the given buffer and signature

\n", + "comments": "

Given the unsigned commit object's contents, its signature and the header field in which to store the signature, attach the signature to the commit and write it into the given repository.

\n", + "group": "commit" + }, + "git_commit_dup": { + "type": "function", + "file": "git2/commit.h", + "line": 548, + "lineto": 548, + "args": [ + { + "name": "out", + "type": "git_commit **", + "comment": "Pointer to store the copy of the commit" + }, + { + "name": "source", + "type": "git_commit *", + "comment": "Original commit to copy" + } + ], + "argline": "git_commit **out, git_commit *source", + "sig": "git_commit **::git_commit *", + "return": { "type": "int", "comment": " 0" }, + "description": "

Create an in-memory copy of a commit. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "commit" + }, + "git_commitarray_dispose": { + "type": "function", + "file": "git2/commit.h", + "line": 603, + "lineto": 603, + "args": [ + { + "name": "array", + "type": "git_commitarray *", + "comment": "The git_commitarray that contains commits to free" + } + ], + "argline": "git_commitarray *array", + "sig": "git_commitarray *", + "return": { "type": "void", "comment": null }, + "description": "

Free the commits contained in a commit array. This method should\n be called on git_commitarray objects that were provided by the\n library. Not doing so will result in a memory leak.

\n", + "comments": "

This does not free the git_commitarray itself, since the library will never allocate that object directly itself.

\n", + "group": "commitarray" + }, + "git_libgit2_version": { + "type": "function", + "file": "git2/common.h", + "line": 117, + "lineto": 117, + "args": [ + { + "name": "major", + "type": "int *", + "comment": "Store the major version number" + }, + { + "name": "minor", + "type": "int *", + "comment": "Store the minor version number" + }, + { + "name": "rev", + "type": "int *", + "comment": "Store the revision (patch) number" + } + ], + "argline": "int *major, int *minor, int *rev", + "sig": "int *::int *::int *", + "return": { + "type": "int", + "comment": " 0 on success or an error code on failure" + }, + "description": "

Return the version of the libgit2 library\n being currently used.

\n", + "comments": "", + "group": "libgit2" + }, + "git_libgit2_prerelease": { + "type": "function", + "file": "git2/common.h", + "line": 128, + "lineto": 128, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "const char *", + "comment": " the name of the prerelease state or NULL" + }, + "description": "

Return the prerelease state of the libgit2 library currently being\n used. For nightly builds during active development, this will be\n "alpha". Releases may have a "beta" or release candidate ("rc1",\n "rc2", etc) prerelease. For a final release, this function returns\n NULL.

\n", + "comments": "", + "group": "libgit2" + }, + "git_libgit2_features": { + "type": "function", + "file": "git2/common.h", + "line": 180, + "lineto": 180, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "int", + "comment": " A combination of GIT_FEATURE_* values." + }, + "description": "

Query compile time options for libgit2.

\n", + "comments": "
    \n
  • GIT_FEATURE_THREADS Libgit2 was compiled with thread support. Note that thread support is still to be seen as a 'work in progress' - basic object lookups are believed to be threadsafe, but other operations may not be.

  • \n
  • GIT_FEATURE_HTTPS Libgit2 supports the https:// protocol. This requires the openssl library to be found when compiling libgit2.

  • \n
  • GIT_FEATURE_SSH Libgit2 supports the SSH protocol for network operations. This requires the libssh2 library to be found when compiling libgit2

  • \n
  • GIT_FEATURE_NSEC Libgit2 supports the sub-second resolution in file modification times.

  • \n
\n", + "group": "libgit2" + }, + "git_libgit2_opts": { + "type": "function", + "file": "git2/common.h", + "line": 530, + "lineto": 530, + "args": [{ "name": "option", "type": "int", "comment": "Option key" }], + "argline": "int option", + "sig": "int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Set or query a library global option

\n", + "comments": "

Available options:

\n\n
* opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *):\n\n    > Get the maximum mmap window size\n\n* opts(GIT_OPT_SET_MWINDOW_SIZE, size_t):\n\n    > Set the maximum mmap window size\n\n* opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *):\n\n    > Get the maximum memory that will be mapped in total by the library\n\n* opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t):\n\n    > Set the maximum amount of memory that can be mapped at any time       > by the library\n\n* opts(GIT_OPT_GET_MWINDOW_FILE_LIMIT, size_t *):\n\n    > Get the maximum number of files that will be mapped at any time by the        > library\n\n* opts(GIT_OPT_SET_MWINDOW_FILE_LIMIT, size_t):\n\n    > Set the maximum number of files that can be mapped at any time        > by the library. The default (0) is unlimited.\n\n* opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf)\n\n    > Get the search path for a given level of config data.  "level" must       > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`,       > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`.        > The search path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path)\n\n    > Set the search path for a level of config data.  The search path      > applied to shared attributes and ignore files, too.       >       > - `path` lists directories delimited by GIT_PATH_LIST_SEPARATOR.      >   Pass NULL to reset to the default (generally based on environment       >   variables).  Use magic path `$PATH` to include the old value        >   of the path (if you want to prepend or append, for instance).       >       > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`,      >   `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or       >   `GIT_CONFIG_LEVEL_PROGRAMDATA`.\n\n* opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_object_t type, size_t size)\n\n    > Set the maximum data size for the given type of object to be      > considered eligible for caching in memory.  Setting to value to       > zero means that that type of object will not be cached.       > Defaults to 0 for GIT_OBJECT_BLOB (i.e. won't cache blobs) and 4k     > for GIT_OBJECT_COMMIT, GIT_OBJECT_TREE, and GIT_OBJECT_TAG.\n\n* opts(GIT_OPT_SET_CACHE_MAX_SIZE, ssize_t max_storage_bytes)\n\n    > Set the maximum total data size that will be cached in memory     > across all repositories before libgit2 starts evicting objects        > from the cache.  This is a soft limit, in that the library might      > briefly exceed it, but will start aggressively evicting objects       > from cache when that happens.  The default cache size is 256MB.\n\n* opts(GIT_OPT_ENABLE_CACHING, int enabled)\n\n    > Enable or disable caching completely.     >       > Because caches are repository-specific, disabling the cache       > cannot immediately clear all cached objects, but each cache will      > be cleared on the next attempt to update anything in it.\n\n* opts(GIT_OPT_GET_CACHED_MEMORY, ssize_t *current, ssize_t *allowed)\n\n    > Get the current bytes in cache and the maximum that would be      > allowed in the cache.\n\n* opts(GIT_OPT_GET_TEMPLATE_PATH, git_buf *out)\n\n    > Get the default template path.        > The path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_TEMPLATE_PATH, const char *path)\n\n    > Set the default template path.        >       > - `path` directory of template.\n\n* opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, const char *file, const char *path)\n\n    > Set the SSL certificate-authority locations.      >       > - `file` is the location of a file containing several     >   certificates concatenated together.     > - `path` is the location of a directory holding several       >   certificates, one per file.     >       > Either parameter may be `NULL`, but not both.\n\n* opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)\n\n    > Set the value of the comment section of the User-Agent header.        > This can be information about your product and its version.       > By default this is "libgit2" followed by the libgit2 version.     >       > This value will be appended to User-Agent _product_, which        > is typically set to "git/2.0".        >       > Set to the empty string ("") to not send any information in the       > comment section, or set to NULL to restore the default.\n\n* opts(GIT_OPT_GET_USER_AGENT, git_buf *out)\n\n    > Get the value of the User-Agent header.       > The User-Agent is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_USER_AGENT_PRODUCT, const char *user_agent_product)\n\n    > Set the value of the product portion of the User-Agent header.        > This defaults to "git/2.0", for compatibility with other git      > clients. It is recommended to keep this as git/<version> for      > compatibility with servers that do user-agent detection.      >       > Set to the empty string ("") to not send any user-agent string,       > or set to NULL to restore the default.\n\n* opts(GIT_OPT_GET_USER_AGENT_PRODUCT, git_buf *out)\n\n    > Get the value of the User-Agent product header.       > The User-Agent product is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value)\n\n    > Set the share mode used when opening files on Windows.        > For more information, see the documentation for CreateFile.       > The default is: FILE_SHARE_READ | FILE_SHARE_WRITE.  This is      > ignored and unused on non-Windows platforms.\n\n* opts(GIT_OPT_GET_WINDOWS_SHAREMODE, unsigned long *value)\n\n    > Get the share mode used when opening files on Windows.\n\n* opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled)\n\n    > Enable strict input validation when creating new objects      > to ensure that all inputs to the new objects are valid.  For      > example, when this is enabled, the parent(s) and tree inputs      > will be validated when creating a new commit.  This defaults      > to enabled.\n\n* opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, int enabled)\n\n    > Validate the target of a symbolic ref when creating it.  For      > example, `foobar` is not a valid ref, therefore `foobar` is       > not a valid target for a symbolic ref by default, whereas     > `refs/heads/foobar` is.  Disabling this bypasses validation       > so that an arbitrary strings such as `foobar` can be used     > for a symbolic ref target.  This defaults to enabled.\n\n* opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers)\n\n    > Set the SSL ciphers use for HTTPS connections.        >       > - `ciphers` is the list of ciphers that are eanbled.\n\n* opts(GIT_OPT_ENABLE_OFS_DELTA, int enabled)\n\n    > Enable or disable the use of "offset deltas" when creating packfiles,     > and the negotiation of them when talking to a remote server.      > Offset deltas store a delta base location as an offset into the       > packfile from the current location, which provides a shorter encoding     > and thus smaller resultant packfiles.     > Packfiles containing offset deltas can still be read.     > This defaults to enabled.\n\n* opts(GIT_OPT_ENABLE_FSYNC_GITDIR, int enabled)\n\n    > Enable synchronized writes of files in the gitdir using `fsync`       > (or the platform equivalent) to ensure that new object data       > is written to permanent storage, not simply cached.  This     > defaults to disabled.\n\n opts(GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION, int enabled)\n\n    > Enable strict verification of object hashsums when reading        > objects from disk. This may impact performance due to an      > additional checksum calculation on each object. This defaults     > to enabled.\n\n opts(GIT_OPT_SET_ALLOCATOR, git_allocator *allocator)\n\n    > Set the memory allocator to a different memory allocator. This        > allocator will then be used to make all memory allocations for        > libgit2 operations.  If the given `allocator` is NULL, then the       > system default will be restored.\n\n opts(GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, int enabled)\n\n    > Ensure that there are no unsaved changes in the index before      > beginning any operation that reloads the index from disk (eg,     > checkout).  If there are unsaved changes, the instruction will        > fail.  (Using the FORCE flag to checkout will still overwrite     > these changes.)\n\n opts(GIT_OPT_GET_PACK_MAX_OBJECTS, size_t *out)\n\n    > Get the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote. This can be      > used to limit maximum memory usage when fetching from an untrusted        > remote.\n\n opts(GIT_OPT_SET_PACK_MAX_OBJECTS, size_t objects)\n\n    > Set the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote.\n\n opts(GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS, int enabled)       > This will cause .keep file existence checks to be skipped when        > accessing packfiles, which can help performance with remote filesystems.\n\n opts(GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE, int enabled)     > When connecting to a server using NTLM or Negotiate       > authentication, use expect/continue when POSTing data.        > This option is not available on Windows.\n
\n\n

opts(GIT_OPT_SET_ODB_PACKED_PRIORITY, int priority) > Override the default priority of the packed ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_SET_ODB_LOOSE_PRIORITY, int priority) > Override the default priority of the loose ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out) > Returns the list of git extensions that are supported. This > is the list of built-in extensions supported by libgit2 and > custom extensions that have been added with > GIT_OPT_SET_EXTENSIONS. Extensions that have been negated > will not be returned. The returned list should be released > with git_strarray_dispose.

\n\n

opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len) > Set that the given git extensions are supported by the caller. > Extensions supported by libgit2 may be negated by prefixing > them with a !. For example: setting extensions to > { "!noop", "newext" } indicates that the caller does not want > to support repositories with the noop extension but does want > to support repositories with the newext extension.

\n\n

opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) > Gets the owner validation setting for repository > directories.

\n\n

opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) > Set that repository directories should be owned by the current > user. The default is to validate ownership.

\n\n

opts(GIT_OPT_GET_HOMEDIR, git_buf *out) > Gets the current user's home directory, as it will be used > for file lookups. The path is written to the out buffer.

\n\n

opts(GIT_OPT_SET_HOMEDIR, const char *path) > Sets the directory used as the current user's home directory, > for file lookups. > > - path directory of home directory.

\n\n

opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) to attempt connections to > a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) to attempt connections to > a remote server. Set to 0 to use the system default. Note that > this may not be able to be configured longer than the system > default, typically 75 seconds.

\n\n

opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) for reading from and writing > to a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) for reading from and writing > to a remote server. Set to 0 to use the system default.

\n", + "group": "libgit2" + }, + "git_config_entry_free": { + "type": "function", + "file": "git2/config.h", + "line": 113, + "lineto": 113, + "args": [ + { + "name": "entry", + "type": "git_config_entry *", + "comment": "The entry to free." + } + ], + "argline": "git_config_entry *entry", + "sig": "git_config_entry *", + "return": { "type": "void", "comment": null }, + "description": "

Free a config entry

\n", + "comments": "", + "group": "config", + "examples": { + "config.c": [ + "ex/v1.8.4/config.html#git_config_entry_free-1", + "ex/v1.8.4/config.html#git_config_entry_free-2" + ] + } + }, + "git_config_find_global": { + "type": "function", + "file": "git2/config.h", + "line": 165, + "lineto": 165, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Pointer to a user-allocated git_buf in which to store the path" + } + ], + "argline": "git_buf *out", + "sig": "git_buf *", + "return": { + "type": "int", + "comment": " 0 if a global configuration file has been found. Its path will be stored in `out`." + }, + "description": "

Locate the path to the global configuration file

\n", + "comments": "

The user or global configuration file is usually located in $HOME/.gitconfig.

\n\n

This method will try to guess the full path to that file, if the file exists. The returned path may be used on any git_config call to load the global configuration file.

\n\n

This method will not guess the path to the xdg compatible config file (.config/git/config).

\n", + "group": "config" + }, + "git_config_find_xdg": { + "type": "function", + "file": "git2/config.h", + "line": 182, + "lineto": 182, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Pointer to a user-allocated git_buf in which to store the path" + } + ], + "argline": "git_buf *out", + "sig": "git_buf *", + "return": { + "type": "int", + "comment": " 0 if a xdg compatible configuration file has been\n\tfound. Its path will be stored in `out`." + }, + "description": "

Locate the path to the global xdg compatible configuration file

\n", + "comments": "

The xdg compatible configuration file is usually located in $HOME/.config/git/config.

\n\n

This method will try to guess the full path to that file, if the file exists. The returned path may be used on any git_config call to load the xdg compatible configuration file.

\n", + "group": "config" + }, + "git_config_find_system": { + "type": "function", + "file": "git2/config.h", + "line": 194, + "lineto": 194, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Pointer to a user-allocated git_buf in which to store the path" + } + ], + "argline": "git_buf *out", + "sig": "git_buf *", + "return": { + "type": "int", + "comment": " 0 if a system configuration file has been\n\tfound. Its path will be stored in `out`." + }, + "description": "

Locate the path to the system configuration file

\n", + "comments": "

If /etc/gitconfig doesn't exist, it will look for %PROGRAMFILES%.

\n", + "group": "config" + }, + "git_config_find_programdata": { + "type": "function", + "file": "git2/config.h", + "line": 205, + "lineto": 205, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Pointer to a user-allocated git_buf in which to store the path" + } + ], + "argline": "git_buf *out", + "sig": "git_buf *", + "return": { + "type": "int", + "comment": " 0 if a ProgramData configuration file has been\n\tfound. Its path will be stored in `out`." + }, + "description": "

Locate the path to the configuration file in ProgramData

\n", + "comments": "

Look for the file in %PROGRAMDATA% used by portable git.

\n", + "group": "config" + }, + "git_config_open_default": { + "type": "function", + "file": "git2/config.h", + "line": 217, + "lineto": 217, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "Pointer to store the config instance" + } + ], + "argline": "git_config **out", + "sig": "git_config **", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Open the global, XDG and system configuration files

\n", + "comments": "

Utility wrapper that finds the global, XDG and system configuration files and opens them into a single prioritized config object that can be used when accessing default config data outside a repository.

\n", + "group": "config" + }, + "git_config_new": { + "type": "function", + "file": "git2/config.h", + "line": 228, + "lineto": 228, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "pointer to the new configuration" + } + ], + "argline": "git_config **out", + "sig": "git_config **", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Allocate a new configuration object

\n", + "comments": "

This object is empty, so you have to add a file to it before you can do anything with it.

\n", + "group": "config" + }, + "git_config_add_file_ondisk": { + "type": "function", + "file": "git2/config.h", + "line": 257, + "lineto": 262, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration to add the file to" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to the configuration file to add" + }, + { + "name": "level", + "type": "git_config_level_t", + "comment": "the priority level of the backend" + }, + { + "name": "repo", + "type": "const git_repository *", + "comment": "optional repository to allow parsing of\n conditional includes" + }, + { + "name": "force", + "type": "int", + "comment": "replace config file at the given priority level" + } + ], + "argline": "git_config *cfg, const char *path, git_config_level_t level, const git_repository *repo, int force", + "sig": "git_config *::const char *::git_config_level_t::const git_repository *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS when adding more than one file\n for a given priority level (and force_replace set to 0),\n GIT_ENOTFOUND when the file doesn't exist or error code" + }, + "description": "

Add an on-disk config file instance to an existing config

\n", + "comments": "

The on-disk file pointed at by path will be opened and parsed; it's expected to be a native Git config file following the default Git config syntax (see man git-config).

\n\n

If the file does not exist, the file will still be added and it will be created the first time we write to it.

\n\n

Note that the configuration object will free the file automatically.

\n\n

Further queries on this config object will access each of the config file instances in order (instances with a higher priority level will be accessed first).

\n", + "group": "config" + }, + "git_config_open_ondisk": { + "type": "function", + "file": "git2/config.h", + "line": 276, + "lineto": 276, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "The configuration instance to create" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to the on-disk file to open" + } + ], + "argline": "git_config **out, const char *path", + "sig": "git_config **::const char *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Create a new config instance containing a single on-disk file

\n", + "comments": "

This method is a simple utility wrapper for the following sequence of calls: - git_config_new - git_config_add_file_ondisk

\n", + "group": "config", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_config_open_ondisk-26"] + } + }, + "git_config_open_level": { + "type": "function", + "file": "git2/config.h", + "line": 294, + "lineto": 297, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "The configuration instance to create" + }, + { + "name": "parent", + "type": "const git_config *", + "comment": "Multi-level config to search for the given level" + }, + { + "name": "level", + "type": "git_config_level_t", + "comment": "Configuration level to search for" + } + ], + "argline": "git_config **out, const git_config *parent, git_config_level_t level", + "sig": "git_config **::const git_config *::git_config_level_t", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the passed level cannot be found in the\n multi-level parent config, or an error code" + }, + "description": "

Build a single-level focused config object from a multi-level one.

\n", + "comments": "

The returned config object can be used to perform get/set/delete operations on a single specific level.

\n\n

Getting several times the same level from the same parent multi-level config will return different config instances, but containing the same config_file instance.

\n", + "group": "config" + }, + "git_config_open_global": { + "type": "function", + "file": "git2/config.h", + "line": 312, + "lineto": 312, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "pointer in which to store the config object" + }, + { + "name": "config", + "type": "git_config *", + "comment": "the config object in which to look" + } + ], + "argline": "git_config **out, git_config *config", + "sig": "git_config **::git_config *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Open the global/XDG configuration file according to git's rules

\n", + "comments": "

Git allows you to store your global configuration at $HOME/.gitconfig or $XDG_CONFIG_HOME/git/config. For backwards compatibility, the XDG file shouldn't be used unless the use has created it explicitly. With this function you'll open the correct one to write to.

\n", + "group": "config" + }, + "git_config_snapshot": { + "type": "function", + "file": "git2/config.h", + "line": 333, + "lineto": 333, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "pointer in which to store the snapshot config object" + }, + { + "name": "config", + "type": "git_config *", + "comment": "configuration to snapshot" + } + ], + "argline": "git_config **out, git_config *config", + "sig": "git_config **::git_config *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a snapshot of the configuration

\n", + "comments": "

Create a snapshot of the current state of a configuration, which allows you to look into a consistent view of the configuration for looking up complex values (e.g. a remote, submodule).

\n\n

The string returned when querying such a config object is valid until it is freed.

\n", + "group": "config" + }, + "git_config_free": { + "type": "function", + "file": "git2/config.h", + "line": 340, + "lineto": 340, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration to free" + } + ], + "argline": "git_config *cfg", + "sig": "git_config *", + "return": { "type": "void", "comment": null }, + "description": "

Free the configuration and its associated memory and files

\n", + "comments": "", + "group": "config", + "examples": { + "config.c": ["ex/v1.8.4/config.html#git_config_free-3"], + "general.c": [ + "ex/v1.8.4/general.html#git_config_free-27", + "ex/v1.8.4/general.html#git_config_free-28" + ] + } + }, + "git_config_get_entry": { + "type": "function", + "file": "git2/config.h", + "line": 352, + "lineto": 355, + "args": [ + { + "name": "out", + "type": "git_config_entry **", + "comment": "pointer to the variable git_config_entry" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "git_config_entry **out, const git_config *cfg, const char *name", + "sig": "git_config_entry **::const git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the git_config_entry of a config variable.

\n", + "comments": "

Free the git_config_entry after use with git_config_entry_free().

\n", + "group": "config", + "examples": { + "config.c": ["ex/v1.8.4/config.html#git_config_get_entry-4"] + } + }, + "git_config_get_int32": { + "type": "function", + "file": "git2/config.h", + "line": 369, + "lineto": 369, + "args": [ + { + "name": "out", + "type": "int32_t *", + "comment": "pointer to the variable where the value should be stored" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "int32_t *out, const git_config *cfg, const char *name", + "sig": "int32_t *::const git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the value of an integer config variable.

\n", + "comments": "

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config", + "examples": { + "general.c": [ + "ex/v1.8.4/general.html#git_config_get_int32-29", + "ex/v1.8.4/general.html#git_config_get_int32-30" + ] + } + }, + "git_config_get_int64": { + "type": "function", + "file": "git2/config.h", + "line": 383, + "lineto": 383, + "args": [ + { + "name": "out", + "type": "int64_t *", + "comment": "pointer to the variable where the value should be stored" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "int64_t *out, const git_config *cfg, const char *name", + "sig": "int64_t *::const git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the value of a long integer config variable.

\n", + "comments": "

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config" + }, + "git_config_get_bool": { + "type": "function", + "file": "git2/config.h", + "line": 400, + "lineto": 400, + "args": [ + { + "name": "out", + "type": "int *", + "comment": "pointer to the variable where the value should be stored" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "int *out, const git_config *cfg, const char *name", + "sig": "int *::const git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the value of a boolean config variable.

\n", + "comments": "

This function uses the usual C convention of 0 being false and anything else true.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config" + }, + "git_config_get_path": { + "type": "function", + "file": "git2/config.h", + "line": 418, + "lineto": 418, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer in which to store the result" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "git_buf *out, const git_config *cfg, const char *name", + "sig": "git_buf *::const git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the value of a path config variable.

\n", + "comments": "

A leading '~' will be expanded to the global search path (which defaults to the user's home directory but can be overridden via git_libgit2_opts().

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config" + }, + "git_config_get_string": { + "type": "function", + "file": "git2/config.h", + "line": 436, + "lineto": 436, + "args": [ + { + "name": "out", + "type": "const char **", + "comment": "pointer to the string" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "const char **out, const git_config *cfg, const char *name", + "sig": "const char **::const git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the value of a string config variable.

\n", + "comments": "

This function can only be used on snapshot config objects. The string is owned by the config and should not be freed by the user. The pointer will be valid until the config is freed.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config", + "examples": { + "general.c": [ + "ex/v1.8.4/general.html#git_config_get_string-31", + "ex/v1.8.4/general.html#git_config_get_string-32" + ] + } + }, + "git_config_get_string_buf": { + "type": "function", + "file": "git2/config.h", + "line": 452, + "lineto": 452, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer in which to store the string" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + } + ], + "argline": "git_buf *out, const git_config *cfg, const char *name", + "sig": "git_buf *::const git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the value of a string config variable.

\n", + "comments": "

The value of the config will be copied into the buffer.

\n\n

All config files will be looked into, in the order of their defined level. A higher level means a higher priority. The first occurrence of the variable will be returned here.

\n", + "group": "config" + }, + "git_config_get_multivar_foreach": { + "type": "function", + "file": "git2/config.h", + "line": 471, + "lineto": 471, + "args": [ + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to filter which variables we're\n interested in. Use NULL to indicate all" + }, + { + "name": "callback", + "type": "git_config_foreach_cb", + "comment": "the function to be called on each value of the variable" + }, + { + "name": "payload", + "type": "void *", + "comment": "opaque pointer to pass to the callback" + } + ], + "argline": "const git_config *cfg, const char *name, const char *regexp, git_config_foreach_cb callback, void *payload", + "sig": "const git_config *::const char *::const char *::git_config_foreach_cb::void *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Get each value of a multivar in a foreach callback

\n", + "comments": "

The callback will be called on each variable found

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", + "group": "config" + }, + "git_config_multivar_iterator_new": { + "type": "function", + "file": "git2/config.h", + "line": 487, + "lineto": 487, + "args": [ + { + "name": "out", + "type": "git_config_iterator **", + "comment": "pointer to store the iterator" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to filter which variables we're\n interested in. Use NULL to indicate all" + } + ], + "argline": "git_config_iterator **out, const git_config *cfg, const char *name, const char *regexp", + "sig": "git_config_iterator **::const git_config *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Get each value of a multivar

\n", + "comments": "

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", + "group": "config" + }, + "git_config_next": { + "type": "function", + "file": "git2/config.h", + "line": 499, + "lineto": 499, + "args": [ + { + "name": "entry", + "type": "git_config_entry **", + "comment": "pointer to store the entry" + }, + { + "name": "iter", + "type": "git_config_iterator *", + "comment": "the iterator" + } + ], + "argline": "git_config_entry **entry, git_config_iterator *iter", + "sig": "git_config_entry **::git_config_iterator *", + "return": { + "type": "int", + "comment": " 0 or an error code. GIT_ITEROVER if the iteration has completed" + }, + "description": "

Return the current entry and advance the iterator

\n", + "comments": "

The pointers returned by this function are valid until the next call to git_config_next or until the iterator is freed.

\n", + "group": "config" + }, + "git_config_iterator_free": { + "type": "function", + "file": "git2/config.h", + "line": 506, + "lineto": 506, + "args": [ + { + "name": "iter", + "type": "git_config_iterator *", + "comment": "the iterator to free" + } + ], + "argline": "git_config_iterator *iter", + "sig": "git_config_iterator *", + "return": { "type": "void", "comment": null }, + "description": "

Free a config iterator

\n", + "comments": "", + "group": "config" + }, + "git_config_set_int32": { + "type": "function", + "file": "git2/config.h", + "line": 517, + "lineto": 517, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "value", + "type": "int32_t", + "comment": "Integer value for the variable" + } + ], + "argline": "git_config *cfg, const char *name, int32_t value", + "sig": "git_config *::const char *::int32_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Set the value of an integer config variable in the config file\n with the highest level (usually the local one).

\n", + "comments": "", + "group": "config" + }, + "git_config_set_int64": { + "type": "function", + "file": "git2/config.h", + "line": 528, + "lineto": 528, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "value", + "type": "int64_t", + "comment": "Long integer value for the variable" + } + ], + "argline": "git_config *cfg, const char *name, int64_t value", + "sig": "git_config *::const char *::int64_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Set the value of a long integer config variable in the config file\n with the highest level (usually the local one).

\n", + "comments": "", + "group": "config" + }, + "git_config_set_bool": { + "type": "function", + "file": "git2/config.h", + "line": 539, + "lineto": 539, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { "name": "value", "type": "int", "comment": "the value to store" } + ], + "argline": "git_config *cfg, const char *name, int value", + "sig": "git_config *::const char *::int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Set the value of a boolean config variable in the config file\n with the highest level (usually the local one).

\n", + "comments": "", + "group": "config" + }, + "git_config_set_string": { + "type": "function", + "file": "git2/config.h", + "line": 553, + "lineto": 553, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "value", + "type": "const char *", + "comment": "the string to store." + } + ], + "argline": "git_config *cfg, const char *name, const char *value", + "sig": "git_config *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Set the value of a string config variable in the config file\n with the highest level (usually the local one).

\n", + "comments": "

A copy of the string is made and the user is free to use it afterwards.

\n", + "group": "config", + "examples": { + "config.c": ["ex/v1.8.4/config.html#git_config_set_string-5"] + } + }, + "git_config_set_multivar": { + "type": "function", + "file": "git2/config.h", + "line": 566, + "lineto": 566, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variable" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "a regular expression to indicate which values to replace" + }, + { "name": "value", "type": "const char *", "comment": "the new value." } + ], + "argline": "git_config *cfg, const char *name, const char *regexp, const char *value", + "sig": "git_config *::const char *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Set a multivar in the local config file.

\n", + "comments": "

The regular expression is applied case-sensitively on the value.

\n", + "group": "config" + }, + "git_config_delete_entry": { + "type": "function", + "file": "git2/config.h", + "line": 576, + "lineto": 576, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable to delete" + } + ], + "argline": "git_config *cfg, const char *name", + "sig": "git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Delete a config variable from the config file\n with the highest level (usually the local one).

\n", + "comments": "", + "group": "config" + }, + "git_config_delete_multivar": { + "type": "function", + "file": "git2/config.h", + "line": 589, + "lineto": 589, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "where to look for the variables" + }, + { + "name": "name", + "type": "const char *", + "comment": "the variable's name" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "a regular expression to indicate which values to delete" + } + ], + "argline": "git_config *cfg, const char *name, const char *regexp", + "sig": "git_config *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Deletes one or several entries from a multivar in the local config file.

\n", + "comments": "

The regular expression is applied case-sensitively on the value.

\n", + "group": "config" + }, + "git_config_foreach": { + "type": "function", + "file": "git2/config.h", + "line": 607, + "lineto": 610, + "args": [ + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to get the variables from" + }, + { + "name": "callback", + "type": "git_config_foreach_cb", + "comment": "the function to call on each variable" + }, + { + "name": "payload", + "type": "void *", + "comment": "the data to pass to the callback" + } + ], + "argline": "const git_config *cfg, git_config_foreach_cb callback, void *payload", + "sig": "const git_config *::git_config_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Perform an operation on each config variable.

\n", + "comments": "

The callback receives the normalized name and value of each variable in the config backend, and the data pointer passed to this function. If the callback returns a non-zero value, the function stops iterating and returns that value to the caller.

\n\n

The pointers passed to the callback are only valid as long as the iteration is ongoing.

\n", + "group": "config" + }, + "git_config_iterator_new": { + "type": "function", + "file": "git2/config.h", + "line": 622, + "lineto": 622, + "args": [ + { + "name": "out", + "type": "git_config_iterator **", + "comment": "pointer to store the iterator" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to get the variables from" + } + ], + "argline": "git_config_iterator **out, const git_config *cfg", + "sig": "git_config_iterator **::const git_config *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Iterate over all the config variables

\n", + "comments": "

Use git_config_next to advance the iteration and git_config_iterator_free when done.

\n", + "group": "config" + }, + "git_config_iterator_glob_new": { + "type": "function", + "file": "git2/config.h", + "line": 639, + "lineto": 639, + "args": [ + { + "name": "out", + "type": "git_config_iterator **", + "comment": "pointer to store the iterator" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to ge the variables from" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to match the names" + } + ], + "argline": "git_config_iterator **out, const git_config *cfg, const char *regexp", + "sig": "git_config_iterator **::const git_config *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Iterate over all the config variables whose name matches a pattern

\n", + "comments": "

Use git_config_next to advance the iteration and git_config_iterator_free when done.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", + "group": "config" + }, + "git_config_foreach_match": { + "type": "function", + "file": "git2/config.h", + "line": 661, + "lineto": 665, + "args": [ + { + "name": "cfg", + "type": "const git_config *", + "comment": "where to get the variables from" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to match against config names" + }, + { + "name": "callback", + "type": "git_config_foreach_cb", + "comment": "the function to call on each variable" + }, + { + "name": "payload", + "type": "void *", + "comment": "the data to pass to the callback" + } + ], + "argline": "const git_config *cfg, const char *regexp, git_config_foreach_cb callback, void *payload", + "sig": "const git_config *::const char *::git_config_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 or the return value of the callback which didn't return 0" + }, + "description": "

Perform an operation on each config variable matching a regular expression.

\n", + "comments": "

This behaves like git_config_foreach with an additional filter of a regular expression that filters which config keys are passed to the callback.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the case-insensitive parts are lower-case.

\n", + "group": "config" + }, + "git_config_get_mapped": { + "type": "function", + "file": "git2/config.h", + "line": 701, + "lineto": 706, + "args": [ + { + "name": "out", + "type": "int *", + "comment": "place to store the result of the mapping" + }, + { + "name": "cfg", + "type": "const git_config *", + "comment": "config file to get the variables from" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the config variable to lookup" + }, + { + "name": "maps", + "type": "const git_configmap *", + "comment": "array of `git_configmap` objects specifying the possible mappings" + }, + { + "name": "map_n", + "type": "size_t", + "comment": "number of mapping objects in `maps`" + } + ], + "argline": "int *out, const git_config *cfg, const char *name, const git_configmap *maps, size_t map_n", + "sig": "int *::const git_config *::const char *::const git_configmap *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Query the value of a config variable and return it mapped to\n an integer constant.

\n", + "comments": "

This is a helper method to easily map different possible values to a variable to integer constants that easily identify them.

\n\n

A mapping array looks as follows:

\n\n
git_configmap autocrlf_mapping[] = {        {GIT_CVAR_FALSE, NULL, GIT_AUTO_CRLF_FALSE},        {GIT_CVAR_TRUE, NULL, GIT_AUTO_CRLF_TRUE},      {GIT_CVAR_STRING, "input", GIT_AUTO_CRLF_INPUT},        {GIT_CVAR_STRING, "default", GIT_AUTO_CRLF_DEFAULT}};\n
\n\n

On any "false" value for the variable (e.g. "false", "FALSE", "no"), the mapping will store GIT_AUTO_CRLF_FALSE in the out parameter.

\n\n

The same thing applies for any "true" value such as "true", "yes" or "1", storing the GIT_AUTO_CRLF_TRUE variable.

\n\n

Otherwise, if the value matches the string "input" (with case insensitive comparison), the given constant will be stored in out, and likewise for "default".

\n\n

If not a single match can be made to store in out, an error code will be returned.

\n", + "group": "config" + }, + "git_config_lookup_map_value": { + "type": "function", + "file": "git2/config.h", + "line": 717, + "lineto": 721, + "args": [ + { + "name": "out", + "type": "int *", + "comment": "place to store the result of the parsing" + }, + { + "name": "maps", + "type": "const git_configmap *", + "comment": "array of `git_configmap` objects specifying the possible mappings" + }, + { + "name": "map_n", + "type": "size_t", + "comment": "number of mapping objects in `maps`" + }, + { "name": "value", "type": "const char *", "comment": "value to parse" } + ], + "argline": "int *out, const git_configmap *maps, size_t map_n, const char *value", + "sig": "int *::const git_configmap *::size_t::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Maps a string value to an integer constant

\n", + "comments": "", + "group": "config" + }, + "git_config_parse_bool": { + "type": "function", + "file": "git2/config.h", + "line": 734, + "lineto": 734, + "args": [ + { + "name": "out", + "type": "int *", + "comment": "place to store the result of the parsing" + }, + { "name": "value", "type": "const char *", "comment": "value to parse" } + ], + "argline": "int *out, const char *value", + "sig": "int *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Parse a string value as a bool.

\n", + "comments": "

Valid values for true are: 'true', 'yes', 'on', 1 or any number different from 0 Valid values for false are: 'false', 'no', 'off', 0

\n", + "group": "config" + }, + "git_config_parse_int32": { + "type": "function", + "file": "git2/config.h", + "line": 747, + "lineto": 747, + "args": [ + { + "name": "out", + "type": "int32_t *", + "comment": "place to store the result of the parsing" + }, + { "name": "value", "type": "const char *", "comment": "value to parse" } + ], + "argline": "int32_t *out, const char *value", + "sig": "int32_t *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Parse a string value as an int32.

\n", + "comments": "

An optional value suffix of 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output.

\n", + "group": "config" + }, + "git_config_parse_int64": { + "type": "function", + "file": "git2/config.h", + "line": 760, + "lineto": 760, + "args": [ + { + "name": "out", + "type": "int64_t *", + "comment": "place to store the result of the parsing" + }, + { "name": "value", "type": "const char *", "comment": "value to parse" } + ], + "argline": "int64_t *out, const char *value", + "sig": "int64_t *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Parse a string value as an int64.

\n", + "comments": "

An optional value suffix of 'k', 'm', or 'g' will cause the value to be multiplied by 1024, 1048576, or 1073741824 prior to output.

\n", + "group": "config" + }, + "git_config_parse_path": { + "type": "function", + "file": "git2/config.h", + "line": 776, + "lineto": 776, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "placae to store the result of parsing" + }, + { + "name": "value", + "type": "const char *", + "comment": "the path to evaluate" + } + ], + "argline": "git_buf *out, const char *value", + "sig": "git_buf *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Parse a string value as a path.

\n", + "comments": "

A leading '~' will be expanded to the global search path (which defaults to the user's home directory but can be overridden via git_libgit2_opts().

\n\n

If the value does not begin with a tilde, the input will be returned.

\n", + "group": "config" + }, + "git_config_backend_foreach_match": { + "type": "function", + "file": "git2/config.h", + "line": 795, + "lineto": 799, + "args": [ + { + "name": "backend", + "type": "git_config_backend *", + "comment": "where to get the variables from" + }, + { + "name": "regexp", + "type": "const char *", + "comment": "regular expression to match against config names (can be NULL)" + }, + { + "name": "callback", + "type": "git_config_foreach_cb", + "comment": "the function to call on each variable" + }, + { + "name": "payload", + "type": "void *", + "comment": "the data to pass to the callback" + } + ], + "argline": "git_config_backend *backend, const char *regexp, git_config_foreach_cb callback, void *payload", + "sig": "git_config_backend *::const char *::git_config_foreach_cb::void *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Perform an operation on each config variable in a given config backend,\n matching a regular expression.

\n", + "comments": "

This behaves like git_config_foreach_match except that only config entries from the given backend entry are enumerated.

\n\n

The regular expression is applied case-sensitively on the normalized form of the variable name: the section and variable parts are lower-cased. The subsection is left unchanged.

\n", + "group": "config" + }, + "git_config_lock": { + "type": "function", + "file": "git2/config.h", + "line": 818, + "lineto": 818, + "args": [ + { + "name": "tx", + "type": "git_transaction **", + "comment": "the resulting transaction, use this to commit or undo the\n changes" + }, + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration in which to lock" + } + ], + "argline": "git_transaction **tx, git_config *cfg", + "sig": "git_transaction **::git_config *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lock the backend with the highest priority

\n", + "comments": "

Locking disallows anybody else from writing to that backend. Any updates made after locking will not be visible to a reader until the file is unlocked.

\n\n

You can apply the changes by calling git_transaction_commit() before freeing the transaction. Either of these actions will unlock the config.

\n", + "group": "config" + }, + "git_credential_free": { + "type": "function", + "file": "git2/credential.h", + "line": 146, + "lineto": 146, + "args": [ + { + "name": "cred", + "type": "git_credential *", + "comment": "the object to free" + } + ], + "argline": "git_credential *cred", + "sig": "git_credential *", + "return": { "type": "void", "comment": null }, + "description": "

Free a credential.

\n", + "comments": "

This is only necessary if you own the object; that is, if you are a transport.

\n", + "group": "credential" + }, + "git_credential_has_username": { + "type": "function", + "file": "git2/credential.h", + "line": 154, + "lineto": 154, + "args": [ + { + "name": "cred", + "type": "git_credential *", + "comment": "object to check" + } + ], + "argline": "git_credential *cred", + "sig": "git_credential *", + "return": { + "type": "int", + "comment": " 1 if the credential object has non-NULL username, 0 otherwise" + }, + "description": "

Check whether a credential object contains username information.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_get_username": { + "type": "function", + "file": "git2/credential.h", + "line": 162, + "lineto": 162, + "args": [ + { + "name": "cred", + "type": "git_credential *", + "comment": "object to check" + } + ], + "argline": "git_credential *cred", + "sig": "git_credential *", + "return": { + "type": "const char *", + "comment": " the credential username, or NULL if not applicable" + }, + "description": "

Return the username associated with a credential object.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_userpass_plaintext_new": { + "type": "function", + "file": "git2/credential.h", + "line": 173, + "lineto": 176, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "The username of the credential." + }, + { + "name": "password", + "type": "const char *", + "comment": "The password of the credential." + } + ], + "argline": "git_credential **out, const char *username, const char *password", + "sig": "git_credential **::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a new plain-text username and password credential object.\n The supplied credential parameter will be internally duplicated.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_default_new": { + "type": "function", + "file": "git2/credential.h", + "line": 185, + "lineto": 185, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + } + ], + "argline": "git_credential **out", + "sig": "git_credential **", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a "default" credential usable for Negotiate mechanisms like NTLM\n or Kerberos authentication.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_username_new": { + "type": "function", + "file": "git2/credential.h", + "line": 197, + "lineto": 197, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "The username to authenticate with" + } + ], + "argline": "git_credential **out, const char *username", + "sig": "git_credential **::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a credential to specify a username.

\n", + "comments": "

This is used with ssh authentication to query for the username if none is specified in the url.

\n", + "group": "credential" + }, + "git_credential_ssh_key_new": { + "type": "function", + "file": "git2/credential.h", + "line": 210, + "lineto": 215, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "username to use to authenticate" + }, + { + "name": "publickey", + "type": "const char *", + "comment": "The path to the public key of the credential." + }, + { + "name": "privatekey", + "type": "const char *", + "comment": "The path to the private key of the credential." + }, + { + "name": "passphrase", + "type": "const char *", + "comment": "The passphrase of the credential." + } + ], + "argline": "git_credential **out, const char *username, const char *publickey, const char *privatekey, const char *passphrase", + "sig": "git_credential **::const char *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a new passphrase-protected ssh key credential object.\n The supplied credential parameter will be internally duplicated.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_ssh_key_memory_new": { + "type": "function", + "file": "git2/credential.h", + "line": 227, + "lineto": 232, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "username to use to authenticate." + }, + { + "name": "publickey", + "type": "const char *", + "comment": "The public key of the credential." + }, + { + "name": "privatekey", + "type": "const char *", + "comment": "The private key of the credential." + }, + { + "name": "passphrase", + "type": "const char *", + "comment": "The passphrase of the credential." + } + ], + "argline": "git_credential **out, const char *username, const char *publickey, const char *privatekey, const char *passphrase", + "sig": "git_credential **::const char *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a new ssh key credential object reading the keys from memory.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_ssh_interactive_new": { + "type": "function", + "file": "git2/credential.h", + "line": 263, + "lineto": 267, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "Username to use to authenticate." + }, + { + "name": "prompt_callback", + "type": "git_credential_ssh_interactive_cb", + "comment": "The callback method used for prompts." + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback." + } + ], + "argline": "git_credential **out, const char *username, git_credential_ssh_interactive_cb prompt_callback, void *payload", + "sig": "git_credential **::const char *::git_credential_ssh_interactive_cb::void *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure." + }, + "description": "

Create a new ssh keyboard-interactive based credential object.\n The supplied credential parameter will be internally duplicated.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_ssh_key_from_agent": { + "type": "function", + "file": "git2/credential.h", + "line": 277, + "lineto": 279, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "username to use to authenticate" + } + ], + "argline": "git_credential **out, const char *username", + "sig": "git_credential **::const char *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create a new ssh key credential object used for querying an ssh-agent.\n The supplied credential parameter will be internally duplicated.

\n", + "comments": "", + "group": "credential" + }, + "git_credential_ssh_custom_new": { + "type": "function", + "file": "git2/credential.h", + "line": 305, + "lineto": 311, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "username", + "type": "const char *", + "comment": "username to use to authenticate" + }, + { + "name": "publickey", + "type": "const char *", + "comment": "The bytes of the public key." + }, + { + "name": "publickey_len", + "type": "size_t", + "comment": "The length of the public key in bytes." + }, + { + "name": "sign_callback", + "type": "git_credential_sign_cb", + "comment": "The callback method to sign the data during the challenge." + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback." + } + ], + "argline": "git_credential **out, const char *username, const char *publickey, size_t publickey_len, git_credential_sign_cb sign_callback, void *payload", + "sig": "git_credential **::const char *::const char *::size_t::git_credential_sign_cb::void *", + "return": { + "type": "int", + "comment": " 0 for success or an error code for failure" + }, + "description": "

Create an ssh key credential with a custom signing function.

\n", + "comments": "

This lets you use your own function to sign the challenge.

\n\n

This function and its credential type is provided for completeness and wraps libssh2_userauth_publickey(), which is undocumented.

\n\n

The supplied credential parameter will be internally duplicated.

\n", + "group": "credential" + }, + "git_credential_userpass": { + "type": "function", + "file": "git2/credential_helpers.h", + "line": 44, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "url", + "type": "const char *", + "comment": "The resource for which we are demanding a credential." + }, + { + "name": "user_from_url", + "type": "const char *", + "comment": "The username that was embedded in a \"user\n@\nhost\"\n remote url, or NULL if not included." + }, + { + "name": "allowed_types", + "type": "unsigned int", + "comment": "A bitmask stating which credential types are OK to return." + }, + { + "name": "payload", + "type": "void *", + "comment": "The payload provided when specifying this callback. (This is\n interpreted as a `git_credential_userpass_payload*`.)" + } + ], + "argline": "git_credential **out, const char *url, const char *user_from_url, unsigned int allowed_types, void *payload", + "sig": "git_credential **::const char *::const char *::unsigned int::void *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Stock callback usable as a git_credential_acquire_cb. This calls\n git_cred_userpass_plaintext_new unless the protocol has not specified\n GIT_CREDENTIAL_USERPASS_PLAINTEXT as an allowed type.

\n", + "comments": "", + "group": "credential" + }, + "git_blob_filtered_content": { + "type": "function", + "file": "git2/deprecated.h", + "line": 115, + "lineto": 119, + "args": [ + { "name": "out", "type": "git_buf *", "comment": null }, + { "name": "blob", "type": "git_blob *", "comment": null }, + { "name": "as_path", "type": "const char *", "comment": null }, + { "name": "check_for_binary_data", "type": "int", "comment": null } + ], + "argline": "git_buf *out, git_blob *blob, const char *as_path, int check_for_binary_data", + "sig": "git_buf *::git_blob *::const char *::int", + "return": { "type": "int", "comment": null }, + "description": "

Deprecated in favor of git_blob_filter.

\n", + "comments": "", + "group": "blob" + }, + "git_filter_list_stream_data": { + "type": "function", + "file": "git2/deprecated.h", + "line": 139, + "lineto": 142, + "args": [ + { "name": "filters", "type": "git_filter_list *", "comment": null }, + { "name": "data", "type": "git_buf *", "comment": null }, + { "name": "target", "type": "git_writestream *", "comment": null } + ], + "argline": "git_filter_list *filters, git_buf *data, git_writestream *target", + "sig": "git_filter_list *::git_buf *::git_writestream *", + "return": { "type": "int", "comment": null }, + "description": "

Deprecated in favor of git_filter_list_stream_buffer.

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_apply_to_data": { + "type": "function", + "file": "git2/deprecated.h", + "line": 149, + "lineto": 152, + "args": [ + { "name": "out", "type": "git_buf *", "comment": null }, + { "name": "filters", "type": "git_filter_list *", "comment": null }, + { "name": "in", "type": "git_buf *", "comment": null } + ], + "argline": "git_buf *out, git_filter_list *filters, git_buf *in", + "sig": "git_buf *::git_filter_list *::git_buf *", + "return": { "type": "int", "comment": null }, + "description": "

Deprecated in favor of git_filter_list_apply_to_buffer.

\n", + "comments": "", + "group": "filter" + }, + "git_treebuilder_write_with_buffer": { + "type": "function", + "file": "git2/deprecated.h", + "line": 178, + "lineto": 179, + "args": [ + { "name": "oid", "type": "git_oid *", "comment": null }, + { "name": "bld", "type": "git_treebuilder *", "comment": null }, + { "name": "tree", "type": "git_buf *", "comment": null } + ], + "argline": "git_oid *oid, git_treebuilder *bld, git_buf *tree", + "sig": "git_oid *::git_treebuilder *::git_buf *", + "return": { "type": "int", "comment": null }, + "description": "

Write the contents of the tree builder as a tree object.\n This is an alias of git_treebuilder_write and is preserved\n for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "treebuilder" + }, + "git_buf_grow": { + "type": "function", + "file": "git2/deprecated.h", + "line": 220, + "lineto": 220, + "args": [ + { + "name": "buffer", + "type": "git_buf *", + "comment": "The buffer to be resized; may or may not be allocated yet" + }, + { + "name": "target_size", + "type": "size_t", + "comment": "The desired available size" + } + ], + "argline": "git_buf *buffer, size_t target_size", + "sig": "git_buf *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, -1 on allocation failure" + }, + "description": "

Resize the buffer allocation to make more space.

\n", + "comments": "

This will attempt to grow the buffer to accommodate the target size.

\n\n

If the buffer refers to memory that was not allocated by libgit2 (i.e. the asize field is zero), then ptr will be replaced with a newly allocated block of data. Be careful so that memory allocated by the caller is not lost. As a special variant, if you pass target_size as 0 and the memory is not allocated by libgit2, this will allocate a new buffer of size size and copy the external data into it.

\n\n

Currently, this will never shrink a buffer, only expand it.

\n\n

If the allocation fails, this will return an error and the buffer will be marked as invalid for future operations, invaliding the contents.

\n", + "group": "buf" + }, + "git_buf_set": { + "type": "function", + "file": "git2/deprecated.h", + "line": 230, + "lineto": 231, + "args": [ + { + "name": "buffer", + "type": "git_buf *", + "comment": "The buffer to set" + }, + { + "name": "data", + "type": "const void *", + "comment": "The data to copy into the buffer" + }, + { + "name": "datalen", + "type": "size_t", + "comment": "The length of the data to copy into the buffer" + } + ], + "argline": "git_buf *buffer, const void *data, size_t datalen", + "sig": "git_buf *::const void *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, -1 on allocation failure" + }, + "description": "

Set buffer to a copy of some raw data.

\n", + "comments": "", + "group": "buf" + }, + "git_buf_is_binary": { + "type": "function", + "file": "git2/deprecated.h", + "line": 239, + "lineto": 239, + "args": [ + { + "name": "buf", + "type": "const git_buf *", + "comment": "Buffer to check" + } + ], + "argline": "const git_buf *buf", + "sig": "const git_buf *", + "return": { + "type": "int", + "comment": " 1 if buffer looks like non-text data" + }, + "description": "

Check quickly if buffer looks like it contains binary data

\n", + "comments": "", + "group": "buf" + }, + "git_buf_contains_nul": { + "type": "function", + "file": "git2/deprecated.h", + "line": 247, + "lineto": 247, + "args": [ + { + "name": "buf", + "type": "const git_buf *", + "comment": "Buffer to check" + } + ], + "argline": "const git_buf *buf", + "sig": "const git_buf *", + "return": { + "type": "int", + "comment": " 1 if buffer contains a NUL byte" + }, + "description": "

Check quickly if buffer contains a NUL byte

\n", + "comments": "", + "group": "buf" + }, + "git_buf_free": { + "type": "function", + "file": "git2/deprecated.h", + "line": 259, + "lineto": 259, + "args": [{ "name": "buffer", "type": "git_buf *", "comment": null }], + "argline": "git_buf *buffer", + "sig": "git_buf *", + "return": { "type": "void", "comment": null }, + "description": "

Free the memory referred to by the git_buf. This is an alias of\n git_buf_dispose and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "buf" + }, + "git_diff_format_email": { + "type": "function", + "file": "git2/deprecated.h", + "line": 357, + "lineto": 360, + "args": [ + { "name": "out", "type": "git_buf *", "comment": null }, + { "name": "diff", "type": "git_diff *", "comment": null }, + { + "name": "opts", + "type": "const git_diff_format_email_options *", + "comment": null + } + ], + "argline": "git_buf *out, git_diff *diff, const git_diff_format_email_options *opts", + "sig": "git_buf *::git_diff *::const git_diff_format_email_options *", + "return": { "type": "int", "comment": null }, + "description": "

Create an e-mail ready patch from a diff.

\n", + "comments": "", + "group": "diff" + }, + "git_diff_commit_as_email": { + "type": "function", + "file": "git2/deprecated.h", + "line": 368, + "lineto": 375, + "args": [ + { "name": "out", "type": "git_buf *", "comment": null }, + { "name": "repo", "type": "git_repository *", "comment": null }, + { "name": "commit", "type": "git_commit *", "comment": null }, + { "name": "patch_no", "type": "size_t", "comment": null }, + { "name": "total_patches", "type": "size_t", "comment": null }, + { "name": "flags", "type": "uint32_t", "comment": null }, + { + "name": "diff_opts", + "type": "const git_diff_options *", + "comment": null + } + ], + "argline": "git_buf *out, git_repository *repo, git_commit *commit, size_t patch_no, size_t total_patches, uint32_t flags, const git_diff_options *diff_opts", + "sig": "git_buf *::git_repository *::git_commit *::size_t::size_t::uint32_t::const git_diff_options *", + "return": { "type": "int", "comment": null }, + "description": "

Create an e-mail ready patch for a commit.

\n", + "comments": "", + "group": "diff" + }, + "git_diff_format_email_options_init": { + "type": "function", + "file": "git2/deprecated.h", + "line": 387, + "lineto": 389, + "args": [ + { + "name": "opts", + "type": "git_diff_format_email_options *", + "comment": "The `git_blame_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION`." + } + ], + "argline": "git_diff_format_email_options *opts, unsigned int version", + "sig": "git_diff_format_email_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_diff_format_email_options structure

\n", + "comments": "

Initializes a git_diff_format_email_options with default values. Equivalent to creating an instance with GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT.

\n", + "group": "diff" + }, + "giterr_last": { + "type": "function", + "file": "git2/deprecated.h", + "line": 452, + "lineto": 452, + "args": [], + "argline": "", + "sig": "", + "return": { "type": "const git_error *", "comment": null }, + "description": "

Return the last git_error object that was generated for the\n current thread. This is an alias of git_error_last and is\n preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "giterr" + }, + "giterr_clear": { + "type": "function", + "file": "git2/deprecated.h", + "line": 464, + "lineto": 464, + "args": [], + "argline": "", + "sig": "", + "return": { "type": "void", "comment": null }, + "description": "

Clear the last error. This is an alias of git_error_last and is\n preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "giterr" + }, + "giterr_set_str": { + "type": "function", + "file": "git2/deprecated.h", + "line": 476, + "lineto": 476, + "args": [ + { "name": "error_class", "type": "int", "comment": null }, + { "name": "string", "type": "const char *", "comment": null } + ], + "argline": "int error_class, const char *string", + "sig": "int::const char *", + "return": { "type": "void", "comment": null }, + "description": "

Sets the error message to the given string. This is an alias of\n git_error_set_str and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "giterr" + }, + "giterr_set_oom": { + "type": "function", + "file": "git2/deprecated.h", + "line": 488, + "lineto": 488, + "args": [], + "argline": "", + "sig": "", + "return": { "type": "void", "comment": null }, + "description": "

Indicates that an out-of-memory situation occurred. This is an alias\n of git_error_set_oom and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "giterr" + }, + "git_object__size": { + "type": "function", + "file": "git2/deprecated.h", + "line": 578, + "lineto": 578, + "args": [ + { + "name": "type", + "type": "git_object_t", + "comment": "object type to get its size" + } + ], + "argline": "git_object_t type", + "sig": "git_object_t", + "return": { "type": "size_t", "comment": " size in bytes of the object" }, + "description": "

Get the size in bytes for the structure which\n acts as an in-memory representation of any given\n object type.

\n", + "comments": "

For all the core types, this would the equivalent of calling sizeof(git_commit) if the core types were not opaque on the external API.

\n", + "group": "object" + }, + "git_remote_is_valid_name": { + "type": "function", + "file": "git2/deprecated.h", + "line": 599, + "lineto": 599, + "args": [ + { + "name": "remote_name", + "type": "const char *", + "comment": "name to be checked." + } + ], + "argline": "const char *remote_name", + "sig": "const char *", + "return": { + "type": "int", + "comment": " 1 if the reference name is acceptable; 0 if it isn't" + }, + "description": "

Ensure the remote name is well-formed.

\n", + "comments": "", + "group": "remote" + }, + "git_reference_is_valid_name": { + "type": "function", + "file": "git2/deprecated.h", + "line": 643, + "lineto": 643, + "args": [ + { + "name": "refname", + "type": "const char *", + "comment": "name to be checked." + } + ], + "argline": "const char *refname", + "sig": "const char *", + "return": { + "type": "int", + "comment": " 1 if the reference name is acceptable; 0 if it isn't" + }, + "description": "

Ensure the reference name is well-formed.

\n", + "comments": "

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n", + "group": "reference" + }, + "git_oidarray_free": { + "type": "function", + "file": "git2/deprecated.h", + "line": 810, + "lineto": 810, + "args": [{ "name": "array", "type": "git_oidarray *", "comment": null }], + "argline": "git_oidarray *array", + "sig": "git_oidarray *", + "return": { "type": "void", "comment": null }, + "description": "

Free the memory referred to by the git_oidarray. This is an alias of\n git_oidarray_dispose and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "oidarray" + }, + "git_strarray_copy": { + "type": "function", + "file": "git2/deprecated.h", + "line": 879, + "lineto": 879, + "args": [ + { "name": "tgt", "type": "git_strarray *", "comment": "target" }, + { "name": "src", "type": "const git_strarray *", "comment": "source" } + ], + "argline": "git_strarray *tgt, const git_strarray *src", + "sig": "git_strarray *::const git_strarray *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n 0 on allocation failure" + }, + "description": "

Copy a string array object from source to target.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "strarray" + }, + "git_strarray_free": { + "type": "function", + "file": "git2/deprecated.h", + "line": 891, + "lineto": 891, + "args": [{ "name": "array", "type": "git_strarray *", "comment": null }], + "argline": "git_strarray *array", + "sig": "git_strarray *", + "return": { "type": "void", "comment": null }, + "description": "

Free the memory referred to by the git_strarray. This is an alias of\n git_strarray_dispose and is preserved for backward compatibility.

\n", + "comments": "

This function is deprecated, but there is no plan to remove this function at this time.

\n", + "group": "strarray" + }, + "git_blame_init_options": { + "type": "function", + "file": "git2/deprecated.h", + "line": 905, + "lineto": 905, + "args": [ + { "name": "opts", "type": "git_blame_options *", "comment": null }, + { "name": "version", "type": "unsigned int", "comment": null } + ], + "argline": "git_blame_options *opts, unsigned int version", + "sig": "git_blame_options *::unsigned int", + "return": { "type": "int", "comment": null }, + "description": "", + "comments": "

These functions are retained for backward compatibility. The newer versions of these functions should be preferred in all new code.

\n\n

There is no plan to remove these backward compatibility functions at this time.

\n\n

@{

\n", + "group": "blame" + }, + "git_describe_options_init": { + "type": "function", + "file": "git2/describe.h", + "line": 82, + "lineto": 82, + "args": [ + { + "name": "opts", + "type": "git_describe_options *", + "comment": "The `git_describe_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DESCRIBE_OPTIONS_VERSION`." + } + ], + "argline": "git_describe_options *opts, unsigned int version", + "sig": "git_describe_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_describe_options structure

\n", + "comments": "

Initializes a git_describe_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_OPTIONS_INIT.

\n", + "group": "describe", + "examples": { + "describe.c": ["ex/v1.8.4/describe.html#git_describe_options_init-1"] + } + }, + "git_describe_format_options_init": { + "type": "function", + "file": "git2/describe.h", + "line": 129, + "lineto": 129, + "args": [ + { + "name": "opts", + "type": "git_describe_format_options *", + "comment": "The `git_describe_format_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DESCRIBE_FORMAT_OPTIONS_VERSION`." + } + ], + "argline": "git_describe_format_options *opts, unsigned int version", + "sig": "git_describe_format_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_describe_format_options structure

\n", + "comments": "

Initializes a git_describe_format_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_FORMAT_OPTIONS_INIT.

\n", + "group": "describe", + "examples": { + "describe.c": [ + "ex/v1.8.4/describe.html#git_describe_format_options_init-2" + ] + } + }, + "git_describe_commit": { + "type": "function", + "file": "git2/describe.h", + "line": 147, + "lineto": 150, + "args": [ + { + "name": "result", + "type": "git_describe_result **", + "comment": "pointer to store the result. You must free this once\n you're done with it." + }, + { + "name": "committish", + "type": "git_object *", + "comment": "a committish to describe" + }, + { + "name": "opts", + "type": "git_describe_options *", + "comment": "the lookup options (or NULL for defaults)" + } + ], + "argline": "git_describe_result **result, git_object *committish, git_describe_options *opts", + "sig": "git_describe_result **::git_object *::git_describe_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Describe a commit

\n", + "comments": "

Perform the describe operation on the given committish object.

\n", + "group": "describe", + "examples": { + "describe.c": ["ex/v1.8.4/describe.html#git_describe_commit-3"] + } + }, + "git_describe_workdir": { + "type": "function", + "file": "git2/describe.h", + "line": 165, + "lineto": 168, + "args": [ + { + "name": "out", + "type": "git_describe_result **", + "comment": "pointer to store the result. You must free this once\n you're done with it." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the describe" + }, + { + "name": "opts", + "type": "git_describe_options *", + "comment": "the lookup options (or NULL for defaults)" + } + ], + "argline": "git_describe_result **out, git_repository *repo, git_describe_options *opts", + "sig": "git_describe_result **::git_repository *::git_describe_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Describe a commit

\n", + "comments": "

Perform the describe operation on the current commit and the worktree. After performing describe on HEAD, a status is run and the description is considered to be dirty if there are.

\n", + "group": "describe", + "examples": { + "describe.c": ["ex/v1.8.4/describe.html#git_describe_workdir-4"] + } + }, + "git_describe_format": { + "type": "function", + "file": "git2/describe.h", + "line": 179, + "lineto": 182, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The buffer to store the result" + }, + { + "name": "result", + "type": "const git_describe_result *", + "comment": "the result from `git_describe_commit()` or\n `git_describe_workdir()`." + }, + { + "name": "opts", + "type": "const git_describe_format_options *", + "comment": "the formatting options (or NULL for defaults)" + } + ], + "argline": "git_buf *out, const git_describe_result *result, const git_describe_format_options *opts", + "sig": "git_buf *::const git_describe_result *::const git_describe_format_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Print the describe result to a buffer

\n", + "comments": "", + "group": "describe", + "examples": { + "describe.c": ["ex/v1.8.4/describe.html#git_describe_format-5"] + } + }, + "git_describe_result_free": { + "type": "function", + "file": "git2/describe.h", + "line": 189, + "lineto": 189, + "args": [ + { + "name": "result", + "type": "git_describe_result *", + "comment": "The result to free." + } + ], + "argline": "git_describe_result *result", + "sig": "git_describe_result *", + "return": { "type": "void", "comment": null }, + "description": "

Free the describe result.

\n", + "comments": "", + "group": "describe" + }, + "git_diff_options_init": { + "type": "function", + "file": "git2/diff.h", + "line": 485, + "lineto": 487, + "args": [ + { + "name": "opts", + "type": "git_diff_options *", + "comment": "The `git_diff_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DIFF_OPTIONS_VERSION`." + } + ], + "argline": "git_diff_options *opts, unsigned int version", + "sig": "git_diff_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_diff_options structure

\n", + "comments": "

Initializes a git_diff_options with default values. Equivalent to creating an instance with GIT_DIFF_OPTIONS_INIT.

\n", + "group": "diff" + }, + "git_diff_find_options_init": { + "type": "function", + "file": "git2/diff.h", + "line": 818, + "lineto": 820, + "args": [ + { + "name": "opts", + "type": "git_diff_find_options *", + "comment": "The `git_diff_find_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DIFF_FIND_OPTIONS_VERSION`." + } + ], + "argline": "git_diff_find_options *opts, unsigned int version", + "sig": "git_diff_find_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_diff_find_options structure

\n", + "comments": "

Initializes a git_diff_find_options with default values. Equivalent to creating an instance with GIT_DIFF_FIND_OPTIONS_INIT.

\n", + "group": "diff" + }, + "git_diff_free": { + "type": "function", + "file": "git2/diff.h", + "line": 834, + "lineto": 834, + "args": [ + { + "name": "diff", + "type": "git_diff *", + "comment": "The previously created diff; cannot be used after free." + } + ], + "argline": "git_diff *diff", + "sig": "git_diff *", + "return": { "type": "void", "comment": null }, + "description": "

Deallocate a diff.

\n", + "comments": "", + "group": "diff", + "examples": { + "diff.c": ["ex/v1.8.4/diff.html#git_diff_free-3"], + "log.c": [ + "ex/v1.8.4/log.html#git_diff_free-25", + "ex/v1.8.4/log.html#git_diff_free-26" + ] + } + }, + "git_diff_tree_to_tree": { + "type": "function", + "file": "git2/diff.h", + "line": 853, + "lineto": 858, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "Output pointer to a git_diff pointer to be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the trees." + }, + { + "name": "old_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff from, or NULL for empty tree." + }, + { + "name": "new_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff to, or NULL for empty tree." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, git_tree *new_tree, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_tree *::git_tree *::const git_diff_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Create a diff with the difference between two tree objects.

\n", + "comments": "

This is equivalent to git diff <old-tree> <new-tree>

\n\n

The first tree will be used for the "old_file" side of the delta and the second tree will be used for the "new_file" side of the delta. You can pass NULL to indicate an empty tree, although it is an error to pass NULL for both the old_tree and new_tree.

\n", + "group": "diff", + "examples": { + "diff.c": ["ex/v1.8.4/diff.html#git_diff_tree_to_tree-4"], + "log.c": [ + "ex/v1.8.4/log.html#git_diff_tree_to_tree-27", + "ex/v1.8.4/log.html#git_diff_tree_to_tree-28" + ] + } + }, + "git_diff_tree_to_index": { + "type": "function", + "file": "git2/diff.h", + "line": 880, + "lineto": 885, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "Output pointer to a git_diff pointer to be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the tree and index." + }, + { + "name": "old_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff from, or NULL for empty tree." + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to diff with; repo index used if NULL." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, git_index *index, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_tree *::git_index *::const git_diff_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Create a diff between a tree and repository index.

\n", + "comments": "

This is equivalent to git diff --cached <treeish> or if you pass the HEAD tree, then like git diff --cached.

\n\n

The tree you pass will be used for the "old_file" side of the delta, and the index will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", + "group": "diff", + "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_tree_to_index-5"] } + }, + "git_diff_index_to_workdir": { + "type": "function", + "file": "git2/diff.h", + "line": 908, + "lineto": 912, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "Output pointer to a git_diff pointer to be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository." + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to diff from; repo index used if NULL." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_index *index, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_index *::const git_diff_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Create a diff between the repository index and the workdir directory.

\n", + "comments": "

This matches the git diff command. See the note below on git_diff_tree_to_workdir for a discussion of the difference between git diff and git diff HEAD and how to emulate a git diff <treeish> using libgit2.

\n\n

The index will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", + "group": "diff", + "examples": { + "diff.c": ["ex/v1.8.4/diff.html#git_diff_index_to_workdir-6"] + } + }, + "git_diff_tree_to_workdir": { + "type": "function", + "file": "git2/diff.h", + "line": 938, + "lineto": 942, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "A pointer to a git_diff pointer that will be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the tree." + }, + { + "name": "old_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff from, or NULL for empty tree." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_tree *::const git_diff_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Create a diff between a tree and the working directory.

\n", + "comments": "

The tree you provide will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side.

\n\n

This is not the same as git diff <treeish> or git diff-index <treeish>. Those commands use information from the index, whereas this function strictly returns the differences between the tree and the files in the working directory, regardless of the state of the index. Use git_diff_tree_to_workdir_with_index to emulate those commands.

\n\n

To see difference between this and git_diff_tree_to_workdir_with_index, consider the example of a staged file deletion where the file has then been put back into the working dir and further modified. The tree-to-workdir diff for that file is 'modified', but git diff would show status 'deleted' since there is a staged delete.

\n", + "group": "diff", + "examples": { + "diff.c": ["ex/v1.8.4/diff.html#git_diff_tree_to_workdir-7"] + } + }, + "git_diff_tree_to_workdir_with_index": { + "type": "function", + "file": "git2/diff.h", + "line": 958, + "lineto": 962, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "A pointer to a git_diff pointer that will be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the tree." + }, + { + "name": "old_tree", + "type": "git_tree *", + "comment": "A git_tree object to diff from, or NULL for empty tree." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_tree *old_tree, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_tree *::const git_diff_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Create a diff between a tree and the working directory using index data\n to account for staged deletes, tracked files, etc.

\n", + "comments": "

This emulates git diff <tree> by diffing the tree to the index and the index to the working directory and blending the results into a single diff that includes staged deleted, etc.

\n", + "group": "diff", + "examples": { + "diff.c": ["ex/v1.8.4/diff.html#git_diff_tree_to_workdir_with_index-8"] + } + }, + "git_diff_index_to_index": { + "type": "function", + "file": "git2/diff.h", + "line": 977, + "lineto": 982, + "args": [ + { + "name": "diff", + "type": "git_diff **", + "comment": "Output pointer to a git_diff pointer to be allocated." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing the indexes." + }, + { + "name": "old_index", + "type": "git_index *", + "comment": "A git_index object to diff from." + }, + { + "name": "new_index", + "type": "git_index *", + "comment": "A git_index object to diff to." + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Structure with options to influence diff or NULL for defaults." + } + ], + "argline": "git_diff **diff, git_repository *repo, git_index *old_index, git_index *new_index, const git_diff_options *opts", + "sig": "git_diff **::git_repository *::git_index *::git_index *::const git_diff_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Create a diff with the difference between two index objects.

\n", + "comments": "

The first index will be used for the "old_file" side of the delta and the second index will be used for the "new_file" side of the delta.

\n", + "group": "diff" + }, + "git_diff_merge": { + "type": "function", + "file": "git2/diff.h", + "line": 998, + "lineto": 1000, + "args": [ + { + "name": "onto", + "type": "git_diff *", + "comment": "Diff to merge into." + }, + { + "name": "from", + "type": "const git_diff *", + "comment": "Diff to merge." + } + ], + "argline": "git_diff *onto, const git_diff *from", + "sig": "git_diff *::const git_diff *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Merge one diff into another.

\n", + "comments": "

This merges items from the "from" list into the "onto" list. The resulting diff will have all items that appear in either list. If an item appears in both lists, then it will be "merged" to appear as if the old version was from the "onto" list and the new version is from the "from" list (with the exception that if the item has a pending DELETE in the middle, then it will show as deleted).

\n", + "group": "diff" + }, + "git_diff_find_similar": { + "type": "function", + "file": "git2/diff.h", + "line": 1014, + "lineto": 1016, + "args": [ + { + "name": "diff", + "type": "git_diff *", + "comment": "diff to run detection algorithms on" + }, + { + "name": "options", + "type": "const git_diff_find_options *", + "comment": "Control how detection should be run, NULL for defaults" + } + ], + "argline": "git_diff *diff, const git_diff_find_options *options", + "sig": "git_diff *::const git_diff_find_options *", + "return": { "type": "int", "comment": " 0 on success, -1 on failure" }, + "description": "

Transform a diff marking file renames, copies, etc.

\n", + "comments": "

This modifies a diff in place, replacing old entries that look like renames or copies with new entries reflecting those changes. This also will, if requested, break modified files into add/remove pairs if the amount of change is above a threshold.

\n", + "group": "diff", + "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_find_similar-9"] } + }, + "git_diff_num_deltas": { + "type": "function", + "file": "git2/diff.h", + "line": 1034, + "lineto": 1034, + "args": [ + { + "name": "diff", + "type": "const git_diff *", + "comment": "A git_diff generated by one of the above functions" + } + ], + "argline": "const git_diff *diff", + "sig": "const git_diff *", + "return": { + "type": "size_t", + "comment": " Count of number of deltas in the list" + }, + "description": "

Query how many diff records are there in a diff.

\n", + "comments": "", + "group": "diff", + "examples": { "log.c": ["ex/v1.8.4/log.html#git_diff_num_deltas-29"] } + }, + "git_diff_num_deltas_of_type": { + "type": "function", + "file": "git2/diff.h", + "line": 1047, + "lineto": 1048, + "args": [ + { + "name": "diff", + "type": "const git_diff *", + "comment": "A git_diff generated by one of the above functions" + }, + { + "name": "type", + "type": "git_delta_t", + "comment": "A git_delta_t value to filter the count" + } + ], + "argline": "const git_diff *diff, git_delta_t type", + "sig": "const git_diff *::git_delta_t", + "return": { + "type": "size_t", + "comment": " Count of number of deltas matching delta_t type" + }, + "description": "

Query how many diff deltas are there in a diff filtered by type.

\n", + "comments": "

This works just like git_diff_num_deltas() with an extra parameter that is a git_delta_t and returns just the count of how many deltas match that particular type.

\n", + "group": "diff" + }, + "git_diff_get_delta": { + "type": "function", + "file": "git2/diff.h", + "line": 1067, + "lineto": 1068, + "args": [ + { + "name": "diff", + "type": "const git_diff *", + "comment": "Diff list object" + }, + { "name": "idx", "type": "size_t", "comment": "Index into diff list" } + ], + "argline": "const git_diff *diff, size_t idx", + "sig": "const git_diff *::size_t", + "return": { + "type": "const git_diff_delta *", + "comment": " Pointer to git_diff_delta (or NULL if `idx` out of range)" + }, + "description": "

Return the diff delta for an entry in the diff list.

\n", + "comments": "

The git_diff_delta pointer points to internal data and you do not have to release it when you are done with it. It will go away when the * git_diff (or any associated git_patch) goes away.

\n\n

Note that the flags on the delta related to whether it has binary content or not may not be set if there are no attributes set for the file and there has been no reason to load the file data at this point. For now, if you need those flags to be up to date, your only option is to either use git_diff_foreach or create a git_patch.

\n", + "group": "diff" + }, + "git_diff_is_sorted_icase": { + "type": "function", + "file": "git2/diff.h", + "line": 1076, + "lineto": 1076, + "args": [ + { + "name": "diff", + "type": "const git_diff *", + "comment": "diff to check" + } + ], + "argline": "const git_diff *diff", + "sig": "const git_diff *", + "return": { + "type": "int", + "comment": " 0 if case sensitive, 1 if case is ignored" + }, + "description": "

Check if deltas are sorted case sensitively or insensitively.

\n", + "comments": "", + "group": "diff" + }, + "git_diff_foreach": { + "type": "function", + "file": "git2/diff.h", + "line": 1104, + "lineto": 1110, + "args": [ + { + "name": "diff", + "type": "git_diff *", + "comment": "A git_diff generated by one of the above functions." + }, + { + "name": "file_cb", + "type": "git_diff_file_cb", + "comment": "Callback function to make per file in the diff." + }, + { + "name": "binary_cb", + "type": "git_diff_binary_cb", + "comment": "Optional callback to make for binary files." + }, + { + "name": "hunk_cb", + "type": "git_diff_hunk_cb", + "comment": "Optional callback to make per hunk of text diff. This\n callback is called to describe a range of lines in the\n diff. It will not be issued for binary files." + }, + { + "name": "line_cb", + "type": "git_diff_line_cb", + "comment": "Optional callback to make per line of diff text. This\n same callback will be made for context lines, added, and\n removed lines, and even for a deleted trailing newline." + }, + { + "name": "payload", + "type": "void *", + "comment": "Reference pointer that will be passed to your callbacks." + } + ], + "argline": "git_diff *diff, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", + "sig": "git_diff *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Loop over all deltas in a diff issuing callbacks.

\n", + "comments": "

This will iterate through all of the files described in a diff. You should provide a file callback to learn about each file.

\n\n

The "hunk" and "line" callbacks are optional, and the text diff of the files will only be calculated if they are not NULL. Of course, these callbacks will not be invoked for binary files on the diff or for files whose only changed is a file mode change.

\n\n

Returning a non-zero value from any of the callbacks will terminate the iteration and return the value to the user.

\n", + "group": "diff" + }, + "git_diff_status_char": { + "type": "function", + "file": "git2/diff.h", + "line": 1123, + "lineto": 1123, + "args": [ + { + "name": "status", + "type": "git_delta_t", + "comment": "The git_delta_t value to look up" + } + ], + "argline": "git_delta_t status", + "sig": "git_delta_t", + "return": { + "type": "char", + "comment": " The single character label for that code" + }, + "description": "

Look up the single character abbreviation for a delta status code.

\n", + "comments": "

When you run git diff --name-status it uses single letter codes in the output such as 'A' for added, 'D' for deleted, 'M' for modified, etc. This function converts a git_delta_t value into these letters for your own purposes. GIT_DELTA_UNTRACKED will return a space (i.e. ' ').

\n", + "group": "diff" + }, + "git_diff_print": { + "type": "function", + "file": "git2/diff.h", + "line": 1149, + "lineto": 1153, + "args": [ + { + "name": "diff", + "type": "git_diff *", + "comment": "A git_diff generated by one of the above functions." + }, + { + "name": "format", + "type": "git_diff_format_t", + "comment": "A git_diff_format_t value to pick the text format." + }, + { + "name": "print_cb", + "type": "git_diff_line_cb", + "comment": "Callback to make per line of diff text." + }, + { + "name": "payload", + "type": "void *", + "comment": "Reference pointer that will be passed to your callback." + } + ], + "argline": "git_diff *diff, git_diff_format_t format, git_diff_line_cb print_cb, void *payload", + "sig": "git_diff *::git_diff_format_t::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Iterate over a diff generating formatted text output.

\n", + "comments": "

Returning a non-zero value from the callbacks will terminate the iteration and return the non-zero value to the caller.

\n", + "group": "diff", + "examples": { + "diff.c": ["ex/v1.8.4/diff.html#git_diff_print-10"], + "log.c": ["ex/v1.8.4/log.html#git_diff_print-30"] + } + }, + "git_diff_to_buf": { + "type": "function", + "file": "git2/diff.h", + "line": 1165, + "lineto": 1168, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "A pointer to a user-allocated git_buf that will\n contain the diff text" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "A git_diff generated by one of the above functions." + }, + { + "name": "format", + "type": "git_diff_format_t", + "comment": "A git_diff_format_t value to pick the text format." + } + ], + "argline": "git_buf *out, git_diff *diff, git_diff_format_t format", + "sig": "git_buf *::git_diff *::git_diff_format_t", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Produce the complete formatted text output from a diff into a\n buffer.

\n", + "comments": "", + "group": "diff" + }, + "git_diff_blobs": { + "type": "function", + "file": "git2/diff.h", + "line": 1204, + "lineto": 1214, + "args": [ + { + "name": "old_blob", + "type": "const git_blob *", + "comment": "Blob for old side of diff, or NULL for empty blob" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old blob as if it had this filename; can be NULL" + }, + { + "name": "new_blob", + "type": "const git_blob *", + "comment": "Blob for new side of diff, or NULL for empty blob" + }, + { + "name": "new_as_path", + "type": "const char *", + "comment": "Treat new blob as if it had this filename; can be NULL" + }, + { + "name": "options", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + }, + { + "name": "file_cb", + "type": "git_diff_file_cb", + "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" + }, + { + "name": "binary_cb", + "type": "git_diff_binary_cb", + "comment": "Callback for binary files; can be NULL" + }, + { + "name": "hunk_cb", + "type": "git_diff_hunk_cb", + "comment": "Callback for each hunk in diff; can be NULL" + }, + { + "name": "line_cb", + "type": "git_diff_line_cb", + "comment": "Callback for each line in diff; can be NULL" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to each callback function" + } + ], + "argline": "const git_blob *old_blob, const char *old_as_path, const git_blob *new_blob, const char *new_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", + "sig": "const git_blob *::const char *::const git_blob *::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Directly run a diff on two blobs.

\n", + "comments": "

Compared to a file, a blob lacks some contextual information. As such, the git_diff_file given to the callback will have some fake data; i.e. mode will be 0 and path will be NULL.

\n\n

NULL is allowed for either old_blob or new_blob and will be treated as an empty blob, with the oid set to NULL in the git_diff_file data. Passing NULL for both blobs is a noop; no callbacks will be made at all.

\n\n

We do run a binary content check on the blob content and if either blob looks like binary data, the git_diff_delta binary attribute will be set to 1 and no call to the hunk_cb nor line_cb will be made (unless you pass GIT_DIFF_FORCE_TEXT of course).

\n", + "group": "diff" + }, + "git_diff_blob_to_buffer": { + "type": "function", + "file": "git2/diff.h", + "line": 1241, + "lineto": 1252, + "args": [ + { + "name": "old_blob", + "type": "const git_blob *", + "comment": "Blob for old side of diff, or NULL for empty blob" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old blob as if it had this filename; can be NULL" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "Raw data for new side of diff, or NULL for empty" + }, + { + "name": "buffer_len", + "type": "size_t", + "comment": "Length of raw data for new side of diff" + }, + { + "name": "buffer_as_path", + "type": "const char *", + "comment": "Treat buffer as if it had this filename; can be NULL" + }, + { + "name": "options", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + }, + { + "name": "file_cb", + "type": "git_diff_file_cb", + "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" + }, + { + "name": "binary_cb", + "type": "git_diff_binary_cb", + "comment": "Callback for binary files; can be NULL" + }, + { + "name": "hunk_cb", + "type": "git_diff_hunk_cb", + "comment": "Callback for each hunk in diff; can be NULL" + }, + { + "name": "line_cb", + "type": "git_diff_line_cb", + "comment": "Callback for each line in diff; can be NULL" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to each callback function" + } + ], + "argline": "const git_blob *old_blob, const char *old_as_path, const char *buffer, size_t buffer_len, const char *buffer_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", + "sig": "const git_blob *::const char *::const char *::size_t::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Directly run a diff between a blob and a buffer.

\n", + "comments": "

As with git_diff_blobs, comparing a blob and buffer lacks some context, so the git_diff_file parameters to the callbacks will be faked a la the rules for git_diff_blobs().

\n\n

Passing NULL for old_blob will be treated as an empty blob (i.e. the file_cb will be invoked with GIT_DELTA_ADDED and the diff will be the entire content of the buffer added). Passing NULL to the buffer will do the reverse, with GIT_DELTA_REMOVED and blob content removed.

\n", + "group": "diff" + }, + "git_diff_buffers": { + "type": "function", + "file": "git2/diff.h", + "line": 1275, + "lineto": 1287, + "args": [ + { + "name": "old_buffer", + "type": "const void *", + "comment": "Raw data for old side of diff, or NULL for empty" + }, + { + "name": "old_len", + "type": "size_t", + "comment": "Length of the raw data for old side of the diff" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old buffer as if it had this filename; can be NULL" + }, + { + "name": "new_buffer", + "type": "const void *", + "comment": "Raw data for new side of diff, or NULL for empty" + }, + { + "name": "new_len", + "type": "size_t", + "comment": "Length of raw data for new side of diff" + }, + { + "name": "new_as_path", + "type": "const char *", + "comment": "Treat buffer as if it had this filename; can be NULL" + }, + { + "name": "options", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + }, + { + "name": "file_cb", + "type": "git_diff_file_cb", + "comment": "Callback for \"file\"; made once if there is a diff; can be NULL" + }, + { + "name": "binary_cb", + "type": "git_diff_binary_cb", + "comment": "Callback for binary files; can be NULL" + }, + { + "name": "hunk_cb", + "type": "git_diff_hunk_cb", + "comment": "Callback for each hunk in diff; can be NULL" + }, + { + "name": "line_cb", + "type": "git_diff_line_cb", + "comment": "Callback for each line in diff; can be NULL" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to each callback function" + } + ], + "argline": "const void *old_buffer, size_t old_len, const char *old_as_path, const void *new_buffer, size_t new_len, const char *new_as_path, const git_diff_options *options, git_diff_file_cb file_cb, git_diff_binary_cb binary_cb, git_diff_hunk_cb hunk_cb, git_diff_line_cb line_cb, void *payload", + "sig": "const void *::size_t::const char *::const void *::size_t::const char *::const git_diff_options *::git_diff_file_cb::git_diff_binary_cb::git_diff_hunk_cb::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Directly run a diff between two buffers.

\n", + "comments": "

Even more than with git_diff_blobs, comparing two buffer lacks context, so the git_diff_file parameters to the callbacks will be faked a la the rules for git_diff_blobs().

\n", + "group": "diff" + }, + "git_diff_from_buffer": { + "type": "function", + "file": "git2/diff.h", + "line": 1327, + "lineto": 1334, + "args": [ + { + "name": "out", + "type": "git_diff **", + "comment": "A pointer to a git_diff pointer that will be allocated." + }, + { + "name": "content", + "type": "const char *", + "comment": "The contents of a patch file" + }, + { + "name": "content_len", + "type": "size_t", + "comment": "The length of the patch file contents" + } + ], + "argline": "git_diff **out, const char *content, size_t content_len", + "sig": "git_diff **::const char *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Read the contents of a git patch file into a git_diff object.

\n", + "comments": "

The diff object produced is similar to the one that would be produced if you actually produced it computationally by comparing two trees, however there may be subtle differences. For example, a patch file likely contains abbreviated object IDs, so the object IDs in a git_diff_delta produced by this function will also be abbreviated.

\n\n

This function will only read patch files created by a git implementation, it will not read unified diffs produced by the diff program, nor any other types of patch files.

\n", + "group": "diff", + "examples": { + "diff.c": [ + "ex/v1.8.4/diff.html#git_diff_from_buffer-11", + "ex/v1.8.4/diff.html#git_diff_from_buffer-12" + ] + } + }, + "git_diff_get_stats": { + "type": "function", + "file": "git2/diff.h", + "line": 1370, + "lineto": 1372, + "args": [ + { + "name": "out", + "type": "git_diff_stats **", + "comment": "Structure containing the diff statistics." + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "A git_diff generated by one of the above functions." + } + ], + "argline": "git_diff_stats **out, git_diff *diff", + "sig": "git_diff_stats **::git_diff *", + "return": { + "type": "int", + "comment": " 0 on success; non-zero on error" + }, + "description": "

Accumulate diff statistics for all patches.

\n", + "comments": "", + "group": "diff", + "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_get_stats-13"] } + }, + "git_diff_stats_files_changed": { + "type": "function", + "file": "git2/diff.h", + "line": 1380, + "lineto": 1381, + "args": [ + { + "name": "stats", + "type": "const git_diff_stats *", + "comment": "A `git_diff_stats` generated by one of the above functions." + } + ], + "argline": "const git_diff_stats *stats", + "sig": "const git_diff_stats *", + "return": { + "type": "size_t", + "comment": " total number of files changed in the diff" + }, + "description": "

Get the total number of files changed in a diff

\n", + "comments": "", + "group": "diff" + }, + "git_diff_stats_insertions": { + "type": "function", + "file": "git2/diff.h", + "line": 1389, + "lineto": 1390, + "args": [ + { + "name": "stats", + "type": "const git_diff_stats *", + "comment": "A `git_diff_stats` generated by one of the above functions." + } + ], + "argline": "const git_diff_stats *stats", + "sig": "const git_diff_stats *", + "return": { + "type": "size_t", + "comment": " total number of insertions in the diff" + }, + "description": "

Get the total number of insertions in a diff

\n", + "comments": "", + "group": "diff" + }, + "git_diff_stats_deletions": { + "type": "function", + "file": "git2/diff.h", + "line": 1398, + "lineto": 1399, + "args": [ + { + "name": "stats", + "type": "const git_diff_stats *", + "comment": "A `git_diff_stats` generated by one of the above functions." + } + ], + "argline": "const git_diff_stats *stats", + "sig": "const git_diff_stats *", + "return": { + "type": "size_t", + "comment": " total number of deletions in the diff" + }, + "description": "

Get the total number of deletions in a diff

\n", + "comments": "", + "group": "diff" + }, + "git_diff_stats_to_buf": { + "type": "function", + "file": "git2/diff.h", + "line": 1410, + "lineto": 1414, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer to store the formatted diff statistics in." + }, + { + "name": "stats", + "type": "const git_diff_stats *", + "comment": "A `git_diff_stats` generated by one of the above functions." + }, + { + "name": "format", + "type": "git_diff_stats_format_t", + "comment": "Formatting option." + }, + { + "name": "width", + "type": "size_t", + "comment": "Target width for output (only affects GIT_DIFF_STATS_FULL)" + } + ], + "argline": "git_buf *out, const git_diff_stats *stats, git_diff_stats_format_t format, size_t width", + "sig": "git_buf *::const git_diff_stats *::git_diff_stats_format_t::size_t", + "return": { + "type": "int", + "comment": " 0 on success; non-zero on error" + }, + "description": "

Print diff statistics to a git_buf.

\n", + "comments": "", + "group": "diff", + "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_stats_to_buf-14"] } + }, + "git_diff_stats_free": { + "type": "function", + "file": "git2/diff.h", + "line": 1422, + "lineto": 1422, + "args": [ + { + "name": "stats", + "type": "git_diff_stats *", + "comment": "The previously created statistics object;\n cannot be used after free." + } + ], + "argline": "git_diff_stats *stats", + "sig": "git_diff_stats *", + "return": { "type": "void", "comment": null }, + "description": "

Deallocate a git_diff_stats.

\n", + "comments": "", + "group": "diff", + "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_stats_free-15"] } + }, + "git_diff_patchid_options_init": { + "type": "function", + "file": "git2/diff.h", + "line": 1448, + "lineto": 1450, + "args": [ + { + "name": "opts", + "type": "git_diff_patchid_options *", + "comment": "The `git_diff_patchid_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_DIFF_PATCHID_OPTIONS_VERSION`." + } + ], + "argline": "git_diff_patchid_options *opts, unsigned int version", + "sig": "git_diff_patchid_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_diff_patchid_options structure

\n", + "comments": "

Initializes a git_diff_patchid_options with default values. Equivalent to creating an instance with GIT_DIFF_PATCHID_OPTIONS_INIT.

\n", + "group": "diff" + }, + "git_diff_patchid": { + "type": "function", + "file": "git2/diff.h", + "line": 1471, + "lineto": 1471, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer where the calculated patch ID should be stored" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "The diff to calculate the ID for" + }, + { + "name": "opts", + "type": "git_diff_patchid_options *", + "comment": "Options for how to calculate the patch ID. This is\n intended for future changes, as currently no options are\n available." + } + ], + "argline": "git_oid *out, git_diff *diff, git_diff_patchid_options *opts", + "sig": "git_oid *::git_diff *::git_diff_patchid_options *", + "return": { + "type": "int", + "comment": " 0 on success, an error code otherwise." + }, + "description": "

Calculate the patch ID for the given patch.

\n", + "comments": "

Calculate a stable patch ID for the given patch by summing the hash of the file diffs, ignoring whitespace and line numbers. This can be used to derive whether two diffs are the same with a high probability.

\n\n

Currently, this function only calculates stable patch IDs, as defined in git-patch-id(1), and should in fact generate the same IDs as the upstream git project does.

\n", + "group": "diff" + }, + "git_email_create_from_diff": { + "type": "function", + "file": "git2/email.h", + "line": 100, + "lineto": 109, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer to store the e-mail patch in" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "the changes to include in the email" + }, + { "name": "patch_idx", "type": "size_t", "comment": "the patch index" }, + { + "name": "patch_count", + "type": "size_t", + "comment": "the total number of patches that will be included" + }, + { + "name": "commit_id", + "type": "const git_oid *", + "comment": "the commit id for this change" + }, + { + "name": "summary", + "type": "const char *", + "comment": "the commit message for this change" + }, + { + "name": "body", + "type": "const char *", + "comment": "optional text to include above the diffstat" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "the person who authored this commit" + }, + { + "name": "opts", + "type": "const git_email_create_options *", + "comment": "email creation options" + } + ], + "argline": "git_buf *out, git_diff *diff, size_t patch_idx, size_t patch_count, const git_oid *commit_id, const char *summary, const char *body, const git_signature *author, const git_email_create_options *opts", + "sig": "git_buf *::git_diff *::size_t::size_t::const git_oid *::const char *::const char *::const git_signature *::const git_email_create_options *", + "return": { "type": "int", "comment": null }, + "description": "

Create a diff for a commit in mbox format for sending via email.

\n", + "comments": "", + "group": "email" + }, + "git_email_create_from_commit": { + "type": "function", + "file": "git2/email.h", + "line": 119, + "lineto": 122, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer to store the e-mail patch in" + }, + { + "name": "commit", + "type": "git_commit *", + "comment": "commit to create a patch for" + }, + { + "name": "opts", + "type": "const git_email_create_options *", + "comment": "email creation options" + } + ], + "argline": "git_buf *out, git_commit *commit, const git_email_create_options *opts", + "sig": "git_buf *::git_commit *::const git_email_create_options *", + "return": { "type": "int", "comment": null }, + "description": "

Create a diff for a commit in mbox format for sending via email.\n The commit must not be a merge commit.

\n", + "comments": "", + "group": "email" + }, + "git_error_last": { + "type": "function", + "file": "git2/errors.h", + "line": 139, + "lineto": 139, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "const git_error *", + "comment": " A git_error object." + }, + "description": "

Return the last git_error object that was generated for the\n current thread.

\n", + "comments": "

This function will never return NULL.

\n\n

Callers should not rely on this to determine whether an error has occurred. For error checking, callers should examine the return codes of libgit2 functions.

\n\n

This call can only reliably report error messages when an error has occurred. (It may contain stale information if it is called after a different function that succeeds.)

\n\n

The memory for this object is managed by libgit2. It should not be freed.

\n", + "group": "error", + "examples": { + "checkout.c": [ + "ex/v1.8.4/checkout.html#git_error_last-11", + "ex/v1.8.4/checkout.html#git_error_last-12", + "ex/v1.8.4/checkout.html#git_error_last-13", + "ex/v1.8.4/checkout.html#git_error_last-14" + ], + "commit.c": ["ex/v1.8.4/commit.html#git_error_last-2"], + "config.c": [ + "ex/v1.8.4/config.html#git_error_last-6", + "ex/v1.8.4/config.html#git_error_last-7", + "ex/v1.8.4/config.html#git_error_last-8" + ], + "general.c": ["ex/v1.8.4/general.html#git_error_last-33"], + "merge.c": [ + "ex/v1.8.4/merge.html#git_error_last-8", + "ex/v1.8.4/merge.html#git_error_last-9" + ] + } + }, + "git_filter_list_load": { + "type": "function", + "file": "git2/filter.h", + "line": 129, + "lineto": 135, + "args": [ + { + "name": "filters", + "type": "git_filter_list **", + "comment": "Output newly created git_filter_list (or NULL)" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository object that contains `path`" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "The blob to which the filter will be applied (if known)" + }, + { + "name": "path", + "type": "const char *", + "comment": "Relative path of the file to be filtered" + }, + { + "name": "mode", + "type": "git_filter_mode_t", + "comment": "Filtering direction (WT->ODB or ODB->WT)" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of `git_filter_flag_t` flags" + } + ], + "argline": "git_filter_list **filters, git_repository *repo, git_blob *blob, const char *path, git_filter_mode_t mode, uint32_t flags", + "sig": "git_filter_list **::git_repository *::git_blob *::const char *::git_filter_mode_t::uint32_t", + "return": { + "type": "int", + "comment": " 0 on success (which could still return NULL if no filters are\n needed for the requested file), \n<\n0 on error" + }, + "description": "

Load the filter list for a given path.

\n", + "comments": "

This will return 0 (success) but set the output git_filter_list to NULL if no filters are requested for the given file.

\n", + "group": "filter" + }, + "git_filter_list_load_ext": { + "type": "function", + "file": "git2/filter.h", + "line": 152, + "lineto": 158, + "args": [ + { + "name": "filters", + "type": "git_filter_list **", + "comment": "Output newly created git_filter_list (or NULL)" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository object that contains `path`" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "The blob to which the filter will be applied (if known)" + }, + { + "name": "path", + "type": "const char *", + "comment": "Relative path of the file to be filtered" + }, + { + "name": "mode", + "type": "git_filter_mode_t", + "comment": "Filtering direction (WT->ODB or ODB->WT)" + }, + { + "name": "opts", + "type": "git_filter_options *", + "comment": "The `git_filter_options` to use when loading filters" + } + ], + "argline": "git_filter_list **filters, git_repository *repo, git_blob *blob, const char *path, git_filter_mode_t mode, git_filter_options *opts", + "sig": "git_filter_list **::git_repository *::git_blob *::const char *::git_filter_mode_t::git_filter_options *", + "return": { + "type": "int", + "comment": " 0 on success (which could still return NULL if no filters are\n needed for the requested file), \n<\n0 on error" + }, + "description": "

Load the filter list for a given path.

\n", + "comments": "

This will return 0 (success) but set the output git_filter_list to NULL if no filters are requested for the given file.

\n", + "group": "filter" + }, + "git_filter_list_contains": { + "type": "function", + "file": "git2/filter.h", + "line": 172, + "lineto": 174, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "A loaded git_filter_list (or NULL)" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the filter to query" + } + ], + "argline": "git_filter_list *filters, const char *name", + "sig": "git_filter_list *::const char *", + "return": { + "type": "int", + "comment": " 1 if the filter is in the list, 0 otherwise" + }, + "description": "

Query the filter list to see if a given filter (by name) will run.\n The built-in filters "crlf" and "ident" can be queried, otherwise this\n is the name of the filter specified by the filter attribute.

\n", + "comments": "

This will return 0 if the given filter is not in the list, or 1 if the filter will be applied.

\n", + "group": "filter" + }, + "git_filter_list_apply_to_buffer": { + "type": "function", + "file": "git2/filter.h", + "line": 185, + "lineto": 189, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Buffer to store the result of the filtering" + }, + { + "name": "filters", + "type": "git_filter_list *", + "comment": "A loaded git_filter_list (or NULL)" + }, + { + "name": "in", + "type": "const char *", + "comment": "Buffer containing the data to filter" + }, + { + "name": "in_len", + "type": "size_t", + "comment": "The length of the input buffer" + } + ], + "argline": "git_buf *out, git_filter_list *filters, const char *in, size_t in_len", + "sig": "git_buf *::git_filter_list *::const char *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, an error code otherwise" + }, + "description": "

Apply filter list to a data buffer.

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_apply_to_file": { + "type": "function", + "file": "git2/filter.h", + "line": 201, + "lineto": 205, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer into which to store the filtered file" + }, + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the filtering" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path of the file to filter, a relative path will be\n taken as relative to the workdir" + } + ], + "argline": "git_buf *out, git_filter_list *filters, git_repository *repo, const char *path", + "sig": "git_buf *::git_filter_list *::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Apply a filter list to the contents of a file on disk

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_apply_to_blob": { + "type": "function", + "file": "git2/filter.h", + "line": 215, + "lineto": 218, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer into which to store the filtered file" + }, + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "the blob to filter" + } + ], + "argline": "git_buf *out, git_filter_list *filters, git_blob *blob", + "sig": "git_buf *::git_filter_list *::git_blob *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Apply a filter list to the contents of a blob

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_stream_buffer": { + "type": "function", + "file": "git2/filter.h", + "line": 229, + "lineto": 233, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "the buffer to filter" + }, + { + "name": "len", + "type": "size_t", + "comment": "the size of the buffer" + }, + { + "name": "target", + "type": "git_writestream *", + "comment": "the stream into which the data will be written" + } + ], + "argline": "git_filter_list *filters, const char *buffer, size_t len, git_writestream *target", + "sig": "git_filter_list *::const char *::size_t::git_writestream *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Apply a filter list to an arbitrary buffer as a stream

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_stream_file": { + "type": "function", + "file": "git2/filter.h", + "line": 245, + "lineto": 249, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the filtering" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path of the file to filter, a relative path will be\n taken as relative to the workdir" + }, + { + "name": "target", + "type": "git_writestream *", + "comment": "the stream into which the data will be written" + } + ], + "argline": "git_filter_list *filters, git_repository *repo, const char *path, git_writestream *target", + "sig": "git_filter_list *::git_repository *::const char *::git_writestream *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Apply a filter list to a file as a stream

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_stream_blob": { + "type": "function", + "file": "git2/filter.h", + "line": 259, + "lineto": 262, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "the list of filters to apply" + }, + { + "name": "blob", + "type": "git_blob *", + "comment": "the blob to filter" + }, + { + "name": "target", + "type": "git_writestream *", + "comment": "the stream into which the data will be written" + } + ], + "argline": "git_filter_list *filters, git_blob *blob, git_writestream *target", + "sig": "git_filter_list *::git_blob *::git_writestream *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Apply a filter list to a blob as a stream

\n", + "comments": "", + "group": "filter" + }, + "git_filter_list_free": { + "type": "function", + "file": "git2/filter.h", + "line": 269, + "lineto": 269, + "args": [ + { + "name": "filters", + "type": "git_filter_list *", + "comment": "A git_filter_list created by `git_filter_list_load`" + } + ], + "argline": "git_filter_list *filters", + "sig": "git_filter_list *", + "return": { "type": "void", "comment": null }, + "description": "

Free a git_filter_list

\n", + "comments": "", + "group": "filter" + }, + "git_libgit2_init": { + "type": "function", + "file": "git2/global.h", + "line": 26, + "lineto": 26, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "int", + "comment": " the number of initializations of the library, or an error code." + }, + "description": "

Init the global state

\n", + "comments": "

This function must be called before any other libgit2 function in order to set up global state and threading.

\n\n

This function may be called multiple times - it will return the number of times the initialization has been called (including this one) that have not subsequently been shutdown.

\n", + "group": "libgit2", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_libgit2_init-34"] + } + }, + "git_libgit2_shutdown": { + "type": "function", + "file": "git2/global.h", + "line": 39, + "lineto": 39, + "args": [], + "argline": "", + "sig": "", + "return": { + "type": "int", + "comment": " the number of remaining initializations of the library, or an\n error code." + }, + "description": "

Shutdown the global state

\n", + "comments": "

Clean up the global state and threading context after calling it as many times as git_libgit2_init() was called - it will return the number of remainining initializations that have not been shutdown (after this one).

\n", + "group": "libgit2" + }, + "git_graph_ahead_behind": { + "type": "function", + "file": "git2/graph.h", + "line": 38, + "lineto": 38, + "args": [ + { + "name": "ahead", + "type": "size_t *", + "comment": "number of unique from commits in `upstream`" + }, + { + "name": "behind", + "type": "size_t *", + "comment": "number of unique from commits in `local`" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "local", + "type": "const git_oid *", + "comment": "the commit for local" + }, + { + "name": "upstream", + "type": "const git_oid *", + "comment": "the commit for upstream" + } + ], + "argline": "size_t *ahead, size_t *behind, git_repository *repo, const git_oid *local, const git_oid *upstream", + "sig": "size_t *::size_t *::git_repository *::const git_oid *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Count the number of unique commits between two commit objects

\n", + "comments": "

There is no need for branches containing the commits to have any upstream relationship, but it helps to think of one as a branch and the other as its upstream, the ahead and behind values will be what git would report for the branches.

\n", + "group": "graph" + }, + "git_graph_descendant_of": { + "type": "function", + "file": "git2/graph.h", + "line": 53, + "lineto": 56, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "commit", + "type": "const git_oid *", + "comment": "a previously loaded commit" + }, + { + "name": "ancestor", + "type": "const git_oid *", + "comment": "a potential ancestor commit" + } + ], + "argline": "git_repository *repo, const git_oid *commit, const git_oid *ancestor", + "sig": "git_repository *::const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " 1 if the given commit is a descendant of the potential ancestor,\n 0 if not, error code otherwise." + }, + "description": "

Determine if a commit is the descendant of another commit.

\n", + "comments": "

Note that a commit is not considered a descendant of itself, in contrast to git merge-base --is-ancestor.

\n", + "group": "graph" + }, + "git_graph_reachable_from_any": { + "type": "function", + "file": "git2/graph.h", + "line": 69, + "lineto": 73, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "commit", + "type": "const git_oid *", + "comment": "a previously loaded commit" + }, + { + "name": "descendant_array", + "type": "const git_oid []", + "comment": "oids of the commits" + }, + { + "name": "length", + "type": "size_t", + "comment": "the number of commits in the provided `descendant_array`" + } + ], + "argline": "git_repository *repo, const git_oid *commit, const git_oid [] descendant_array, size_t length", + "sig": "git_repository *::const git_oid *::const git_oid []::size_t", + "return": { + "type": "int", + "comment": " 1 if the given commit is an ancestor of any of the given potential\n descendants, 0 if not, error code otherwise." + }, + "description": "

Determine if a commit is reachable from any of a list of commits by\n following parent edges.

\n", + "comments": "", + "group": "graph" + }, + "git_ignore_add_rule": { + "type": "function", + "file": "git2/ignore.h", + "line": 37, + "lineto": 39, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to add ignore rules to." + }, + { + "name": "rules", + "type": "const char *", + "comment": "Text of rules, the contents to add on a .gitignore file.\n It is okay to have multiple rules in the text; if so,\n each rule should be terminated with a newline." + } + ], + "argline": "git_repository *repo, const char *rules", + "sig": "git_repository *::const char *", + "return": { "type": "int", "comment": " 0 on success" }, + "description": "

Add ignore rules for a repository.

\n", + "comments": "

Excludesfile rules (i.e. .gitignore rules) are generally read from .gitignore files in the repository tree or from a shared system file only if a "core.excludesfile" config value is set. The library also keeps a set of per-repository internal ignores that can be configured in-memory and will not persist. This function allows you to add to that internal rules list.

\n\n

Example usage:

\n\n
 error = git_ignore_add_rule(myrepo, "*.c/ with space");\n
\n\n

This would add three rules to the ignores.

\n", + "group": "ignore" + }, + "git_ignore_clear_internal_rules": { + "type": "function", + "file": "git2/ignore.h", + "line": 52, + "lineto": 53, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to remove ignore rules from." + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { "type": "int", "comment": " 0 on success" }, + "description": "

Clear ignore rules that were explicitly added.

\n", + "comments": "

Resets to the default internal ignore rules. This will not turn off rules in .gitignore files that actually exist in the filesystem.

\n\n

The default internal ignores ignore ".", ".." and ".git" entries.

\n", + "group": "ignore" + }, + "git_ignore_path_is_ignored": { + "type": "function", + "file": "git2/ignore.h", + "line": 71, + "lineto": 74, + "args": [ + { + "name": "ignored", + "type": "int *", + "comment": "boolean returning 0 if the file is not ignored, 1 if it is" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "a repository object" + }, + { + "name": "path", + "type": "const char *", + "comment": "the file to check ignores for, relative to the repo's workdir." + } + ], + "argline": "int *ignored, git_repository *repo, const char *path", + "sig": "int *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 if ignore rules could be processed for the file (regardless\n of whether it exists or not), or an error \n<\n 0 if they could not." + }, + "description": "

Test if the ignore rules apply to a given path.

\n", + "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git check-ignore --no-index" on the given file, would it be shown or not?

\n", + "group": "ignore" + }, + "git_index_free": { + "type": "function", + "file": "git2/index.h", + "line": 216, + "lineto": 216, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { "type": "void", "comment": null }, + "description": "

Free an existing index object.

\n", + "comments": "", + "group": "index", + "examples": { + "add.c": ["ex/v1.8.4/add.html#git_index_free-1"], + "commit.c": ["ex/v1.8.4/commit.html#git_index_free-3"], + "general.c": ["ex/v1.8.4/general.html#git_index_free-35"], + "init.c": ["ex/v1.8.4/init.html#git_index_free-2"], + "ls-files.c": ["ex/v1.8.4/ls-files.html#git_index_free-1"] + } + }, + "git_index_owner": { + "type": "function", + "file": "git2/index.h", + "line": 224, + "lineto": 224, + "args": [ + { "name": "index", "type": "const git_index *", "comment": "The index" } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "git_repository *", + "comment": " A pointer to the repository" + }, + "description": "

Get the repository this index relates to

\n", + "comments": "", + "group": "index" + }, + "git_index_caps": { + "type": "function", + "file": "git2/index.h", + "line": 232, + "lineto": 232, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "An existing index object" + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "int", + "comment": " A combination of GIT_INDEX_CAPABILITY values" + }, + "description": "

Read index capabilities flags.

\n", + "comments": "", + "group": "index" + }, + "git_index_set_caps": { + "type": "function", + "file": "git2/index.h", + "line": 245, + "lineto": 245, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + }, + { + "name": "caps", + "type": "int", + "comment": "A combination of GIT_INDEX_CAPABILITY values" + } + ], + "argline": "git_index *index, int caps", + "sig": "git_index *::int", + "return": { "type": "int", "comment": " 0 on success, -1 on failure" }, + "description": "

Set index capabilities flags.

\n", + "comments": "

If you pass GIT_INDEX_CAPABILITY_FROM_OWNER for the caps, then capabilities will be read from the config of the owner object, looking at core.ignorecase, core.filemode, core.symlinks.

\n", + "group": "index" + }, + "git_index_version": { + "type": "function", + "file": "git2/index.h", + "line": 257, + "lineto": 257, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { "type": "unsigned int", "comment": " the index version" }, + "description": "

Get index on-disk version.

\n", + "comments": "

Valid return values are 2, 3, or 4. If 3 is returned, an index with version 2 may be written instead, if the extension data in version 3 is not necessary.

\n", + "group": "index" + }, + "git_index_set_version": { + "type": "function", + "file": "git2/index.h", + "line": 270, + "lineto": 270, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The new version number" + } + ], + "argline": "git_index *index, unsigned int version", + "sig": "git_index *::unsigned int", + "return": { "type": "int", "comment": " 0 on success, -1 on failure" }, + "description": "

Set index on-disk version.

\n", + "comments": "

Valid values are 2, 3, or 4. If 2 is given, git_index_write may write an index with version 3 instead, if necessary to accurately represent the index.

\n", + "group": "index" + }, + "git_index_read": { + "type": "function", + "file": "git2/index.h", + "line": 289, + "lineto": 289, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "force", + "type": "int", + "comment": "if true, always reload, vs. only read if file has changed" + } + ], + "argline": "git_index *index, int force", + "sig": "git_index *::int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Update the contents of an existing index object in memory by reading\n from the hard disk.

\n", + "comments": "

If force is true, this performs a "hard" read that discards in-memory changes and always reloads the on-disk index data. If there is no on-disk version, the index will be cleared.

\n\n

If force is false, this does a "soft" read that reloads the index data from disk only if it has changed since the last time it was loaded. Purely in-memory index data will be untouched. Be aware: if there are changes on disk, unwritten in-memory changes are discarded.

\n", + "group": "index" + }, + "git_index_write": { + "type": "function", + "file": "git2/index.h", + "line": 298, + "lineto": 298, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Write an existing index object from memory back to disk\n using an atomic file lock.

\n", + "comments": "", + "group": "index", + "examples": { + "add.c": ["ex/v1.8.4/add.html#git_index_write-2"], + "commit.c": ["ex/v1.8.4/commit.html#git_index_write-4"] + } + }, + "git_index_path": { + "type": "function", + "file": "git2/index.h", + "line": 306, + "lineto": 306, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "an existing index object" + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "const char *", + "comment": " path to index file or NULL for in-memory index" + }, + "description": "

Get the full path to the index file on disk.

\n", + "comments": "", + "group": "index" + }, + "git_index_checksum": { + "type": "function", + "file": "git2/index.h", + "line": 320, + "lineto": 320, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { + "type": "const git_oid *", + "comment": " a pointer to the checksum of the index" + }, + "description": "

Get the checksum of the index

\n", + "comments": "

This checksum is the SHA-1 hash over the index file (except the last 20 bytes which are the checksum itself). In cases where the index does not exist on-disk, it will be zeroed out.

\n", + "group": "index" + }, + "git_index_read_tree": { + "type": "function", + "file": "git2/index.h", + "line": 332, + "lineto": 332, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "tree to read" + } + ], + "argline": "git_index *index, const git_tree *tree", + "sig": "git_index *::const git_tree *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Read a tree into the index file with stats

\n", + "comments": "

The current index contents will be replaced by the specified tree.

\n", + "group": "index" + }, + "git_index_write_tree": { + "type": "function", + "file": "git2/index.h", + "line": 353, + "lineto": 353, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the written tree" + }, + { "name": "index", "type": "git_index *", "comment": "Index to write" } + ], + "argline": "git_oid *out, git_index *index", + "sig": "git_oid *::git_index *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNMERGED when the index is not clean\n or an error code" + }, + "description": "

Write the index as a tree

\n", + "comments": "

This method will scan the index and write a representation of its current state back to disk; it recursively creates tree objects for each of the subtrees stored in the index, but only returns the OID of the root tree. This is the OID that can be used e.g. to create a commit.

\n\n

The index instance cannot be bare, and needs to be associated to an existing repository.

\n\n

The index must not contain any file in conflict.

\n", + "group": "index", + "examples": { + "commit.c": ["ex/v1.8.4/commit.html#git_index_write_tree-5"], + "init.c": ["ex/v1.8.4/init.html#git_index_write_tree-3"], + "merge.c": ["ex/v1.8.4/merge.html#git_index_write_tree-10"] + } + }, + "git_index_write_tree_to": { + "type": "function", + "file": "git2/index.h", + "line": 370, + "lineto": 370, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer where to store OID of the written tree" + }, + { "name": "index", "type": "git_index *", "comment": "Index to write" }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to write the tree" + } + ], + "argline": "git_oid *out, git_index *index, git_repository *repo", + "sig": "git_oid *::git_index *::git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNMERGED when the index is not clean\n or an error code" + }, + "description": "

Write the index as a tree to the given repository

\n", + "comments": "

This method will do the same as git_index_write_tree, but letting the user choose the repository where the tree will be written.

\n\n

The index must not contain any file in conflict.

\n", + "group": "index" + }, + "git_index_entrycount": { + "type": "function", + "file": "git2/index.h", + "line": 389, + "lineto": 389, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "an existing index object" + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "size_t", + "comment": " integer of count of current entries" + }, + "description": "

Get the count of entries currently in the index

\n", + "comments": "", + "group": "index", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_index_entrycount-36"], + "ls-files.c": ["ex/v1.8.4/ls-files.html#git_index_entrycount-2"] + } + }, + "git_index_clear": { + "type": "function", + "file": "git2/index.h", + "line": 400, + "lineto": 400, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { + "type": "int", + "comment": " 0 on success, error code \n<\n 0 on failure" + }, + "description": "

Clear the contents (all the entries) of an index object.

\n", + "comments": "

This clears the index object in memory; changes must be explicitly written to disk for them to take effect persistently.

\n", + "group": "index" + }, + "git_index_get_byindex": { + "type": "function", + "file": "git2/index.h", + "line": 413, + "lineto": 414, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "n", + "type": "size_t", + "comment": "the position of the entry" + } + ], + "argline": "git_index *index, size_t n", + "sig": "git_index *::size_t", + "return": { + "type": "const git_index_entry *", + "comment": " a pointer to the entry; NULL if out of bounds" + }, + "description": "

Get a pointer to one of the entries in the index

\n", + "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", + "group": "index", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_index_get_byindex-37"], + "ls-files.c": ["ex/v1.8.4/ls-files.html#git_index_get_byindex-3"] + } + }, + "git_index_get_bypath": { + "type": "function", + "file": "git2/index.h", + "line": 428, + "lineto": 429, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { "name": "path", "type": "const char *", "comment": "path to search" }, + { "name": "stage", "type": "int", "comment": "stage to search" } + ], + "argline": "git_index *index, const char *path, int stage", + "sig": "git_index *::const char *::int", + "return": { + "type": "const git_index_entry *", + "comment": " a pointer to the entry; NULL if it was not found" + }, + "description": "

Get a pointer to one of the entries in the index

\n", + "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", + "group": "index", + "examples": { + "ls-files.c": ["ex/v1.8.4/ls-files.html#git_index_get_bypath-4"] + } + }, + "git_index_remove": { + "type": "function", + "file": "git2/index.h", + "line": 439, + "lineto": 439, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { "name": "path", "type": "const char *", "comment": "path to search" }, + { "name": "stage", "type": "int", "comment": "stage to search" } + ], + "argline": "git_index *index, const char *path, int stage", + "sig": "git_index *::const char *::int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Remove an entry from the index

\n", + "comments": "", + "group": "index" + }, + "git_index_remove_directory": { + "type": "function", + "file": "git2/index.h", + "line": 449, + "lineto": 450, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "dir", + "type": "const char *", + "comment": "container directory path" + }, + { "name": "stage", "type": "int", "comment": "stage to search" } + ], + "argline": "git_index *index, const char *dir, int stage", + "sig": "git_index *::const char *::int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Remove all entries from the index under a given directory

\n", + "comments": "", + "group": "index" + }, + "git_index_add": { + "type": "function", + "file": "git2/index.h", + "line": 466, + "lineto": 466, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "source_entry", + "type": "const git_index_entry *", + "comment": "new entry object" + } + ], + "argline": "git_index *index, const git_index_entry *source_entry", + "sig": "git_index *::const git_index_entry *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add or update an index entry from an in-memory struct

\n", + "comments": "

If a previous index entry exists that has the same path and stage as the given 'source_entry', it will be replaced. Otherwise, the 'source_entry' will be added.

\n\n

A full copy (including the 'path' string) of the given 'source_entry' will be inserted on the index.

\n", + "group": "index" + }, + "git_index_entry_stage": { + "type": "function", + "file": "git2/index.h", + "line": 478, + "lineto": 478, + "args": [ + { + "name": "entry", + "type": "const git_index_entry *", + "comment": "The entry" + } + ], + "argline": "const git_index_entry *entry", + "sig": "const git_index_entry *", + "return": { "type": "int", "comment": " the stage number" }, + "description": "

Return the stage number from a git index entry

\n", + "comments": "

This entry is calculated from the entry's flag attribute like this:

\n\n
(entry->flags & GIT_INDEX_ENTRY_STAGEMASK) >> GIT_INDEX_ENTRY_STAGESHIFT\n
\n", + "group": "index" + }, + "git_index_entry_is_conflict": { + "type": "function", + "file": "git2/index.h", + "line": 487, + "lineto": 487, + "args": [ + { + "name": "entry", + "type": "const git_index_entry *", + "comment": "The entry" + } + ], + "argline": "const git_index_entry *entry", + "sig": "const git_index_entry *", + "return": { + "type": "int", + "comment": " 1 if the entry is a conflict entry, 0 otherwise" + }, + "description": "

Return whether the given index entry is a conflict (has a high stage\n entry). This is simply shorthand for git_index_entry_stage > 0.

\n", + "comments": "", + "group": "index" + }, + "git_index_iterator_new": { + "type": "function", + "file": "git2/index.h", + "line": 508, + "lineto": 510, + "args": [ + { + "name": "iterator_out", + "type": "git_index_iterator **", + "comment": "The newly created iterator" + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to iterate" + } + ], + "argline": "git_index_iterator **iterator_out, git_index *index", + "sig": "git_index_iterator **::git_index *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Create an iterator that will return every entry contained in the\n index at the time of creation. Entries are returned in order,\n sorted by path. This iterator is backed by a snapshot that allows\n callers to modify the index while iterating without affecting the\n iterator.

\n", + "comments": "", + "group": "index" + }, + "git_index_iterator_next": { + "type": "function", + "file": "git2/index.h", + "line": 519, + "lineto": 521, + "args": [ + { + "name": "out", + "type": "const git_index_entry **", + "comment": "Pointer to store the index entry in" + }, + { + "name": "iterator", + "type": "git_index_iterator *", + "comment": "The iterator" + } + ], + "argline": "const git_index_entry **out, git_index_iterator *iterator", + "sig": "const git_index_entry **::git_index_iterator *", + "return": { + "type": "int", + "comment": " 0, GIT_ITEROVER on iteration completion or an error code" + }, + "description": "

Return the next index entry in-order from the iterator.

\n", + "comments": "", + "group": "index" + }, + "git_index_iterator_free": { + "type": "function", + "file": "git2/index.h", + "line": 528, + "lineto": 528, + "args": [ + { + "name": "iterator", + "type": "git_index_iterator *", + "comment": "The iterator to free" + } + ], + "argline": "git_index_iterator *iterator", + "sig": "git_index_iterator *", + "return": { "type": "void", "comment": null }, + "description": "

Free the index iterator

\n", + "comments": "", + "group": "index" + }, + "git_index_add_bypath": { + "type": "function", + "file": "git2/index.h", + "line": 559, + "lineto": 559, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { "name": "path", "type": "const char *", "comment": "filename to add" } + ], + "argline": "git_index *index, const char *path", + "sig": "git_index *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add or update an index entry from a file on disk

\n", + "comments": "

The file path must be relative to the repository's working folder and must be readable.

\n\n

This method will fail in bare index instances.

\n\n

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", + "group": "index" + }, + "git_index_add_from_buffer": { + "type": "function", + "file": "git2/index.h", + "line": 587, + "lineto": 590, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "entry", + "type": "const git_index_entry *", + "comment": "filename to add" + }, + { + "name": "buffer", + "type": "const void *", + "comment": "data to be written into the blob" + }, + { "name": "len", "type": "size_t", "comment": "length of the data" } + ], + "argline": "git_index *index, const git_index_entry *entry, const void *buffer, size_t len", + "sig": "git_index *::const git_index_entry *::const void *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add or update an index entry from a buffer in memory

\n", + "comments": "

This method will create a blob in the repository that owns the index and then add the index entry to the index. The path of the entry represents the position of the blob relative to the repository's root folder.

\n\n

If a previous index entry exists that has the same path as the given 'entry', it will be replaced. Otherwise, the 'entry' will be added.

\n\n

This forces the file to be added to the index, not looking at gitignore rules. Those rules can be evaluated through the git_status APIs (in status.h) before calling this.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", + "group": "index" + }, + "git_index_remove_bypath": { + "type": "function", + "file": "git2/index.h", + "line": 606, + "lineto": 606, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "filename to remove" + } + ], + "argline": "git_index *index, const char *path", + "sig": "git_index *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Remove an index entry corresponding to a file on disk

\n", + "comments": "

The file path must be relative to the repository's working folder. It may exist.

\n\n

If this file currently is the result of a merge conflict, this file will no longer be marked as conflicting. The data about the conflict will be moved to the "resolve undo" (REUC) section.

\n", + "group": "index" + }, + "git_index_add_all": { + "type": "function", + "file": "git2/index.h", + "line": 654, + "lineto": 659, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "pathspec", + "type": "const git_strarray *", + "comment": "array of path patterns" + }, + { + "name": "flags", + "type": "unsigned int", + "comment": "combination of git_index_add_option_t flags" + }, + { + "name": "callback", + "type": "git_index_matched_path_cb", + "comment": "notification callback for each added/updated path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." + }, + { + "name": "payload", + "type": "void *", + "comment": "payload passed through to callback function" + } + ], + "argline": "git_index *index, const git_strarray *pathspec, unsigned int flags, git_index_matched_path_cb callback, void *payload", + "sig": "git_index *::const git_strarray *::unsigned int::git_index_matched_path_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, negative callback return value, or error code" + }, + "description": "

Add or update index entries matching files in the working directory.

\n", + "comments": "

This method will fail in bare index instances.

\n\n

The pathspec is a list of file names or shell glob patterns that will be matched against files in the repository's working directory. Each file that matches will be added to the index (either updating an existing entry or adding a new entry). You can disable glob expansion and force exact matching with the GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH flag.

\n\n

Files that are ignored will be skipped (unlike git_index_add_bypath). If a file is already tracked in the index, then it will be updated even if it is ignored. Pass the GIT_INDEX_ADD_FORCE flag to skip the checking of ignore rules.

\n\n

To emulate git add -A and generate an error if the pathspec contains the exact path of an ignored file (when not using FORCE), add the GIT_INDEX_ADD_CHECK_PATHSPEC flag. This checks that each entry in the pathspec that is an exact match to a filename on disk is either not ignored or already in the index. If this check fails, the function will return GIT_EINVALIDSPEC.

\n\n

To emulate git add -A with the "dry-run" option, just use a callback function that always returns a positive value. See below for details.

\n\n

If any files are currently the result of a merge conflict, those files will no longer be marked as conflicting. The data about the conflicts will be moved to the "resolve undo" (REUC) section.

\n\n

If you provide a callback function, it will be invoked on each matching item in the working directory immediately before it is added to / updated in the index. Returning zero will add the item to the index, greater than zero will skip the item, and less than zero will abort the scan and return that value to the caller.

\n", + "group": "index", + "examples": { "add.c": ["ex/v1.8.4/add.html#git_index_add_all-3"] } + }, + "git_index_remove_all": { + "type": "function", + "file": "git2/index.h", + "line": 676, + "lineto": 680, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + }, + { + "name": "pathspec", + "type": "const git_strarray *", + "comment": "array of path patterns" + }, + { + "name": "callback", + "type": "git_index_matched_path_cb", + "comment": "notification callback for each removed path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." + }, + { + "name": "payload", + "type": "void *", + "comment": "payload passed through to callback function" + } + ], + "argline": "git_index *index, const git_strarray *pathspec, git_index_matched_path_cb callback, void *payload", + "sig": "git_index *::const git_strarray *::git_index_matched_path_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, negative callback return value, or error code" + }, + "description": "

Remove all matching index entries.

\n", + "comments": "

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is removed. Return 0 to remove the item, > 0 to skip the item, and < 0 to abort the scan.

\n", + "group": "index" + }, + "git_index_update_all": { + "type": "function", + "file": "git2/index.h", + "line": 705, + "lineto": 709, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "An existing index object" + }, + { + "name": "pathspec", + "type": "const git_strarray *", + "comment": "array of path patterns" + }, + { + "name": "callback", + "type": "git_index_matched_path_cb", + "comment": "notification callback for each updated path (also\n gets index of matching pathspec entry); can be NULL;\n return 0 to add, >0 to skip, \n<\n0 to abort scan." + }, + { + "name": "payload", + "type": "void *", + "comment": "payload passed through to callback function" + } + ], + "argline": "git_index *index, const git_strarray *pathspec, git_index_matched_path_cb callback, void *payload", + "sig": "git_index *::const git_strarray *::git_index_matched_path_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, negative callback return value, or error code" + }, + "description": "

Update all index entries to match the working directory

\n", + "comments": "

This method will fail in bare index instances.

\n\n

This scans the existing index entries and synchronizes them with the working directory, deleting them if the corresponding working directory file no longer exists otherwise updating the information (including adding the latest version of file to the ODB if needed).

\n\n

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is updated (either refreshed or removed depending on working directory state). Return 0 to proceed with updating the item, > 0 to skip the item, and < 0 to abort the scan.

\n", + "group": "index", + "examples": { "add.c": ["ex/v1.8.4/add.html#git_index_update_all-4"] } + }, + "git_index_find": { + "type": "function", + "file": "git2/index.h", + "line": 720, + "lineto": 720, + "args": [ + { + "name": "at_pos", + "type": "size_t *", + "comment": "the address to which the position of the index entry is written (optional)" + }, + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { "name": "path", "type": "const char *", "comment": "path to search" } + ], + "argline": "size_t *at_pos, git_index *index, const char *path", + "sig": "size_t *::git_index *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Find the first position of any entries which point to given\n path in the Git index.

\n", + "comments": "", + "group": "index" + }, + "git_index_find_prefix": { + "type": "function", + "file": "git2/index.h", + "line": 731, + "lineto": 731, + "args": [ + { + "name": "at_pos", + "type": "size_t *", + "comment": "the address to which the position of the index entry is written (optional)" + }, + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "prefix", + "type": "const char *", + "comment": "the prefix to search for" + } + ], + "argline": "size_t *at_pos, git_index *index, const char *prefix", + "sig": "size_t *::git_index *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Find the first position of any entries matching a prefix. To find the first position\n of a path inside a given folder, suffix the prefix with a '/'.

\n", + "comments": "", + "group": "index" + }, + "git_index_conflict_add": { + "type": "function", + "file": "git2/index.h", + "line": 756, + "lineto": 760, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "ancestor_entry", + "type": "const git_index_entry *", + "comment": "the entry data for the ancestor of the conflict" + }, + { + "name": "our_entry", + "type": "const git_index_entry *", + "comment": "the entry data for our side of the merge conflict" + }, + { + "name": "their_entry", + "type": "const git_index_entry *", + "comment": "the entry data for their side of the merge conflict" + } + ], + "argline": "git_index *index, const git_index_entry *ancestor_entry, const git_index_entry *our_entry, const git_index_entry *their_entry", + "sig": "git_index *::const git_index_entry *::const git_index_entry *::const git_index_entry *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add or update index entries to represent a conflict. Any staged\n entries that exist at the given paths will be removed.

\n", + "comments": "

The entries are the entries from the tree included in the merge. Any entry may be null to indicate that that file was not present in the trees during the merge. For example, ancestor_entry may be NULL to indicate that a file was added in both branches and must be resolved.

\n", + "group": "index" + }, + "git_index_conflict_get": { + "type": "function", + "file": "git2/index.h", + "line": 776, + "lineto": 781, + "args": [ + { + "name": "ancestor_out", + "type": "const git_index_entry **", + "comment": "Pointer to store the ancestor entry" + }, + { + "name": "our_out", + "type": "const git_index_entry **", + "comment": "Pointer to store the our entry" + }, + { + "name": "their_out", + "type": "const git_index_entry **", + "comment": "Pointer to store the their entry" + }, + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { "name": "path", "type": "const char *", "comment": "path to search" } + ], + "argline": "const git_index_entry **ancestor_out, const git_index_entry **our_out, const git_index_entry **their_out, git_index *index, const char *path", + "sig": "const git_index_entry **::const git_index_entry **::const git_index_entry **::git_index *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the index entries that represent a conflict of a single file.

\n", + "comments": "

The entries are not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", + "group": "index" + }, + "git_index_conflict_remove": { + "type": "function", + "file": "git2/index.h", + "line": 790, + "lineto": 790, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to remove conflicts for" + } + ], + "argline": "git_index *index, const char *path", + "sig": "git_index *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Removes the index entries that represent a conflict of a single file.

\n", + "comments": "", + "group": "index" + }, + "git_index_conflict_cleanup": { + "type": "function", + "file": "git2/index.h", + "line": 798, + "lineto": 798, + "args": [ + { + "name": "index", + "type": "git_index *", + "comment": "an existing index object" + } + ], + "argline": "git_index *index", + "sig": "git_index *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Remove all conflicts in the index (entries with a stage greater than 0).

\n", + "comments": "", + "group": "index" + }, + "git_index_has_conflicts": { + "type": "function", + "file": "git2/index.h", + "line": 806, + "lineto": 806, + "args": [ + { + "name": "index", + "type": "const git_index *", + "comment": "An existing index object." + } + ], + "argline": "const git_index *index", + "sig": "const git_index *", + "return": { + "type": "int", + "comment": " 1 if at least one conflict is found, 0 otherwise." + }, + "description": "

Determine if the index contains entries representing file conflicts.

\n", + "comments": "", + "group": "index", + "examples": { + "merge.c": ["ex/v1.8.4/merge.html#git_index_has_conflicts-11"] + } + }, + "git_index_conflict_iterator_new": { + "type": "function", + "file": "git2/index.h", + "line": 817, + "lineto": 819, + "args": [ + { + "name": "iterator_out", + "type": "git_index_conflict_iterator **", + "comment": "The newly created conflict iterator" + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to scan" + } + ], + "argline": "git_index_conflict_iterator **iterator_out, git_index *index", + "sig": "git_index_conflict_iterator **::git_index *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create an iterator for the conflicts in the index.

\n", + "comments": "

The index must not be modified while iterating; the results are undefined.

\n", + "group": "index", + "examples": { + "merge.c": ["ex/v1.8.4/merge.html#git_index_conflict_iterator_new-12"] + } + }, + "git_index_conflict_next": { + "type": "function", + "file": "git2/index.h", + "line": 832, + "lineto": 836, + "args": [ + { + "name": "ancestor_out", + "type": "const git_index_entry **", + "comment": "Pointer to store the ancestor side of the conflict" + }, + { + "name": "our_out", + "type": "const git_index_entry **", + "comment": "Pointer to store our side of the conflict" + }, + { + "name": "their_out", + "type": "const git_index_entry **", + "comment": "Pointer to store their side of the conflict" + }, + { + "name": "iterator", + "type": "git_index_conflict_iterator *", + "comment": "The conflict iterator." + } + ], + "argline": "const git_index_entry **ancestor_out, const git_index_entry **our_out, const git_index_entry **their_out, git_index_conflict_iterator *iterator", + "sig": "const git_index_entry **::const git_index_entry **::const git_index_entry **::git_index_conflict_iterator *", + "return": { + "type": "int", + "comment": " 0 (no error), GIT_ITEROVER (iteration is done) or an error code\n (negative value)" + }, + "description": "

Returns the current conflict (ancestor, ours and theirs entry) and\n advance the iterator internally to the next value.

\n", + "comments": "", + "group": "index", + "examples": { + "merge.c": ["ex/v1.8.4/merge.html#git_index_conflict_next-13"] + } + }, + "git_index_conflict_iterator_free": { + "type": "function", + "file": "git2/index.h", + "line": 843, + "lineto": 844, + "args": [ + { + "name": "iterator", + "type": "git_index_conflict_iterator *", + "comment": "pointer to the iterator" + } + ], + "argline": "git_index_conflict_iterator *iterator", + "sig": "git_index_conflict_iterator *", + "return": { "type": "void", "comment": null }, + "description": "

Frees a git_index_conflict_iterator.

\n", + "comments": "", + "group": "index", + "examples": { + "merge.c": ["ex/v1.8.4/merge.html#git_index_conflict_iterator_free-14"] + } + }, + "git_indexer_options_init": { + "type": "function", + "file": "git2/indexer.h", + "line": 99, + "lineto": 101, + "args": [ + { + "name": "opts", + "type": "git_indexer_options *", + "comment": "the `git_indexer_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "Version of struct; pass `GIT_INDEXER_OPTIONS_VERSION`" + } + ], + "argline": "git_indexer_options *opts, unsigned int version", + "sig": "git_indexer_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initializes a git_indexer_options with default values. Equivalent to\n creating an instance with GIT_INDEXER_OPTIONS_INIT.

\n", + "comments": "", + "group": "indexer" + }, + "git_indexer_new": { + "type": "function", + "file": "git2/indexer.h", + "line": 131, + "lineto": 136, + "args": [ + { + "name": "out", + "type": "git_indexer **", + "comment": "where to store the indexer instance" + }, + { + "name": "path", + "type": "const char *", + "comment": "to the directory where the packfile should be stored" + }, + { + "name": "mode", + "type": "unsigned int", + "comment": "permissions to use creating packfile or 0 for defaults" + }, + { + "name": "odb", + "type": "git_odb *", + "comment": "object database from which to read base objects when\n fixing thin packs. Pass NULL if no thin pack is expected (an error\n will be returned if there are bases missing)" + }, + { + "name": "opts", + "type": "git_indexer_options *", + "comment": "Optional structure containing additional options. See\n `git_indexer_options` above." + } + ], + "argline": "git_indexer **out, const char *path, unsigned int mode, git_odb *odb, git_indexer_options *opts", + "sig": "git_indexer **::const char *::unsigned int::git_odb *::git_indexer_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Create a new indexer instance

\n", + "comments": "", + "group": "indexer" + }, + "git_indexer_append": { + "type": "function", + "file": "git2/indexer.h", + "line": 148, + "lineto": 148, + "args": [ + { "name": "idx", "type": "git_indexer *", "comment": "the indexer" }, + { + "name": "data", + "type": "const void *", + "comment": "the data to add" + }, + { + "name": "size", + "type": "size_t", + "comment": "the size of the data in bytes" + }, + { + "name": "stats", + "type": "git_indexer_progress *", + "comment": "stat storage" + } + ], + "argline": "git_indexer *idx, const void *data, size_t size, git_indexer_progress *stats", + "sig": "git_indexer *::const void *::size_t::git_indexer_progress *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Add data to the indexer

\n", + "comments": "", + "group": "indexer" + }, + "git_indexer_commit": { + "type": "function", + "file": "git2/indexer.h", + "line": 159, + "lineto": 159, + "args": [ + { "name": "idx", "type": "git_indexer *", "comment": "the indexer" }, + { + "name": "stats", + "type": "git_indexer_progress *", + "comment": "Stat storage." + } + ], + "argline": "git_indexer *idx, git_indexer_progress *stats", + "sig": "git_indexer *::git_indexer_progress *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Finalize the pack and index

\n", + "comments": "

Resolve any pending deltas and write out the index file

\n", + "group": "indexer" + }, + "git_indexer_hash": { + "type": "function", + "file": "git2/indexer.h", + "line": 172, + "lineto": 172, + "args": [ + { + "name": "idx", + "type": "const git_indexer *", + "comment": "the indexer instance" + } + ], + "argline": "const git_indexer *idx", + "sig": "const git_indexer *", + "return": { + "type": "const git_oid *", + "comment": " the packfile's hash" + }, + "description": "

Get the packfile's hash

\n", + "comments": "

A packfile's name is derived from the sorted hashing of all object names. This is only correct after the index has been finalized.

\n", + "group": "indexer" + }, + "git_indexer_name": { + "type": "function", + "file": "git2/indexer.h", + "line": 184, + "lineto": 184, + "args": [ + { + "name": "idx", + "type": "const git_indexer *", + "comment": "the indexer instance" + } + ], + "argline": "const git_indexer *idx", + "sig": "const git_indexer *", + "return": { + "type": "const char *", + "comment": " a NUL terminated string for the packfile name" + }, + "description": "

Get the unique name for the resulting packfile.

\n", + "comments": "

The packfile's name is derived from the packfile's content. This is only correct after the index has been finalized.

\n", + "group": "indexer" + }, + "git_indexer_free": { + "type": "function", + "file": "git2/indexer.h", + "line": 191, + "lineto": 191, + "args": [ + { + "name": "idx", + "type": "git_indexer *", + "comment": "the indexer to free" + } + ], + "argline": "git_indexer *idx", + "sig": "git_indexer *", + "return": { "type": "void", "comment": null }, + "description": "

Free the indexer and its resources

\n", + "comments": "", + "group": "indexer" + }, + "git_mailmap_new": { + "type": "function", + "file": "git2/mailmap.h", + "line": 32, + "lineto": 32, + "args": [ + { + "name": "out", + "type": "git_mailmap **", + "comment": "pointer to store the new mailmap" + } + ], + "argline": "git_mailmap **out", + "sig": "git_mailmap **", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Allocate a new mailmap object.

\n", + "comments": "

This object is empty, so you'll have to add a mailmap file before you can do anything with it. The mailmap must be freed with 'git_mailmap_free'.

\n", + "group": "mailmap" + }, + "git_mailmap_free": { + "type": "function", + "file": "git2/mailmap.h", + "line": 39, + "lineto": 39, + "args": [ + { + "name": "mm", + "type": "git_mailmap *", + "comment": "the mailmap to free" + } + ], + "argline": "git_mailmap *mm", + "sig": "git_mailmap *", + "return": { "type": "void", "comment": null }, + "description": "

Free the mailmap and its associated memory.

\n", + "comments": "", + "group": "mailmap" + }, + "git_mailmap_add_entry": { + "type": "function", + "file": "git2/mailmap.h", + "line": 52, + "lineto": 54, + "args": [ + { + "name": "mm", + "type": "git_mailmap *", + "comment": "mailmap to add the entry to" + }, + { + "name": "real_name", + "type": "const char *", + "comment": "the real name to use, or NULL" + }, + { + "name": "real_email", + "type": "const char *", + "comment": "the real email to use, or NULL" + }, + { + "name": "replace_name", + "type": "const char *", + "comment": "the name to replace, or NULL" + }, + { + "name": "replace_email", + "type": "const char *", + "comment": "the email to replace" + } + ], + "argline": "git_mailmap *mm, const char *real_name, const char *real_email, const char *replace_name, const char *replace_email", + "sig": "git_mailmap *::const char *::const char *::const char *::const char *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Add a single entry to the given mailmap object. If the entry already exists,\n it will be replaced with the new entry.

\n", + "comments": "", + "group": "mailmap" + }, + "git_mailmap_from_buffer": { + "type": "function", + "file": "git2/mailmap.h", + "line": 64, + "lineto": 65, + "args": [ + { + "name": "out", + "type": "git_mailmap **", + "comment": "pointer to store the new mailmap" + }, + { + "name": "buf", + "type": "const char *", + "comment": "buffer to parse the mailmap from" + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the input buffer" + } + ], + "argline": "git_mailmap **out, const char *buf, size_t len", + "sig": "git_mailmap **::const char *::size_t", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Create a new mailmap instance containing a single mailmap file

\n", + "comments": "", + "group": "mailmap" + }, + "git_mailmap_from_repository": { + "type": "function", + "file": "git2/mailmap.h", + "line": 81, + "lineto": 82, + "args": [ + { + "name": "out", + "type": "git_mailmap **", + "comment": "pointer to store the new mailmap" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository to load mailmap information from" + } + ], + "argline": "git_mailmap **out, git_repository *repo", + "sig": "git_mailmap **::git_repository *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Create a new mailmap instance from a repository, loading mailmap files based\n on the repository's configuration.

\n", + "comments": "

Mailmaps are loaded in the following order: 1. '.mailmap' in the root of the repository's working directory, if present. 2. The blob object identified by the 'mailmap.blob' config entry, if set. [NOTE: 'mailmap.blob' defaults to 'HEAD:.mailmap' in bare repositories] 3. The path in the 'mailmap.file' config entry, if set.

\n", + "group": "mailmap" + }, + "git_mailmap_resolve": { + "type": "function", + "file": "git2/mailmap.h", + "line": 96, + "lineto": 98, + "args": [ + { + "name": "real_name", + "type": "const char **", + "comment": "pointer to store the real name" + }, + { + "name": "real_email", + "type": "const char **", + "comment": "pointer to store the real email" + }, + { + "name": "mm", + "type": "const git_mailmap *", + "comment": "the mailmap to perform a lookup with (may be NULL)" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name to look up" + }, + { + "name": "email", + "type": "const char *", + "comment": "the email to look up" + } + ], + "argline": "const char **real_name, const char **real_email, const git_mailmap *mm, const char *name, const char *email", + "sig": "const char **::const char **::const git_mailmap *::const char *::const char *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Resolve a name and email to the corresponding real name and email.

\n", + "comments": "

The lifetime of the strings are tied to mm, name, and email parameters.

\n", + "group": "mailmap" + }, + "git_mailmap_resolve_signature": { + "type": "function", + "file": "git2/mailmap.h", + "line": 110, + "lineto": 111, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature" + }, + { + "name": "mm", + "type": "const git_mailmap *", + "comment": "mailmap to resolve with" + }, + { + "name": "sig", + "type": "const git_signature *", + "comment": "signature to resolve" + } + ], + "argline": "git_signature **out, const git_mailmap *mm, const git_signature *sig", + "sig": "git_signature **::const git_mailmap *::const git_signature *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Resolve a signature to use real names and emails with a mailmap.

\n", + "comments": "

Call git_signature_free() to free the data.

\n", + "group": "mailmap" + }, + "git_merge_file_input_init": { + "type": "function", + "file": "git2/merge.h", + "line": 60, + "lineto": 62, + "args": [ + { + "name": "opts", + "type": "git_merge_file_input *", + "comment": "the `git_merge_file_input` instance to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "the version of the struct; you should pass\n `GIT_MERGE_FILE_INPUT_VERSION` here." + } + ], + "argline": "git_merge_file_input *opts, unsigned int version", + "sig": "git_merge_file_input *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initializes a git_merge_file_input with default values. Equivalent to\n creating an instance with GIT_MERGE_FILE_INPUT_INIT.

\n", + "comments": "", + "group": "merge" + }, + "git_merge_file_options_init": { + "type": "function", + "file": "git2/merge.h", + "line": 233, + "lineto": 233, + "args": [ + { + "name": "opts", + "type": "git_merge_file_options *", + "comment": "The `git_merge_file_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_MERGE_FILE_OPTIONS_VERSION`." + } + ], + "argline": "git_merge_file_options *opts, unsigned int version", + "sig": "git_merge_file_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_merge_file_options structure

\n", + "comments": "

Initializes a git_merge_file_options with default values. Equivalent to creating an instance with GIT_MERGE_FILE_OPTIONS_INIT.

\n", + "group": "merge" + }, + "git_merge_options_init": { + "type": "function", + "file": "git2/merge.h", + "line": 329, + "lineto": 329, + "args": [ + { + "name": "opts", + "type": "git_merge_options *", + "comment": "The `git_merge_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_MERGE_OPTIONS_VERSION`." + } + ], + "argline": "git_merge_options *opts, unsigned int version", + "sig": "git_merge_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_merge_options structure

\n", + "comments": "

Initializes a git_merge_options with default values. Equivalent to creating an instance with GIT_MERGE_OPTIONS_INIT.

\n", + "group": "merge" + }, + "git_merge_analysis": { + "type": "function", + "file": "git2/merge.h", + "line": 399, + "lineto": 404, + "args": [ + { + "name": "analysis_out", + "type": "git_merge_analysis_t *", + "comment": "analysis enumeration that the result is written into" + }, + { + "name": "preference_out", + "type": "git_merge_preference_t *", + "comment": "One of the `git_merge_preference_t` flag." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to merge" + }, + { + "name": "their_heads", + "type": "const git_annotated_commit **", + "comment": "the heads to merge into" + }, + { + "name": "their_heads_len", + "type": "size_t", + "comment": "the number of heads to merge" + } + ], + "argline": "git_merge_analysis_t *analysis_out, git_merge_preference_t *preference_out, git_repository *repo, const git_annotated_commit **their_heads, size_t their_heads_len", + "sig": "git_merge_analysis_t *::git_merge_preference_t *::git_repository *::const git_annotated_commit **::size_t", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into the HEAD of the repository.

\n", + "comments": "", + "group": "merge", + "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_merge_analysis-15"] } + }, + "git_merge_analysis_for_ref": { + "type": "function", + "file": "git2/merge.h", + "line": 418, + "lineto": 424, + "args": [ + { + "name": "analysis_out", + "type": "git_merge_analysis_t *", + "comment": "analysis enumeration that the result is written into" + }, + { + "name": "preference_out", + "type": "git_merge_preference_t *", + "comment": "One of the `git_merge_preference_t` flag." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to merge" + }, + { + "name": "our_ref", + "type": "git_reference *", + "comment": "the reference to perform the analysis from" + }, + { + "name": "their_heads", + "type": "const git_annotated_commit **", + "comment": "the heads to merge into" + }, + { + "name": "their_heads_len", + "type": "size_t", + "comment": "the number of heads to merge" + } + ], + "argline": "git_merge_analysis_t *analysis_out, git_merge_preference_t *preference_out, git_repository *repo, git_reference *our_ref, const git_annotated_commit **their_heads, size_t their_heads_len", + "sig": "git_merge_analysis_t *::git_merge_preference_t *::git_repository *::git_reference *::const git_annotated_commit **::size_t", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into a reference.

\n", + "comments": "", + "group": "merge" + }, + "git_merge_base": { + "type": "function", + "file": "git2/merge.h", + "line": 435, + "lineto": 439, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the OID of a merge base between 'one' and 'two'" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "one", + "type": "const git_oid *", + "comment": "one of the commits" + }, + { + "name": "two", + "type": "const git_oid *", + "comment": "the other commit" + } + ], + "argline": "git_oid *out, git_repository *repo, const git_oid *one, const git_oid *two", + "sig": "git_oid *::git_repository *::const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if not found or error code" + }, + "description": "

Find a merge base between two commits

\n", + "comments": "", + "group": "merge", + "examples": { + "log.c": ["ex/v1.8.4/log.html#git_merge_base-31"], + "rev-parse.c": ["ex/v1.8.4/rev-parse.html#git_merge_base-1"] + } + }, + "git_merge_bases": { + "type": "function", + "file": "git2/merge.h", + "line": 450, + "lineto": 454, + "args": [ + { + "name": "out", + "type": "git_oidarray *", + "comment": "array in which to store the resulting ids" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "one", + "type": "const git_oid *", + "comment": "one of the commits" + }, + { + "name": "two", + "type": "const git_oid *", + "comment": "the other commit" + } + ], + "argline": "git_oidarray *out, git_repository *repo, const git_oid *one, const git_oid *two", + "sig": "git_oidarray *::git_repository *::const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if not found or error code" + }, + "description": "

Find merge bases between two commits

\n", + "comments": "", + "group": "merge" + }, + "git_merge_base_many": { + "type": "function", + "file": "git2/merge.h", + "line": 465, + "lineto": 469, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the OID of a merge base considering all the commits" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "length", + "type": "size_t", + "comment": "The number of commits in the provided `input_array`" + }, + { + "name": "input_array", + "type": "const git_oid []", + "comment": "oids of the commits" + } + ], + "argline": "git_oid *out, git_repository *repo, size_t length, const git_oid [] input_array", + "sig": "git_oid *::git_repository *::size_t::const git_oid []", + "return": { + "type": "int", + "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." + }, + "description": "

Find a merge base given a list of commits

\n", + "comments": "", + "group": "merge" + }, + "git_merge_bases_many": { + "type": "function", + "file": "git2/merge.h", + "line": 480, + "lineto": 484, + "args": [ + { + "name": "out", + "type": "git_oidarray *", + "comment": "array in which to store the resulting ids" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "length", + "type": "size_t", + "comment": "The number of commits in the provided `input_array`" + }, + { + "name": "input_array", + "type": "const git_oid []", + "comment": "oids of the commits" + } + ], + "argline": "git_oidarray *out, git_repository *repo, size_t length, const git_oid [] input_array", + "sig": "git_oidarray *::git_repository *::size_t::const git_oid []", + "return": { + "type": "int", + "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." + }, + "description": "

Find all merge bases given a list of commits

\n", + "comments": "", + "group": "merge" + }, + "git_merge_base_octopus": { + "type": "function", + "file": "git2/merge.h", + "line": 495, + "lineto": 499, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "the OID of a merge base considering all the commits" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository where the commits exist" + }, + { + "name": "length", + "type": "size_t", + "comment": "The number of commits in the provided `input_array`" + }, + { + "name": "input_array", + "type": "const git_oid []", + "comment": "oids of the commits" + } + ], + "argline": "git_oid *out, git_repository *repo, size_t length, const git_oid [] input_array", + "sig": "git_oid *::git_repository *::size_t::const git_oid []", + "return": { + "type": "int", + "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." + }, + "description": "

Find a merge base in preparation for an octopus merge

\n", + "comments": "", + "group": "merge" + }, + "git_merge_file": { + "type": "function", + "file": "git2/merge.h", + "line": 517, + "lineto": 522, + "args": [ + { + "name": "out", + "type": "git_merge_file_result *", + "comment": "The git_merge_file_result to be filled in" + }, + { + "name": "ancestor", + "type": "const git_merge_file_input *", + "comment": "The contents of the ancestor file" + }, + { + "name": "ours", + "type": "const git_merge_file_input *", + "comment": "The contents of the file in \"our\" side" + }, + { + "name": "theirs", + "type": "const git_merge_file_input *", + "comment": "The contents of the file in \"their\" side" + }, + { + "name": "opts", + "type": "const git_merge_file_options *", + "comment": "The merge file options or `NULL` for defaults" + } + ], + "argline": "git_merge_file_result *out, const git_merge_file_input *ancestor, const git_merge_file_input *ours, const git_merge_file_input *theirs, const git_merge_file_options *opts", + "sig": "git_merge_file_result *::const git_merge_file_input *::const git_merge_file_input *::const git_merge_file_input *::const git_merge_file_options *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Merge two files as they exist in the in-memory data structures, using\n the given common ancestor as the baseline, producing a\n git_merge_file_result that reflects the merge result. The\n git_merge_file_result must be freed with git_merge_file_result_free.

\n", + "comments": "

Note that this function does not reference a repository and any configuration must be passed as git_merge_file_options.

\n", + "group": "merge" + }, + "git_merge_file_from_index": { + "type": "function", + "file": "git2/merge.h", + "line": 538, + "lineto": 544, + "args": [ + { + "name": "out", + "type": "git_merge_file_result *", + "comment": "The git_merge_file_result to be filled in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository" + }, + { + "name": "ancestor", + "type": "const git_index_entry *", + "comment": "The index entry for the ancestor file (stage level 1)" + }, + { + "name": "ours", + "type": "const git_index_entry *", + "comment": "The index entry for our file (stage level 2)" + }, + { + "name": "theirs", + "type": "const git_index_entry *", + "comment": "The index entry for their file (stage level 3)" + }, + { + "name": "opts", + "type": "const git_merge_file_options *", + "comment": "The merge file options or NULL" + } + ], + "argline": "git_merge_file_result *out, git_repository *repo, const git_index_entry *ancestor, const git_index_entry *ours, const git_index_entry *theirs, const git_merge_file_options *opts", + "sig": "git_merge_file_result *::git_repository *::const git_index_entry *::const git_index_entry *::const git_index_entry *::const git_merge_file_options *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Merge two files as they exist in the index, using the given common\n ancestor as the baseline, producing a git_merge_file_result that\n reflects the merge result. The git_merge_file_result must be freed with\n git_merge_file_result_free.

\n", + "comments": "", + "group": "merge" + }, + "git_merge_file_result_free": { + "type": "function", + "file": "git2/merge.h", + "line": 551, + "lineto": 551, + "args": [ + { + "name": "result", + "type": "git_merge_file_result *", + "comment": "The result to free or `NULL`" + } + ], + "argline": "git_merge_file_result *result", + "sig": "git_merge_file_result *", + "return": { "type": "void", "comment": null }, + "description": "

Frees a git_merge_file_result.

\n", + "comments": "", + "group": "merge" + }, + "git_merge_trees": { + "type": "function", + "file": "git2/merge.h", + "line": 569, + "lineto": 575, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "pointer to store the index result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given trees" + }, + { + "name": "ancestor_tree", + "type": "const git_tree *", + "comment": "the common ancestor between the trees (or null if none)" + }, + { + "name": "our_tree", + "type": "const git_tree *", + "comment": "the tree that reflects the destination tree" + }, + { + "name": "their_tree", + "type": "const git_tree *", + "comment": "the tree to merge in to `our_tree`" + }, + { + "name": "opts", + "type": "const git_merge_options *", + "comment": "the merge tree options (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, const git_tree *ancestor_tree, const git_tree *our_tree, const git_tree *their_tree, const git_merge_options *opts", + "sig": "git_index **::git_repository *::const git_tree *::const git_tree *::const git_tree *::const git_merge_options *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Merge two trees, producing a git_index that reflects the result of\n the merge. The index may be written as-is to the working directory\n or checked out. If the index is to be converted to a tree, the caller\n should resolve any conflicts that arose as part of the merge.

\n", + "comments": "

The returned index must be freed explicitly with git_index_free.

\n", + "group": "merge" + }, + "git_merge_commits": { + "type": "function", + "file": "git2/merge.h", + "line": 592, + "lineto": 597, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "pointer to store the index result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository that contains the given trees" + }, + { + "name": "our_commit", + "type": "const git_commit *", + "comment": "the commit that reflects the destination tree" + }, + { + "name": "their_commit", + "type": "const git_commit *", + "comment": "the commit to merge in to `our_commit`" + }, + { + "name": "opts", + "type": "const git_merge_options *", + "comment": "the merge tree options (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, const git_commit *our_commit, const git_commit *their_commit, const git_merge_options *opts", + "sig": "git_index **::git_repository *::const git_commit *::const git_commit *::const git_merge_options *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Merge two commits, producing a git_index that reflects the result of\n the merge. The index may be written as-is to the working directory\n or checked out. If the index is to be converted to a tree, the caller\n should resolve any conflicts that arose as part of the merge.

\n", + "comments": "

The returned index must be freed explicitly with git_index_free.

\n", + "group": "merge" + }, + "git_merge": { + "type": "function", + "file": "git2/merge.h", + "line": 617, + "lineto": 622, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to merge" + }, + { + "name": "their_heads", + "type": "const git_annotated_commit **", + "comment": "the heads to merge into" + }, + { + "name": "their_heads_len", + "type": "size_t", + "comment": "the number of heads to merge" + }, + { + "name": "merge_opts", + "type": "const git_merge_options *", + "comment": "merge options" + }, + { + "name": "checkout_opts", + "type": "const git_checkout_options *", + "comment": "checkout options" + } + ], + "argline": "git_repository *repo, const git_annotated_commit **their_heads, size_t their_heads_len, const git_merge_options *merge_opts, const git_checkout_options *checkout_opts", + "sig": "git_repository *::const git_annotated_commit **::size_t::const git_merge_options *::const git_checkout_options *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Merges the given commit(s) into HEAD, writing the results into the working\n directory. Any changes are staged for commit and any conflicts are written\n to the index. Callers should inspect the repository's index after this\n completes, resolve any conflicts and prepare a commit.

\n", + "comments": "

For compatibility with git, the repository is put into a merging state. Once the commit is done (or if the user wishes to abort), you should clear this state by calling git_repository_state_cleanup().

\n", + "group": "merge", + "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_merge-16"] } + }, + "git_message_prettify": { + "type": "function", + "file": "git2/message.h", + "line": 38, + "lineto": 38, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The user-allocated git_buf which will be filled with the\n cleaned up message." + }, + { + "name": "message", + "type": "const char *", + "comment": "The message to be prettified." + }, + { + "name": "strip_comments", + "type": "int", + "comment": "Non-zero to remove comment lines, 0 to leave them in." + }, + { + "name": "comment_char", + "type": "char", + "comment": "Comment character. Lines starting with this character\n are considered to be comments and removed if `strip_comments` is non-zero." + } + ], + "argline": "git_buf *out, const char *message, int strip_comments, char comment_char", + "sig": "git_buf *::const char *::int::char", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Clean up excess whitespace and make sure there is a trailing newline in the message.

\n", + "comments": "

Optionally, it can remove lines which start with the comment character.

\n", + "group": "message" + }, + "git_message_trailers": { + "type": "function", + "file": "git2/message.h", + "line": 73, + "lineto": 73, + "args": [ + { + "name": "arr", + "type": "git_message_trailer_array *", + "comment": "A pre-allocated git_message_trailer_array struct to be filled in\n with any trailers found during parsing." + }, + { + "name": "message", + "type": "const char *", + "comment": "The message to be parsed" + } + ], + "argline": "git_message_trailer_array *arr, const char *message", + "sig": "git_message_trailer_array *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or non-zero on error." + }, + "description": "

Parse trailers out of a message, filling the array pointed to by +arr+.

\n", + "comments": "

Trailers are key/value pairs in the last paragraph of a message, not including any patches or conflicts that may be present.

\n", + "group": "message" + }, + "git_message_trailer_array_free": { + "type": "function", + "file": "git2/message.h", + "line": 81, + "lineto": 81, + "args": [ + { + "name": "arr", + "type": "git_message_trailer_array *", + "comment": "The trailer to free." + } + ], + "argline": "git_message_trailer_array *arr", + "sig": "git_message_trailer_array *", + "return": { "type": "void", "comment": null }, + "description": "

Clean's up any allocated memory in the git_message_trailer_array filled by\n a call to git_message_trailers.

\n", + "comments": "", + "group": "message" + }, + "git_note_iterator_new": { + "type": "function", + "file": "git2/notes.h", + "line": 49, + "lineto": 52, + "args": [ + { + "name": "out", + "type": "git_note_iterator **", + "comment": "pointer to the iterator" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to look up the note" + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" + } + ], + "argline": "git_note_iterator **out, git_repository *repo, const char *notes_ref", + "sig": "git_note_iterator **::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Creates a new iterator for notes

\n", + "comments": "

The iterator must be freed manually by the user.

\n", + "group": "note" + }, + "git_note_commit_iterator_new": { + "type": "function", + "file": "git2/notes.h", + "line": 64, + "lineto": 66, + "args": [ + { + "name": "out", + "type": "git_note_iterator **", + "comment": "pointer to the iterator" + }, + { + "name": "notes_commit", + "type": "git_commit *", + "comment": "a pointer to the notes commit object" + } + ], + "argline": "git_note_iterator **out, git_commit *notes_commit", + "sig": "git_note_iterator **::git_commit *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Creates a new iterator for notes from a commit

\n", + "comments": "

The iterator must be freed manually by the user.

\n", + "group": "note" + }, + "git_note_iterator_free": { + "type": "function", + "file": "git2/notes.h", + "line": 73, + "lineto": 73, + "args": [ + { + "name": "it", + "type": "git_note_iterator *", + "comment": "pointer to the iterator" + } + ], + "argline": "git_note_iterator *it", + "sig": "git_note_iterator *", + "return": { "type": "void", "comment": null }, + "description": "

Frees an git_note_iterator

\n", + "comments": "", + "group": "note" + }, + "git_note_next": { + "type": "function", + "file": "git2/notes.h", + "line": 86, + "lineto": 89, + "args": [ + { + "name": "note_id", + "type": "git_oid *", + "comment": "id of blob containing the message" + }, + { + "name": "annotated_id", + "type": "git_oid *", + "comment": "id of the git object being annotated" + }, + { + "name": "it", + "type": "git_note_iterator *", + "comment": "pointer to the iterator" + } + ], + "argline": "git_oid *note_id, git_oid *annotated_id, git_note_iterator *it", + "sig": "git_oid *::git_oid *::git_note_iterator *", + "return": { + "type": "int", + "comment": " 0 (no error), GIT_ITEROVER (iteration is done) or an error code\n (negative value)" + }, + "description": "

Return the current item (note_id and annotated_id) and advance the iterator\n internally to the next value

\n", + "comments": "", + "group": "note" + }, + "git_note_read": { + "type": "function", + "file": "git2/notes.h", + "line": 105, + "lineto": 109, + "args": [ + { + "name": "out", + "type": "git_note **", + "comment": "pointer to the read note; NULL in case of error" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to look up the note" + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to read the note from" + } + ], + "argline": "git_note **out, git_repository *repo, const char *notes_ref, const git_oid *oid", + "sig": "git_note **::git_repository *::const char *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Read the note for an object

\n", + "comments": "

The note must be freed manually by the user.

\n", + "group": "note" + }, + "git_note_commit_read": { + "type": "function", + "file": "git2/notes.h", + "line": 124, + "lineto": 128, + "args": [ + { + "name": "out", + "type": "git_note **", + "comment": "pointer to the read note; NULL in case of error" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to look up the note" + }, + { + "name": "notes_commit", + "type": "git_commit *", + "comment": "a pointer to the notes commit object" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to read the note from" + } + ], + "argline": "git_note **out, git_repository *repo, git_commit *notes_commit, const git_oid *oid", + "sig": "git_note **::git_repository *::git_commit *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Read the note for an object from a note commit

\n", + "comments": "

The note must be freed manually by the user.

\n", + "group": "note" + }, + "git_note_author": { + "type": "function", + "file": "git2/notes.h", + "line": 136, + "lineto": 136, + "args": [ + { "name": "note", "type": "const git_note *", "comment": "the note" } + ], + "argline": "const git_note *note", + "sig": "const git_note *", + "return": { "type": "const git_signature *", "comment": " the author" }, + "description": "

Get the note author

\n", + "comments": "", + "group": "note" + }, + "git_note_committer": { + "type": "function", + "file": "git2/notes.h", + "line": 144, + "lineto": 144, + "args": [ + { "name": "note", "type": "const git_note *", "comment": "the note" } + ], + "argline": "const git_note *note", + "sig": "const git_note *", + "return": { + "type": "const git_signature *", + "comment": " the committer" + }, + "description": "

Get the note committer

\n", + "comments": "", + "group": "note" + }, + "git_note_message": { + "type": "function", + "file": "git2/notes.h", + "line": 153, + "lineto": 153, + "args": [ + { "name": "note", "type": "const git_note *", "comment": "the note" } + ], + "argline": "const git_note *note", + "sig": "const git_note *", + "return": { "type": "const char *", "comment": " the note message" }, + "description": "

Get the note message

\n", + "comments": "", + "group": "note" + }, + "git_note_id": { + "type": "function", + "file": "git2/notes.h", + "line": 162, + "lineto": 162, + "args": [ + { "name": "note", "type": "const git_note *", "comment": "the note" } + ], + "argline": "const git_note *note", + "sig": "const git_note *", + "return": { + "type": "const git_oid *", + "comment": " the note object's id" + }, + "description": "

Get the note object's id

\n", + "comments": "", + "group": "note" + }, + "git_note_create": { + "type": "function", + "file": "git2/notes.h", + "line": 179, + "lineto": 187, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "pointer to store the OID (optional); NULL in case of error" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to store the note" + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "signature of the notes commit author" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "signature of the notes commit committer" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to decorate" + }, + { + "name": "note", + "type": "const char *", + "comment": "Content of the note to add for object oid" + }, + { "name": "force", "type": "int", "comment": "Overwrite existing note" } + ], + "argline": "git_oid *out, git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int force", + "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *::const char *::int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add a note for an object

\n", + "comments": "", + "group": "note" + }, + "git_note_commit_create": { + "type": "function", + "file": "git2/notes.h", + "line": 209, + "lineto": 218, + "args": [ + { + "name": "notes_commit_out", + "type": "git_oid *", + "comment": "pointer to store the commit (optional);\n\t\t\t\t\tNULL in case of error" + }, + { + "name": "notes_blob_out", + "type": "git_oid *", + "comment": "a point to the id of a note blob (optional)" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the note will live" + }, + { + "name": "parent", + "type": "git_commit *", + "comment": "Pointer to parent note\n\t\t\t\t\tor NULL if this shall start a new notes tree" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "signature of the notes commit author" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "signature of the notes commit committer" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to decorate" + }, + { + "name": "note", + "type": "const char *", + "comment": "Content of the note to add for object oid" + }, + { + "name": "allow_note_overwrite", + "type": "int", + "comment": "Overwrite existing note" + } + ], + "argline": "git_oid *notes_commit_out, git_oid *notes_blob_out, git_repository *repo, git_commit *parent, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int allow_note_overwrite", + "sig": "git_oid *::git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *::const char *::int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add a note for an object from a commit

\n", + "comments": "

This function will create a notes commit for a given object, the commit is a dangling commit, no reference is created.

\n", + "group": "note" + }, + "git_note_remove": { + "type": "function", + "file": "git2/notes.h", + "line": 232, + "lineto": 237, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the note lives" + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "signature of the notes commit author" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "signature of the notes commit committer" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to remove the note from" + } + ], + "argline": "git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid", + "sig": "git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Remove the note for an object

\n", + "comments": "", + "group": "note" + }, + "git_note_commit_remove": { + "type": "function", + "file": "git2/notes.h", + "line": 257, + "lineto": 263, + "args": [ + { + "name": "notes_commit_out", + "type": "git_oid *", + "comment": "pointer to store the new notes commit (optional);\n\t\t\t\t\tNULL in case of error.\n\t\t\t\t\tWhen removing a note a new tree containing all notes\n\t\t\t\t\tsans the note to be removed is created and a new commit\n\t\t\t\t\tpointing to that tree is also created.\n\t\t\t\t\tIn the case where the resulting tree is an empty tree\n\t\t\t\t\ta new commit pointing to this empty tree will be returned." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where the note lives" + }, + { + "name": "notes_commit", + "type": "git_commit *", + "comment": "a pointer to the notes commit object" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "signature of the notes commit author" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "signature of the notes commit committer" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "OID of the git object to remove the note from" + } + ], + "argline": "git_oid *notes_commit_out, git_repository *repo, git_commit *notes_commit, const git_signature *author, const git_signature *committer, const git_oid *oid", + "sig": "git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Remove the note for an object

\n", + "comments": "", + "group": "note" + }, + "git_note_free": { + "type": "function", + "file": "git2/notes.h", + "line": 270, + "lineto": 270, + "args": [ + { "name": "note", "type": "git_note *", "comment": "git_note object" } + ], + "argline": "git_note *note", + "sig": "git_note *", + "return": { "type": "void", "comment": null }, + "description": "

Free a git_note object

\n", + "comments": "", + "group": "note" + }, + "git_note_default_ref": { + "type": "function", + "file": "git2/notes.h", + "line": 280, + "lineto": 280, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer in which to store the name of the default notes reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The Git repository" + } + ], + "argline": "git_buf *out, git_repository *repo", + "sig": "git_buf *::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the default notes reference for a repository

\n", + "comments": "", + "group": "note" + }, + "git_note_foreach": { + "type": "function", + "file": "git2/notes.h", + "line": 298, + "lineto": 302, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the notes." + }, + { + "name": "notes_ref", + "type": "const char *", + "comment": "Reference to read from (optional); defaults to\n \"refs/notes/commits\"." + }, + { + "name": "note_cb", + "type": "git_note_foreach_cb", + "comment": "Callback to invoke per found annotation. Return non-zero\n to stop looping." + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra parameter to callback function." + } + ], + "argline": "git_repository *repo, const char *notes_ref, git_note_foreach_cb note_cb, void *payload", + "sig": "git_repository *::const char *::git_note_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Loop over all the notes within a specified namespace\n and issue a callback for each one.

\n", + "comments": "", + "group": "note" + }, + "git_object_lookup": { + "type": "function", + "file": "git2/object.h", + "line": 44, + "lineto": 48, + "args": [ + { + "name": "object", + "type": "git_object **", + "comment": "pointer to the looked-up object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to look up the object" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the unique identifier for the object" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "the type of the object" + } + ], + "argline": "git_object **object, git_repository *repo, const git_oid *id, git_object_t type", + "sig": "git_object **::git_repository *::const git_oid *::git_object_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a reference to one of the objects in a repository.

\n", + "comments": "

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", + "group": "object", + "examples": { + "log.c": ["ex/v1.8.4/log.html#git_object_lookup-32"], + "merge.c": ["ex/v1.8.4/merge.html#git_object_lookup-17"] + } + }, + "git_object_lookup_prefix": { + "type": "function", + "file": "git2/object.h", + "line": 77, + "lineto": 82, + "args": [ + { + "name": "object_out", + "type": "git_object **", + "comment": "pointer where to store the looked-up object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to look up the object" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "a short identifier for the object" + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "the type of the object" + } + ], + "argline": "git_object **object_out, git_repository *repo, const git_oid *id, size_t len, git_object_t type", + "sig": "git_object **::git_repository *::const git_oid *::size_t::git_object_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a reference to one of the objects in a repository,\n given a prefix of its identifier (short id).

\n", + "comments": "

The object obtained will be so that its identifier matches the first 'len' hexadecimal characters (packets of 4 bits) of the given 'id'. 'len' must be at least GIT_OID_MINPREFIXLEN, and long enough to identify a unique object matching the prefix; otherwise the method will fail.

\n\n

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", + "group": "object" + }, + "git_object_lookup_bypath": { + "type": "function", + "file": "git2/object.h", + "line": 95, + "lineto": 99, + "args": [ + { + "name": "out", + "type": "git_object **", + "comment": "buffer that receives a pointer to the object (which must be freed\n by the caller)" + }, + { + "name": "treeish", + "type": "const git_object *", + "comment": "root object that can be peeled to a tree" + }, + { + "name": "path", + "type": "const char *", + "comment": "relative path from the root object to the desired object" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "type of object desired" + } + ], + "argline": "git_object **out, const git_object *treeish, const char *path, git_object_t type", + "sig": "git_object **::const git_object *::const char *::git_object_t", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Lookup an object that represents a tree entry.

\n", + "comments": "", + "group": "object" + }, + "git_object_id": { + "type": "function", + "file": "git2/object.h", + "line": 107, + "lineto": 107, + "args": [ + { + "name": "obj", + "type": "const git_object *", + "comment": "the repository object" + } + ], + "argline": "const git_object *obj", + "sig": "const git_object *", + "return": { "type": "const git_oid *", "comment": " the SHA1 id" }, + "description": "

Get the id (SHA1) of a repository object

\n", + "comments": "", + "group": "object", + "examples": { + "blame.c": [ + "ex/v1.8.4/blame.html#git_object_id-8", + "ex/v1.8.4/blame.html#git_object_id-9", + "ex/v1.8.4/blame.html#git_object_id-10", + "ex/v1.8.4/blame.html#git_object_id-11" + ], + "cat-file.c": [ + "ex/v1.8.4/cat-file.html#git_object_id-10", + "ex/v1.8.4/cat-file.html#git_object_id-11" + ], + "log.c": [ + "ex/v1.8.4/log.html#git_object_id-33", + "ex/v1.8.4/log.html#git_object_id-34", + "ex/v1.8.4/log.html#git_object_id-35", + "ex/v1.8.4/log.html#git_object_id-36" + ], + "rev-parse.c": [ + "ex/v1.8.4/rev-parse.html#git_object_id-2", + "ex/v1.8.4/rev-parse.html#git_object_id-3", + "ex/v1.8.4/rev-parse.html#git_object_id-4", + "ex/v1.8.4/rev-parse.html#git_object_id-5", + "ex/v1.8.4/rev-parse.html#git_object_id-6" + ] + } + }, + "git_object_short_id": { + "type": "function", + "file": "git2/object.h", + "line": 121, + "lineto": 121, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Buffer to write string into" + }, + { + "name": "obj", + "type": "const git_object *", + "comment": "The object to get an ID for" + } + ], + "argline": "git_buf *out, const git_object *obj", + "sig": "git_buf *::const git_object *", + "return": { "type": "int", "comment": " 0 on success, \n<\n0 for error" }, + "description": "

Get a short abbreviated OID string for the object

\n", + "comments": "

This starts at the "core.abbrev" length (default 7 characters) and iteratively extends to a longer string if that length is ambiguous. The result will be unambiguous (at least until new objects are added to the repository).

\n", + "group": "object", + "examples": { "tag.c": ["ex/v1.8.4/tag.html#git_object_short_id-3"] } + }, + "git_object_type": { + "type": "function", + "file": "git2/object.h", + "line": 129, + "lineto": 129, + "args": [ + { + "name": "obj", + "type": "const git_object *", + "comment": "the repository object" + } + ], + "argline": "const git_object *obj", + "sig": "const git_object *", + "return": { "type": "git_object_t", "comment": " the object's type" }, + "description": "

Get the object type of an object

\n", + "comments": "", + "group": "object", + "examples": { + "cat-file.c": [ + "ex/v1.8.4/cat-file.html#git_object_type-12", + "ex/v1.8.4/cat-file.html#git_object_type-13", + "ex/v1.8.4/cat-file.html#git_object_type-14" + ], + "tag.c": ["ex/v1.8.4/tag.html#git_object_type-4"] + } + }, + "git_object_owner": { + "type": "function", + "file": "git2/object.h", + "line": 143, + "lineto": 143, + "args": [ + { "name": "obj", "type": "const git_object *", "comment": "the object" } + ], + "argline": "const git_object *obj", + "sig": "const git_object *", + "return": { + "type": "git_repository *", + "comment": " the repository who owns this object" + }, + "description": "

Get the repository that owns this object

\n", + "comments": "

Freeing or calling git_repository_close on the returned pointer will invalidate the actual object.

\n\n

Any other operation may be run on the repository without affecting the object.

\n", + "group": "object" + }, + "git_object_free": { + "type": "function", + "file": "git2/object.h", + "line": 160, + "lineto": 160, + "args": [ + { + "name": "object", + "type": "git_object *", + "comment": "the object to close" + } + ], + "argline": "git_object *object", + "sig": "git_object *", + "return": { "type": "void", "comment": null }, + "description": "

Close an open object

\n", + "comments": "

This method instructs the library to close an existing object; note that git_objects are owned and cached by the repository so the object may or may not be freed after this library call, depending on how aggressive is the caching mechanism used by the repository.

\n\n

IMPORTANT: It is necessary to call this method when you stop using an object. Failure to do so will cause a memory leak.

\n", + "group": "object", + "examples": { + "blame.c": [ + "ex/v1.8.4/blame.html#git_object_free-12", + "ex/v1.8.4/blame.html#git_object_free-13", + "ex/v1.8.4/blame.html#git_object_free-14", + "ex/v1.8.4/blame.html#git_object_free-15" + ], + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_object_free-15"], + "commit.c": ["ex/v1.8.4/commit.html#git_object_free-6"], + "general.c": ["ex/v1.8.4/general.html#git_object_free-38"], + "log.c": ["ex/v1.8.4/log.html#git_object_free-37"], + "merge.c": ["ex/v1.8.4/merge.html#git_object_free-18"], + "rev-parse.c": [ + "ex/v1.8.4/rev-parse.html#git_object_free-7", + "ex/v1.8.4/rev-parse.html#git_object_free-8", + "ex/v1.8.4/rev-parse.html#git_object_free-9" + ], + "tag.c": [ + "ex/v1.8.4/tag.html#git_object_free-5", + "ex/v1.8.4/tag.html#git_object_free-6", + "ex/v1.8.4/tag.html#git_object_free-7", + "ex/v1.8.4/tag.html#git_object_free-8" + ] + } + }, + "git_object_type2string": { + "type": "function", + "file": "git2/object.h", + "line": 171, + "lineto": 171, + "args": [ + { + "name": "type", + "type": "git_object_t", + "comment": "object type to convert." + } + ], + "argline": "git_object_t type", + "sig": "git_object_t", + "return": { + "type": "const char *", + "comment": " the corresponding string representation." + }, + "description": "

Convert an object type to its string representation.

\n", + "comments": "

The result is a pointer to a string in static memory and should not be free()'ed.

\n", + "group": "object", + "examples": { + "cat-file.c": [ + "ex/v1.8.4/cat-file.html#git_object_type2string-16", + "ex/v1.8.4/cat-file.html#git_object_type2string-17", + "ex/v1.8.4/cat-file.html#git_object_type2string-18", + "ex/v1.8.4/cat-file.html#git_object_type2string-19" + ], + "general.c": [ + "ex/v1.8.4/general.html#git_object_type2string-39", + "ex/v1.8.4/general.html#git_object_type2string-40" + ] + } + }, + "git_object_string2type": { + "type": "function", + "file": "git2/object.h", + "line": 179, + "lineto": 179, + "args": [ + { + "name": "str", + "type": "const char *", + "comment": "the string to convert." + } + ], + "argline": "const char *str", + "sig": "const char *", + "return": { + "type": "git_object_t", + "comment": " the corresponding git_object_t." + }, + "description": "

Convert a string object type representation to it's git_object_t.

\n", + "comments": "", + "group": "object" + }, + "git_object_typeisloose": { + "type": "function", + "file": "git2/object.h", + "line": 188, + "lineto": 188, + "args": [ + { + "name": "type", + "type": "git_object_t", + "comment": "object type to test." + } + ], + "argline": "git_object_t type", + "sig": "git_object_t", + "return": { + "type": "int", + "comment": " true if the type represents a valid loose object type,\n false otherwise." + }, + "description": "

Determine if the given git_object_t is a valid loose object type.

\n", + "comments": "", + "group": "object" + }, + "git_object_peel": { + "type": "function", + "file": "git2/object.h", + "line": 213, + "lineto": 216, + "args": [ + { + "name": "peeled", + "type": "git_object **", + "comment": "Pointer to the peeled git_object" + }, + { + "name": "object", + "type": "const git_object *", + "comment": "The object to be processed" + }, + { + "name": "target_type", + "type": "git_object_t", + "comment": "The type of the requested object (a GIT_OBJECT_ value)" + } + ], + "argline": "git_object **peeled, const git_object *object, git_object_t target_type", + "sig": "git_object **::const git_object *::git_object_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC, GIT_EPEEL, or an error code" + }, + "description": "

Recursively peel an object until an object of the specified type is met.

\n", + "comments": "

If the query cannot be satisfied due to the object model, GIT_EINVALIDSPEC will be returned (e.g. trying to peel a blob to a tree).

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until the type changes. A tag will be peeled until the referenced object is no longer a tag, and a commit will be peeled to a tree. Any other object type will return GIT_EINVALIDSPEC.

\n\n

If peeling a tag we discover an object which cannot be peeled to the target type due to the object model, GIT_EPEEL will be returned.

\n\n

You must free the returned object.

\n", + "group": "object" + }, + "git_object_dup": { + "type": "function", + "file": "git2/object.h", + "line": 226, + "lineto": 226, + "args": [ + { + "name": "dest", + "type": "git_object **", + "comment": "Pointer to store the copy of the object" + }, + { + "name": "source", + "type": "git_object *", + "comment": "Original object to copy" + } + ], + "argline": "git_object **dest, git_object *source", + "sig": "git_object **::git_object *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create an in-memory copy of a Git object. The copy must be\n explicitly free'd or it will leak.

\n", + "comments": "", + "group": "object" + }, + "git_object_rawcontent_is_valid": { + "type": "function", + "file": "git2/object.h", + "line": 269, + "lineto": 273, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "Output pointer to set with validity of the object content" + }, + { + "name": "buf", + "type": "const char *", + "comment": "The contents to validate" + }, + { + "name": "len", + "type": "size_t", + "comment": "The length of the buffer" + }, + { + "name": "object_type", + "type": "git_object_t", + "comment": "The type of the object in the buffer" + } + ], + "argline": "int *valid, const char *buf, size_t len, git_object_t object_type", + "sig": "int *::const char *::size_t::git_object_t", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Analyzes a buffer of raw object content and determines its validity.\n Tree, commit, and tag objects will be parsed and ensured that they\n are valid, parseable content. (Blobs are always valid by definition.)\n An error message will be set with an informative message if the object\n is not valid.

\n", + "comments": "", + "group": "object" + }, + "git_odb_add_disk_alternate": { + "type": "function", + "file": "git2/odb.h", + "line": 118, + "lineto": 118, + "args": [ + { + "name": "odb", + "type": "git_odb *", + "comment": "database to add the backend to" + }, + { + "name": "path", + "type": "const char *", + "comment": "path to the objects folder for the alternate" + } + ], + "argline": "git_odb *odb, const char *path", + "sig": "git_odb *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Add an on-disk alternate to an existing Object DB.

\n", + "comments": "

Note that the added path must point to an objects, not to a full repository, to use it as an alternate store.

\n\n

Alternate backends are always checked for objects after all the main backends have been exhausted.

\n\n

Writing is disabled on alternate backends.

\n", + "group": "odb" + }, + "git_odb_free": { + "type": "function", + "file": "git2/odb.h", + "line": 125, + "lineto": 125, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "database pointer to close. If NULL no action is taken." + } + ], + "argline": "git_odb *db", + "sig": "git_odb *", + "return": { "type": "void", "comment": null }, + "description": "

Close an open object database.

\n", + "comments": "", + "group": "odb", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_odb_free-20"], + "general.c": ["ex/v1.8.4/general.html#git_odb_free-41"] + } + }, + "git_odb_read": { + "type": "function", + "file": "git2/odb.h", + "line": 143, + "lineto": 143, + "args": [ + { + "name": "out", + "type": "git_odb_object **", + "comment": "pointer where to store the read object" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "database to search for the object in." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the object to read." + } + ], + "argline": "git_odb_object **out, git_odb *db, const git_oid *id", + "sig": "git_odb_object **::git_odb *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is\n not in the database." + }, + "description": "

Read an object from the database.

\n", + "comments": "

This method queries all available ODB backends trying to read the given OID.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", + "group": "odb", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_odb_read-21"], + "general.c": ["ex/v1.8.4/general.html#git_odb_read-42"] + } + }, + "git_odb_read_prefix": { + "type": "function", + "file": "git2/odb.h", + "line": 171, + "lineto": 171, + "args": [ + { + "name": "out", + "type": "git_odb_object **", + "comment": "pointer where to store the read object" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "database to search for the object in." + }, + { + "name": "short_id", + "type": "const git_oid *", + "comment": "a prefix of the id of the object to read." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the prefix" + } + ], + "argline": "git_odb_object **out, git_odb *db, const git_oid *short_id, size_t len", + "sig": "git_odb_object **::git_odb *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is not in the\n database. GIT_EAMBIGUOUS if the prefix is ambiguous\n (several objects match the prefix)" + }, + "description": "

Read an object from the database, given a prefix\n of its identifier.

\n", + "comments": "

This method queries all available ODB backends trying to match the 'len' first hexadecimal characters of the 'short_id'. The remaining (GIT_OID_SHA1_HEXSIZE-len)*4 bits of 'short_id' must be 0s. 'len' must be at least GIT_OID_MINPREFIXLEN, and the prefix must be long enough to identify a unique object in all the backends; the method will fail otherwise.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", + "group": "odb" + }, + "git_odb_read_header": { + "type": "function", + "file": "git2/odb.h", + "line": 190, + "lineto": 190, + "args": [ + { + "name": "len_out", + "type": "size_t *", + "comment": "pointer where to store the length" + }, + { + "name": "type_out", + "type": "git_object_t *", + "comment": "pointer where to store the type" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "database to search for the object in." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the object to read." + } + ], + "argline": "size_t *len_out, git_object_t *type_out, git_odb *db, const git_oid *id", + "sig": "size_t *::git_object_t *::git_odb *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 if the object was read, GIT_ENOTFOUND if the object is not\n in the database." + }, + "description": "

Read the header of an object from the database, without\n reading its full contents.

\n", + "comments": "

The header includes the length and the type of an object.

\n\n

Note that most backends do not support reading only the header of an object, so the whole object will be read and then the header will be returned.

\n", + "group": "odb" + }, + "git_odb_exists": { + "type": "function", + "file": "git2/odb.h", + "line": 199, + "lineto": 199, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "database to be searched for the given object." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the object to search for." + } + ], + "argline": "git_odb *db, const git_oid *id", + "sig": "git_odb *::const git_oid *", + "return": { + "type": "int", + "comment": " 1 if the object was found, 0 otherwise" + }, + "description": "

Determine if the given object can be found in the object database.

\n", + "comments": "", + "group": "odb" + }, + "git_odb_exists_ext": { + "type": "function", + "file": "git2/odb.h", + "line": 210, + "lineto": 210, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "database to be searched for the given object." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the object to search for." + }, + { + "name": "flags", + "type": "unsigned int", + "comment": "flags affecting the lookup (see `git_odb_lookup_flags_t`)" + } + ], + "argline": "git_odb *db, const git_oid *id, unsigned int flags", + "sig": "git_odb *::const git_oid *::unsigned int", + "return": { + "type": "int", + "comment": " 1 if the object was found, 0 otherwise" + }, + "description": "

Determine if the given object can be found in the object database, with\n extended options.

\n", + "comments": "", + "group": "odb" + }, + "git_odb_exists_prefix": { + "type": "function", + "file": "git2/odb.h", + "line": 223, + "lineto": 224, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "The full OID of the found object if just one is found." + }, + { + "name": "db", + "type": "git_odb *", + "comment": "The database to be searched for the given object." + }, + { + "name": "short_id", + "type": "const git_oid *", + "comment": "A prefix of the id of the object to read." + }, + { + "name": "len", + "type": "size_t", + "comment": "The length of the prefix." + } + ], + "argline": "git_oid *out, git_odb *db, const git_oid *short_id, size_t len", + "sig": "git_oid *::git_odb *::const git_oid *::size_t", + "return": { + "type": "int", + "comment": " 0 if found, GIT_ENOTFOUND if not found, GIT_EAMBIGUOUS if multiple\n matches were found, other value \n<\n 0 if there was a read error." + }, + "description": "

Determine if an object can be found in the object database by an\n abbreviated object ID.

\n", + "comments": "", + "group": "odb" + }, + "git_odb_expand_ids": { + "type": "function", + "file": "git2/odb.h", + "line": 266, + "lineto": 269, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "The database to be searched for the given objects." + }, + { + "name": "ids", + "type": "git_odb_expand_id *", + "comment": "An array of short object IDs to search for" + }, + { + "name": "count", + "type": "size_t", + "comment": "The length of the `ids` array" + } + ], + "argline": "git_odb *db, git_odb_expand_id *ids, size_t count", + "sig": "git_odb *::git_odb_expand_id *::size_t", + "return": { + "type": "int", + "comment": " 0 on success or an error code on failure" + }, + "description": "

Determine if one or more objects can be found in the object database\n by their abbreviated object ID and type.

\n", + "comments": "

The given array will be updated in place: for each abbreviated ID that is unique in the database, and of the given type (if specified), the full object ID, object ID length (GIT_OID_SHA1_HEXSIZE) and type will be written back to the array. For IDs that are not found (or are ambiguous), the array entry will be zeroed.

\n\n

Note that since this function operates on multiple objects, the underlying database will not be asked to be reloaded if an object is not found (which is unlike other object database operations.)

\n", + "group": "odb" + }, + "git_odb_refresh": { + "type": "function", + "file": "git2/odb.h", + "line": 289, + "lineto": 289, + "args": [ + { + "name": "db", + "type": "struct git_odb *", + "comment": "database to refresh" + } + ], + "argline": "struct git_odb *db", + "sig": "struct git_odb *", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Refresh the object database to load newly added files.

\n", + "comments": "

If the object databases have changed on disk while the library is running, this function will force a reload of the underlying indexes.

\n\n

Use this function when you're confident that an external application has tampered with the ODB.

\n\n

NOTE that it is not necessary to call this function at all. The library will automatically attempt to refresh the ODB when a lookup fails, to see if the looked up object exists on disk but hasn't been loaded yet.

\n", + "group": "odb" + }, + "git_odb_foreach": { + "type": "function", + "file": "git2/odb.h", + "line": 304, + "lineto": 304, + "args": [ + { "name": "db", "type": "git_odb *", "comment": "database to use" }, + { + "name": "cb", + "type": "git_odb_foreach_cb", + "comment": "the callback to call for each object" + }, + { + "name": "payload", + "type": "void *", + "comment": "data to pass to the callback" + } + ], + "argline": "git_odb *db, git_odb_foreach_cb cb, void *payload", + "sig": "git_odb *::git_odb_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

List all objects available in the database

\n", + "comments": "

The callback will be called for each object available in the database. Note that the objects are likely to be returned in the index order, which would make accessing the objects in that order inefficient. Return a non-zero value from the callback to stop looping.

\n", + "group": "odb" + }, + "git_odb_write": { + "type": "function", + "file": "git2/odb.h", + "line": 324, + "lineto": 324, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "pointer to store the OID result of the write" + }, + { + "name": "odb", + "type": "git_odb *", + "comment": "object database where to store the object" + }, + { + "name": "data", + "type": "const void *", + "comment": "buffer with the data to store" + }, + { "name": "len", "type": "size_t", "comment": "size of the buffer" }, + { + "name": "type", + "type": "git_object_t", + "comment": "type of the data to store" + } + ], + "argline": "git_oid *out, git_odb *odb, const void *data, size_t len, git_object_t type", + "sig": "git_oid *::git_odb *::const void *::size_t::git_object_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Write an object directly into the ODB

\n", + "comments": "

This method writes a full object straight into the ODB. For most cases, it is preferred to write objects through a write stream, which is both faster and less memory intensive, specially for big objects.

\n\n

This method is provided for compatibility with custom backends which are not able to support streaming writes

\n", + "group": "odb", + "examples": { "general.c": ["ex/v1.8.4/general.html#git_odb_write-43"] } + }, + "git_odb_open_wstream": { + "type": "function", + "file": "git2/odb.h", + "line": 347, + "lineto": 347, + "args": [ + { + "name": "out", + "type": "git_odb_stream **", + "comment": "pointer where to store the stream" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "object database where the stream will write" + }, + { + "name": "size", + "type": "git_object_size_t", + "comment": "final size of the object that will be written" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "type of the object that will be written" + } + ], + "argline": "git_odb_stream **out, git_odb *db, git_object_size_t size, git_object_t type", + "sig": "git_odb_stream **::git_odb *::git_object_size_t::git_object_t", + "return": { + "type": "int", + "comment": " 0 if the stream was created; error code otherwise" + }, + "description": "

Open a stream to write an object into the ODB

\n", + "comments": "

The type and final length of the object must be specified when opening the stream.

\n\n

The returned stream will be of type GIT_STREAM_WRONLY, and it won't be effective until git_odb_stream_finalize_write is called and returns without an error

\n\n

The stream must always be freed when done with git_odb_stream_free or will leak memory.

\n", + "group": "odb" + }, + "git_odb_stream_write": { + "type": "function", + "file": "git2/odb.h", + "line": 360, + "lineto": 360, + "args": [ + { + "name": "stream", + "type": "git_odb_stream *", + "comment": "the stream" + }, + { + "name": "buffer", + "type": "const char *", + "comment": "the data to write" + }, + { "name": "len", "type": "size_t", "comment": "the buffer's length" } + ], + "argline": "git_odb_stream *stream, const char *buffer, size_t len", + "sig": "git_odb_stream *::const char *::size_t", + "return": { + "type": "int", + "comment": " 0 if the write succeeded, error code otherwise" + }, + "description": "

Write to an odb stream

\n", + "comments": "

This method will fail if the total number of received bytes exceeds the size declared with git_odb_open_wstream()

\n", + "group": "odb" + }, + "git_odb_stream_finalize_write": { + "type": "function", + "file": "git2/odb.h", + "line": 375, + "lineto": 375, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "pointer to store the resulting object's id" + }, + { + "name": "stream", + "type": "git_odb_stream *", + "comment": "the stream" + } + ], + "argline": "git_oid *out, git_odb_stream *stream", + "sig": "git_oid *::git_odb_stream *", + "return": { + "type": "int", + "comment": " 0 on success, an error code otherwise" + }, + "description": "

Finish writing to an odb stream

\n", + "comments": "

The object will take its final name and will be available to the odb.

\n\n

This method will fail if the total number of received bytes differs from the size declared with git_odb_open_wstream()

\n", + "group": "odb" + }, + "git_odb_stream_read": { + "type": "function", + "file": "git2/odb.h", + "line": 387, + "lineto": 387, + "args": [ + { + "name": "stream", + "type": "git_odb_stream *", + "comment": "the stream" + }, + { + "name": "buffer", + "type": "char *", + "comment": "a user-allocated buffer to store the data in." + }, + { "name": "len", "type": "size_t", "comment": "the buffer's length" } + ], + "argline": "git_odb_stream *stream, char *buffer, size_t len", + "sig": "git_odb_stream *::char *::size_t", + "return": { + "type": "int", + "comment": " 0 if the read succeeded, error code otherwise" + }, + "description": "

Read from an odb stream

\n", + "comments": "

Most backends don't implement streaming reads

\n", + "group": "odb" + }, + "git_odb_stream_free": { + "type": "function", + "file": "git2/odb.h", + "line": 394, + "lineto": 394, + "args": [ + { + "name": "stream", + "type": "git_odb_stream *", + "comment": "the stream to free" + } + ], + "argline": "git_odb_stream *stream", + "sig": "git_odb_stream *", + "return": { "type": "void", "comment": null }, + "description": "

Free an odb stream

\n", + "comments": "", + "group": "odb" + }, + "git_odb_open_rstream": { + "type": "function", + "file": "git2/odb.h", + "line": 422, + "lineto": 427, + "args": [ + { + "name": "out", + "type": "git_odb_stream **", + "comment": "pointer where to store the stream" + }, + { + "name": "len", + "type": "size_t *", + "comment": "pointer where to store the length of the object" + }, + { + "name": "type", + "type": "git_object_t *", + "comment": "pointer where to store the type of the object" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "object database where the stream will read from" + }, + { + "name": "oid", + "type": "const git_oid *", + "comment": "oid of the object the stream will read from" + } + ], + "argline": "git_odb_stream **out, size_t *len, git_object_t *type, git_odb *db, const git_oid *oid", + "sig": "git_odb_stream **::size_t *::git_object_t *::git_odb *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 if the stream was created, error code otherwise" + }, + "description": "

Open a stream to read an object from the ODB

\n", + "comments": "

Note that most backends do not support streaming reads because they store their objects as compressed/delta'ed blobs.

\n\n

It's recommended to use git_odb_read instead, which is assured to work on all backends.

\n\n

The returned stream will be of type GIT_STREAM_RDONLY and will have the following methods:

\n\n
    - stream->read: read `n` bytes from the stream      - stream->free: free the stream\n
\n\n

The stream must always be free'd or will leak memory.

\n", + "group": "odb" + }, + "git_odb_write_pack": { + "type": "function", + "file": "git2/odb.h", + "line": 448, + "lineto": 452, + "args": [ + { + "name": "out", + "type": "git_odb_writepack **", + "comment": "pointer to the writepack functions" + }, + { + "name": "db", + "type": "git_odb *", + "comment": "object database where the stream will read from" + }, + { + "name": "progress_cb", + "type": "git_indexer_progress_cb", + "comment": "function to call with progress information.\n Be aware that this is called inline with network and indexing operations,\n so performance may be affected." + }, + { + "name": "progress_payload", + "type": "void *", + "comment": "payload for the progress callback" + } + ], + "argline": "git_odb_writepack **out, git_odb *db, git_indexer_progress_cb progress_cb, void *progress_payload", + "sig": "git_odb_writepack **::git_odb *::git_indexer_progress_cb::void *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Open a stream for writing a pack file to the ODB.

\n", + "comments": "

If the ODB layer understands pack files, then the given packfile will likely be streamed directly to disk (and a corresponding index created). If the ODB layer does not understand pack files, the objects will be stored in whatever format the ODB layer uses.

\n", + "group": "odb" + }, + "git_odb_write_multi_pack_index": { + "type": "function", + "file": "git2/odb.h", + "line": 466, + "lineto": 467, + "args": [ + { + "name": "db", + "type": "git_odb *", + "comment": "object database where the `multi-pack-index` file will be written." + } + ], + "argline": "git_odb *db", + "sig": "git_odb *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Write a multi-pack-index file from all the .pack files in the ODB.

\n", + "comments": "

If the ODB layer understands pack files, then this will create a file called multi-pack-index next to the .pack and .idx files, which will contain an index of all objects stored in .pack files. This will allow for O(log n) lookup for n objects (regardless of how many packfiles there exist).

\n", + "group": "odb" + }, + "git_odb_object_dup": { + "type": "function", + "file": "git2/odb.h", + "line": 529, + "lineto": 529, + "args": [ + { + "name": "dest", + "type": "git_odb_object **", + "comment": "pointer where to store the copy" + }, + { + "name": "source", + "type": "git_odb_object *", + "comment": "object to copy" + } + ], + "argline": "git_odb_object **dest, git_odb_object *source", + "sig": "git_odb_object **::git_odb_object *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a copy of an odb_object

\n", + "comments": "

The returned copy must be manually freed with git_odb_object_free. Note that because of an implementation detail, the returned copy will be the same pointer as source: the object is internally refcounted, so the copy still needs to be freed twice.

\n", + "group": "odb" + }, + "git_odb_object_free": { + "type": "function", + "file": "git2/odb.h", + "line": 539, + "lineto": 539, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "object to close" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { "type": "void", "comment": null }, + "description": "

Close an ODB object

\n", + "comments": "

This method must always be called once a git_odb_object is no longer needed, otherwise memory will leak.

\n", + "group": "odb", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_odb_object_free-22"], + "general.c": ["ex/v1.8.4/general.html#git_odb_object_free-44"] + } + }, + "git_odb_object_id": { + "type": "function", + "file": "git2/odb.h", + "line": 549, + "lineto": 549, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "the object" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { + "type": "const git_oid *", + "comment": " a pointer to the OID" + }, + "description": "

Return the OID of an ODB object

\n", + "comments": "

This is the OID from which the object was read from

\n", + "group": "odb" + }, + "git_odb_object_data": { + "type": "function", + "file": "git2/odb.h", + "line": 562, + "lineto": 562, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "the object" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { "type": "const void *", "comment": " a pointer to the data" }, + "description": "

Return the data of an ODB object

\n", + "comments": "

This is the uncompressed, raw data as read from the ODB, without the leading header.

\n\n

This pointer is owned by the object and shall not be free'd.

\n", + "group": "odb", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_odb_object_data-45"] + } + }, + "git_odb_object_size": { + "type": "function", + "file": "git2/odb.h", + "line": 573, + "lineto": 573, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "the object" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { "type": "size_t", "comment": " the size" }, + "description": "

Return the size of an ODB object

\n", + "comments": "

This is the real size of the data buffer, not the actual size of the object.

\n", + "group": "odb", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_odb_object_size-23"], + "general.c": ["ex/v1.8.4/general.html#git_odb_object_size-46"] + } + }, + "git_odb_object_type": { + "type": "function", + "file": "git2/odb.h", + "line": 581, + "lineto": 581, + "args": [ + { + "name": "object", + "type": "git_odb_object *", + "comment": "the object" + } + ], + "argline": "git_odb_object *object", + "sig": "git_odb_object *", + "return": { "type": "git_object_t", "comment": " the type" }, + "description": "

Return the type of an ODB object

\n", + "comments": "", + "group": "odb", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_odb_object_type-47"] + } + }, + "git_odb_add_backend": { + "type": "function", + "file": "git2/odb.h", + "line": 596, + "lineto": 596, + "args": [ + { + "name": "odb", + "type": "git_odb *", + "comment": "database to add the backend to" + }, + { + "name": "backend", + "type": "git_odb_backend *", + "comment": "pointer to a git_odb_backend instance" + }, + { + "name": "priority", + "type": "int", + "comment": "Value for ordering the backends queue" + } + ], + "argline": "git_odb *odb, git_odb_backend *backend, int priority", + "sig": "git_odb *::git_odb_backend *::int", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Add a custom backend to an existing Object DB

\n", + "comments": "

The backends are checked in relative ordering, based on the value of the priority parameter.

\n\n

Read for more information.

\n", + "group": "odb" + }, + "git_odb_add_alternate": { + "type": "function", + "file": "git2/odb.h", + "line": 617, + "lineto": 617, + "args": [ + { + "name": "odb", + "type": "git_odb *", + "comment": "database to add the backend to" + }, + { + "name": "backend", + "type": "git_odb_backend *", + "comment": "pointer to a git_odb_backend instance" + }, + { + "name": "priority", + "type": "int", + "comment": "Value for ordering the backends queue" + } + ], + "argline": "git_odb *odb, git_odb_backend *backend, int priority", + "sig": "git_odb *::git_odb_backend *::int", + "return": { + "type": "int", + "comment": " 0 on success, error code otherwise" + }, + "description": "

Add a custom backend to an existing Object DB; this\n backend will work as an alternate.

\n", + "comments": "

Alternate backends are always checked for objects after all the main backends have been exhausted.

\n\n

The backends are checked in relative ordering, based on the value of the priority parameter.

\n\n

Writing is disabled on alternate backends.

\n\n

Read for more information.

\n", + "group": "odb" + }, + "git_odb_num_backends": { + "type": "function", + "file": "git2/odb.h", + "line": 625, + "lineto": 625, + "args": [ + { "name": "odb", "type": "git_odb *", "comment": "object database" } + ], + "argline": "git_odb *odb", + "sig": "git_odb *", + "return": { + "type": "size_t", + "comment": " number of backends in the ODB" + }, + "description": "

Get the number of ODB backend objects

\n", + "comments": "", + "group": "odb" + }, + "git_odb_get_backend": { + "type": "function", + "file": "git2/odb.h", + "line": 635, + "lineto": 635, + "args": [ + { + "name": "out", + "type": "git_odb_backend **", + "comment": "output pointer to ODB backend at pos" + }, + { "name": "odb", "type": "git_odb *", "comment": "object database" }, + { + "name": "pos", + "type": "size_t", + "comment": "index into object database backend list" + } + ], + "argline": "git_odb_backend **out, git_odb *odb, size_t pos", + "sig": "git_odb_backend **::git_odb *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if pos is invalid, other errors \n<\n 0" + }, + "description": "

Lookup an ODB backend object by index

\n", + "comments": "", + "group": "odb" + }, + "git_odb_set_commit_graph": { + "type": "function", + "file": "git2/odb.h", + "line": 650, + "lineto": 650, + "args": [ + { "name": "odb", "type": "git_odb *", "comment": "object database" }, + { + "name": "cgraph", + "type": "git_commit_graph *", + "comment": "the git commit-graph" + } + ], + "argline": "git_odb *odb, git_commit_graph *cgraph", + "sig": "git_odb *::git_commit_graph *", + "return": { + "type": "int", + "comment": " 0 on success; error code otherwise" + }, + "description": "

Set the git commit-graph for the ODB.

\n", + "comments": "

After a successful call, the ownership of the cgraph parameter will be transferred to libgit2, and the caller should not free it.

\n\n

The commit-graph can also be unset by explicitly passing NULL as the cgraph parameter.

\n", + "group": "odb" + }, + "git_oid_fmt": { + "type": "function", + "file": "git2/oid.h", + "line": 188, + "lineto": 188, + "args": [ + { + "name": "out", + "type": "char *", + "comment": "output hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (40 bytes for SHA1,\n\t\t64 bytes for SHA256). Only the oid digits are written;\n\t\ta '\n\\\n0' terminator must be added by the caller if it is\n\t\trequired." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure to format." + } + ], + "argline": "char *out, const git_oid *id", + "sig": "char *::const git_oid *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Format a git_oid into a hex string.

\n", + "comments": "", + "group": "oid", + "examples": { + "fetch.c": [ + "ex/v1.8.4/fetch.html#git_oid_fmt-1", + "ex/v1.8.4/fetch.html#git_oid_fmt-2" + ], + "general.c": [ + "ex/v1.8.4/general.html#git_oid_fmt-48", + "ex/v1.8.4/general.html#git_oid_fmt-49", + "ex/v1.8.4/general.html#git_oid_fmt-50", + "ex/v1.8.4/general.html#git_oid_fmt-51", + "ex/v1.8.4/general.html#git_oid_fmt-52" + ], + "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_oid_fmt-1"] + } + }, + "git_oid_nfmt": { + "type": "function", + "file": "git2/oid.h", + "line": 200, + "lineto": 200, + "args": [ + { + "name": "out", + "type": "char *", + "comment": "output hex string; you say how many bytes to write.\n\t\tIf the number of bytes is > GIT_OID_SHA1_HEXSIZE, extra bytes\n\t\twill be zeroed; if not, a '\n\\\n0' terminator is NOT added." + }, + { + "name": "n", + "type": "size_t", + "comment": "number of characters to write into out string" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure to format." + } + ], + "argline": "char *out, size_t n, const git_oid *id", + "sig": "char *::size_t::const git_oid *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Format a git_oid into a partial hex string.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_pathfmt": { + "type": "function", + "file": "git2/oid.h", + "line": 217, + "lineto": 217, + "args": [ + { + "name": "out", + "type": "char *", + "comment": "output hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (41 bytes for SHA1,\n\t\t65 bytes for SHA256). Only the oid digits are written;\n\t\ta '\n\\\n0' terminator must be added by the caller if it\n\t\tis required." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure to format." + } + ], + "argline": "char *out, const git_oid *id", + "sig": "char *::const git_oid *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Format a git_oid into a loose-object path string.

\n", + "comments": "

The resulting string is "aa/...", where "aa" is the first two hex digits of the oid and "..." is the remaining 38 digits.

\n", + "group": "oid" + }, + "git_oid_tostr_s": { + "type": "function", + "file": "git2/oid.h", + "line": 230, + "lineto": 230, + "args": [ + { + "name": "oid", + "type": "const git_oid *", + "comment": "The oid structure to format" + } + ], + "argline": "const git_oid *oid", + "sig": "const git_oid *", + "return": { + "type": "char *", + "comment": " the c-string or NULL on failure" + }, + "description": "

Format a git_oid into a statically allocated c-string.

\n", + "comments": "

The c-string is owned by the library and should not be freed by the user. If libgit2 is built with thread support, the string will be stored in TLS (i.e. one buffer per thread) to allow for concurrent calls of the function.

\n", + "group": "oid", + "examples": { + "merge.c": [ + "ex/v1.8.4/merge.html#git_oid_tostr_s-19", + "ex/v1.8.4/merge.html#git_oid_tostr_s-20" + ] + } + }, + "git_oid_tostr": { + "type": "function", + "file": "git2/oid.h", + "line": 251, + "lineto": 251, + "args": [ + { + "name": "out", + "type": "char *", + "comment": "the buffer into which the oid string is output." + }, + { + "name": "n", + "type": "size_t", + "comment": "the size of the out buffer." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the oid structure to format." + } + ], + "argline": "char *out, size_t n, const git_oid *id", + "sig": "char *::size_t::const git_oid *", + "return": { + "type": "char *", + "comment": " the out buffer pointer, assuming no input parameter\n\t\t\terrors, otherwise a pointer to an empty string." + }, + "description": "

Format a git_oid into a buffer as a hex format c-string.

\n", + "comments": "

If the buffer is smaller than the size of a hex-formatted oid string plus an additional byte (GIT_OID_SHA_HEXSIZE + 1 for SHA1 or GIT_OID_SHA256_HEXSIZE + 1 for SHA256), then the resulting oid c-string will be truncated to n-1 characters (but will still be NUL-byte terminated).

\n\n

If there are any input parameter errors (out == NULL, n == 0, oid == NULL), then a pointer to an empty string is returned, so that the return value can always be printed.

\n", + "group": "oid", + "examples": { + "blame.c": [ + "ex/v1.8.4/blame.html#git_oid_tostr-16", + "ex/v1.8.4/blame.html#git_oid_tostr-17" + ], + "cat-file.c": [ + "ex/v1.8.4/cat-file.html#git_oid_tostr-24", + "ex/v1.8.4/cat-file.html#git_oid_tostr-25", + "ex/v1.8.4/cat-file.html#git_oid_tostr-26", + "ex/v1.8.4/cat-file.html#git_oid_tostr-27", + "ex/v1.8.4/cat-file.html#git_oid_tostr-28" + ], + "log.c": [ + "ex/v1.8.4/log.html#git_oid_tostr-38", + "ex/v1.8.4/log.html#git_oid_tostr-39" + ], + "rev-parse.c": [ + "ex/v1.8.4/rev-parse.html#git_oid_tostr-10", + "ex/v1.8.4/rev-parse.html#git_oid_tostr-11", + "ex/v1.8.4/rev-parse.html#git_oid_tostr-12", + "ex/v1.8.4/rev-parse.html#git_oid_tostr-13" + ] + } + }, + "git_oid_cpy": { + "type": "function", + "file": "git2/oid.h", + "line": 260, + "lineto": 260, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "oid structure the result is written into." + }, + { + "name": "src", + "type": "const git_oid *", + "comment": "oid structure to copy from." + } + ], + "argline": "git_oid *out, const git_oid *src", + "sig": "git_oid *::const git_oid *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Copy an oid from one structure to another.

\n", + "comments": "", + "group": "oid", + "examples": { + "blame.c": [ + "ex/v1.8.4/blame.html#git_oid_cpy-18", + "ex/v1.8.4/blame.html#git_oid_cpy-19", + "ex/v1.8.4/blame.html#git_oid_cpy-20" + ] + } + }, + "git_oid_cmp": { + "type": "function", + "file": "git2/oid.h", + "line": 269, + "lineto": 269, + "args": [ + { + "name": "a", + "type": "const git_oid *", + "comment": "first oid structure." + }, + { + "name": "b", + "type": "const git_oid *", + "comment": "second oid structure." + } + ], + "argline": "const git_oid *a, const git_oid *b", + "sig": "const git_oid *::const git_oid *", + "return": { + "type": "int", + "comment": " \n<\n0, 0, >0 if a \n<\n b, a == b, a > b." + }, + "description": "

Compare two oid structures.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_equal": { + "type": "function", + "file": "git2/oid.h", + "line": 278, + "lineto": 278, + "args": [ + { + "name": "a", + "type": "const git_oid *", + "comment": "first oid structure." + }, + { + "name": "b", + "type": "const git_oid *", + "comment": "second oid structure." + } + ], + "argline": "const git_oid *a, const git_oid *b", + "sig": "const git_oid *::const git_oid *", + "return": { "type": "int", "comment": " true if equal, false otherwise" }, + "description": "

Compare two oid structures for equality

\n", + "comments": "", + "group": "oid" + }, + "git_oid_ncmp": { + "type": "function", + "file": "git2/oid.h", + "line": 289, + "lineto": 289, + "args": [ + { + "name": "a", + "type": "const git_oid *", + "comment": "first oid structure." + }, + { + "name": "b", + "type": "const git_oid *", + "comment": "second oid structure." + }, + { + "name": "len", + "type": "size_t", + "comment": "the number of hex chars to compare" + } + ], + "argline": "const git_oid *a, const git_oid *b, size_t len", + "sig": "const git_oid *::const git_oid *::size_t", + "return": { "type": "int", "comment": " 0 in case of a match" }, + "description": "

Compare the first 'len' hexadecimal characters (packets of 4 bits)\n of two oid structures.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_streq": { + "type": "function", + "file": "git2/oid.h", + "line": 298, + "lineto": 298, + "args": [ + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure." + }, + { + "name": "str", + "type": "const char *", + "comment": "input hex string of an object id." + } + ], + "argline": "const git_oid *id, const char *str", + "sig": "const git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 in case of a match, -1 otherwise." + }, + "description": "

Check if an oid equals an hex formatted object id.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_strcmp": { + "type": "function", + "file": "git2/oid.h", + "line": 308, + "lineto": 308, + "args": [ + { + "name": "id", + "type": "const git_oid *", + "comment": "oid structure." + }, + { + "name": "str", + "type": "const char *", + "comment": "input hex string of an object id." + } + ], + "argline": "const git_oid *id, const char *str", + "sig": "const git_oid *::const char *", + "return": { + "type": "int", + "comment": " -1 if str is not valid, \n<\n0 if id sorts before str,\n 0 if id matches str, >0 if id sorts after str." + }, + "description": "

Compare an oid to an hex formatted object id.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_is_zero": { + "type": "function", + "file": "git2/oid.h", + "line": 315, + "lineto": 315, + "args": [{ "name": "id", "type": "const git_oid *", "comment": null }], + "argline": "const git_oid *id", + "sig": "const git_oid *", + "return": { "type": "int", "comment": " 1 if all zeros, 0 otherwise." }, + "description": "

Check is an oid is all zeros.

\n", + "comments": "", + "group": "oid", + "examples": { + "blame.c": ["ex/v1.8.4/blame.html#git_oid_is_zero-21"], + "fetch.c": ["ex/v1.8.4/fetch.html#git_oid_is_zero-3"] + } + }, + "git_oid_shorten_new": { + "type": "function", + "file": "git2/oid.h", + "line": 336, + "lineto": 336, + "args": [ + { + "name": "min_length", + "type": "size_t", + "comment": "The minimal length for all identifiers,\n\t\twhich will be used even if shorter OIDs would still\n\t\tbe unique." + } + ], + "argline": "size_t min_length", + "sig": "size_t", + "return": { + "type": "git_oid_shorten *", + "comment": " a `git_oid_shorten` instance, NULL if OOM" + }, + "description": "

Create a new OID shortener.

\n", + "comments": "

The OID shortener is used to process a list of OIDs in text form and return the shortest length that would uniquely identify all of them.

\n\n

E.g. look at the result of git log --abbrev.

\n", + "group": "oid" + }, + "git_oid_shorten_add": { + "type": "function", + "file": "git2/oid.h", + "line": 362, + "lineto": 362, + "args": [ + { + "name": "os", + "type": "git_oid_shorten *", + "comment": "a `git_oid_shorten` instance" + }, + { + "name": "text_id", + "type": "const char *", + "comment": "an OID in text form" + } + ], + "argline": "git_oid_shorten *os, const char *text_id", + "sig": "git_oid_shorten *::const char *", + "return": { + "type": "int", + "comment": " the minimal length to uniquely identify all OIDs\n\t\tadded so far to the set; or an error code (\n<\n0) if an\n\t\terror occurs." + }, + "description": "

Add a new OID to set of shortened OIDs and calculate\n the minimal length to uniquely identify all the OIDs in\n the set.

\n", + "comments": "

The OID is expected to be a 40-char hexadecimal string. The OID is owned by the user and will not be modified or freed.

\n\n

For performance reasons, there is a hard-limit of how many OIDs can be added to a single set (around ~32000, assuming a mostly randomized distribution), which should be enough for any kind of program, and keeps the algorithm fast and memory-efficient.

\n\n

Attempting to add more than those OIDs will result in a GIT_ERROR_INVALID error

\n", + "group": "oid" + }, + "git_oid_shorten_free": { + "type": "function", + "file": "git2/oid.h", + "line": 369, + "lineto": 369, + "args": [ + { + "name": "os", + "type": "git_oid_shorten *", + "comment": "a `git_oid_shorten` instance" + } + ], + "argline": "git_oid_shorten *os", + "sig": "git_oid_shorten *", + "return": { "type": "void", "comment": null }, + "description": "

Free an OID shortener instance

\n", + "comments": "", + "group": "oid" + }, + "git_oidarray_dispose": { + "type": "function", + "file": "git2/oidarray.h", + "line": 31, + "lineto": 31, + "args": [ + { + "name": "array", + "type": "git_oidarray *", + "comment": "git_oidarray from which to free oid data" + } + ], + "argline": "git_oidarray *array", + "sig": "git_oidarray *", + "return": { "type": "void", "comment": null }, + "description": "

Free the object IDs contained in an oid_array. This method should\n be called on git_oidarray objects that were provided by the\n library. Not doing so will result in a memory leak.

\n", + "comments": "

This does not free the git_oidarray itself, since the library will never allocate that object directly itself.

\n", + "group": "oidarray" + }, + "git_packbuilder_new": { + "type": "function", + "file": "git2/pack.h", + "line": 65, + "lineto": 65, + "args": [ + { + "name": "out", + "type": "git_packbuilder **", + "comment": "The new packbuilder object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository" + } + ], + "argline": "git_packbuilder **out, git_repository *repo", + "sig": "git_packbuilder **::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Initialize a new packbuilder

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_set_threads": { + "type": "function", + "file": "git2/pack.h", + "line": 78, + "lineto": 78, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "n", + "type": "unsigned int", + "comment": "Number of threads to spawn" + } + ], + "argline": "git_packbuilder *pb, unsigned int n", + "sig": "git_packbuilder *::unsigned int", + "return": { + "type": "unsigned int", + "comment": " number of actual threads to be used" + }, + "description": "

Set number of threads to spawn

\n", + "comments": "

By default, libgit2 won't spawn any threads at all; when set to 0, libgit2 will autodetect the number of CPUs.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert": { + "type": "function", + "file": "git2/pack.h", + "line": 92, + "lineto": 92, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The oid of the commit" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name; might be NULL" + } + ], + "argline": "git_packbuilder *pb, const git_oid *id, const char *name", + "sig": "git_packbuilder *::const git_oid *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Insert a single object

\n", + "comments": "

For an optimal pack it's mandatory to insert objects in recency order, commits followed by trees and blobs.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert_tree": { + "type": "function", + "file": "git2/pack.h", + "line": 104, + "lineto": 104, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The oid of the root tree" + } + ], + "argline": "git_packbuilder *pb, const git_oid *id", + "sig": "git_packbuilder *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Insert a root tree object

\n", + "comments": "

This will add the tree as well as all referenced trees and blobs.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert_commit": { + "type": "function", + "file": "git2/pack.h", + "line": 116, + "lineto": 116, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The oid of the commit" + } + ], + "argline": "git_packbuilder *pb, const git_oid *id", + "sig": "git_packbuilder *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Insert a commit object

\n", + "comments": "

This will add a commit as well as the completed referenced tree.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert_walk": { + "type": "function", + "file": "git2/pack.h", + "line": 129, + "lineto": 129, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + }, + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the revwalk to use to fill the packbuilder" + } + ], + "argline": "git_packbuilder *pb, git_revwalk *walk", + "sig": "git_packbuilder *::git_revwalk *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Insert objects as given by the walk

\n", + "comments": "

Those commits and all objects they reference will be inserted into the packbuilder.

\n", + "group": "packbuilder" + }, + "git_packbuilder_insert_recur": { + "type": "function", + "file": "git2/pack.h", + "line": 141, + "lineto": 141, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the id of the root object to insert" + }, + { + "name": "name", + "type": "const char *", + "comment": "optional name for the object" + } + ], + "argline": "git_packbuilder *pb, const git_oid *id, const char *name", + "sig": "git_packbuilder *::const git_oid *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Recursively insert an object and its referenced objects

\n", + "comments": "

Insert the object as well as any object it references.

\n", + "group": "packbuilder" + }, + "git_packbuilder_write_buf": { + "type": "function", + "file": "git2/pack.h", + "line": 153, + "lineto": 153, + "args": [ + { + "name": "buf", + "type": "git_buf *", + "comment": "Buffer where to write the packfile" + }, + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + } + ], + "argline": "git_buf *buf, git_packbuilder *pb", + "sig": "git_buf *::git_packbuilder *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Write the contents of the packfile to an in-memory buffer

\n", + "comments": "

The contents of the buffer will become a valid packfile, even though there will be no attached index

\n", + "group": "packbuilder" + }, + "git_packbuilder_write": { + "type": "function", + "file": "git2/pack.h", + "line": 166, + "lineto": 171, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to the directory where the packfile and index should be stored, or NULL for default location" + }, + { + "name": "mode", + "type": "unsigned int", + "comment": "permissions to use creating a packfile or 0 for defaults" + }, + { + "name": "progress_cb", + "type": "git_indexer_progress_cb", + "comment": "function to call with progress information from the indexer (optional)" + }, + { + "name": "progress_cb_payload", + "type": "void *", + "comment": "payload for the progress callback (optional)" + } + ], + "argline": "git_packbuilder *pb, const char *path, unsigned int mode, git_indexer_progress_cb progress_cb, void *progress_cb_payload", + "sig": "git_packbuilder *::const char *::unsigned int::git_indexer_progress_cb::void *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Write the new pack and corresponding index file to path.

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_hash": { + "type": "function", + "file": "git2/pack.h", + "line": 184, + "lineto": 184, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder object" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { "type": "const git_oid *", "comment": " 0 or an error code" }, + "description": "

Get the packfile's hash

\n", + "comments": "

A packfile's name is derived from the sorted hashing of all object names. This is only correct after the packfile has been written.

\n", + "group": "packbuilder" + }, + "git_packbuilder_name": { + "type": "function", + "file": "git2/pack.h", + "line": 196, + "lineto": 196, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder instance" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { + "type": "const char *", + "comment": " a NUL terminated string for the packfile name" + }, + "description": "

Get the unique name for the resulting packfile.

\n", + "comments": "

The packfile's name is derived from the packfile's content. This is only correct after the packfile has been written.

\n", + "group": "packbuilder" + }, + "git_packbuilder_foreach": { + "type": "function", + "file": "git2/pack.h", + "line": 218, + "lineto": 218, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + }, + { + "name": "cb", + "type": "git_packbuilder_foreach_cb", + "comment": "the callback to call with each packed object's buffer" + }, + { + "name": "payload", + "type": "void *", + "comment": "the callback's data" + } + ], + "argline": "git_packbuilder *pb, git_packbuilder_foreach_cb cb, void *payload", + "sig": "git_packbuilder *::git_packbuilder_foreach_cb::void *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create the new pack and pass each object to the callback

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_object_count": { + "type": "function", + "file": "git2/pack.h", + "line": 226, + "lineto": 226, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { + "type": "size_t", + "comment": " the number of objects in the packfile" + }, + "description": "

Get the total number of objects the packbuilder will write out

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_written": { + "type": "function", + "file": "git2/pack.h", + "line": 234, + "lineto": 234, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "the packbuilder" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { + "type": "size_t", + "comment": " the number of objects which have already been written" + }, + "description": "

Get the number of objects the packbuilder has already written out

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_set_callbacks": { + "type": "function", + "file": "git2/pack.h", + "line": 253, + "lineto": 256, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder object" + }, + { + "name": "progress_cb", + "type": "git_packbuilder_progress", + "comment": "Function to call with progress information during\n pack building. Be aware that this is called inline with pack building\n operations, so performance may be affected." + }, + { + "name": "progress_cb_payload", + "type": "void *", + "comment": "Payload for progress callback." + } + ], + "argline": "git_packbuilder *pb, git_packbuilder_progress progress_cb, void *progress_cb_payload", + "sig": "git_packbuilder *::git_packbuilder_progress::void *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Set the callbacks for a packbuilder

\n", + "comments": "", + "group": "packbuilder" + }, + "git_packbuilder_free": { + "type": "function", + "file": "git2/pack.h", + "line": 263, + "lineto": 263, + "args": [ + { + "name": "pb", + "type": "git_packbuilder *", + "comment": "The packbuilder" + } + ], + "argline": "git_packbuilder *pb", + "sig": "git_packbuilder *", + "return": { "type": "void", "comment": null }, + "description": "

Free the packbuilder and all associated data

\n", + "comments": "", + "group": "packbuilder" + }, + "git_patch_owner": { + "type": "function", + "file": "git2/patch.h", + "line": 37, + "lineto": 37, + "args": [ + { "name": "patch", "type": "const git_patch *", "comment": "the patch" } + ], + "argline": "const git_patch *patch", + "sig": "const git_patch *", + "return": { + "type": "git_repository *", + "comment": " a pointer to the repository" + }, + "description": "

Get the repository associated with this patch. May be NULL.

\n", + "comments": "", + "group": "patch" + }, + "git_patch_from_diff": { + "type": "function", + "file": "git2/patch.h", + "line": 59, + "lineto": 60, + "args": [ + { + "name": "out", + "type": "git_patch **", + "comment": "Output parameter for the delta patch object" + }, + { "name": "diff", "type": "git_diff *", "comment": "Diff list object" }, + { "name": "idx", "type": "size_t", "comment": "Index into diff list" } + ], + "argline": "git_patch **out, git_diff *diff, size_t idx", + "sig": "git_patch **::git_diff *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, other value \n<\n 0 on error" + }, + "description": "

Return a patch for an entry in the diff list.

\n", + "comments": "

The git_patch is a newly created object contains the text diffs for the delta. You have to call git_patch_free() when you are done with it. You can use the patch object to loop over all the hunks and lines in the diff of the one delta.

\n\n

For an unchanged file or a binary file, no git_patch will be created, the output will be set to NULL, and the binary flag will be set true in the git_diff_delta structure.

\n\n

It is okay to pass NULL for either of the output parameters; if you pass NULL for the git_patch, then the text diff will not be calculated.

\n", + "group": "patch" + }, + "git_patch_from_blobs": { + "type": "function", + "file": "git2/patch.h", + "line": 78, + "lineto": 84, + "args": [ + { + "name": "out", + "type": "git_patch **", + "comment": "The generated patch; NULL on error" + }, + { + "name": "old_blob", + "type": "const git_blob *", + "comment": "Blob for old side of diff, or NULL for empty blob" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old blob as if it had this filename; can be NULL" + }, + { + "name": "new_blob", + "type": "const git_blob *", + "comment": "Blob for new side of diff, or NULL for empty blob" + }, + { + "name": "new_as_path", + "type": "const char *", + "comment": "Treat new blob as if it had this filename; can be NULL" + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + } + ], + "argline": "git_patch **out, const git_blob *old_blob, const char *old_as_path, const git_blob *new_blob, const char *new_as_path, const git_diff_options *opts", + "sig": "git_patch **::const git_blob *::const char *::const git_blob *::const char *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code \n<\n 0" + }, + "description": "

Directly generate a patch from the difference between two blobs.

\n", + "comments": "

This is just like git_diff_blobs() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", + "group": "patch" + }, + "git_patch_from_blob_and_buffer": { + "type": "function", + "file": "git2/patch.h", + "line": 103, + "lineto": 110, + "args": [ + { + "name": "out", + "type": "git_patch **", + "comment": "The generated patch; NULL on error" + }, + { + "name": "old_blob", + "type": "const git_blob *", + "comment": "Blob for old side of diff, or NULL for empty blob" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old blob as if it had this filename; can be NULL" + }, + { + "name": "buffer", + "type": "const void *", + "comment": "Raw data for new side of diff, or NULL for empty" + }, + { + "name": "buffer_len", + "type": "size_t", + "comment": "Length of raw data for new side of diff" + }, + { + "name": "buffer_as_path", + "type": "const char *", + "comment": "Treat buffer as if it had this filename; can be NULL" + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + } + ], + "argline": "git_patch **out, const git_blob *old_blob, const char *old_as_path, const void *buffer, size_t buffer_len, const char *buffer_as_path, const git_diff_options *opts", + "sig": "git_patch **::const git_blob *::const char *::const void *::size_t::const char *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code \n<\n 0" + }, + "description": "

Directly generate a patch from the difference between a blob and a buffer.

\n", + "comments": "

This is just like git_diff_blob_to_buffer() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", + "group": "patch" + }, + "git_patch_from_buffers": { + "type": "function", + "file": "git2/patch.h", + "line": 130, + "lineto": 138, + "args": [ + { + "name": "out", + "type": "git_patch **", + "comment": "The generated patch; NULL on error" + }, + { + "name": "old_buffer", + "type": "const void *", + "comment": "Raw data for old side of diff, or NULL for empty" + }, + { + "name": "old_len", + "type": "size_t", + "comment": "Length of the raw data for old side of the diff" + }, + { + "name": "old_as_path", + "type": "const char *", + "comment": "Treat old buffer as if it had this filename; can be NULL" + }, + { + "name": "new_buffer", + "type": "const void *", + "comment": "Raw data for new side of diff, or NULL for empty" + }, + { + "name": "new_len", + "type": "size_t", + "comment": "Length of raw data for new side of diff" + }, + { + "name": "new_as_path", + "type": "const char *", + "comment": "Treat buffer as if it had this filename; can be NULL" + }, + { + "name": "opts", + "type": "const git_diff_options *", + "comment": "Options for diff, or NULL for default options" + } + ], + "argline": "git_patch **out, const void *old_buffer, size_t old_len, const char *old_as_path, const void *new_buffer, size_t new_len, const char *new_as_path, const git_diff_options *opts", + "sig": "git_patch **::const void *::size_t::const char *::const void *::size_t::const char *::const git_diff_options *", + "return": { + "type": "int", + "comment": " 0 on success or error code \n<\n 0" + }, + "description": "

Directly generate a patch from the difference between two buffers.

\n", + "comments": "

This is just like git_diff_buffers() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", + "group": "patch", + "examples": { + "diff.c": ["ex/v1.8.4/diff.html#git_patch_from_buffers-16"] + } + }, + "git_patch_free": { + "type": "function", + "file": "git2/patch.h", + "line": 145, + "lineto": 145, + "args": [ + { + "name": "patch", + "type": "git_patch *", + "comment": "The patch to free." + } + ], + "argline": "git_patch *patch", + "sig": "git_patch *", + "return": { "type": "void", "comment": null }, + "description": "

Free a git_patch object.

\n", + "comments": "", + "group": "patch", + "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_patch_free-17"] } + }, + "git_patch_get_delta": { + "type": "function", + "file": "git2/patch.h", + "line": 154, + "lineto": 154, + "args": [ + { + "name": "patch", + "type": "const git_patch *", + "comment": "The patch in which to get the delta." + } + ], + "argline": "const git_patch *patch", + "sig": "const git_patch *", + "return": { + "type": "const git_diff_delta *", + "comment": " The delta associated with the patch." + }, + "description": "

Get the delta associated with a patch. This delta points to internal\n data and you do not have to release it when you are done with it.

\n", + "comments": "", + "group": "patch" + }, + "git_patch_num_hunks": { + "type": "function", + "file": "git2/patch.h", + "line": 162, + "lineto": 162, + "args": [ + { + "name": "patch", + "type": "const git_patch *", + "comment": "The patch in which to get the number of hunks." + } + ], + "argline": "const git_patch *patch", + "sig": "const git_patch *", + "return": { + "type": "size_t", + "comment": " The number of hunks of the patch." + }, + "description": "

Get the number of hunks in a patch

\n", + "comments": "", + "group": "patch" + }, + "git_patch_line_stats": { + "type": "function", + "file": "git2/patch.h", + "line": 180, + "lineto": 184, + "args": [ + { + "name": "total_context", + "type": "size_t *", + "comment": "Count of context lines in output, can be NULL." + }, + { + "name": "total_additions", + "type": "size_t *", + "comment": "Count of addition lines in output, can be NULL." + }, + { + "name": "total_deletions", + "type": "size_t *", + "comment": "Count of deletion lines in output, can be NULL." + }, + { + "name": "patch", + "type": "const git_patch *", + "comment": "The git_patch object" + } + ], + "argline": "size_t *total_context, size_t *total_additions, size_t *total_deletions, const git_patch *patch", + "sig": "size_t *::size_t *::size_t *::const git_patch *", + "return": { "type": "int", "comment": " 0 on success, \n<\n0 on error" }, + "description": "

Get line counts of each type in a patch.

\n", + "comments": "

This helps imitate a diff --numstat type of output. For that purpose, you only need the total_additions and total_deletions values, but we include the total_context line count in case you want the total number of lines of diff output that will be generated.

\n\n

All outputs are optional. Pass NULL if you don't need a particular count.

\n", + "group": "patch" + }, + "git_patch_get_hunk": { + "type": "function", + "file": "git2/patch.h", + "line": 199, + "lineto": 203, + "args": [ + { + "name": "out", + "type": "const git_diff_hunk **", + "comment": "Output pointer to git_diff_hunk of hunk" + }, + { + "name": "lines_in_hunk", + "type": "size_t *", + "comment": "Output count of total lines in this hunk" + }, + { + "name": "patch", + "type": "git_patch *", + "comment": "Input pointer to patch object" + }, + { + "name": "hunk_idx", + "type": "size_t", + "comment": "Input index of hunk to get information about" + } + ], + "argline": "const git_diff_hunk **out, size_t *lines_in_hunk, git_patch *patch, size_t hunk_idx", + "sig": "const git_diff_hunk **::size_t *::git_patch *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if hunk_idx out of range, \n<\n0 on error" + }, + "description": "

Get the information about a hunk in a patch

\n", + "comments": "

Given a patch and a hunk index into the patch, this returns detailed information about that hunk. Any of the output pointers can be passed as NULL if you don't care about that particular piece of information.

\n", + "group": "patch" + }, + "git_patch_num_lines_in_hunk": { + "type": "function", + "file": "git2/patch.h", + "line": 212, + "lineto": 214, + "args": [ + { + "name": "patch", + "type": "const git_patch *", + "comment": "The git_patch object" + }, + { "name": "hunk_idx", "type": "size_t", "comment": "Index of the hunk" } + ], + "argline": "const git_patch *patch, size_t hunk_idx", + "sig": "const git_patch *::size_t", + "return": { + "type": "int", + "comment": " Number of lines in hunk or GIT_ENOTFOUND if invalid hunk index" + }, + "description": "

Get the number of lines in a hunk.

\n", + "comments": "", + "group": "patch" + }, + "git_patch_get_line_in_hunk": { + "type": "function", + "file": "git2/patch.h", + "line": 230, + "lineto": 234, + "args": [ + { + "name": "out", + "type": "const git_diff_line **", + "comment": "The git_diff_line data for this line" + }, + { + "name": "patch", + "type": "git_patch *", + "comment": "The patch to look in" + }, + { + "name": "hunk_idx", + "type": "size_t", + "comment": "The index of the hunk" + }, + { + "name": "line_of_hunk", + "type": "size_t", + "comment": "The index of the line in the hunk" + } + ], + "argline": "const git_diff_line **out, git_patch *patch, size_t hunk_idx, size_t line_of_hunk", + "sig": "const git_diff_line **::git_patch *::size_t::size_t", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Get data about a line in a hunk of a patch.

\n", + "comments": "

Given a patch, a hunk index, and a line index in the hunk, this will return a lot of details about that line. If you pass a hunk index larger than the number of hunks or a line index larger than the number of lines in the hunk, this will return -1.

\n", + "group": "patch" + }, + "git_patch_size": { + "type": "function", + "file": "git2/patch.h", + "line": 252, + "lineto": 256, + "args": [ + { + "name": "patch", + "type": "git_patch *", + "comment": "A git_patch representing changes to one file" + }, + { + "name": "include_context", + "type": "int", + "comment": "Include context lines in size if non-zero" + }, + { + "name": "include_hunk_headers", + "type": "int", + "comment": "Include hunk header lines if non-zero" + }, + { + "name": "include_file_headers", + "type": "int", + "comment": "Include file header lines if non-zero" + } + ], + "argline": "git_patch *patch, int include_context, int include_hunk_headers, int include_file_headers", + "sig": "git_patch *::int::int::int", + "return": { "type": "size_t", "comment": " The number of bytes of data" }, + "description": "

Look up size of patch diff data in bytes

\n", + "comments": "

This returns the raw size of the patch data. This only includes the actual data from the lines of the diff, not the file or hunk headers.

\n\n

If you pass include_context as true (non-zero), this will be the size of all of the diff output; if you pass it as false (zero), this will only include the actual changed lines (as if context_lines was 0).

\n", + "group": "patch" + }, + "git_patch_print": { + "type": "function", + "file": "git2/patch.h", + "line": 270, + "lineto": 273, + "args": [ + { + "name": "patch", + "type": "git_patch *", + "comment": "A git_patch representing changes to one file" + }, + { + "name": "print_cb", + "type": "git_diff_line_cb", + "comment": "Callback function to output lines of the patch. Will be\n called for file headers, hunk headers, and diff lines." + }, + { + "name": "payload", + "type": "void *", + "comment": "Reference pointer that will be passed to your callbacks." + } + ], + "argline": "git_patch *patch, git_diff_line_cb print_cb, void *payload", + "sig": "git_patch *::git_diff_line_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Serialize the patch to text via callback.

\n", + "comments": "

Returning a non-zero value from the callback will terminate the iteration and return that value to the caller.

\n", + "group": "patch" + }, + "git_patch_to_buf": { + "type": "function", + "file": "git2/patch.h", + "line": 282, + "lineto": 284, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "The git_buf to be filled in" + }, + { + "name": "patch", + "type": "git_patch *", + "comment": "A git_patch representing changes to one file" + } + ], + "argline": "git_buf *out, git_patch *patch", + "sig": "git_buf *::git_patch *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure." + }, + "description": "

Get the content of a patch as a single diff text.

\n", + "comments": "", + "group": "patch", + "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_patch_to_buf-18"] } + }, + "git_pathspec_new": { + "type": "function", + "file": "git2/pathspec.h", + "line": 82, + "lineto": 83, + "args": [ + { + "name": "out", + "type": "git_pathspec **", + "comment": "Output of the compiled pathspec" + }, + { + "name": "pathspec", + "type": "const git_strarray *", + "comment": "A git_strarray of the paths to match" + } + ], + "argline": "git_pathspec **out, const git_strarray *pathspec", + "sig": "git_pathspec **::const git_strarray *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Compile a pathspec

\n", + "comments": "", + "group": "pathspec", + "examples": { "log.c": ["ex/v1.8.4/log.html#git_pathspec_new-40"] } + }, + "git_pathspec_free": { + "type": "function", + "file": "git2/pathspec.h", + "line": 90, + "lineto": 90, + "args": [ + { + "name": "ps", + "type": "git_pathspec *", + "comment": "The compiled pathspec" + } + ], + "argline": "git_pathspec *ps", + "sig": "git_pathspec *", + "return": { "type": "void", "comment": null }, + "description": "

Free a pathspec

\n", + "comments": "", + "group": "pathspec", + "examples": { "log.c": ["ex/v1.8.4/log.html#git_pathspec_free-41"] } + }, + "git_pathspec_matches_path": { + "type": "function", + "file": "git2/pathspec.h", + "line": 105, + "lineto": 106, + "args": [ + { + "name": "ps", + "type": "const git_pathspec *", + "comment": "The compiled pathspec" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "path", + "type": "const char *", + "comment": "The pathname to attempt to match" + } + ], + "argline": "const git_pathspec *ps, uint32_t flags, const char *path", + "sig": "const git_pathspec *::uint32_t::const char *", + "return": { + "type": "int", + "comment": " 1 is path matches spec, 0 if it does not" + }, + "description": "

Try to match a path against a pathspec

\n", + "comments": "

Unlike most of the other pathspec matching functions, this will not fall back on the native case-sensitivity for your platform. You must explicitly pass flags to control case sensitivity or else this will fall back on being case sensitive.

\n", + "group": "pathspec" + }, + "git_pathspec_match_workdir": { + "type": "function", + "file": "git2/pathspec.h", + "line": 130, + "lineto": 134, + "args": [ + { + "name": "out", + "type": "git_pathspec_match_list **", + "comment": "Output list of matches; pass NULL to just get return value" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository in which to match; bare repo is an error" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "ps", + "type": "git_pathspec *", + "comment": "Pathspec to be matched" + } + ], + "argline": "git_pathspec_match_list **out, git_repository *repo, uint32_t flags, git_pathspec *ps", + "sig": "git_pathspec_match_list **::git_repository *::uint32_t::git_pathspec *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag was given" + }, + "description": "

Match a pathspec against the working directory of a repository.

\n", + "comments": "

This matches the pathspec against the current files in the working directory of the repository. It is an error to invoke this on a bare repo. This handles git ignores (i.e. ignored files will not be considered to match the pathspec unless the file is tracked in the index).

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", + "group": "pathspec" + }, + "git_pathspec_match_index": { + "type": "function", + "file": "git2/pathspec.h", + "line": 159, + "lineto": 163, + "args": [ + { + "name": "out", + "type": "git_pathspec_match_list **", + "comment": "Output list of matches; pass NULL to just get return value" + }, + { + "name": "index", + "type": "git_index *", + "comment": "The index to match against" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "ps", + "type": "git_pathspec *", + "comment": "Pathspec to be matched" + } + ], + "argline": "git_pathspec_match_list **out, git_index *index, uint32_t flags, git_pathspec *ps", + "sig": "git_pathspec_match_list **::git_index *::uint32_t::git_pathspec *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" + }, + "description": "

Match a pathspec against entries in an index.

\n", + "comments": "

This matches the pathspec against the files in the repository index.

\n\n

NOTE: At the moment, the case sensitivity of this match is controlled by the current case-sensitivity of the index object itself and the USE_CASE and IGNORE_CASE flags will have no effect. This behavior will be corrected in a future release.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", + "group": "pathspec" + }, + "git_pathspec_match_tree": { + "type": "function", + "file": "git2/pathspec.h", + "line": 183, + "lineto": 187, + "args": [ + { + "name": "out", + "type": "git_pathspec_match_list **", + "comment": "Output list of matches; pass NULL to just get return value" + }, + { + "name": "tree", + "type": "git_tree *", + "comment": "The root-level tree to match against" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "ps", + "type": "git_pathspec *", + "comment": "Pathspec to be matched" + } + ], + "argline": "git_pathspec_match_list **out, git_tree *tree, uint32_t flags, git_pathspec *ps", + "sig": "git_pathspec_match_list **::git_tree *::uint32_t::git_pathspec *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" + }, + "description": "

Match a pathspec against files in a tree.

\n", + "comments": "

This matches the pathspec against the files in the given tree.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", + "group": "pathspec", + "examples": { "log.c": ["ex/v1.8.4/log.html#git_pathspec_match_tree-42"] } + }, + "git_pathspec_match_diff": { + "type": "function", + "file": "git2/pathspec.h", + "line": 207, + "lineto": 211, + "args": [ + { + "name": "out", + "type": "git_pathspec_match_list **", + "comment": "Output list of matches; pass NULL to just get return value" + }, + { + "name": "diff", + "type": "git_diff *", + "comment": "A generated diff list" + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Combination of git_pathspec_flag_t options to control match" + }, + { + "name": "ps", + "type": "git_pathspec *", + "comment": "Pathspec to be matched" + } + ], + "argline": "git_pathspec_match_list **out, git_diff *diff, uint32_t flags, git_pathspec *ps", + "sig": "git_pathspec_match_list **::git_diff *::uint32_t::git_pathspec *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, GIT_ENOTFOUND if no matches and\n the GIT_PATHSPEC_NO_MATCH_ERROR flag is used" + }, + "description": "

Match a pathspec against files in a diff list.

\n", + "comments": "

This matches the pathspec against the files in the given diff list.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", + "group": "pathspec" + }, + "git_pathspec_match_list_free": { + "type": "function", + "file": "git2/pathspec.h", + "line": 218, + "lineto": 218, + "args": [ + { + "name": "m", + "type": "git_pathspec_match_list *", + "comment": "The git_pathspec_match_list to be freed" + } + ], + "argline": "git_pathspec_match_list *m", + "sig": "git_pathspec_match_list *", + "return": { "type": "void", "comment": null }, + "description": "

Free memory associates with a git_pathspec_match_list

\n", + "comments": "", + "group": "pathspec" + }, + "git_pathspec_match_list_entrycount": { + "type": "function", + "file": "git2/pathspec.h", + "line": 226, + "lineto": 227, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + } + ], + "argline": "const git_pathspec_match_list *m", + "sig": "const git_pathspec_match_list *", + "return": { + "type": "size_t", + "comment": " Number of items in match list" + }, + "description": "

Get the number of items in a match list.

\n", + "comments": "", + "group": "pathspec" + }, + "git_pathspec_match_list_entry": { + "type": "function", + "file": "git2/pathspec.h", + "line": 239, + "lineto": 240, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + }, + { + "name": "pos", + "type": "size_t", + "comment": "The index into the list" + } + ], + "argline": "const git_pathspec_match_list *m, size_t pos", + "sig": "const git_pathspec_match_list *::size_t", + "return": { + "type": "const char *", + "comment": " The filename of the match" + }, + "description": "

Get a matching filename by position.

\n", + "comments": "

This routine cannot be used if the match list was generated by git_pathspec_match_diff. If so, it will always return NULL.

\n", + "group": "pathspec" + }, + "git_pathspec_match_list_diff_entry": { + "type": "function", + "file": "git2/pathspec.h", + "line": 252, + "lineto": 253, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + }, + { + "name": "pos", + "type": "size_t", + "comment": "The index into the list" + } + ], + "argline": "const git_pathspec_match_list *m, size_t pos", + "sig": "const git_pathspec_match_list *::size_t", + "return": { + "type": "const git_diff_delta *", + "comment": " The filename of the match" + }, + "description": "

Get a matching diff delta by position.

\n", + "comments": "

This routine can only be used if the match list was generated by git_pathspec_match_diff. Otherwise it will always return NULL.

\n", + "group": "pathspec" + }, + "git_pathspec_match_list_failed_entrycount": { + "type": "function", + "file": "git2/pathspec.h", + "line": 264, + "lineto": 265, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + } + ], + "argline": "const git_pathspec_match_list *m", + "sig": "const git_pathspec_match_list *", + "return": { + "type": "size_t", + "comment": " Number of items in original pathspec that had no matches" + }, + "description": "

Get the number of pathspec items that did not match.

\n", + "comments": "

This will be zero unless you passed GIT_PATHSPEC_FIND_FAILURES when generating the git_pathspec_match_list.

\n", + "group": "pathspec" + }, + "git_pathspec_match_list_failed_entry": { + "type": "function", + "file": "git2/pathspec.h", + "line": 276, + "lineto": 277, + "args": [ + { + "name": "m", + "type": "const git_pathspec_match_list *", + "comment": "The git_pathspec_match_list object" + }, + { + "name": "pos", + "type": "size_t", + "comment": "The index into the failed items" + } + ], + "argline": "const git_pathspec_match_list *m, size_t pos", + "sig": "const git_pathspec_match_list *::size_t", + "return": { + "type": "const char *", + "comment": " The pathspec pattern that didn't match anything" + }, + "description": "

Get an original pathspec string that had no matches.

\n", + "comments": "

This will be return NULL for positions out of range.

\n", + "group": "pathspec" + }, + "git_proxy_options_init": { + "type": "function", + "file": "git2/proxy.h", + "line": 94, + "lineto": 94, + "args": [ + { + "name": "opts", + "type": "git_proxy_options *", + "comment": "The `git_proxy_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_PROXY_OPTIONS_VERSION`." + } + ], + "argline": "git_proxy_options *opts, unsigned int version", + "sig": "git_proxy_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_proxy_options structure

\n", + "comments": "

Initializes a git_proxy_options with default values. Equivalent to creating an instance with GIT_PROXY_OPTIONS_INIT.

\n", + "group": "proxy" + }, + "git_rebase_options_init": { + "type": "function", + "file": "git2/rebase.h", + "line": 199, + "lineto": 201, + "args": [ + { + "name": "opts", + "type": "git_rebase_options *", + "comment": "The `git_rebase_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REBASE_OPTIONS_VERSION`." + } + ], + "argline": "git_rebase_options *opts, unsigned int version", + "sig": "git_rebase_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_rebase_options structure

\n", + "comments": "

Initializes a git_rebase_options with default values. Equivalent to creating an instance with GIT_REBASE_OPTIONS_INIT.

\n", + "group": "rebase" + }, + "git_rebase_init": { + "type": "function", + "file": "git2/rebase.h", + "line": 220, + "lineto": 226, + "args": [ + { + "name": "out", + "type": "git_rebase **", + "comment": "Pointer to store the rebase object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to perform the rebase" + }, + { + "name": "branch", + "type": "const git_annotated_commit *", + "comment": "The terminal commit to rebase, or NULL to rebase the\n current branch" + }, + { + "name": "upstream", + "type": "const git_annotated_commit *", + "comment": "The commit to begin rebasing from, or NULL to rebase all\n reachable commits" + }, + { + "name": "onto", + "type": "const git_annotated_commit *", + "comment": "The branch to rebase onto, or NULL to rebase onto the given\n upstream" + }, + { + "name": "opts", + "type": "const git_rebase_options *", + "comment": "Options to specify how rebase is performed, or NULL" + } + ], + "argline": "git_rebase **out, git_repository *repo, const git_annotated_commit *branch, const git_annotated_commit *upstream, const git_annotated_commit *onto, const git_rebase_options *opts", + "sig": "git_rebase **::git_repository *::const git_annotated_commit *::const git_annotated_commit *::const git_annotated_commit *::const git_rebase_options *", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initializes a rebase operation to rebase the changes in branch\n relative to upstream onto another branch. To begin the rebase\n process, call git_rebase_next. When you have finished with this\n object, call git_rebase_free.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_open": { + "type": "function", + "file": "git2/rebase.h", + "line": 237, + "lineto": 240, + "args": [ + { + "name": "out", + "type": "git_rebase **", + "comment": "Pointer to store the rebase object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository that has a rebase in-progress" + }, + { + "name": "opts", + "type": "const git_rebase_options *", + "comment": "Options to specify how rebase is performed" + } + ], + "argline": "git_rebase **out, git_repository *repo, const git_rebase_options *opts", + "sig": "git_rebase **::git_repository *::const git_rebase_options *", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Opens an existing rebase that was previously started by either an\n invocation of git_rebase_init or by another client.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_orig_head_name": { + "type": "function", + "file": "git2/rebase.h", + "line": 248, + "lineto": 248, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "const char *", + "comment": " The original `HEAD` ref name" + }, + "description": "

Gets the original HEAD ref name for merge rebases.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_orig_head_id": { + "type": "function", + "file": "git2/rebase.h", + "line": 256, + "lineto": 256, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "const git_oid *", + "comment": " The original `HEAD` id" + }, + "description": "

Gets the original HEAD id for merge rebases.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_onto_name": { + "type": "function", + "file": "git2/rebase.h", + "line": 264, + "lineto": 264, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { "type": "const char *", "comment": " The `onto` ref name" }, + "description": "

Gets the onto ref name for merge rebases.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_onto_id": { + "type": "function", + "file": "git2/rebase.h", + "line": 272, + "lineto": 272, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { "type": "const git_oid *", "comment": " The `onto` id" }, + "description": "

Gets the onto id for merge rebases.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_operation_entrycount": { + "type": "function", + "file": "git2/rebase.h", + "line": 280, + "lineto": 280, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase" + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "size_t", + "comment": " The number of rebase operations in total" + }, + "description": "

Gets the count of rebase operations that are to be applied.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_operation_current": { + "type": "function", + "file": "git2/rebase.h", + "line": 291, + "lineto": 291, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase" + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "size_t", + "comment": " The index of the rebase operation currently being applied." + }, + "description": "

Gets the index of the rebase operation that is currently being applied.\n If the first operation has not yet been applied (because you have\n called init but not yet next) then this returns\n GIT_REBASE_NO_OPERATION.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_operation_byindex": { + "type": "function", + "file": "git2/rebase.h", + "line": 300, + "lineto": 302, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase" + }, + { + "name": "idx", + "type": "size_t", + "comment": "The index of the rebase operation to retrieve" + } + ], + "argline": "git_rebase *rebase, size_t idx", + "sig": "git_rebase *::size_t", + "return": { + "type": "git_rebase_operation *", + "comment": " The rebase operation or NULL if `idx` was out of bounds" + }, + "description": "

Gets the rebase operation specified by the given index.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_next": { + "type": "function", + "file": "git2/rebase.h", + "line": 315, + "lineto": 317, + "args": [ + { + "name": "operation", + "type": "git_rebase_operation **", + "comment": "Pointer to store the rebase operation that is to be performed next" + }, + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase in progress" + } + ], + "argline": "git_rebase_operation **operation, git_rebase *rebase", + "sig": "git_rebase_operation **::git_rebase *", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Performs the next rebase operation and returns the information about it.\n If the operation is one that applies a patch (which is any operation except\n GIT_REBASE_OPERATION_EXEC) then the patch will be applied and the index and\n working directory will be updated with the changes. If there are conflicts,\n you will need to address those before committing the changes.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_inmemory_index": { + "type": "function", + "file": "git2/rebase.h", + "line": 334, + "lineto": 336, + "args": [ + { + "name": "index", + "type": "git_index **", + "comment": "The result index of the last operation." + }, + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The in-progress rebase." + } + ], + "argline": "git_index **index, git_rebase *rebase", + "sig": "git_index **::git_rebase *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Gets the index produced by the last operation, which is the result\n of git_rebase_next and which will be committed by the next\n invocation of git_rebase_commit. This is useful for resolving\n conflicts in an in-memory rebase before committing them. You must\n call git_index_free when you are finished with this.

\n", + "comments": "

This is only applicable for in-memory rebases; for rebases within a working directory, the changes were applied to the repository's index.

\n", + "group": "rebase" + }, + "git_rebase_commit": { + "type": "function", + "file": "git2/rebase.h", + "line": 360, + "lineto": 366, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "Pointer in which to store the OID of the newly created commit" + }, + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase that is in-progress" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "The author of the updated commit, or NULL to keep the\n author from the original commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "The committer of the rebase" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "The encoding for the message in the commit,\n represented with a standard encoding name. If message is NULL,\n this should also be NULL, and the encoding from the original\n commit will be maintained. If message is specified, this may be\n NULL to indicate that \"UTF-8\" is to be used." + }, + { + "name": "message", + "type": "const char *", + "comment": "The message for this commit, or NULL to use the message\n from the original commit." + } + ], + "argline": "git_oid *id, git_rebase *rebase, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message", + "sig": "git_oid *::git_rebase *::const git_signature *::const git_signature *::const char *::const char *", + "return": { + "type": "int", + "comment": " Zero on success, GIT_EUNMERGED if there are unmerged changes in\n the index, GIT_EAPPLIED if the current commit has already\n been applied to the upstream and there is nothing to commit,\n -1 on failure." + }, + "description": "

Commits the current patch. You must have resolved any conflicts that\n were introduced during the patch application from the git_rebase_next\n invocation.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_abort": { + "type": "function", + "file": "git2/rebase.h", + "line": 376, + "lineto": 376, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase that is in-progress" + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { + "type": "int", + "comment": " Zero on success; GIT_ENOTFOUND if a rebase is not in progress,\n -1 on other errors." + }, + "description": "

Aborts a rebase that is currently in progress, resetting the repository\n and working directory to their state before rebase began.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_finish": { + "type": "function", + "file": "git2/rebase.h", + "line": 386, + "lineto": 388, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase that is in-progress" + }, + { + "name": "signature", + "type": "const git_signature *", + "comment": "The identity that is finishing the rebase (optional)" + } + ], + "argline": "git_rebase *rebase, const git_signature *signature", + "sig": "git_rebase *::const git_signature *", + "return": { "type": "int", "comment": " Zero on success; -1 on error" }, + "description": "

Finishes a rebase that is currently in progress once all patches have\n been applied.

\n", + "comments": "", + "group": "rebase" + }, + "git_rebase_free": { + "type": "function", + "file": "git2/rebase.h", + "line": 395, + "lineto": 395, + "args": [ + { + "name": "rebase", + "type": "git_rebase *", + "comment": "The rebase object" + } + ], + "argline": "git_rebase *rebase", + "sig": "git_rebase *", + "return": { "type": "void", "comment": null }, + "description": "

Frees the git_rebase object.

\n", + "comments": "", + "group": "rebase" + }, + "git_refdb_new": { + "type": "function", + "file": "git2/refdb.h", + "line": 35, + "lineto": 35, + "args": [ + { + "name": "out", + "type": "git_refdb **", + "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_refdb **out, git_repository *repo", + "sig": "git_refdb **::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a new reference database with no backends.

\n", + "comments": "

Before the Ref DB can be used for read/writing, a custom database backend must be manually set using git_refdb_set_backend()

\n", + "group": "refdb" + }, + "git_refdb_open": { + "type": "function", + "file": "git2/refdb.h", + "line": 49, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_refdb **", + "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_refdb **out, git_repository *repo", + "sig": "git_refdb **::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a new reference database and automatically add\n the default backends:

\n", + "comments": "
    \n
  • git_refdb_dir: read and write loose and packed refs from disk, assuming the repository dir as the folder
  • \n
\n", + "group": "refdb" + }, + "git_refdb_compress": { + "type": "function", + "file": "git2/refdb.h", + "line": 59, + "lineto": 59, + "args": [ + { + "name": "refdb", + "type": "git_refdb *", + "comment": "The reference database to optimize." + } + ], + "argline": "git_refdb *refdb", + "sig": "git_refdb *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Suggests that the given refdb compress or optimize its references.\n This mechanism is implementation specific. For on-disk reference\n databases, for example, this may pack all loose references.

\n", + "comments": "", + "group": "refdb" + }, + "git_refdb_free": { + "type": "function", + "file": "git2/refdb.h", + "line": 66, + "lineto": 66, + "args": [ + { + "name": "refdb", + "type": "git_refdb *", + "comment": "reference database pointer or NULL" + } + ], + "argline": "git_refdb *refdb", + "sig": "git_refdb *", + "return": { "type": "void", "comment": null }, + "description": "

Close an open reference database.

\n", + "comments": "", + "group": "refdb" + }, + "git_reflog_read": { + "type": "function", + "file": "git2/reflog.h", + "line": 38, + "lineto": 38, + "args": [ + { + "name": "out", + "type": "git_reflog **", + "comment": "pointer to reflog" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "name", + "type": "const char *", + "comment": "reference to look up" + } + ], + "argline": "git_reflog **out, git_repository *repo, const char *name", + "sig": "git_reflog **::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Read the reflog for the given reference

\n", + "comments": "

If there is no reflog file for the given reference yet, an empty reflog object will be returned.

\n\n

The reflog must be freed manually by using git_reflog_free().

\n", + "group": "reflog" + }, + "git_reflog_write": { + "type": "function", + "file": "git2/reflog.h", + "line": 47, + "lineto": 47, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "an existing reflog object" + } + ], + "argline": "git_reflog *reflog", + "sig": "git_reflog *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Write an existing in-memory reflog object back to disk\n using an atomic file lock.

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_append": { + "type": "function", + "file": "git2/reflog.h", + "line": 60, + "lineto": 60, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "an existing reflog object" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the OID the reference is now pointing to" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "the signature of the committer" + }, + { + "name": "msg", + "type": "const char *", + "comment": "the reflog message" + } + ], + "argline": "git_reflog *reflog, const git_oid *id, const git_signature *committer, const char *msg", + "sig": "git_reflog *::const git_oid *::const git_signature *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add a new entry to the in-memory reflog.

\n", + "comments": "

msg is optional and can be NULL.

\n", + "group": "reflog" + }, + "git_reflog_rename": { + "type": "function", + "file": "git2/reflog.h", + "line": 75, + "lineto": 75, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "old_name", + "type": "const char *", + "comment": "the old name of the reference" + }, + { + "name": "name", + "type": "const char *", + "comment": "the new name of the reference" + } + ], + "argline": "git_repository *repo, const char *old_name, const char *name", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Rename a reflog

\n", + "comments": "

The reflog to be renamed is expected to already exist

\n\n

The new name will be checked for validity. See git_reference_create_symbolic() for rules about valid names.

\n", + "group": "reflog" + }, + "git_reflog_delete": { + "type": "function", + "file": "git2/reflog.h", + "line": 84, + "lineto": 84, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "name", + "type": "const char *", + "comment": "the reflog to delete" + } + ], + "argline": "git_repository *repo, const char *name", + "sig": "git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Delete the reflog for the given reference

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entrycount": { + "type": "function", + "file": "git2/reflog.h", + "line": 92, + "lineto": 92, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "the previously loaded reflog" + } + ], + "argline": "git_reflog *reflog", + "sig": "git_reflog *", + "return": { "type": "size_t", "comment": " the number of log entries" }, + "description": "

Get the number of log entries in a reflog

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entry_byindex": { + "type": "function", + "file": "git2/reflog.h", + "line": 105, + "lineto": 105, + "args": [ + { + "name": "reflog", + "type": "const git_reflog *", + "comment": "a previously loaded reflog" + }, + { + "name": "idx", + "type": "size_t", + "comment": "the position of the entry to lookup. Should be greater than or\n equal to 0 (zero) and less than `git_reflog_entrycount()`." + } + ], + "argline": "const git_reflog *reflog, size_t idx", + "sig": "const git_reflog *::size_t", + "return": { + "type": "const git_reflog_entry *", + "comment": " the entry; NULL if not found" + }, + "description": "

Lookup an entry by its index

\n", + "comments": "

Requesting the reflog entry with an index of 0 (zero) will return the most recently created entry.

\n", + "group": "reflog" + }, + "git_reflog_drop": { + "type": "function", + "file": "git2/reflog.h", + "line": 124, + "lineto": 127, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "a previously loaded reflog." + }, + { + "name": "idx", + "type": "size_t", + "comment": "the position of the entry to remove. Should be greater than or\n equal to 0 (zero) and less than `git_reflog_entrycount()`." + }, + { + "name": "rewrite_previous_entry", + "type": "int", + "comment": "1 to rewrite the history; 0 otherwise." + } + ], + "argline": "git_reflog *reflog, size_t idx, int rewrite_previous_entry", + "sig": "git_reflog *::size_t::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if the entry doesn't exist\n or an error code." + }, + "description": "

Remove an entry from the reflog by its index

\n", + "comments": "

To ensure there's no gap in the log history, set rewrite_previous_entry param value to 1. When deleting entry n, member old_oid of entry n-1 (if any) will be updated with the value of member new_oid of entry n+1.

\n", + "group": "reflog" + }, + "git_reflog_entry_id_old": { + "type": "function", + "file": "git2/reflog.h", + "line": 135, + "lineto": 135, + "args": [ + { + "name": "entry", + "type": "const git_reflog_entry *", + "comment": "a reflog entry" + } + ], + "argline": "const git_reflog_entry *entry", + "sig": "const git_reflog_entry *", + "return": { "type": "const git_oid *", "comment": " the old oid" }, + "description": "

Get the old oid

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entry_id_new": { + "type": "function", + "file": "git2/reflog.h", + "line": 143, + "lineto": 143, + "args": [ + { + "name": "entry", + "type": "const git_reflog_entry *", + "comment": "a reflog entry" + } + ], + "argline": "const git_reflog_entry *entry", + "sig": "const git_reflog_entry *", + "return": { + "type": "const git_oid *", + "comment": " the new oid at this time" + }, + "description": "

Get the new oid

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entry_committer": { + "type": "function", + "file": "git2/reflog.h", + "line": 151, + "lineto": 151, + "args": [ + { + "name": "entry", + "type": "const git_reflog_entry *", + "comment": "a reflog entry" + } + ], + "argline": "const git_reflog_entry *entry", + "sig": "const git_reflog_entry *", + "return": { + "type": "const git_signature *", + "comment": " the committer" + }, + "description": "

Get the committer of this entry

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_entry_message": { + "type": "function", + "file": "git2/reflog.h", + "line": 159, + "lineto": 159, + "args": [ + { + "name": "entry", + "type": "const git_reflog_entry *", + "comment": "a reflog entry" + } + ], + "argline": "const git_reflog_entry *entry", + "sig": "const git_reflog_entry *", + "return": { "type": "const char *", "comment": " the log msg" }, + "description": "

Get the log message

\n", + "comments": "", + "group": "reflog" + }, + "git_reflog_free": { + "type": "function", + "file": "git2/reflog.h", + "line": 166, + "lineto": 166, + "args": [ + { + "name": "reflog", + "type": "git_reflog *", + "comment": "reflog to free" + } + ], + "argline": "git_reflog *reflog", + "sig": "git_reflog *", + "return": { "type": "void", "comment": null }, + "description": "

Free the reflog

\n", + "comments": "", + "group": "reflog" + }, + "git_reference_lookup": { + "type": "function", + "file": "git2/refs.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer to the looked-up reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to look up the reference" + }, + { + "name": "name", + "type": "const char *", + "comment": "the long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...)" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name", + "sig": "git_reference **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code." + }, + "description": "

Lookup a reference by name in a repository.

\n", + "comments": "

The returned reference must be freed by the user.

\n\n

The name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n", + "group": "reference", + "examples": { + "checkout.c": [ + "ex/v1.8.4/checkout.html#git_reference_lookup-15", + "ex/v1.8.4/checkout.html#git_reference_lookup-16" + ], + "general.c": ["ex/v1.8.4/general.html#git_reference_lookup-53"], + "merge.c": ["ex/v1.8.4/merge.html#git_reference_lookup-21"] + } + }, + "git_reference_name_to_id": { + "type": "function", + "file": "git2/refs.h", + "line": 54, + "lineto": 55, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer to oid to be filled in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository in which to look up the reference" + }, + { + "name": "name", + "type": "const char *", + "comment": "The long name for the reference (e.g. HEAD, refs/heads/master, refs/tags/v0.1.0, ...)" + } + ], + "argline": "git_oid *out, git_repository *repo, const char *name", + "sig": "git_oid *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code." + }, + "description": "

Lookup a reference by name and resolve immediately to OID.

\n", + "comments": "

This function provides a quick way to resolve a reference name straight through to the object id that it refers to. This avoids having to allocate or free any git_reference objects for simple situations.

\n\n

The name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n", + "group": "reference" + }, + "git_reference_dwim": { + "type": "function", + "file": "git2/refs.h", + "line": 68, + "lineto": 68, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer in which to store the reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to look" + }, + { + "name": "shorthand", + "type": "const char *", + "comment": "the short name for the reference" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *shorthand", + "sig": "git_reference **::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a reference by DWIMing its short name

\n", + "comments": "

Apply the git precedence rules to the given shorthand to determine which reference the user is referring to.

\n", + "group": "reference", + "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_reference_dwim-22"] } + }, + "git_reference_symbolic_create_matching": { + "type": "function", + "file": "git2/refs.h", + "line": 112, + "lineto": 112, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where that reference will live" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the reference" + }, + { + "name": "target", + "type": "const char *", + "comment": "The target of the reference" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + }, + { + "name": "current_value", + "type": "const char *", + "comment": "The expected value of the reference when updating" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *current_value, const char *log_message", + "sig": "git_reference **::git_repository *::const char *::const char *::int::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC, GIT_EMODIFIED or an error code" + }, + "description": "

Conditionally create a new symbolic reference.

\n", + "comments": "

A symbolic reference is a reference name that refers to another reference name. If the other name moves, the symbolic name will move, too. As a simple example, the "HEAD" reference might refer to "refs/heads/master" while on the "master" branch of a repository.

\n\n

The symbolic reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n\n

It will return GIT_EMODIFIED if the reference's value at the time of updating does not match the one passed through current_value (i.e. if the ref has changed since the user read it).

\n\n

If current_value is all zeros, this function will return GIT_EMODIFIED if the ref already exists.

\n", + "group": "reference" + }, + "git_reference_symbolic_create": { + "type": "function", + "file": "git2/refs.h", + "line": 148, + "lineto": 148, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where that reference will live" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the reference" + }, + { + "name": "target", + "type": "const char *", + "comment": "The target of the reference" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name, const char *target, int force, const char *log_message", + "sig": "git_reference **::git_repository *::const char *::const char *::int::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Create a new symbolic reference.

\n", + "comments": "

A symbolic reference is a reference name that refers to another reference name. If the other name moves, the symbolic name will move, too. As a simple example, the "HEAD" reference might refer to "refs/heads/master" while on the "master" branch of a repository.

\n\n

The symbolic reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", + "group": "reference" + }, + "git_reference_create": { + "type": "function", + "file": "git2/refs.h", + "line": 185, + "lineto": 185, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where that reference will live" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the reference" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The object id pointed to by the reference." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const char *log_message", + "sig": "git_reference **::git_repository *::const char *::const git_oid *::int::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Create a new direct reference.

\n", + "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", + "group": "reference", + "examples": { + "merge.c": ["ex/v1.8.4/merge.html#git_reference_create-23"] + } + }, + "git_reference_create_matching": { + "type": "function", + "file": "git2/refs.h", + "line": 228, + "lineto": 228, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where that reference will live" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of the reference" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The object id pointed to by the reference." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + }, + { + "name": "current_id", + "type": "const git_oid *", + "comment": "The expected value of the reference at the time of update" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name, const git_oid *id, int force, const git_oid *current_id, const char *log_message", + "sig": "git_reference **::git_repository *::const char *::const git_oid *::int::const git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EMODIFIED if the value of the reference\n has changed, GIT_EEXISTS, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Conditionally create new direct reference

\n", + "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n\n

It will return GIT_EMODIFIED if the reference's value at the time of updating does not match the one passed through current_id (i.e. if the ref has changed since the user read it).

\n", + "group": "reference" + }, + "git_reference_target": { + "type": "function", + "file": "git2/refs.h", + "line": 243, + "lineto": 243, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const git_oid *", + "comment": " a pointer to the oid if available, NULL otherwise" + }, + "description": "

Get the OID pointed to by a direct reference.

\n", + "comments": "

Only available if the reference is direct (i.e. an object id reference, not a symbolic one).

\n\n

To find the OID of a symbolic ref, call git_reference_resolve() and then this function (or maybe use git_reference_name_to_id() to directly resolve a reference name all the way through to an OID).

\n", + "group": "reference", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_reference_target-54"] + } + }, + "git_reference_target_peel": { + "type": "function", + "file": "git2/refs.h", + "line": 254, + "lineto": 254, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const git_oid *", + "comment": " a pointer to the oid if available, NULL otherwise" + }, + "description": "

Return the peeled OID target of this reference.

\n", + "comments": "

This peeled OID only applies to direct references that point to a hard Tag object: it is the result of peeling such Tag.

\n", + "group": "reference" + }, + "git_reference_symbolic_target": { + "type": "function", + "file": "git2/refs.h", + "line": 264, + "lineto": 264, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const char *", + "comment": " a pointer to the name if available, NULL otherwise" + }, + "description": "

Get full name to the reference pointed to by a symbolic reference.

\n", + "comments": "

Only available if the reference is symbolic.

\n", + "group": "reference", + "examples": { + "general.c": [ + "ex/v1.8.4/general.html#git_reference_symbolic_target-55" + ], + "merge.c": ["ex/v1.8.4/merge.html#git_reference_symbolic_target-24"] + } + }, + "git_reference_type": { + "type": "function", + "file": "git2/refs.h", + "line": 274, + "lineto": 274, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { "type": "git_reference_t", "comment": " the type" }, + "description": "

Get the type of a reference.

\n", + "comments": "

Either direct (GIT_REFERENCE_DIRECT) or symbolic (GIT_REFERENCE_SYMBOLIC)

\n", + "group": "reference", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_reference_type-56"] + } + }, + "git_reference_name": { + "type": "function", + "file": "git2/refs.h", + "line": 284, + "lineto": 284, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const char *", + "comment": " the full name for the ref" + }, + "description": "

Get the full name of a reference.

\n", + "comments": "

See git_reference_symbolic_create() for rules about valid names.

\n", + "group": "reference", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_reference_name-17"], + "merge.c": ["ex/v1.8.4/merge.html#git_reference_name-25"] + } + }, + "git_reference_resolve": { + "type": "function", + "file": "git2/refs.h", + "line": 302, + "lineto": 302, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the peeled reference" + }, + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "git_reference **out, const git_reference *ref", + "sig": "git_reference **::const git_reference *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Resolve a symbolic reference to a direct reference.

\n", + "comments": "

This method iteratively peels a symbolic reference until it resolves to a direct reference to an OID.

\n\n

The peeled reference is returned in the resolved_ref argument, and must be freed manually once it's no longer needed.

\n\n

If a direct reference is passed as an argument, a copy of that reference is returned. This copy must be manually freed too.

\n", + "group": "reference" + }, + "git_reference_owner": { + "type": "function", + "file": "git2/refs.h", + "line": 310, + "lineto": 310, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "git_repository *", + "comment": " a pointer to the repo" + }, + "description": "

Get the repository where a reference resides.

\n", + "comments": "", + "group": "reference" + }, + "git_reference_symbolic_set_target": { + "type": "function", + "file": "git2/refs.h", + "line": 332, + "lineto": 336, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "ref", + "type": "git_reference *", + "comment": "The reference" + }, + { + "name": "target", + "type": "const char *", + "comment": "The new target for the reference" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_reference *ref, const char *target, const char *log_message", + "sig": "git_reference **::git_reference *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Create a new reference with the same name as the given reference but a\n different symbolic target. The reference must be a symbolic reference,\n otherwise this will fail.

\n", + "comments": "

The new reference will be written to disk, overwriting the given reference.

\n\n

The target name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", + "group": "reference" + }, + "git_reference_set_target": { + "type": "function", + "file": "git2/refs.h", + "line": 352, + "lineto": 356, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "Pointer to the newly created reference" + }, + { + "name": "ref", + "type": "git_reference *", + "comment": "The reference" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "The new target OID for the reference" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **out, git_reference *ref, const git_oid *id, const char *log_message", + "sig": "git_reference **::git_reference *::const git_oid *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EMODIFIED if the value of the reference\n has changed since it was read, or an error code" + }, + "description": "

Conditionally create a new reference with the same name as the given reference but a\n different OID target. The reference must be a direct reference, otherwise\n this will fail.

\n", + "comments": "

The new reference will be written to disk, overwriting the given reference.

\n", + "group": "reference", + "examples": { + "merge.c": ["ex/v1.8.4/merge.html#git_reference_set_target-26"] + } + }, + "git_reference_rename": { + "type": "function", + "file": "git2/refs.h", + "line": 381, + "lineto": 386, + "args": [ + { "name": "new_ref", "type": "git_reference **", "comment": null }, + { + "name": "ref", + "type": "git_reference *", + "comment": "The reference to rename" + }, + { + "name": "new_name", + "type": "const char *", + "comment": "The new name for the reference" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite an existing reference" + }, + { + "name": "log_message", + "type": "const char *", + "comment": "The one line long message to be appended to the reflog" + } + ], + "argline": "git_reference **new_ref, git_reference *ref, const char *new_name, int force, const char *log_message", + "sig": "git_reference **::git_reference *::const char *::int::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Rename an existing reference.

\n", + "comments": "

This method works for both direct and symbolic references.

\n\n

The new name will be checked for validity. See git_reference_symbolic_create() for rules about valid names.

\n\n

If the force flag is not enabled, and there's already a reference with the given name, the renaming will fail.

\n\n

IMPORTANT: The user needs to write a proper reflog entry if the reflog is enabled for the repository. We only rename the reflog if it exists.

\n", + "group": "reference" + }, + "git_reference_delete": { + "type": "function", + "file": "git2/refs.h", + "line": 401, + "lineto": 401, + "args": [ + { + "name": "ref", + "type": "git_reference *", + "comment": "The reference to remove" + } + ], + "argline": "git_reference *ref", + "sig": "git_reference *", + "return": { + "type": "int", + "comment": " 0, GIT_EMODIFIED or an error code" + }, + "description": "

Delete an existing reference.

\n", + "comments": "

This method works for both direct and symbolic references. The reference will be immediately removed on disk but the memory will not be freed. Callers must call git_reference_free.

\n\n

This function will return an error if the reference has changed from the time it was looked up.

\n", + "group": "reference" + }, + "git_reference_remove": { + "type": "function", + "file": "git2/refs.h", + "line": 412, + "lineto": 412, + "args": [ + { "name": "repo", "type": "git_repository *", "comment": null }, + { + "name": "name", + "type": "const char *", + "comment": "The reference to remove" + } + ], + "argline": "git_repository *repo, const char *name", + "sig": "git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Delete an existing reference by name

\n", + "comments": "

This method removes the named reference from the repository without looking at its old value.

\n", + "group": "reference" + }, + "git_reference_list": { + "type": "function", + "file": "git2/refs.h", + "line": 426, + "lineto": 426, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": "Pointer to a git_strarray structure where\n\t\tthe reference names will be stored" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the refs" + } + ], + "argline": "git_strarray *array, git_repository *repo", + "sig": "git_strarray *::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Fill a list with all the references that can be found in a repository.

\n", + "comments": "

The string array will be filled with the names of all references; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free().

\n", + "group": "reference", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_reference_list-57"] + } + }, + "git_reference_foreach": { + "type": "function", + "file": "git2/refs.h", + "line": 466, + "lineto": 469, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the refs" + }, + { + "name": "callback", + "type": "git_reference_foreach_cb", + "comment": "Function which will be called for every listed ref" + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback" + } + ], + "argline": "git_repository *repo, git_reference_foreach_cb callback, void *payload", + "sig": "git_repository *::git_reference_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Perform a callback on each reference in the repository.

\n", + "comments": "

The callback function will be called for each reference in the repository, receiving the reference object and the payload value passed to this method. Returning a non-zero value from the callback will terminate the iteration.

\n\n

Note that the callback function is responsible to call git_reference_free on each reference passed to it.

\n", + "group": "reference" + }, + "git_reference_foreach_name": { + "type": "function", + "file": "git2/refs.h", + "line": 484, + "lineto": 487, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the refs" + }, + { + "name": "callback", + "type": "git_reference_foreach_name_cb", + "comment": "Function which will be called for every listed ref name" + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback" + } + ], + "argline": "git_repository *repo, git_reference_foreach_name_cb callback, void *payload", + "sig": "git_repository *::git_reference_foreach_name_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Perform a callback on the fully-qualified name of each reference.

\n", + "comments": "

The callback function will be called for each reference in the repository, receiving the name of the reference and the payload value passed to this method. Returning a non-zero value from the callback will terminate the iteration.

\n", + "group": "reference" + }, + "git_reference_dup": { + "type": "function", + "file": "git2/refs.h", + "line": 498, + "lineto": 498, + "args": [ + { + "name": "dest", + "type": "git_reference **", + "comment": "pointer where to store the copy" + }, + { + "name": "source", + "type": "git_reference *", + "comment": "object to copy" + } + ], + "argline": "git_reference **dest, git_reference *source", + "sig": "git_reference **::git_reference *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a copy of an existing reference.

\n", + "comments": "

Call git_reference_free to free the data.

\n", + "group": "reference" + }, + "git_reference_free": { + "type": "function", + "file": "git2/refs.h", + "line": 505, + "lineto": 505, + "args": [ + { "name": "ref", "type": "git_reference *", "comment": "git_reference" } + ], + "argline": "git_reference *ref", + "sig": "git_reference *", + "return": { "type": "void", "comment": null }, + "description": "

Free the given reference.

\n", + "comments": "", + "group": "reference", + "examples": { + "checkout.c": [ + "ex/v1.8.4/checkout.html#git_reference_free-18", + "ex/v1.8.4/checkout.html#git_reference_free-19", + "ex/v1.8.4/checkout.html#git_reference_free-20" + ], + "commit.c": ["ex/v1.8.4/commit.html#git_reference_free-7"], + "general.c": ["ex/v1.8.4/general.html#git_reference_free-58"], + "merge.c": [ + "ex/v1.8.4/merge.html#git_reference_free-27", + "ex/v1.8.4/merge.html#git_reference_free-28", + "ex/v1.8.4/merge.html#git_reference_free-29" + ], + "status.c": ["ex/v1.8.4/status.html#git_reference_free-1"] + } + }, + "git_reference_cmp": { + "type": "function", + "file": "git2/refs.h", + "line": 514, + "lineto": 516, + "args": [ + { + "name": "ref1", + "type": "const git_reference *", + "comment": "The first git_reference" + }, + { + "name": "ref2", + "type": "const git_reference *", + "comment": "The second git_reference" + } + ], + "argline": "const git_reference *ref1, const git_reference *ref2", + "sig": "const git_reference *::const git_reference *", + "return": { + "type": "int", + "comment": " 0 if the same, else a stable but meaningless ordering." + }, + "description": "

Compare two references.

\n", + "comments": "", + "group": "reference" + }, + "git_reference_iterator_new": { + "type": "function", + "file": "git2/refs.h", + "line": 525, + "lineto": 527, + "args": [ + { + "name": "out", + "type": "git_reference_iterator **", + "comment": "pointer in which to store the iterator" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_reference_iterator **out, git_repository *repo", + "sig": "git_reference_iterator **::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create an iterator for the repo's references

\n", + "comments": "", + "group": "reference" + }, + "git_reference_iterator_glob_new": { + "type": "function", + "file": "git2/refs.h", + "line": 538, + "lineto": 541, + "args": [ + { + "name": "out", + "type": "git_reference_iterator **", + "comment": "pointer in which to store the iterator" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "glob", + "type": "const char *", + "comment": "the glob to match against the reference names" + } + ], + "argline": "git_reference_iterator **out, git_repository *repo, const char *glob", + "sig": "git_reference_iterator **::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create an iterator for the repo's references that match the\n specified glob

\n", + "comments": "", + "group": "reference" + }, + "git_reference_next": { + "type": "function", + "file": "git2/refs.h", + "line": 550, + "lineto": 550, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer in which to store the reference" + }, + { + "name": "iter", + "type": "git_reference_iterator *", + "comment": "the iterator" + } + ], + "argline": "git_reference **out, git_reference_iterator *iter", + "sig": "git_reference **::git_reference_iterator *", + "return": { + "type": "int", + "comment": " 0, GIT_ITEROVER if there are no more; or an error code" + }, + "description": "

Get the next reference

\n", + "comments": "", + "group": "reference" + }, + "git_reference_next_name": { + "type": "function", + "file": "git2/refs.h", + "line": 563, + "lineto": 563, + "args": [ + { + "name": "out", + "type": "const char **", + "comment": "pointer in which to store the string" + }, + { + "name": "iter", + "type": "git_reference_iterator *", + "comment": "the iterator" + } + ], + "argline": "const char **out, git_reference_iterator *iter", + "sig": "const char **::git_reference_iterator *", + "return": { + "type": "int", + "comment": " 0, GIT_ITEROVER if there are no more; or an error code" + }, + "description": "

Get the next reference's name

\n", + "comments": "

This function is provided for convenience in case only the names are interesting as it avoids the allocation of the git_reference object which git_reference_next() needs.

\n", + "group": "reference" + }, + "git_reference_iterator_free": { + "type": "function", + "file": "git2/refs.h", + "line": 570, + "lineto": 570, + "args": [ + { + "name": "iter", + "type": "git_reference_iterator *", + "comment": "the iterator to free" + } + ], + "argline": "git_reference_iterator *iter", + "sig": "git_reference_iterator *", + "return": { "type": "void", "comment": null }, + "description": "

Free the iterator and its associated resources

\n", + "comments": "", + "group": "reference" + }, + "git_reference_foreach_glob": { + "type": "function", + "file": "git2/refs.h", + "line": 590, + "lineto": 594, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the refs" + }, + { + "name": "glob", + "type": "const char *", + "comment": "Pattern to match (fnmatch-style) against reference name." + }, + { + "name": "callback", + "type": "git_reference_foreach_name_cb", + "comment": "Function which will be called for every listed ref" + }, + { + "name": "payload", + "type": "void *", + "comment": "Additional data to pass to the callback" + } + ], + "argline": "git_repository *repo, const char *glob, git_reference_foreach_name_cb callback, void *payload", + "sig": "git_repository *::const char *::git_reference_foreach_name_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUSER on non-zero callback, or error code" + }, + "description": "

Perform a callback on each reference in the repository whose name\n matches the given pattern.

\n", + "comments": "

This function acts like git_reference_foreach() with an additional pattern match being applied to the reference name before issuing the callback function. See that function for more information.

\n\n

The pattern is matched using fnmatch or "glob" style where a '*' matches any sequence of letters, a '?' matches any letter, and square brackets can be used to define character ranges (such as "[0-9]" for digits).

\n", + "group": "reference" + }, + "git_reference_has_log": { + "type": "function", + "file": "git2/refs.h", + "line": 604, + "lineto": 604, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference's name" + } + ], + "argline": "git_repository *repo, const char *refname", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 when no reflog can be found, 1 when it exists;\n otherwise an error code." + }, + "description": "

Check if a reflog exists for the specified reference.

\n", + "comments": "", + "group": "reference" + }, + "git_reference_ensure_log": { + "type": "function", + "file": "git2/refs.h", + "line": 616, + "lineto": 616, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference's name" + } + ], + "argline": "git_repository *repo, const char *refname", + "sig": "git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Ensure there is a reflog for a particular reference.

\n", + "comments": "

Make sure that successive updates to the reference will append to its log.

\n", + "group": "reference" + }, + "git_reference_is_branch": { + "type": "function", + "file": "git2/refs.h", + "line": 626, + "lineto": 626, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "A git reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 when the reference lives in the refs/heads\n namespace; 0 otherwise." + }, + "description": "

Check if a reference is a local branch.

\n", + "comments": "", + "group": "reference" + }, + "git_reference_is_remote": { + "type": "function", + "file": "git2/refs.h", + "line": 636, + "lineto": 636, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "A git reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 when the reference lives in the refs/remotes\n namespace; 0 otherwise." + }, + "description": "

Check if a reference is a remote tracking branch

\n", + "comments": "", + "group": "reference", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_reference_is_remote-21"] + } + }, + "git_reference_is_tag": { + "type": "function", + "file": "git2/refs.h", + "line": 646, + "lineto": 646, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "A git reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 when the reference lives in the refs/tags\n namespace; 0 otherwise." + }, + "description": "

Check if a reference is a tag

\n", + "comments": "", + "group": "reference" + }, + "git_reference_is_note": { + "type": "function", + "file": "git2/refs.h", + "line": 656, + "lineto": 656, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "A git reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "int", + "comment": " 1 when the reference lives in the refs/notes\n namespace; 0 otherwise." + }, + "description": "

Check if a reference is a note

\n", + "comments": "", + "group": "reference" + }, + "git_reference_normalize_name": { + "type": "function", + "file": "git2/refs.h", + "line": 712, + "lineto": 716, + "args": [ + { + "name": "buffer_out", + "type": "char *", + "comment": "User allocated buffer to store normalized name" + }, + { + "name": "buffer_size", + "type": "size_t", + "comment": "Size of buffer_out" + }, + { + "name": "name", + "type": "const char *", + "comment": "Reference name to be checked." + }, + { + "name": "flags", + "type": "unsigned int", + "comment": "Flags to constrain name validation rules - see the\n GIT_REFERENCE_FORMAT constants above." + } + ], + "argline": "char *buffer_out, size_t buffer_size, const char *name, unsigned int flags", + "sig": "char *::size_t::const char *::unsigned int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EBUFS if buffer is too small, GIT_EINVALIDSPEC\n or an error code." + }, + "description": "

Normalize reference name and check validity.

\n", + "comments": "

This will normalize the reference name by removing any leading slash '/' characters and collapsing runs of adjacent slashes between name components into a single slash.

\n\n

Once normalized, if the reference name is valid, it will be returned in the user allocated buffer.

\n\n

See git_reference_symbolic_create() for rules about valid names.

\n", + "group": "reference" + }, + "git_reference_peel": { + "type": "function", + "file": "git2/refs.h", + "line": 733, + "lineto": 736, + "args": [ + { + "name": "out", + "type": "git_object **", + "comment": "Pointer to the peeled git_object" + }, + { + "name": "ref", + "type": "const git_reference *", + "comment": "The reference to be processed" + }, + { + "name": "type", + "type": "git_object_t", + "comment": "The type of the requested object (GIT_OBJECT_COMMIT,\n GIT_OBJECT_TAG, GIT_OBJECT_TREE, GIT_OBJECT_BLOB or GIT_OBJECT_ANY)." + } + ], + "argline": "git_object **out, const git_reference *ref, git_object_t type", + "sig": "git_object **::const git_reference *::git_object_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EAMBIGUOUS, GIT_ENOTFOUND or an error code" + }, + "description": "

Recursively peel reference until object of the specified type is found.

\n", + "comments": "

The retrieved peeled object is owned by the repository and should be closed with the git_object_free method.

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until a non-tag object is met.

\n", + "group": "reference", + "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_reference_peel-30"] } + }, + "git_reference_name_is_valid": { + "type": "function", + "file": "git2/refs.h", + "line": 753, + "lineto": 753, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "output pointer to set with validity of given reference name" + }, + { + "name": "refname", + "type": "const char *", + "comment": "name to be checked." + } + ], + "argline": "int *valid, const char *refname", + "sig": "int *::const char *", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Ensure the reference name is well-formed.

\n", + "comments": "

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n", + "group": "reference" + }, + "git_reference_shorthand": { + "type": "function", + "file": "git2/refs.h", + "line": 767, + "lineto": 767, + "args": [ + { + "name": "ref", + "type": "const git_reference *", + "comment": "a reference" + } + ], + "argline": "const git_reference *ref", + "sig": "const git_reference *", + "return": { + "type": "const char *", + "comment": " the human-readable version of the name" + }, + "description": "

Get the reference's short name

\n", + "comments": "

This will transform the reference name into a name "human-readable" version. If no shortname is appropriate, it will return the full name.

\n\n

The memory is owned by the reference and must not be freed.

\n", + "group": "reference", + "examples": { + "status.c": ["ex/v1.8.4/status.html#git_reference_shorthand-2"] + } + }, + "git_refspec_parse": { + "type": "function", + "file": "git2/refspec.h", + "line": 32, + "lineto": 32, + "args": [ + { + "name": "refspec", + "type": "git_refspec **", + "comment": "a pointer to hold the refspec handle" + }, + { + "name": "input", + "type": "const char *", + "comment": "the refspec string" + }, + { + "name": "is_fetch", + "type": "int", + "comment": "is this a refspec for a fetch" + } + ], + "argline": "git_refspec **refspec, const char *input, int is_fetch", + "sig": "git_refspec **::const char *::int", + "return": { + "type": "int", + "comment": " 0 if the refspec string could be parsed, -1 otherwise" + }, + "description": "

Parse a given refspec string

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_free": { + "type": "function", + "file": "git2/refspec.h", + "line": 39, + "lineto": 39, + "args": [ + { + "name": "refspec", + "type": "git_refspec *", + "comment": "the refspec object" + } + ], + "argline": "git_refspec *refspec", + "sig": "git_refspec *", + "return": { "type": "void", "comment": null }, + "description": "

Free a refspec object which has been created by git_refspec_parse

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_src": { + "type": "function", + "file": "git2/refspec.h", + "line": 47, + "lineto": 47, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + } + ], + "argline": "const git_refspec *refspec", + "sig": "const git_refspec *", + "return": { + "type": "const char *", + "comment": " the refspec's source specifier" + }, + "description": "

Get the source specifier

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_dst": { + "type": "function", + "file": "git2/refspec.h", + "line": 55, + "lineto": 55, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + } + ], + "argline": "const git_refspec *refspec", + "sig": "const git_refspec *", + "return": { + "type": "const char *", + "comment": " the refspec's destination specifier" + }, + "description": "

Get the destination specifier

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_string": { + "type": "function", + "file": "git2/refspec.h", + "line": 63, + "lineto": 63, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + } + ], + "argline": "const git_refspec *refspec", + "sig": "const git_refspec *", + "return": { + "type": "const char *", + "comment": " the refspec's original string" + }, + "description": "

Get the refspec's string

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_force": { + "type": "function", + "file": "git2/refspec.h", + "line": 71, + "lineto": 71, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + } + ], + "argline": "const git_refspec *refspec", + "sig": "const git_refspec *", + "return": { + "type": "int", + "comment": " 1 if force update has been set, 0 otherwise" + }, + "description": "

Get the force update setting

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_direction": { + "type": "function", + "file": "git2/refspec.h", + "line": 79, + "lineto": 79, + "args": [ + { "name": "spec", "type": "const git_refspec *", "comment": "refspec" } + ], + "argline": "const git_refspec *spec", + "sig": "const git_refspec *", + "return": { + "type": "git_direction", + "comment": " GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" + }, + "description": "

Get the refspec's direction.

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_src_matches": { + "type": "function", + "file": "git2/refspec.h", + "line": 88, + "lineto": 88, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the name of the reference to check" + } + ], + "argline": "const git_refspec *refspec, const char *refname", + "sig": "const git_refspec *::const char *", + "return": { + "type": "int", + "comment": " 1 if the refspec matches, 0 otherwise" + }, + "description": "

Check if a refspec's source descriptor matches a reference

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_dst_matches": { + "type": "function", + "file": "git2/refspec.h", + "line": 97, + "lineto": 97, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the name of the reference to check" + } + ], + "argline": "const git_refspec *refspec, const char *refname", + "sig": "const git_refspec *::const char *", + "return": { + "type": "int", + "comment": " 1 if the refspec matches, 0 otherwise" + }, + "description": "

Check if a refspec's destination descriptor matches a reference

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_transform": { + "type": "function", + "file": "git2/refspec.h", + "line": 107, + "lineto": 107, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "where to store the target name" + }, + { + "name": "spec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the reference to transform" + } + ], + "argline": "git_buf *out, const git_refspec *spec, const char *name", + "sig": "git_buf *::const git_refspec *::const char *", + "return": { "type": "int", "comment": " 0, GIT_EBUFS or another error" }, + "description": "

Transform a reference to its target following the refspec's rules

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_rtransform": { + "type": "function", + "file": "git2/refspec.h", + "line": 117, + "lineto": 117, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "where to store the source reference name" + }, + { + "name": "spec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the reference to transform" + } + ], + "argline": "git_buf *out, const git_refspec *spec, const char *name", + "sig": "git_buf *::const git_refspec *::const char *", + "return": { "type": "int", "comment": " 0, GIT_EBUFS or another error" }, + "description": "

Transform a target reference to its source reference following the refspec's rules

\n", + "comments": "", + "group": "refspec" + }, + "git_remote_create": { + "type": "function", + "file": "git2/remote.h", + "line": 38, + "lineto": 42, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "the resulting remote" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to create the remote" + }, + { + "name": "name", + "type": "const char *", + "comment": "the remote's name" + }, + { "name": "url", "type": "const char *", "comment": "the remote's url" } + ], + "argline": "git_remote **out, git_repository *repo, const char *name, const char *url", + "sig": "git_remote **::git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Add a remote with the default fetch refspec to the repository's configuration.

\n", + "comments": "", + "group": "remote", + "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_create-1"] } + }, + "git_remote_create_options_init": { + "type": "function", + "file": "git2/remote.h", + "line": 132, + "lineto": 134, + "args": [ + { + "name": "opts", + "type": "git_remote_create_options *", + "comment": "The `git_remote_create_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REMOTE_CREATE_OPTIONS_VERSION`." + } + ], + "argline": "git_remote_create_options *opts, unsigned int version", + "sig": "git_remote_create_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_remote_create_options structure

\n", + "comments": "

Initializes a git_remote_create_options with default values. Equivalent to creating an instance with GIT_REMOTE_CREATE_OPTIONS_INIT.

\n", + "group": "remote" + }, + "git_remote_create_with_opts": { + "type": "function", + "file": "git2/remote.h", + "line": 148, + "lineto": 151, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "the resulting remote" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote's url" + }, + { + "name": "opts", + "type": "const git_remote_create_options *", + "comment": "the remote creation options" + } + ], + "argline": "git_remote **out, const char *url, const git_remote_create_options *opts", + "sig": "git_remote **::const char *::const git_remote_create_options *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Create a remote, with options.

\n", + "comments": "

This function allows more fine-grained control over the remote creation.

\n\n

Passing NULL as the opts argument will result in a detached remote.

\n", + "group": "remote" + }, + "git_remote_create_with_fetchspec": { + "type": "function", + "file": "git2/remote.h", + "line": 164, + "lineto": 169, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "the resulting remote" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to create the remote" + }, + { + "name": "name", + "type": "const char *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote's url" + }, + { + "name": "fetch", + "type": "const char *", + "comment": "the remote fetch value" + } + ], + "argline": "git_remote **out, git_repository *repo, const char *name, const char *url, const char *fetch", + "sig": "git_remote **::git_repository *::const char *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Add a remote with the provided fetch refspec (or default if NULL) to the repository's\n configuration.

\n", + "comments": "", + "group": "remote" + }, + "git_remote_create_anonymous": { + "type": "function", + "file": "git2/remote.h", + "line": 182, + "lineto": 185, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "pointer to the new remote objects" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the associated repository" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote repository's URL" + } + ], + "argline": "git_remote **out, git_repository *repo, const char *url", + "sig": "git_remote **::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create an anonymous remote

\n", + "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n", + "group": "remote", + "examples": { + "fetch.c": ["ex/v1.8.4/fetch.html#git_remote_create_anonymous-4"], + "ls-remote.c": [ + "ex/v1.8.4/ls-remote.html#git_remote_create_anonymous-2" + ] + } + }, + "git_remote_create_detached": { + "type": "function", + "file": "git2/remote.h", + "line": 201, + "lineto": 203, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "pointer to the new remote objects" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote repository's URL" + } + ], + "argline": "git_remote **out, const char *url", + "sig": "git_remote **::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a remote without a connected local repo

\n", + "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n\n

Contrasted with git_remote_create_anonymous, a detached remote will not consider any repo configuration values (such as insteadof url substitutions).

\n", + "group": "remote" + }, + "git_remote_lookup": { + "type": "function", + "file": "git2/remote.h", + "line": 216, + "lineto": 216, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "pointer to the new remote object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the associated repository" + }, + { + "name": "name", + "type": "const char *", + "comment": "the remote's name" + } + ], + "argline": "git_remote **out, git_repository *repo, const char *name", + "sig": "git_remote **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Get the information for a particular remote

\n", + "comments": "

The name will be checked for validity. See git_tag_create() for rules about valid names.

\n", + "group": "remote", + "examples": { + "fetch.c": ["ex/v1.8.4/fetch.html#git_remote_lookup-5"], + "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_remote_lookup-3"], + "push.c": ["ex/v1.8.4/push.html#git_remote_lookup-1"], + "remote.c": ["ex/v1.8.4/remote.html#git_remote_lookup-2"] + } + }, + "git_remote_dup": { + "type": "function", + "file": "git2/remote.h", + "line": 228, + "lineto": 228, + "args": [ + { + "name": "dest", + "type": "git_remote **", + "comment": "pointer where to store the copy" + }, + { + "name": "source", + "type": "git_remote *", + "comment": "object to copy" + } + ], + "argline": "git_remote **dest, git_remote *source", + "sig": "git_remote **::git_remote *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a copy of an existing remote. All internal strings are also\n duplicated. Callbacks are not duplicated.

\n", + "comments": "

Call git_remote_free to free the data.

\n", + "group": "remote" + }, + "git_remote_owner": { + "type": "function", + "file": "git2/remote.h", + "line": 236, + "lineto": 236, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "git_repository *", + "comment": " a pointer to the repository" + }, + "description": "

Get the remote's repository

\n", + "comments": "", + "group": "remote" + }, + "git_remote_name": { + "type": "function", + "file": "git2/remote.h", + "line": 244, + "lineto": 244, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "const char *", + "comment": " a pointer to the name or NULL for in-memory remotes" + }, + "description": "

Get the remote's name

\n", + "comments": "", + "group": "remote" + }, + "git_remote_url": { + "type": "function", + "file": "git2/remote.h", + "line": 256, + "lineto": 256, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { "type": "const char *", "comment": " a pointer to the url" }, + "description": "

Get the remote's url

\n", + "comments": "

If url.*.insteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", + "group": "remote", + "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_url-3"] } + }, + "git_remote_pushurl": { + "type": "function", + "file": "git2/remote.h", + "line": 268, + "lineto": 268, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "const char *", + "comment": " a pointer to the url or NULL if no special url for pushing is set" + }, + "description": "

Get the remote's url for pushing.

\n", + "comments": "

If url.*.pushInsteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", + "group": "remote", + "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_pushurl-4"] } + }, + "git_remote_set_url": { + "type": "function", + "file": "git2/remote.h", + "line": 281, + "lineto": 281, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the change" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the remote's name" + }, + { "name": "url", "type": "const char *", "comment": "the url to set" } + ], + "argline": "git_repository *repo, const char *remote, const char *url", + "sig": "git_repository *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error value" }, + "description": "

Set the remote's url in the configuration

\n", + "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", + "group": "remote", + "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_set_url-5"] } + }, + "git_remote_set_pushurl": { + "type": "function", + "file": "git2/remote.h", + "line": 295, + "lineto": 295, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to perform the change" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the remote's name" + }, + { "name": "url", "type": "const char *", "comment": "the url to set" } + ], + "argline": "git_repository *repo, const char *remote, const char *url", + "sig": "git_repository *::const char *::const char *", + "return": { "type": "int", "comment": " 0, or an error code" }, + "description": "

Set the remote's url for pushing in the configuration.

\n", + "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", + "group": "remote", + "examples": { + "remote.c": ["ex/v1.8.4/remote.html#git_remote_set_pushurl-6"] + } + }, + "git_remote_set_instance_url": { + "type": "function", + "file": "git2/remote.h", + "line": 305, + "lineto": 305, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote's name" + }, + { "name": "url", "type": "const char *", "comment": "the url to set" } + ], + "argline": "git_remote *remote, const char *url", + "sig": "git_remote *::const char *", + "return": { "type": "int", "comment": " 0 or an error value" }, + "description": "

Set the url for this particular url instance. The URL in the\n configuration will be ignored, and will not be changed.

\n", + "comments": "", + "group": "remote" + }, + "git_remote_set_instance_pushurl": { + "type": "function", + "file": "git2/remote.h", + "line": 315, + "lineto": 315, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote's name" + }, + { "name": "url", "type": "const char *", "comment": "the url to set" } + ], + "argline": "git_remote *remote, const char *url", + "sig": "git_remote *::const char *", + "return": { "type": "int", "comment": " 0 or an error value" }, + "description": "

Set the push url for this particular url instance. The URL in the\n configuration will be ignored, and will not be changed.

\n", + "comments": "", + "group": "remote" + }, + "git_remote_add_fetch": { + "type": "function", + "file": "git2/remote.h", + "line": 328, + "lineto": 328, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to change the configuration" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the name of the remote to change" + }, + { + "name": "refspec", + "type": "const char *", + "comment": "the new fetch refspec" + } + ], + "argline": "git_repository *repo, const char *remote, const char *refspec", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC if refspec is invalid or an error value" + }, + "description": "

Add a fetch refspec to the remote's configuration

\n", + "comments": "

Add the given refspec to the fetch list in the configuration. No loaded remote instances will be affected.

\n", + "group": "remote" + }, + "git_remote_get_fetch_refspecs": { + "type": "function", + "file": "git2/remote.h", + "line": 340, + "lineto": 340, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": "pointer to the array in which to store the strings" + }, + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + } + ], + "argline": "git_strarray *array, const git_remote *remote", + "sig": "git_strarray *::const git_remote *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Get the remote's list of fetch refspecs

\n", + "comments": "

The memory is owned by the user and should be freed with git_strarray_free.

\n", + "group": "remote" + }, + "git_remote_add_push": { + "type": "function", + "file": "git2/remote.h", + "line": 353, + "lineto": 353, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to change the configuration" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the name of the remote to change" + }, + { + "name": "refspec", + "type": "const char *", + "comment": "the new push refspec" + } + ], + "argline": "git_repository *repo, const char *remote, const char *refspec", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC if refspec is invalid or an error value" + }, + "description": "

Add a push refspec to the remote's configuration

\n", + "comments": "

Add the given refspec to the push list in the configuration. No loaded remote instances will be affected.

\n", + "group": "remote" + }, + "git_remote_get_push_refspecs": { + "type": "function", + "file": "git2/remote.h", + "line": 365, + "lineto": 365, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": "pointer to the array in which to store the strings" + }, + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + } + ], + "argline": "git_strarray *array, const git_remote *remote", + "sig": "git_strarray *::const git_remote *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Get the remote's list of push refspecs

\n", + "comments": "

The memory is owned by the user and should be freed with git_strarray_free.

\n", + "group": "remote" + }, + "git_remote_refspec_count": { + "type": "function", + "file": "git2/remote.h", + "line": 373, + "lineto": 373, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "size_t", + "comment": " the amount of refspecs configured in this remote" + }, + "description": "

Get the number of refspecs for a remote

\n", + "comments": "", + "group": "remote" + }, + "git_remote_get_refspec": { + "type": "function", + "file": "git2/remote.h", + "line": 382, + "lineto": 382, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + }, + { "name": "n", "type": "size_t", "comment": "the refspec to get" } + ], + "argline": "const git_remote *remote, size_t n", + "sig": "const git_remote *::size_t", + "return": { + "type": "const git_refspec *", + "comment": " the nth refspec" + }, + "description": "

Get a refspec from the remote

\n", + "comments": "", + "group": "remote" + }, + "git_remote_ls": { + "type": "function", + "file": "git2/remote.h", + "line": 404, + "lineto": 404, + "args": [ + { + "name": "out", + "type": "const git_remote_head ***", + "comment": "pointer to the array" + }, + { + "name": "size", + "type": "size_t *", + "comment": "the number of remote heads" + }, + { "name": "remote", "type": "git_remote *", "comment": "the remote" } + ], + "argline": "const git_remote_head ***out, size_t *size, git_remote *remote", + "sig": "const git_remote_head ***::size_t *::git_remote *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Get the remote repository's reference advertisement list

\n", + "comments": "

Get the list of references with which the server responds to a new connection.

\n\n

The remote (or more exactly its transport) must have connected to the remote repository. This list is available as soon as the connection to the remote is initiated and it remains available after disconnecting.

\n\n

The memory belongs to the remote. The pointer will be valid as long as a new connection is not initiated, but it is recommended that you make a copy in order to make use of the data.

\n", + "group": "remote", + "examples": { + "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_remote_ls-4"] + } + }, + "git_remote_connected": { + "type": "function", + "file": "git2/remote.h", + "line": 415, + "lineto": 415, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "int", + "comment": " 1 if it's connected, 0 otherwise." + }, + "description": "

Check whether the remote is connected

\n", + "comments": "

Check whether the remote's underlying transport is connected to the remote host.

\n", + "group": "remote" + }, + "git_remote_stop": { + "type": "function", + "file": "git2/remote.h", + "line": 426, + "lineto": 426, + "args": [ + { "name": "remote", "type": "git_remote *", "comment": "the remote" } + ], + "argline": "git_remote *remote", + "sig": "git_remote *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Cancel the operation

\n", + "comments": "

At certain points in its operation, the network code checks whether the operation has been cancelled and if so stops the operation.

\n", + "group": "remote" + }, + "git_remote_disconnect": { + "type": "function", + "file": "git2/remote.h", + "line": 436, + "lineto": 436, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to disconnect from" + } + ], + "argline": "git_remote *remote", + "sig": "git_remote *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Disconnect from the remote

\n", + "comments": "

Close the connection to the remote.

\n", + "group": "remote" + }, + "git_remote_free": { + "type": "function", + "file": "git2/remote.h", + "line": 446, + "lineto": 446, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to free" + } + ], + "argline": "git_remote *remote", + "sig": "git_remote *", + "return": { "type": "void", "comment": null }, + "description": "

Free the memory associated with a remote

\n", + "comments": "

This also disconnects from the remote, if the connection has not been closed yet (using git_remote_disconnect).

\n", + "group": "remote", + "examples": { + "fetch.c": [ + "ex/v1.8.4/fetch.html#git_remote_free-6", + "ex/v1.8.4/fetch.html#git_remote_free-7" + ], + "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_remote_free-5"], + "remote.c": ["ex/v1.8.4/remote.html#git_remote_free-7"] + } + }, + "git_remote_list": { + "type": "function", + "file": "git2/remote.h", + "line": 457, + "lineto": 457, + "args": [ + { + "name": "out", + "type": "git_strarray *", + "comment": "a string array which receives the names of the remotes" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to query" + } + ], + "argline": "git_strarray *out, git_repository *repo", + "sig": "git_strarray *::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get a list of the configured remotes for a repo

\n", + "comments": "

The string array must be freed by the user.

\n", + "group": "remote", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_remote_list-22"], + "remote.c": ["ex/v1.8.4/remote.html#git_remote_list-8"] + } + }, + "git_remote_init_callbacks": { + "type": "function", + "file": "git2/remote.h", + "line": 671, + "lineto": 673, + "args": [ + { + "name": "opts", + "type": "git_remote_callbacks *", + "comment": "the `git_remote_callbacks` struct to initialize" + }, + { + "name": "version", + "type": "unsigned int", + "comment": "Version of struct; pass `GIT_REMOTE_CALLBACKS_VERSION`" + } + ], + "argline": "git_remote_callbacks *opts, unsigned int version", + "sig": "git_remote_callbacks *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initializes a git_remote_callbacks with default values. Equivalent to\n creating an instance with GIT_REMOTE_CALLBACKS_INIT.

\n", + "comments": "", + "group": "remote", + "examples": { + "push.c": ["ex/v1.8.4/push.html#git_remote_init_callbacks-2"] + } + }, + "git_fetch_options_init": { + "type": "function", + "file": "git2/remote.h", + "line": 806, + "lineto": 808, + "args": [ + { + "name": "opts", + "type": "git_fetch_options *", + "comment": "The `git_fetch_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_FETCH_OPTIONS_VERSION`." + } + ], + "argline": "git_fetch_options *opts, unsigned int version", + "sig": "git_fetch_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_fetch_options structure

\n", + "comments": "

Initializes a git_fetch_options with default values. Equivalent to creating an instance with GIT_FETCH_OPTIONS_INIT.

\n", + "group": "fetch" + }, + "git_push_options_init": { + "type": "function", + "file": "git2/remote.h", + "line": 868, + "lineto": 870, + "args": [ + { + "name": "opts", + "type": "git_push_options *", + "comment": "The `git_push_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_PUSH_OPTIONS_VERSION`." + } + ], + "argline": "git_push_options *opts, unsigned int version", + "sig": "git_push_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_push_options structure

\n", + "comments": "

Initializes a git_push_options with default values. Equivalent to creating an instance with GIT_PUSH_OPTIONS_INIT.

\n", + "group": "push", + "examples": { "push.c": ["ex/v1.8.4/push.html#git_push_options_init-3"] } + }, + "git_remote_connect_options_init": { + "type": "function", + "file": "git2/remote.h", + "line": 916, + "lineto": 918, + "args": [ + { + "name": "opts", + "type": "git_remote_connect_options *", + "comment": "The `git_remote_connect_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REMOTE_CONNECT_OPTIONS_VERSION`." + } + ], + "argline": "git_remote_connect_options *opts, unsigned int version", + "sig": "git_remote_connect_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_remote_connect_options structure.

\n", + "comments": "

Initializes a git_remote_connect_options with default values. Equivalent to creating an instance with GIT_REMOTE_CONNECT_OPTIONS_INIT.

\n", + "group": "remote" + }, + "git_remote_connect": { + "type": "function", + "file": "git2/remote.h", + "line": 935, + "lineto": 940, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to connect to" + }, + { + "name": "direction", + "type": "git_direction", + "comment": "GIT_DIRECTION_FETCH if you want to fetch or\n GIT_DIRECTION_PUSH if you want to push" + }, + { + "name": "callbacks", + "type": "const git_remote_callbacks *", + "comment": "the callbacks to use for this connection" + }, + { + "name": "proxy_opts", + "type": "const git_proxy_options *", + "comment": "proxy settings" + }, + { + "name": "custom_headers", + "type": "const git_strarray *", + "comment": "extra HTTP headers to use in this connection" + } + ], + "argline": "git_remote *remote, git_direction direction, const git_remote_callbacks *callbacks, const git_proxy_options *proxy_opts, const git_strarray *custom_headers", + "sig": "git_remote *::git_direction::const git_remote_callbacks *::const git_proxy_options *::const git_strarray *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Open a connection to a remote.

\n", + "comments": "

The transport is selected based on the URL; the direction argument is due to a limitation of the git protocol which starts up a specific binary which can only do the one or the other.

\n", + "group": "remote", + "examples": { + "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_remote_connect-6"] + } + }, + "git_remote_connect_ext": { + "type": "function", + "file": "git2/remote.h", + "line": 960, + "lineto": 963, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to connect to" + }, + { + "name": "direction", + "type": "git_direction", + "comment": "GIT_DIRECTION_FETCH if you want to fetch or\n GIT_DIRECTION_PUSH if you want to push" + }, + { + "name": "opts", + "type": "const git_remote_connect_options *", + "comment": "the remote connection options" + } + ], + "argline": "git_remote *remote, git_direction direction, const git_remote_connect_options *opts", + "sig": "git_remote *::git_direction::const git_remote_connect_options *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Open a connection to a remote with extended options.

\n", + "comments": "

The transport is selected based on the URL; the direction argument is due to a limitation of the git protocol which starts up a specific binary which can only do the one or the other.

\n\n

The given options structure will form the defaults for connection options and callback setup. Callers may override these defaults by specifying git_fetch_options or git_push_options in subsequent calls.

\n", + "group": "remote" + }, + "git_remote_download": { + "type": "function", + "file": "git2/remote.h", + "line": 985, + "lineto": 988, + "args": [ + { "name": "remote", "type": "git_remote *", "comment": "the remote" }, + { + "name": "refspecs", + "type": "const git_strarray *", + "comment": "the refspecs to use for this negotiation and\n download. Use NULL or an empty array to use the base refspecs" + }, + { + "name": "opts", + "type": "const git_fetch_options *", + "comment": "the options to use for this fetch or NULL" + } + ], + "argline": "git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts", + "sig": "git_remote *::const git_strarray *::const git_fetch_options *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Download and index the packfile.

\n", + "comments": "

Connect to the remote if it hasn't been done yet, negotiate with the remote git which objects are missing, download and index the packfile.

\n\n

The .idx file will be created and both it and the packfile with be renamed to their final name.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", + "group": "remote" + }, + "git_remote_upload": { + "type": "function", + "file": "git2/remote.h", + "line": 1007, + "lineto": 1010, + "args": [ + { "name": "remote", "type": "git_remote *", "comment": "the remote" }, + { + "name": "refspecs", + "type": "const git_strarray *", + "comment": "the refspecs to use for this negotiation and\n upload. Use NULL or an empty array to use the base refspecs" + }, + { + "name": "opts", + "type": "const git_push_options *", + "comment": "the options to use for this push" + } + ], + "argline": "git_remote *remote, const git_strarray *refspecs, const git_push_options *opts", + "sig": "git_remote *::const git_strarray *::const git_push_options *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a packfile and send it to the server

\n", + "comments": "

Connect to the remote if it hasn't been done yet, negotiate with the remote git which objects are missing, create a packfile with the missing objects and send it.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", + "group": "remote" + }, + "git_remote_update_tips": { + "type": "function", + "file": "git2/remote.h", + "line": 1029, + "lineto": 1034, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to update" + }, + { + "name": "callbacks", + "type": "const git_remote_callbacks *", + "comment": "pointer to the callback structure to use or NULL" + }, + { + "name": "update_flags", + "type": "unsigned int", + "comment": "the git_remote_update_flags for these tips." + }, + { + "name": "download_tags", + "type": "git_remote_autotag_option_t", + "comment": "what the behaviour for downloading tags is for this fetch. This is\n ignored for push. This must be the same value passed to `git_remote_download()`." + }, + { + "name": "reflog_message", + "type": "const char *", + "comment": "The message to insert into the reflogs. If\n NULL and fetching, the default is \"fetch \n\", where \n is\n the name of the remote (or its url, for in-memory remotes). This\n parameter is ignored when pushing." + } + ], + "argline": "git_remote *remote, const git_remote_callbacks *callbacks, unsigned int update_flags, git_remote_autotag_option_t download_tags, const char *reflog_message", + "sig": "git_remote *::const git_remote_callbacks *::unsigned int::git_remote_autotag_option_t::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Update the tips to the new state.

\n", + "comments": "

If callbacks are not specified then the callbacks specified to git_remote_connect will be used (if it was called).

\n", + "group": "remote" + }, + "git_remote_fetch": { + "type": "function", + "file": "git2/remote.h", + "line": 1054, + "lineto": 1058, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to fetch from" + }, + { + "name": "refspecs", + "type": "const git_strarray *", + "comment": "the refspecs to use for this fetch. Pass NULL or an\n empty array to use the base refspecs." + }, + { + "name": "opts", + "type": "const git_fetch_options *", + "comment": "options to use for this fetch or NULL" + }, + { + "name": "reflog_message", + "type": "const char *", + "comment": "The message to insert into the reflogs. If NULL, the\n\t\t\t\t\t\t\t\t default is \"fetch\"" + } + ], + "argline": "git_remote *remote, const git_strarray *refspecs, const git_fetch_options *opts, const char *reflog_message", + "sig": "git_remote *::const git_strarray *::const git_fetch_options *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Download new data and update tips.

\n", + "comments": "

Convenience function to connect to a remote, download the data, disconnect and update the remote-tracking branches.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", + "group": "remote", + "examples": { "fetch.c": ["ex/v1.8.4/fetch.html#git_remote_fetch-8"] } + }, + "git_remote_prune": { + "type": "function", + "file": "git2/remote.h", + "line": 1070, + "lineto": 1072, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to prune" + }, + { + "name": "callbacks", + "type": "const git_remote_callbacks *", + "comment": "callbacks to use for this prune" + } + ], + "argline": "git_remote *remote, const git_remote_callbacks *callbacks", + "sig": "git_remote *::const git_remote_callbacks *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Prune tracking refs that are no longer present on remote.

\n", + "comments": "

If callbacks are not specified then the callbacks specified to git_remote_connect will be used (if it was called).

\n", + "group": "remote" + }, + "git_remote_push": { + "type": "function", + "file": "git2/remote.h", + "line": 1087, + "lineto": 1090, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to push to" + }, + { + "name": "refspecs", + "type": "const git_strarray *", + "comment": "the refspecs to use for pushing. If NULL or an empty\n array, the configured refspecs will be used" + }, + { + "name": "opts", + "type": "const git_push_options *", + "comment": "options to use for this push" + } + ], + "argline": "git_remote *remote, const git_strarray *refspecs, const git_push_options *opts", + "sig": "git_remote *::const git_strarray *::const git_push_options *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Perform a push.

\n", + "comments": "

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", + "group": "remote", + "examples": { "push.c": ["ex/v1.8.4/push.html#git_remote_push-4"] } + }, + "git_remote_stats": { + "type": "function", + "file": "git2/remote.h", + "line": 1095, + "lineto": 1095, + "args": [{ "name": "remote", "type": "git_remote *", "comment": null }], + "argline": "git_remote *remote", + "sig": "git_remote *", + "return": { "type": "const git_indexer_progress *", "comment": null }, + "description": "

Get the statistics structure that is filled in by the fetch operation.

\n", + "comments": "", + "group": "remote", + "examples": { "fetch.c": ["ex/v1.8.4/fetch.html#git_remote_stats-9"] } + }, + "git_remote_autotag": { + "type": "function", + "file": "git2/remote.h", + "line": 1103, + "lineto": 1103, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { + "type": "git_remote_autotag_option_t", + "comment": " the auto-follow setting" + }, + "description": "

Retrieve the tag auto-follow setting

\n", + "comments": "", + "group": "remote" + }, + "git_remote_set_autotag": { + "type": "function", + "file": "git2/remote.h", + "line": 1116, + "lineto": 1116, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to make the change" + }, + { + "name": "remote", + "type": "const char *", + "comment": "the name of the remote" + }, + { + "name": "value", + "type": "git_remote_autotag_option_t", + "comment": "the new value to take." + } + ], + "argline": "git_repository *repo, const char *remote, git_remote_autotag_option_t value", + "sig": "git_repository *::const char *::git_remote_autotag_option_t", + "return": { "type": "int", "comment": " 0, or an error code." }, + "description": "

Set the remote's tag following setting.

\n", + "comments": "

The change will be made in the configuration. No loaded remotes will be affected.

\n", + "group": "remote" + }, + "git_remote_prune_refs": { + "type": "function", + "file": "git2/remote.h", + "line": 1124, + "lineto": 1124, + "args": [ + { + "name": "remote", + "type": "const git_remote *", + "comment": "the remote to query" + } + ], + "argline": "const git_remote *remote", + "sig": "const git_remote *", + "return": { "type": "int", "comment": " the ref-prune setting" }, + "description": "

Retrieve the ref-prune setting

\n", + "comments": "", + "group": "remote" + }, + "git_remote_rename": { + "type": "function", + "file": "git2/remote.h", + "line": 1146, + "lineto": 1150, + "args": [ + { + "name": "problems", + "type": "git_strarray *", + "comment": "non-default refspecs cannot be renamed and will be\n stored here for further processing by the caller. Always free this\n strarray on successful return." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to rename" + }, + { + "name": "name", + "type": "const char *", + "comment": "the current name of the remote" + }, + { + "name": "new_name", + "type": "const char *", + "comment": "the new name the remote should bear" + } + ], + "argline": "git_strarray *problems, git_repository *repo, const char *name, const char *new_name", + "sig": "git_strarray *::git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

Give the remote a new name

\n", + "comments": "

All remote-tracking branches and configuration settings for the remote are updated.

\n\n

The new name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

No loaded instances of a the remote with the old name will change their name or their list of refspecs.

\n", + "group": "remote", + "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_rename-9"] } + }, + "git_remote_name_is_valid": { + "type": "function", + "file": "git2/remote.h", + "line": 1159, + "lineto": 1159, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "output pointer to set with validity of given remote name" + }, + { + "name": "remote_name", + "type": "const char *", + "comment": "name to be checked." + } + ], + "argline": "int *valid, const char *remote_name", + "sig": "int *::const char *", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Ensure the remote name is well-formed.

\n", + "comments": "", + "group": "remote" + }, + "git_remote_delete": { + "type": "function", + "file": "git2/remote.h", + "line": 1171, + "lineto": 1171, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to act" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the remote to delete" + } + ], + "argline": "git_repository *repo, const char *name", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, or an error code." + }, + "description": "

Delete an existing persisted remote.

\n", + "comments": "

All remote-tracking branches and configuration settings for the remote will be removed.

\n", + "group": "remote", + "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_delete-10"] } + }, + "git_remote_default_branch": { + "type": "function", + "file": "git2/remote.h", + "line": 1189, + "lineto": 1189, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer in which to store the reference name" + }, + { "name": "remote", "type": "git_remote *", "comment": "the remote" } + ], + "argline": "git_buf *out, git_remote *remote", + "sig": "git_buf *::git_remote *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the remote does not have any references\n or none of them point to HEAD's commit, or an error message." + }, + "description": "

Retrieve the name of the remote's default branch

\n", + "comments": "

The default branch of a repository is the branch which HEAD points to. If the remote does not support reporting this information directly, it performs the guess as git does; that is, if there are multiple branches which point to the same commit, the first one is chosen. If the master branch is a candidate, it wins.

\n\n

This function must only be called after connecting.

\n", + "group": "remote" + }, + "git_repository_open": { + "type": "function", + "file": "git2/repository.h", + "line": 38, + "lineto": 38, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "pointer to the repo which will be opened" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path to the repository" + } + ], + "argline": "git_repository **out, const char *path", + "sig": "git_repository **::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Open a git repository.

\n", + "comments": "

The 'path' argument must point to either a git repository folder, or an existing work dir.

\n\n

The method will automatically detect if 'path' is a normal or bare repository or fail is 'path' is neither.

\n", + "group": "repository", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_repository_open-59"] + } + }, + "git_repository_open_from_worktree": { + "type": "function", + "file": "git2/repository.h", + "line": 49, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Output pointer containing opened repository" + }, + { + "name": "wt", + "type": "git_worktree *", + "comment": "Working tree to open" + } + ], + "argline": "git_repository **out, git_worktree *wt", + "sig": "git_repository **::git_worktree *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Open working tree as a repository

\n", + "comments": "

Open the working directory of the working tree as a normal repository that can then be worked on.

\n", + "group": "repository" + }, + "git_repository_discover": { + "type": "function", + "file": "git2/repository.h", + "line": 100, + "lineto": 104, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "A pointer to a user-allocated git_buf which will contain\n the found path." + }, + { + "name": "start_path", + "type": "const char *", + "comment": "The base path where the lookup starts." + }, + { + "name": "across_fs", + "type": "int", + "comment": "If true, then the lookup will not stop when a\n filesystem device change is detected while exploring parent directories." + }, + { + "name": "ceiling_dirs", + "type": "const char *", + "comment": "A GIT_PATH_LIST_SEPARATOR separated list of\n absolute symbolic link free paths. The lookup will stop when any\n of this paths is reached. Note that the lookup always performs on\n start_path no matter start_path appears in ceiling_dirs ceiling_dirs\n might be NULL (which is equivalent to an empty string)" + } + ], + "argline": "git_buf *out, const char *start_path, int across_fs, const char *ceiling_dirs", + "sig": "git_buf *::const char *::int::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Look for a git repository and copy its path in the given buffer.\n The lookup start from base_path and walk across parent directories\n if nothing has been found. The lookup ends when the first repository\n is found, or when reaching a directory referenced in ceiling_dirs\n or when the filesystem changes (in case across_fs is true).

\n", + "comments": "

The method will automatically detect if the repository is bare (if there is a repository).

\n", + "group": "repository" + }, + "git_repository_open_ext": { + "type": "function", + "file": "git2/repository.h", + "line": 176, + "lineto": 180, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Pointer to the repo which will be opened. This can\n actually be NULL if you only want to use the error code to\n see if a repo at this path could be opened." + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to open as git repository. If the flags\n permit \"searching\", then this can be a path to a subdirectory\n inside the working directory of the repository. May be NULL if\n flags is GIT_REPOSITORY_OPEN_FROM_ENV." + }, + { + "name": "flags", + "type": "unsigned int", + "comment": "A combination of the GIT_REPOSITORY_OPEN flags above." + }, + { + "name": "ceiling_dirs", + "type": "const char *", + "comment": "A GIT_PATH_LIST_SEPARATOR delimited list of path\n prefixes at which the search for a containing repository should\n terminate." + } + ], + "argline": "git_repository **out, const char *path, unsigned int flags, const char *ceiling_dirs", + "sig": "git_repository **::const char *::unsigned int::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if no repository could be found,\n or -1 if there was a repository but open failed for some reason\n (such as repo corruption or system errors)." + }, + "description": "

Find and open a repository with extended controls.

\n", + "comments": "", + "group": "repository", + "examples": { "log.c": ["ex/v1.8.4/log.html#git_repository_open_ext-43"] } + }, + "git_repository_open_bare": { + "type": "function", + "file": "git2/repository.h", + "line": 193, + "lineto": 193, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Pointer to the repo which will be opened." + }, + { + "name": "bare_path", + "type": "const char *", + "comment": "Direct path to the bare repository" + } + ], + "argline": "git_repository **out, const char *bare_path", + "sig": "git_repository **::const char *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Open a bare repository on the serverside.

\n", + "comments": "

This is a fast open for bare repositories that will come in handy if you're e.g. hosting git repositories and need to access them efficiently

\n", + "group": "repository" + }, + "git_repository_free": { + "type": "function", + "file": "git2/repository.h", + "line": 206, + "lineto": 206, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "repository handle to close. If NULL nothing occurs." + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { "type": "void", "comment": null }, + "description": "

Free a previously allocated repository

\n", + "comments": "

Note that after a repository is free'd, all the objects it has spawned will still exist until they are manually closed by the user with git_object_free, but accessing any of the attributes of an object without a backing repository will result in undefined behavior

\n", + "group": "repository", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_repository_free-60"], + "init.c": ["ex/v1.8.4/init.html#git_repository_free-4"] + } + }, + "git_repository_init": { + "type": "function", + "file": "git2/repository.h", + "line": 223, + "lineto": 226, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "pointer to the repo which will be created or reinitialized" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path to the repository" + }, + { + "name": "is_bare", + "type": "unsigned int", + "comment": "if true, a Git repository without a working directory is\n\t\tcreated at the pointed path. If false, provided path will be\n\t\tconsidered as the working directory into which the .git directory\n\t\twill be created." + } + ], + "argline": "git_repository **out, const char *path, unsigned int is_bare", + "sig": "git_repository **::const char *::unsigned int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Creates a new Git repository in the given folder.

\n", + "comments": "

TODO: - Reinit the repository

\n", + "group": "repository", + "examples": { "init.c": ["ex/v1.8.4/init.html#git_repository_init-5"] } + }, + "git_repository_init_options_init": { + "type": "function", + "file": "git2/repository.h", + "line": 389, + "lineto": 391, + "args": [ + { + "name": "opts", + "type": "git_repository_init_options *", + "comment": "The `git_repository_init_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REPOSITORY_INIT_OPTIONS_VERSION`." + } + ], + "argline": "git_repository_init_options *opts, unsigned int version", + "sig": "git_repository_init_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_repository_init_options structure

\n", + "comments": "

Initializes a git_repository_init_options with default values. Equivalent to creating an instance with GIT_REPOSITORY_INIT_OPTIONS_INIT.

\n", + "group": "repository" + }, + "git_repository_init_ext": { + "type": "function", + "file": "git2/repository.h", + "line": 406, + "lineto": 409, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Pointer to the repo which will be created or reinitialized." + }, + { + "name": "repo_path", + "type": "const char *", + "comment": "The path to the repository." + }, + { + "name": "opts", + "type": "git_repository_init_options *", + "comment": "Pointer to git_repository_init_options struct." + } + ], + "argline": "git_repository **out, const char *repo_path, git_repository_init_options *opts", + "sig": "git_repository **::const char *::git_repository_init_options *", + "return": { "type": "int", "comment": " 0 or an error code on failure." }, + "description": "

Create a new Git repository in the given folder with extended controls.

\n", + "comments": "

This will initialize a new git repository (creating the repo_path if requested by flags) and working directory as needed. It will auto-detect the case sensitivity of the file system and if the file system supports file mode bits correctly.

\n", + "group": "repository", + "examples": { + "init.c": ["ex/v1.8.4/init.html#git_repository_init_ext-6"] + } + }, + "git_repository_head": { + "type": "function", + "file": "git2/repository.h", + "line": 424, + "lineto": 424, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer to the reference which will be retrieved" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "a repository object" + } + ], + "argline": "git_reference **out, git_repository *repo", + "sig": "git_reference **::git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing\n branch, GIT_ENOTFOUND when HEAD is missing; an error code otherwise" + }, + "description": "

Retrieve and resolve the reference pointed at by HEAD.

\n", + "comments": "

The returned git_reference will be owned by caller and git_reference_free() must be called when done with it to release the allocated memory and prevent a leak.

\n", + "group": "repository", + "examples": { + "merge.c": [ + "ex/v1.8.4/merge.html#git_repository_head-31", + "ex/v1.8.4/merge.html#git_repository_head-32" + ], + "status.c": ["ex/v1.8.4/status.html#git_repository_head-3"] + } + }, + "git_repository_head_for_worktree": { + "type": "function", + "file": "git2/repository.h", + "line": 434, + "lineto": 435, + "args": [ + { + "name": "out", + "type": "git_reference **", + "comment": "pointer to the reference which will be retrieved" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "a repository object" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the worktree to retrieve HEAD for" + } + ], + "argline": "git_reference **out, git_repository *repo, const char *name", + "sig": "git_reference **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 when successful, error-code otherwise" + }, + "description": "

Retrieve the referenced HEAD for the worktree

\n", + "comments": "", + "group": "repository" + }, + "git_repository_head_detached": { + "type": "function", + "file": "git2/repository.h", + "line": 447, + "lineto": 447, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repo to test" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 1 if HEAD is detached, 0 if it's not; error code if there\n was an error." + }, + "description": "

Check if a repository's HEAD is detached

\n", + "comments": "

A repository's HEAD is detached when it points directly to a commit instead of a branch.

\n", + "group": "repository" + }, + "git_repository_head_detached_for_worktree": { + "type": "function", + "file": "git2/repository.h", + "line": 460, + "lineto": 461, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "a repository object" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the worktree to retrieve HEAD for" + } + ], + "argline": "git_repository *repo, const char *name", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 1 if HEAD is detached, 0 if its not; error code if\n there was an error" + }, + "description": "

Check if a worktree's HEAD is detached

\n", + "comments": "

A worktree's HEAD is detached when it points directly to a commit instead of a branch.

\n", + "group": "repository" + }, + "git_repository_head_unborn": { + "type": "function", + "file": "git2/repository.h", + "line": 473, + "lineto": 473, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repo to test" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 1 if the current branch is unborn, 0 if it's not; error\n code if there was an error" + }, + "description": "

Check if the current branch is unborn

\n", + "comments": "

An unborn branch is one named from HEAD but which doesn't exist in the refs namespace, because it doesn't have any commit to point to.

\n", + "group": "repository" + }, + "git_repository_is_empty": { + "type": "function", + "file": "git2/repository.h", + "line": 487, + "lineto": 487, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repo to test" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 1 if the repository is empty, 0 if it isn't, error code\n if the repository is corrupted" + }, + "description": "

Check if a repository is empty

\n", + "comments": "

An empty repository has just been initialized and contains no references apart from HEAD, which must be pointing to the unborn master branch, or the branch specified for the repository in the init.defaultBranch configuration variable.

\n", + "group": "repository" + }, + "git_repository_item_path": { + "type": "function", + "file": "git2/repository.h", + "line": 525, + "lineto": 525, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "Buffer to store the path at" + }, + { + "name": "repo", + "type": "const git_repository *", + "comment": "Repository to get path for" + }, + { + "name": "item", + "type": "git_repository_item_t", + "comment": "The repository item for which to retrieve the path" + } + ], + "argline": "git_buf *out, const git_repository *repo, git_repository_item_t item", + "sig": "git_buf *::const git_repository *::git_repository_item_t", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the path cannot exist or an error code" + }, + "description": "

Get the location of a specific repository file or directory

\n", + "comments": "

This function will retrieve the path of a specific repository item. It will thereby honor things like the repository's common directory, gitdir, etc. In case a file path cannot exist for a given item (e.g. the working directory of a bare repository), GIT_ENOTFOUND is returned.

\n", + "group": "repository" + }, + "git_repository_path": { + "type": "function", + "file": "git2/repository.h", + "line": 536, + "lineto": 536, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "A repository object" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "const char *", + "comment": " the path to the repository" + }, + "description": "

Get the path of this repository

\n", + "comments": "

This is the path of the .git folder for normal repositories, or of the repository itself for bare repositories.

\n", + "group": "repository", + "examples": { + "init.c": ["ex/v1.8.4/init.html#git_repository_path-7"], + "status.c": ["ex/v1.8.4/status.html#git_repository_path-4"] + } + }, + "git_repository_workdir": { + "type": "function", + "file": "git2/repository.h", + "line": 547, + "lineto": 547, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "A repository object" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "const char *", + "comment": " the path to the working dir, if it exists" + }, + "description": "

Get the path of the working directory for this repository

\n", + "comments": "

If the repository is bare, this function will always return NULL.

\n", + "group": "repository", + "examples": { "init.c": ["ex/v1.8.4/init.html#git_repository_workdir-8"] } + }, + "git_repository_commondir": { + "type": "function", + "file": "git2/repository.h", + "line": 559, + "lineto": 559, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "A repository object" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "const char *", + "comment": " the path to the common dir" + }, + "description": "

Get the path of the shared common directory for this repository.

\n", + "comments": "

If the repository is bare, it is the root directory for the repository. If the repository is a worktree, it is the parent repo's gitdir. Otherwise, it is the gitdir.

\n", + "group": "repository" + }, + "git_repository_set_workdir": { + "type": "function", + "file": "git2/repository.h", + "line": 578, + "lineto": 579, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "workdir", + "type": "const char *", + "comment": "The path to a working directory" + }, + { + "name": "update_gitlink", + "type": "int", + "comment": "Create/update gitlink in workdir and set config\n \"core.worktree\" (if workdir is not the parent of the .git directory)" + } + ], + "argline": "git_repository *repo, const char *workdir, int update_gitlink", + "sig": "git_repository *::const char *::int", + "return": { "type": "int", "comment": " 0, or an error code" }, + "description": "

Set the path to the working directory for this repository

\n", + "comments": "

The working directory doesn't need to be the same one that contains the .git folder for this repository.

\n\n

If this repository is bare, setting its working directory will turn it into a normal repository, capable of performing all the common workdir operations (checkout, status, index manipulation, etc).

\n", + "group": "repository" + }, + "git_repository_is_bare": { + "type": "function", + "file": "git2/repository.h", + "line": 587, + "lineto": 587, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "Repo to test" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "int", + "comment": " 1 if the repository is bare, 0 otherwise." + }, + "description": "

Check if a repository is bare

\n", + "comments": "", + "group": "repository", + "examples": { + "status.c": ["ex/v1.8.4/status.html#git_repository_is_bare-5"] + } + }, + "git_repository_is_worktree": { + "type": "function", + "file": "git2/repository.h", + "line": 595, + "lineto": 595, + "args": [ + { + "name": "repo", + "type": "const git_repository *", + "comment": "Repo to test" + } + ], + "argline": "const git_repository *repo", + "sig": "const git_repository *", + "return": { + "type": "int", + "comment": " 1 if the repository is a linked work tree, 0 otherwise." + }, + "description": "

Check if a repository is a linked work tree

\n", + "comments": "", + "group": "repository" + }, + "git_repository_config": { + "type": "function", + "file": "git2/repository.h", + "line": 611, + "lineto": 611, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "Pointer to store the loaded configuration" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_config **out, git_repository *repo", + "sig": "git_config **::git_repository *", + "return": { "type": "int", "comment": " 0, or an error code" }, + "description": "

Get the configuration file for this repository.

\n", + "comments": "

If a configuration file has not been set, the default config set for the repository will be returned, including global and system configurations (if they are available).

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", + "group": "repository", + "examples": { + "config.c": ["ex/v1.8.4/config.html#git_repository_config-9"] + } + }, + "git_repository_config_snapshot": { + "type": "function", + "file": "git2/repository.h", + "line": 627, + "lineto": 627, + "args": [ + { + "name": "out", + "type": "git_config **", + "comment": "Pointer to store the loaded configuration" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_config **out, git_repository *repo", + "sig": "git_config **::git_repository *", + "return": { "type": "int", "comment": " 0, or an error code" }, + "description": "

Get a snapshot of the repository's configuration

\n", + "comments": "

Convenience function to take a snapshot from the repository's configuration. The contents of this snapshot will not change, even if the underlying config files are modified.

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", + "group": "repository", + "examples": { + "general.c": [ + "ex/v1.8.4/general.html#git_repository_config_snapshot-61", + "ex/v1.8.4/general.html#git_repository_config_snapshot-62" + ] + } + }, + "git_repository_odb": { + "type": "function", + "file": "git2/repository.h", + "line": 643, + "lineto": 643, + "args": [ + { + "name": "out", + "type": "git_odb **", + "comment": "Pointer to store the loaded ODB" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_odb **out, git_repository *repo", + "sig": "git_odb **::git_repository *", + "return": { "type": "int", "comment": " 0, or an error code" }, + "description": "

Get the Object Database for this repository.

\n", + "comments": "

If a custom ODB has not been set, the default database for the repository will be returned (the one located in .git/objects).

\n\n

The ODB must be freed once it's no longer being used by the user.

\n", + "group": "repository", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_repository_odb-29"], + "general.c": ["ex/v1.8.4/general.html#git_repository_odb-63"] + } + }, + "git_repository_refdb": { + "type": "function", + "file": "git2/repository.h", + "line": 659, + "lineto": 659, + "args": [ + { + "name": "out", + "type": "git_refdb **", + "comment": "Pointer to store the loaded refdb" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_refdb **out, git_repository *repo", + "sig": "git_refdb **::git_repository *", + "return": { "type": "int", "comment": " 0, or an error code" }, + "description": "

Get the Reference Database Backend for this repository.

\n", + "comments": "

If a custom refsdb has not been set, the default database for the repository will be returned (the one that manipulates loose and packed references in the .git directory).

\n\n

The refdb must be freed once it's no longer being used by the user.

\n", + "group": "repository" + }, + "git_repository_index": { + "type": "function", + "file": "git2/repository.h", + "line": 675, + "lineto": 675, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "Pointer to store the loaded index" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_index **out, git_repository *repo", + "sig": "git_index **::git_repository *", + "return": { "type": "int", "comment": " 0, or an error code" }, + "description": "

Get the Index file for this repository.

\n", + "comments": "

If a custom index has not been set, the default index for the repository will be returned (the one located in .git/index).

\n\n

The index must be freed once it's no longer being used by the user.

\n", + "group": "repository", + "examples": { + "add.c": ["ex/v1.8.4/add.html#git_repository_index-5"], + "commit.c": ["ex/v1.8.4/commit.html#git_repository_index-8"], + "general.c": ["ex/v1.8.4/general.html#git_repository_index-64"], + "init.c": ["ex/v1.8.4/init.html#git_repository_index-9"], + "ls-files.c": ["ex/v1.8.4/ls-files.html#git_repository_index-5"], + "merge.c": ["ex/v1.8.4/merge.html#git_repository_index-33"] + } + }, + "git_repository_message": { + "type": "function", + "file": "git2/repository.h", + "line": 693, + "lineto": 693, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "git_buf to write data into" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository to read prepared message from" + } + ], + "argline": "git_buf *out, git_repository *repo", + "sig": "git_buf *::git_repository *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if no message exists or an error code" + }, + "description": "

Retrieve git's prepared message

\n", + "comments": "

Operations such as git revert/cherry-pick/merge with the -n option stop just short of creating a commit with the changes and save their prepared message in .git/MERGE_MSG so the next git-commit execution can present it to the user for them to amend if they wish.

\n\n

Use this function to get the contents of this file. Don't forget to remove the file after you create the commit.

\n", + "group": "repository" + }, + "git_repository_message_remove": { + "type": "function", + "file": "git2/repository.h", + "line": 703, + "lineto": 703, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository to remove prepared message from." + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Remove git's prepared message.

\n", + "comments": "

Remove the message that git_repository_message retrieves.

\n", + "group": "repository" + }, + "git_repository_state_cleanup": { + "type": "function", + "file": "git2/repository.h", + "line": 712, + "lineto": 712, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { "type": "int", "comment": " 0 on success, or error" }, + "description": "

Remove all the metadata associated with an ongoing command like merge,\n revert, cherry-pick, etc. For example: MERGE_HEAD, MERGE_MSG, etc.

\n", + "comments": "", + "group": "repository", + "examples": { + "merge.c": ["ex/v1.8.4/merge.html#git_repository_state_cleanup-34"] + } + }, + "git_repository_fetchhead_foreach": { + "type": "function", + "file": "git2/repository.h", + "line": 743, + "lineto": 746, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "callback", + "type": "git_repository_fetchhead_foreach_cb", + "comment": "Callback function" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to callback data (optional)" + } + ], + "argline": "git_repository *repo, git_repository_fetchhead_foreach_cb callback, void *payload", + "sig": "git_repository *::git_repository_fetchhead_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, GIT_ENOTFOUND if\n there is no FETCH_HEAD file, or other error code." + }, + "description": "

Invoke 'callback' for each entry in the given FETCH_HEAD file.

\n", + "comments": "

Return a non-zero value from the callback to stop the loop.

\n", + "group": "repository" + }, + "git_repository_mergehead_foreach": { + "type": "function", + "file": "git2/repository.h", + "line": 772, + "lineto": 775, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "callback", + "type": "git_repository_mergehead_foreach_cb", + "comment": "Callback function" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to callback data (optional)" + } + ], + "argline": "git_repository *repo, git_repository_mergehead_foreach_cb callback, void *payload", + "sig": "git_repository *::git_repository_mergehead_foreach_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, GIT_ENOTFOUND if\n there is no MERGE_HEAD file, or other error code." + }, + "description": "

If a merge is in progress, invoke 'callback' for each commit ID in the\n MERGE_HEAD file.

\n", + "comments": "

Return a non-zero value from the callback to stop the loop.

\n", + "group": "repository" + }, + "git_repository_hashfile": { + "type": "function", + "file": "git2/repository.h", + "line": 802, + "lineto": 807, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Output value of calculated SHA" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to file on disk whose contents should be hashed. This\n may be an absolute path or a relative path, in which case it\n will be treated as a path within the working directory." + }, + { + "name": "type", + "type": "git_object_t", + "comment": "The object type to hash as (e.g. GIT_OBJECT_BLOB)" + }, + { + "name": "as_path", + "type": "const char *", + "comment": "The path to use to look up filtering rules. If this is\n an empty string then no filters will be applied when\n calculating the hash. If this is `NULL` and the `path`\n parameter is a file within the repository's working\n directory, then the `path` will be used." + } + ], + "argline": "git_oid *out, git_repository *repo, const char *path, git_object_t type, const char *as_path", + "sig": "git_oid *::git_repository *::const char *::git_object_t::const char *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Calculate hash of file using repository filtering rules.

\n", + "comments": "

If you simply want to calculate the hash of a file on disk with no filters, you can just use the git_odb_hashfile() API. However, if you want to hash a file in the repository and you want to apply filtering rules (e.g. crlf filters) before generating the SHA, then use this function.

\n\n

Note: if the repository has core.safecrlf set to fail and the filtering triggers that failure, then this function will return an error and not calculate the hash of the file.

\n", + "group": "repository" + }, + "git_repository_set_head": { + "type": "function", + "file": "git2/repository.h", + "line": 827, + "lineto": 829, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + }, + { + "name": "refname", + "type": "const char *", + "comment": "Canonical name of the reference the HEAD should point at" + } + ], + "argline": "git_repository *repo, const char *refname", + "sig": "git_repository *::const char *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Make the repository HEAD point to the specified reference.

\n", + "comments": "

If the provided reference points to a Tree or a Blob, the HEAD is unaltered and -1 is returned.

\n\n

If the provided reference points to a branch, the HEAD will point to that branch, staying attached, or become attached if it isn't yet. If the branch doesn't exist yet, no error will be return. The HEAD will then be attached to an unborn branch.

\n\n

Otherwise, the HEAD will be detached and will directly point to the Commit.

\n", + "group": "repository", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_repository_set_head-23"] + } + }, + "git_repository_set_head_detached": { + "type": "function", + "file": "git2/repository.h", + "line": 847, + "lineto": 849, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + }, + { + "name": "committish", + "type": "const git_oid *", + "comment": "Object id of the Commit the HEAD should point to" + } + ], + "argline": "git_repository *repo, const git_oid *committish", + "sig": "git_repository *::const git_oid *", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Make the repository HEAD directly point to the Commit.

\n", + "comments": "

If the provided committish cannot be found in the repository, the HEAD is unaltered and GIT_ENOTFOUND is returned.

\n\n

If the provided committish cannot be peeled into a commit, the HEAD is unaltered and -1 is returned.

\n\n

Otherwise, the HEAD will eventually be detached and will directly point to the peeled Commit.

\n", + "group": "repository" + }, + "git_repository_set_head_detached_from_annotated": { + "type": "function", + "file": "git2/repository.h", + "line": 863, + "lineto": 865, + "args": [ + { "name": "repo", "type": "git_repository *", "comment": null }, + { + "name": "committish", + "type": "const git_annotated_commit *", + "comment": null + } + ], + "argline": "git_repository *repo, const git_annotated_commit *committish", + "sig": "git_repository *::const git_annotated_commit *", + "return": { "type": "int", "comment": null }, + "description": "

Make the repository HEAD directly point to the Commit.

\n", + "comments": "

This behaves like git_repository_set_head_detached() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_repository_set_head_detached().

\n", + "group": "repository", + "examples": { + "checkout.c": [ + "ex/v1.8.4/checkout.html#git_repository_set_head_detached_from_annotated-24" + ] + } + }, + "git_repository_detach_head": { + "type": "function", + "file": "git2/repository.h", + "line": 884, + "lineto": 885, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNBORNBRANCH when HEAD points to a non existing\n branch or an error code" + }, + "description": "

Detach the HEAD.

\n", + "comments": "

If the HEAD is already detached and points to a Commit, 0 is returned.

\n\n

If the HEAD is already detached and points to a Tag, the HEAD is updated into making it point to the peeled Commit, and 0 is returned.

\n\n

If the HEAD is already detached and points to a non committish, the HEAD is unaltered, and -1 is returned.

\n\n

Otherwise, the HEAD will be detached and point to the peeled Commit.

\n", + "group": "repository" + }, + "git_repository_state": { + "type": "function", + "file": "git2/repository.h", + "line": 915, + "lineto": 915, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { "type": "int", "comment": " The state of the repository" }, + "description": "

Determines the status of a git repository - ie, whether an operation\n (merge, cherry-pick, etc) is in progress.

\n", + "comments": "", + "group": "repository", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_repository_state-25"], + "merge.c": ["ex/v1.8.4/merge.html#git_repository_state-35"] + } + }, + "git_repository_set_namespace": { + "type": "function", + "file": "git2/repository.h", + "line": 929, + "lineto": 929, + "args": [ + { "name": "repo", "type": "git_repository *", "comment": "The repo" }, + { + "name": "nmspace", + "type": "const char *", + "comment": "The namespace. This should not include the refs\n\tfolder, e.g. to namespace all references under `refs/namespaces/foo/`,\n\tuse `foo` as the namespace." + } + ], + "argline": "git_repository *repo, const char *nmspace", + "sig": "git_repository *::const char *", + "return": { "type": "int", "comment": " 0 on success, -1 on error" }, + "description": "

Sets the active namespace for this Git Repository

\n", + "comments": "

This namespace affects all reference operations for the repo. See man gitnamespaces

\n", + "group": "repository" + }, + "git_repository_get_namespace": { + "type": "function", + "file": "git2/repository.h", + "line": 937, + "lineto": 937, + "args": [ + { "name": "repo", "type": "git_repository *", "comment": "The repo" } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { + "type": "const char *", + "comment": " the active namespace, or NULL if there isn't one" + }, + "description": "

Get the currently active namespace for this repository

\n", + "comments": "", + "group": "repository" + }, + "git_repository_is_shallow": { + "type": "function", + "file": "git2/repository.h", + "line": 946, + "lineto": 946, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { "type": "int", "comment": " 1 if shallow, zero if not" }, + "description": "

Determine if the repository was a shallow clone

\n", + "comments": "", + "group": "repository" + }, + "git_repository_ident": { + "type": "function", + "file": "git2/repository.h", + "line": 959, + "lineto": 959, + "args": [ + { + "name": "name", + "type": "const char **", + "comment": "where to store the pointer to the name" + }, + { + "name": "email", + "type": "const char **", + "comment": "where to store the pointer to the email" + }, + { + "name": "repo", + "type": "const git_repository *", + "comment": "the repository" + } + ], + "argline": "const char **name, const char **email, const git_repository *repo", + "sig": "const char **::const char **::const git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Retrieve the configured identity to use for reflogs

\n", + "comments": "

The memory is owned by the repository and must not be freed by the user.

\n", + "group": "repository" + }, + "git_repository_set_ident": { + "type": "function", + "file": "git2/repository.h", + "line": 973, + "lineto": 973, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to configure" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name to use for the reflog entries" + }, + { + "name": "email", + "type": "const char *", + "comment": "the email to use for the reflog entries" + } + ], + "argline": "git_repository *repo, const char *name, const char *email", + "sig": "git_repository *::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Set the identity to be used for writing reflogs

\n", + "comments": "

If both are set, this name and email will be used to write to the reflog. Pass NULL to unset. When unset, the identity will be taken from the repository's configuration.

\n", + "group": "repository" + }, + "git_repository_oid_type": { + "type": "function", + "file": "git2/repository.h", + "line": 981, + "lineto": 981, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_repository *repo", + "sig": "git_repository *", + "return": { "type": "git_oid_t", "comment": " the object id type" }, + "description": "

Gets the object type used by this repository.

\n", + "comments": "", + "group": "repository" + }, + "git_repository_commit_parents": { + "type": "function", + "file": "git2/repository.h", + "line": 992, + "lineto": 992, + "args": [ + { + "name": "commits", + "type": "git_commitarray *", + "comment": "a `git_commitarray` that will contain the commit parents" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository" + } + ], + "argline": "git_commitarray *commits, git_repository *repo", + "sig": "git_commitarray *::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Gets the parents of the next commit, given the current repository state.\n Generally, this is the HEAD commit, except when performing a merge, in\n which case it is two or more commits.

\n", + "comments": "", + "group": "repository" + }, + "git_reset": { + "type": "function", + "file": "git2/reset.h", + "line": 62, + "lineto": 66, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to perform the reset operation." + }, + { + "name": "target", + "type": "const git_object *", + "comment": "Committish to which the Head should be moved to. This object\n must belong to the given `repo` and can either be a git_commit or a\n git_tag. When a git_tag is being passed, it should be dereferenceable\n to a git_commit which oid will be used as the target of the branch." + }, + { + "name": "reset_type", + "type": "git_reset_t", + "comment": "Kind of reset operation to perform." + }, + { + "name": "checkout_opts", + "type": "const git_checkout_options *", + "comment": "Optional checkout options to be used for a HARD reset.\n The checkout_strategy field will be overridden (based on reset_type).\n This parameter can be used to propagate notify and progress callbacks." + } + ], + "argline": "git_repository *repo, const git_object *target, git_reset_t reset_type, const git_checkout_options *checkout_opts", + "sig": "git_repository *::const git_object *::git_reset_t::const git_checkout_options *", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", + "comments": "

SOFT reset means the Head will be moved to the commit.

\n\n

MIXED reset will trigger a SOFT reset, plus the index will be replaced with the content of the commit tree.

\n\n

HARD reset will trigger a MIXED reset and the working directory will be replaced with the content of the index. (Untracked and ignored files will be left alone, however.)

\n\n

TODO: Implement remaining kinds of resets.

\n", + "group": "reset" + }, + "git_reset_from_annotated": { + "type": "function", + "file": "git2/reset.h", + "line": 80, + "lineto": 84, + "args": [ + { "name": "repo", "type": "git_repository *", "comment": null }, + { + "name": "commit", + "type": "const git_annotated_commit *", + "comment": null + }, + { "name": "reset_type", "type": "git_reset_t", "comment": null }, + { + "name": "checkout_opts", + "type": "const git_checkout_options *", + "comment": null + } + ], + "argline": "git_repository *repo, const git_annotated_commit *commit, git_reset_t reset_type, const git_checkout_options *checkout_opts", + "sig": "git_repository *::const git_annotated_commit *::git_reset_t::const git_checkout_options *", + "return": { "type": "int", "comment": null }, + "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", + "comments": "

This behaves like git_reset() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_reset().

\n", + "group": "reset" + }, + "git_reset_default": { + "type": "function", + "file": "git2/reset.h", + "line": 104, + "lineto": 107, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to perform the reset operation." + }, + { + "name": "target", + "type": "const git_object *", + "comment": "The committish which content will be used to reset the content\n of the index." + }, + { + "name": "pathspecs", + "type": "const git_strarray *", + "comment": "List of pathspecs to operate on." + } + ], + "argline": "git_repository *repo, const git_object *target, const git_strarray *pathspecs", + "sig": "git_repository *::const git_object *::const git_strarray *", + "return": { + "type": "int", + "comment": " 0 on success or an error code \n<\n 0" + }, + "description": "

Updates some entries in the index from the target commit tree.

\n", + "comments": "

The scope of the updated entries is determined by the paths being passed in the pathspec parameters.

\n\n

Passing a NULL target will result in removing entries in the index matching the provided pathspecs.

\n", + "group": "reset" + }, + "git_revert_options_init": { + "type": "function", + "file": "git2/revert.h", + "line": 49, + "lineto": 51, + "args": [ + { + "name": "opts", + "type": "git_revert_options *", + "comment": "The `git_revert_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_REVERT_OPTIONS_VERSION`." + } + ], + "argline": "git_revert_options *opts, unsigned int version", + "sig": "git_revert_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_revert_options structure

\n", + "comments": "

Initializes a git_revert_options with default values. Equivalent to creating an instance with GIT_REVERT_OPTIONS_INIT.

\n", + "group": "revert" + }, + "git_revert_commit": { + "type": "function", + "file": "git2/revert.h", + "line": 67, + "lineto": 73, + "args": [ + { + "name": "out", + "type": "git_index **", + "comment": "pointer to store the index result in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository that contains the given commits" + }, + { + "name": "revert_commit", + "type": "git_commit *", + "comment": "the commit to revert" + }, + { + "name": "our_commit", + "type": "git_commit *", + "comment": "the commit to revert against (eg, HEAD)" + }, + { + "name": "mainline", + "type": "unsigned int", + "comment": "the parent of the revert commit, if it is a merge" + }, + { + "name": "merge_options", + "type": "const git_merge_options *", + "comment": "the merge options (or null for defaults)" + } + ], + "argline": "git_index **out, git_repository *repo, git_commit *revert_commit, git_commit *our_commit, unsigned int mainline, const git_merge_options *merge_options", + "sig": "git_index **::git_repository *::git_commit *::git_commit *::unsigned int::const git_merge_options *", + "return": { + "type": "int", + "comment": " zero on success, -1 on failure." + }, + "description": "

Reverts the given commit against the given "our" commit, producing an\n index that reflects the result of the revert.

\n", + "comments": "

The returned index must be freed explicitly with git_index_free.

\n", + "group": "revert" + }, + "git_revert": { + "type": "function", + "file": "git2/revert.h", + "line": 83, + "lineto": 86, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to revert" + }, + { + "name": "commit", + "type": "git_commit *", + "comment": "the commit to revert" + }, + { + "name": "given_opts", + "type": "const git_revert_options *", + "comment": "the revert options (or null for defaults)" + } + ], + "argline": "git_repository *repo, git_commit *commit, const git_revert_options *given_opts", + "sig": "git_repository *::git_commit *::const git_revert_options *", + "return": { + "type": "int", + "comment": " zero on success, -1 on failure." + }, + "description": "

Reverts the given commit, producing changes in the index and working directory.

\n", + "comments": "", + "group": "revert" + }, + "git_revparse_single": { + "type": "function", + "file": "git2/revparse.h", + "line": 37, + "lineto": 38, + "args": [ + { + "name": "out", + "type": "git_object **", + "comment": "pointer to output object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to search in" + }, + { + "name": "spec", + "type": "const char *", + "comment": "the textual specification for an object" + } + ], + "argline": "git_object **out, git_repository *repo, const char *spec", + "sig": "git_object **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Find a single object, as specified by a revision string.

\n", + "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

The returned object should be released with git_object_free when no longer needed.

\n", + "group": "revparse", + "examples": { + "blame.c": ["ex/v1.8.4/blame.html#git_revparse_single-22"], + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_revparse_single-30"], + "describe.c": ["ex/v1.8.4/describe.html#git_revparse_single-6"], + "log.c": ["ex/v1.8.4/log.html#git_revparse_single-44"], + "tag.c": [ + "ex/v1.8.4/tag.html#git_revparse_single-9", + "ex/v1.8.4/tag.html#git_revparse_single-10", + "ex/v1.8.4/tag.html#git_revparse_single-11", + "ex/v1.8.4/tag.html#git_revparse_single-12" + ] + } + }, + "git_revparse_ext": { + "type": "function", + "file": "git2/revparse.h", + "line": 61, + "lineto": 65, + "args": [ + { + "name": "object_out", + "type": "git_object **", + "comment": "pointer to output object" + }, + { + "name": "reference_out", + "type": "git_reference **", + "comment": "pointer to output reference or NULL" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to search in" + }, + { + "name": "spec", + "type": "const char *", + "comment": "the textual specification for an object" + } + ], + "argline": "git_object **object_out, git_reference **reference_out, git_repository *repo, const char *spec", + "sig": "git_object **::git_reference **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC\n or an error code" + }, + "description": "

Find a single object and intermediate reference by a revision string.

\n", + "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

In some cases (@{<-n>} or <branchname>@{upstream}), the expression may point to an intermediate reference. When such expressions are being passed in, reference_out will be valued as well.

\n\n

The returned object should be released with git_object_free and the returned reference with git_reference_free when no longer needed.

\n", + "group": "revparse", + "examples": { "commit.c": ["ex/v1.8.4/commit.html#git_revparse_ext-9"] } + }, + "git_revparse": { + "type": "function", + "file": "git2/revparse.h", + "line": 105, + "lineto": 108, + "args": [ + { + "name": "revspec", + "type": "git_revspec *", + "comment": "Pointer to an user-allocated git_revspec struct where\n\t the result of the rev-parse will be stored" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to search in" + }, + { + "name": "spec", + "type": "const char *", + "comment": "the rev-parse spec to parse" + } + ], + "argline": "git_revspec *revspec, git_repository *repo, const char *spec", + "sig": "git_revspec *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_INVALIDSPEC, GIT_ENOTFOUND, GIT_EAMBIGUOUS or an error code" + }, + "description": "

Parse a revision string for from, to, and intent.

\n", + "comments": "

See man gitrevisions or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", + "group": "revparse", + "examples": { + "blame.c": ["ex/v1.8.4/blame.html#git_revparse-23"], + "log.c": ["ex/v1.8.4/log.html#git_revparse-45"], + "rev-parse.c": [ + "ex/v1.8.4/rev-parse.html#git_revparse-14", + "ex/v1.8.4/rev-parse.html#git_revparse-15" + ] + } + }, + "git_revwalk_new": { + "type": "function", + "file": "git2/revwalk.h", + "line": 73, + "lineto": 73, + "args": [ + { + "name": "out", + "type": "git_revwalk **", + "comment": "pointer to the new revision walker" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to walk through" + } + ], + "argline": "git_revwalk **out, git_repository *repo", + "sig": "git_revwalk **::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Allocate a new revision walker to iterate through a repo.

\n", + "comments": "

This revision walker uses a custom memory pool and an internal commit cache, so it is relatively expensive to allocate.

\n\n

For maximum performance, this revision walker should be reused for different walks.

\n\n

This revision walker is not thread safe: it may only be used to walk a repository on a single thread; however, it is possible to have several revision walkers in several different threads walking the same repository.

\n", + "group": "revwalk", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_revwalk_new-65"], + "log.c": [ + "ex/v1.8.4/log.html#git_revwalk_new-46", + "ex/v1.8.4/log.html#git_revwalk_new-47" + ] + } + }, + "git_revwalk_reset": { + "type": "function", + "file": "git2/revwalk.h", + "line": 89, + "lineto": 89, + "args": [ + { + "name": "walker", + "type": "git_revwalk *", + "comment": "handle to reset." + } + ], + "argline": "git_revwalk *walker", + "sig": "git_revwalk *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Reset the revision walker for reuse.

\n", + "comments": "

This will clear all the pushed and hidden commits, and leave the walker in a blank state (just like at creation) ready to receive new commit pushes and start a new walk.

\n\n

The revision walk is automatically reset when a walk is over.

\n", + "group": "revwalk" + }, + "git_revwalk_push": { + "type": "function", + "file": "git2/revwalk.h", + "line": 108, + "lineto": 108, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the oid of the commit to start from." + } + ], + "argline": "git_revwalk *walk, const git_oid *id", + "sig": "git_revwalk *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add a new root for the traversal

\n", + "comments": "

The pushed commit will be marked as one of the roots from which to start the walk. This commit may not be walked if it or a child is hidden.

\n\n

At least one commit must be pushed onto the walker before a walk can be started.

\n\n

The given id must belong to a committish on the walked repository.

\n", + "group": "revwalk", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_revwalk_push-66"], + "log.c": ["ex/v1.8.4/log.html#git_revwalk_push-48"] + } + }, + "git_revwalk_push_glob": { + "type": "function", + "file": "git2/revwalk.h", + "line": 126, + "lineto": 126, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "glob", + "type": "const char *", + "comment": "the glob pattern references should match" + } + ], + "argline": "git_revwalk *walk, const char *glob", + "sig": "git_revwalk *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Push matching references

\n", + "comments": "

The OIDs pointed to by the references that match the given glob pattern will be pushed to the revision walker.

\n\n

A leading 'refs/' is implied if not present as well as a trailing '/*' if the glob lacks '?', '*' or '['.

\n\n

Any references matching this glob which do not point to a committish will be ignored.

\n", + "group": "revwalk" + }, + "git_revwalk_push_head": { + "type": "function", + "file": "git2/revwalk.h", + "line": 134, + "lineto": 134, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Push the repository's HEAD

\n", + "comments": "", + "group": "revwalk", + "examples": { "log.c": ["ex/v1.8.4/log.html#git_revwalk_push_head-49"] } + }, + "git_revwalk_hide": { + "type": "function", + "file": "git2/revwalk.h", + "line": 149, + "lineto": 149, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal." + }, + { + "name": "commit_id", + "type": "const git_oid *", + "comment": "the oid of commit that will be ignored during the traversal" + } + ], + "argline": "git_revwalk *walk, const git_oid *commit_id", + "sig": "git_revwalk *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Mark a commit (and its ancestors) uninteresting for the output.

\n", + "comments": "

The given id must belong to a committish on the walked repository.

\n\n

The resolved commit and all its parents will be hidden from the output on the revision walk.

\n", + "group": "revwalk", + "examples": { "log.c": ["ex/v1.8.4/log.html#git_revwalk_hide-50"] } + }, + "git_revwalk_hide_glob": { + "type": "function", + "file": "git2/revwalk.h", + "line": 168, + "lineto": 168, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "glob", + "type": "const char *", + "comment": "the glob pattern references should match" + } + ], + "argline": "git_revwalk *walk, const char *glob", + "sig": "git_revwalk *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Hide matching references.

\n", + "comments": "

The OIDs pointed to by the references that match the given glob pattern and their ancestors will be hidden from the output on the revision walk.

\n\n

A leading 'refs/' is implied if not present as well as a trailing '/*' if the glob lacks '?', '*' or '['.

\n\n

Any references matching this glob which do not point to a committish will be ignored.

\n", + "group": "revwalk" + }, + "git_revwalk_hide_head": { + "type": "function", + "file": "git2/revwalk.h", + "line": 176, + "lineto": 176, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Hide the repository's HEAD

\n", + "comments": "", + "group": "revwalk" + }, + "git_revwalk_push_ref": { + "type": "function", + "file": "git2/revwalk.h", + "line": 187, + "lineto": 187, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference to push" + } + ], + "argline": "git_revwalk *walk, const char *refname", + "sig": "git_revwalk *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Push the OID pointed to by a reference

\n", + "comments": "

The reference must point to a committish.

\n", + "group": "revwalk" + }, + "git_revwalk_hide_ref": { + "type": "function", + "file": "git2/revwalk.h", + "line": 198, + "lineto": 198, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference to hide" + } + ], + "argline": "git_revwalk *walk, const char *refname", + "sig": "git_revwalk *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Hide the OID pointed to by a reference

\n", + "comments": "

The reference must point to a committish.

\n", + "group": "revwalk" + }, + "git_revwalk_next": { + "type": "function", + "file": "git2/revwalk.h", + "line": 218, + "lineto": 218, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Pointer where to store the oid of the next commit" + }, + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker to pop the commit from." + } + ], + "argline": "git_oid *out, git_revwalk *walk", + "sig": "git_oid *::git_revwalk *", + "return": { + "type": "int", + "comment": " 0 if the next commit was found;\n\tGIT_ITEROVER if there are no commits left to iterate" + }, + "description": "

Get the next commit from the revision walk.

\n", + "comments": "

The initial call to this method is not blocking when iterating through a repo with a time-sorting mode.

\n\n

Iterating with Topological or inverted modes makes the initial call blocking to preprocess the commit list, but this block should be mostly unnoticeable on most repositories (topological preprocessing times at 0.3s on the git.git repo).

\n\n

The revision walker is reset when the walk is over.

\n", + "group": "revwalk", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_revwalk_next-67"], + "log.c": ["ex/v1.8.4/log.html#git_revwalk_next-51"] + } + }, + "git_revwalk_sorting": { + "type": "function", + "file": "git2/revwalk.h", + "line": 230, + "lineto": 230, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal." + }, + { + "name": "sort_mode", + "type": "unsigned int", + "comment": "combination of GIT_SORT_XXX flags" + } + ], + "argline": "git_revwalk *walk, unsigned int sort_mode", + "sig": "git_revwalk *::unsigned int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Change the sorting mode when iterating through the\n repository's contents.

\n", + "comments": "

Changing the sorting mode resets the walker.

\n", + "group": "revwalk", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_revwalk_sorting-68"], + "log.c": [ + "ex/v1.8.4/log.html#git_revwalk_sorting-52", + "ex/v1.8.4/log.html#git_revwalk_sorting-53" + ] + } + }, + "git_revwalk_push_range": { + "type": "function", + "file": "git2/revwalk.h", + "line": 245, + "lineto": 245, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the walker being used for the traversal" + }, + { "name": "range", "type": "const char *", "comment": "the range" } + ], + "argline": "git_revwalk *walk, const char *range", + "sig": "git_revwalk *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Push and hide the respective endpoints of the given range.

\n", + "comments": "

The range should be of the form .. where each is in the form accepted by 'git_revparse_single'. The left-hand commit will be hidden and the right-hand commit pushed.

\n", + "group": "revwalk" + }, + "git_revwalk_simplify_first_parent": { + "type": "function", + "file": "git2/revwalk.h", + "line": 255, + "lineto": 255, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "The revision walker." + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Simplify the history by first-parent

\n", + "comments": "

No parents other than the first for each commit will be enqueued.

\n", + "group": "revwalk" + }, + "git_revwalk_free": { + "type": "function", + "file": "git2/revwalk.h", + "line": 263, + "lineto": 263, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "traversal handle to close. If NULL nothing occurs." + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { "type": "void", "comment": null }, + "description": "

Free a revision walker previously allocated.

\n", + "comments": "", + "group": "revwalk", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_revwalk_free-69"], + "log.c": ["ex/v1.8.4/log.html#git_revwalk_free-54"] + } + }, + "git_revwalk_repository": { + "type": "function", + "file": "git2/revwalk.h", + "line": 272, + "lineto": 272, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the revision walker" + } + ], + "argline": "git_revwalk *walk", + "sig": "git_revwalk *", + "return": { + "type": "git_repository *", + "comment": " the repository being walked" + }, + "description": "

Return the repository on which this walker\n is operating.

\n", + "comments": "", + "group": "revwalk" + }, + "git_revwalk_add_hide_cb": { + "type": "function", + "file": "git2/revwalk.h", + "line": 295, + "lineto": 298, + "args": [ + { + "name": "walk", + "type": "git_revwalk *", + "comment": "the revision walker" + }, + { + "name": "hide_cb", + "type": "git_revwalk_hide_cb", + "comment": "callback function to hide a commit and its parents" + }, + { + "name": "payload", + "type": "void *", + "comment": "data payload to be passed to callback function" + } + ], + "argline": "git_revwalk *walk, git_revwalk_hide_cb hide_cb, void *payload", + "sig": "git_revwalk *::git_revwalk_hide_cb::void *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Adds, changes or removes a callback function to hide a commit and its parents

\n", + "comments": "", + "group": "revwalk" + }, + "git_signature_new": { + "type": "function", + "file": "git2/signature.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature, in case of error NULL" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the person" + }, + { + "name": "email", + "type": "const char *", + "comment": "email of the person" + }, + { + "name": "time", + "type": "git_time_t", + "comment": "time (in seconds from epoch) when the action happened" + }, + { + "name": "offset", + "type": "int", + "comment": "timezone offset (in minutes) for the time" + } + ], + "argline": "git_signature **out, const char *name, const char *email, git_time_t time, int offset", + "sig": "git_signature **::const char *::const char *::git_time_t::int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a new action signature.

\n", + "comments": "

Call git_signature_free() to free the data.

\n\n

Note: angle brackets ('<' and '>') characters are not allowed to be used in either the name or the email parameter.

\n", + "group": "signature", + "examples": { + "general.c": [ + "ex/v1.8.4/general.html#git_signature_new-70", + "ex/v1.8.4/general.html#git_signature_new-71" + ] + } + }, + "git_signature_now": { + "type": "function", + "file": "git2/signature.h", + "line": 49, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature, in case of error NULL" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the person" + }, + { + "name": "email", + "type": "const char *", + "comment": "email of the person" + } + ], + "argline": "git_signature **out, const char *name, const char *email", + "sig": "git_signature **::const char *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a new action signature with a timestamp of 'now'.

\n", + "comments": "

Call git_signature_free() to free the data.

\n", + "group": "signature", + "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_signature_now-36"] } + }, + "git_signature_default": { + "type": "function", + "file": "git2/signature.h", + "line": 63, + "lineto": 63, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository pointer" + } + ], + "argline": "git_signature **out, git_repository *repo", + "sig": "git_signature **::git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if config is missing, or error code" + }, + "description": "

Create a new action signature with default user and now timestamp.

\n", + "comments": "

This looks up the user.name and user.email from the configuration and uses the current time as the timestamp, and creates a new signature based on that information. It will return GIT_ENOTFOUND if either the user.name or user.email are not set.

\n", + "group": "signature", + "examples": { + "commit.c": ["ex/v1.8.4/commit.html#git_signature_default-10"], + "init.c": ["ex/v1.8.4/init.html#git_signature_default-10"], + "tag.c": ["ex/v1.8.4/tag.html#git_signature_default-13"] + } + }, + "git_signature_from_buffer": { + "type": "function", + "file": "git2/signature.h", + "line": 76, + "lineto": 76, + "args": [ + { + "name": "out", + "type": "git_signature **", + "comment": "new signature" + }, + { "name": "buf", "type": "const char *", "comment": "signature string" } + ], + "argline": "git_signature **out, const char *buf", + "sig": "git_signature **::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALID if the signature is not parseable, or an error code" + }, + "description": "

Create a new signature by parsing the given buffer, which is\n expected to be in the format "Real Name \n<email

\n\n
\n

timestamp tzoffset",\n where timestamp is the number of seconds since the Unix epoch and\n tzoffset is the timezone offset in hhmm format (note the lack\n of a colon separator).

\n
\n", + "comments": "", + "group": "signature" + }, + "git_signature_dup": { + "type": "function", + "file": "git2/signature.h", + "line": 88, + "lineto": 88, + "args": [ + { + "name": "dest", + "type": "git_signature **", + "comment": "pointer where to store the copy" + }, + { + "name": "sig", + "type": "const git_signature *", + "comment": "signature to duplicate" + } + ], + "argline": "git_signature **dest, const git_signature *sig", + "sig": "git_signature **::const git_signature *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a copy of an existing signature. All internal strings are also\n duplicated.

\n", + "comments": "

Call git_signature_free() to free the data.

\n", + "group": "signature" + }, + "git_signature_free": { + "type": "function", + "file": "git2/signature.h", + "line": 99, + "lineto": 99, + "args": [ + { + "name": "sig", + "type": "git_signature *", + "comment": "signature to free" + } + ], + "argline": "git_signature *sig", + "sig": "git_signature *", + "return": { "type": "void", "comment": null }, + "description": "

Free an existing signature.

\n", + "comments": "

Because the signature is not an opaque structure, it is legal to free it manually, but be sure to free the "name" and "email" strings in addition to the structure itself.

\n", + "group": "signature", + "examples": { + "commit.c": ["ex/v1.8.4/commit.html#git_signature_free-11"], + "general.c": [ + "ex/v1.8.4/general.html#git_signature_free-72", + "ex/v1.8.4/general.html#git_signature_free-73" + ], + "init.c": ["ex/v1.8.4/init.html#git_signature_free-11"], + "tag.c": ["ex/v1.8.4/tag.html#git_signature_free-14"] + } + }, + "git_stash_save": { + "type": "function", + "file": "git2/stash.h", + "line": 67, + "lineto": 72, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Object id of the commit containing the stashed state.\n This commit is also the target of the direct reference refs/stash." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "stasher", + "type": "const git_signature *", + "comment": "The identity of the person performing the stashing." + }, + { + "name": "message", + "type": "const char *", + "comment": "Optional description along with the stashed state." + }, + { + "name": "flags", + "type": "uint32_t", + "comment": "Flags to control the stashing process. (see GIT_STASH_* above)" + } + ], + "argline": "git_oid *out, git_repository *repo, const git_signature *stasher, const char *message, uint32_t flags", + "sig": "git_oid *::git_repository *::const git_signature *::const char *::uint32_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND where there's nothing to stash,\n or error code." + }, + "description": "

Save the local modifications to a new stash.

\n", + "comments": "", + "group": "stash" + }, + "git_stash_save_options_init": { + "type": "function", + "file": "git2/stash.h", + "line": 110, + "lineto": 111, + "args": [ + { + "name": "opts", + "type": "git_stash_save_options *", + "comment": "The `git_stash_save_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_STASH_SAVE_OPTIONS_VERSION`." + } + ], + "argline": "git_stash_save_options *opts, unsigned int version", + "sig": "git_stash_save_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_stash_save_options structure

\n", + "comments": "

Initializes a git_stash_save_options with default values. Equivalent to creating an instance with GIT_STASH_SAVE_OPTIONS_INIT.

\n", + "group": "stash" + }, + "git_stash_save_with_opts": { + "type": "function", + "file": "git2/stash.h", + "line": 123, + "lineto": 126, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "Object id of the commit containing the stashed state.\n This commit is also the target of the direct reference refs/stash." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "opts", + "type": "const git_stash_save_options *", + "comment": "The stash options." + } + ], + "argline": "git_oid *out, git_repository *repo, const git_stash_save_options *opts", + "sig": "git_oid *::git_repository *::const git_stash_save_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND where there's nothing to stash,\n or error code." + }, + "description": "

Save the local modifications to a new stash, with options.

\n", + "comments": "", + "group": "stash" + }, + "git_stash_apply_options_init": { + "type": "function", + "file": "git2/stash.h", + "line": 210, + "lineto": 211, + "args": [ + { + "name": "opts", + "type": "git_stash_apply_options *", + "comment": "The `git_stash_apply_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_STASH_APPLY_OPTIONS_VERSION`." + } + ], + "argline": "git_stash_apply_options *opts, unsigned int version", + "sig": "git_stash_apply_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_stash_apply_options structure

\n", + "comments": "

Initializes a git_stash_apply_options with default values. Equivalent to creating an instance with GIT_STASH_APPLY_OPTIONS_INIT.

\n", + "group": "stash" + }, + "git_stash_apply": { + "type": "function", + "file": "git2/stash.h", + "line": 239, + "lineto": 242, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "index", + "type": "size_t", + "comment": "The position within the stash list. 0 points to the\n most recent stashed state." + }, + { + "name": "options", + "type": "const git_stash_apply_options *", + "comment": "Optional options to control how stashes are applied." + } + ], + "argline": "git_repository *repo, size_t index, const git_stash_apply_options *options", + "sig": "git_repository *::size_t::const git_stash_apply_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the\n given index, GIT_EMERGECONFLICT if changes exist in the working\n directory, or an error code" + }, + "description": "

Apply a single stashed state from the stash list.

\n", + "comments": "

If local changes in the working directory conflict with changes in the stash then GIT_EMERGECONFLICT will be returned. In this case, the index will always remain unmodified and all files in the working directory will remain unmodified. However, if you are restoring untracked files or ignored files and there is a conflict when applying the modified files, then those files will remain in the working directory.

\n\n

If passing the GIT_STASH_APPLY_REINSTATE_INDEX flag and there would be conflicts when reinstating the index, the function will return GIT_EMERGECONFLICT and both the working directory and index will be left unmodified.

\n\n

Note that a minimum checkout strategy of GIT_CHECKOUT_SAFE is implied.

\n", + "group": "stash" + }, + "git_stash_foreach": { + "type": "function", + "file": "git2/stash.h", + "line": 275, + "lineto": 278, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the stash." + }, + { + "name": "callback", + "type": "git_stash_cb", + "comment": "Callback to invoke per found stashed state. The most\n recent stash state will be enumerated first." + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra parameter to callback function." + } + ], + "argline": "git_repository *repo, git_stash_cb callback, void *payload", + "sig": "git_repository *::git_stash_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code." + }, + "description": "

Loop over all the stashed states and issue a callback for each one.

\n", + "comments": "

If the callback returns a non-zero value, this will stop looping.

\n", + "group": "stash" + }, + "git_stash_drop": { + "type": "function", + "file": "git2/stash.h", + "line": 291, + "lineto": 293, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "index", + "type": "size_t", + "comment": "The position within the stash list. 0 points to the\n most recent stashed state." + } + ], + "argline": "git_repository *repo, size_t index", + "sig": "git_repository *::size_t", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the given\n index, or error code." + }, + "description": "

Remove a single stashed state from the stash list.

\n", + "comments": "", + "group": "stash" + }, + "git_stash_pop": { + "type": "function", + "file": "git2/stash.h", + "line": 307, + "lineto": 310, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The owning repository." + }, + { + "name": "index", + "type": "size_t", + "comment": "The position within the stash list. 0 points to the\n most recent stashed state." + }, + { + "name": "options", + "type": "const git_stash_apply_options *", + "comment": "Optional options to control how stashes are applied." + } + ], + "argline": "git_repository *repo, size_t index, const git_stash_apply_options *options", + "sig": "git_repository *::size_t::const git_stash_apply_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the given\n index, or error code. (see git_stash_apply() above for details)" + }, + "description": "

Apply a single stashed state from the stash list and remove it from the list\n if successful.

\n", + "comments": "", + "group": "stash" + }, + "git_status_options_init": { + "type": "function", + "file": "git2/status.h", + "line": 277, + "lineto": 279, + "args": [ + { + "name": "opts", + "type": "git_status_options *", + "comment": "The `git_status_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_STATUS_OPTIONS_VERSION`." + } + ], + "argline": "git_status_options *opts, unsigned int version", + "sig": "git_status_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_status_options structure

\n", + "comments": "

Initializes a git_status_options with default values. Equivalent to creating an instance with GIT_STATUS_OPTIONS_INIT.

\n", + "group": "status" + }, + "git_status_foreach": { + "type": "function", + "file": "git2/status.h", + "line": 317, + "lineto": 320, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "callback", + "type": "git_status_cb", + "comment": "The function to call on each file" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to pass through to callback function" + } + ], + "argline": "git_repository *repo, git_status_cb callback, void *payload", + "sig": "git_repository *::git_status_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Gather file statuses and run a callback for each one.

\n", + "comments": "

The callback is passed the path of the file, the status (a combination of the git_status_t values above) and the payload data pointer passed into this function.

\n\n

If the callback returns a non-zero value, this function will stop looping and return that value to caller.

\n", + "group": "status", + "examples": { "status.c": ["ex/v1.8.4/status.html#git_status_foreach-6"] } + }, + "git_status_foreach_ext": { + "type": "function", + "file": "git2/status.h", + "line": 341, + "lineto": 345, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository object" + }, + { + "name": "opts", + "type": "const git_status_options *", + "comment": "Status options structure" + }, + { + "name": "callback", + "type": "git_status_cb", + "comment": "The function to call on each file" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to pass through to callback function" + } + ], + "argline": "git_repository *repo, const git_status_options *opts, git_status_cb callback, void *payload", + "sig": "git_repository *::const git_status_options *::git_status_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Gather file status information and run callbacks as requested.

\n", + "comments": "

This is an extended version of the git_status_foreach() API that allows for more granular control over which paths will be processed and in what order. See the git_status_options structure for details about the additional controls that this makes available.

\n\n

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", + "group": "status", + "examples": { + "status.c": ["ex/v1.8.4/status.html#git_status_foreach_ext-7"] + } + }, + "git_status_file": { + "type": "function", + "file": "git2/status.h", + "line": 373, + "lineto": 376, + "args": [ + { + "name": "status_flags", + "type": "unsigned int *", + "comment": "Output combination of git_status_t values for file" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "path", + "type": "const char *", + "comment": "The exact path to retrieve status for relative to the\n repository working directory" + } + ], + "argline": "unsigned int *status_flags, git_repository *repo, const char *path", + "sig": "unsigned int *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if the file is not found in the HEAD,\n index, and work tree, GIT_EAMBIGUOUS if `path` matches multiple files\n or if it refers to a folder, and -1 on other errors." + }, + "description": "

Get file status for a single file.

\n", + "comments": "

This tries to get status for the filename that you give. If no files match that name (in either the HEAD, index, or working directory), this returns GIT_ENOTFOUND.

\n\n

If the name matches multiple files (for example, if the path names a directory or if running on a case- insensitive filesystem and yet the HEAD has two entries that both match the path), then this returns GIT_EAMBIGUOUS because it cannot give correct results.

\n\n

This does not do any sort of rename detection. Renames require a set of targets and because of the path filtering, there is not enough information to check renames correctly. To check file status with rename detection, there is no choice but to do a full git_status_list_new and scan through looking for the path that you are interested in.

\n", + "group": "status", + "examples": { "add.c": ["ex/v1.8.4/add.html#git_status_file-6"] } + }, + "git_status_list_new": { + "type": "function", + "file": "git2/status.h", + "line": 391, + "lineto": 394, + "args": [ + { + "name": "out", + "type": "git_status_list **", + "comment": "Pointer to store the status results in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository object" + }, + { + "name": "opts", + "type": "const git_status_options *", + "comment": "Status options structure" + } + ], + "argline": "git_status_list **out, git_repository *repo, const git_status_options *opts", + "sig": "git_status_list **::git_repository *::const git_status_options *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Gather file status information and populate the git_status_list.

\n", + "comments": "

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.8.4/status.html#git_status_list_new-8", + "ex/v1.8.4/status.html#git_status_list_new-9" + ] + } + }, + "git_status_list_entrycount": { + "type": "function", + "file": "git2/status.h", + "line": 405, + "lineto": 406, + "args": [ + { + "name": "statuslist", + "type": "git_status_list *", + "comment": "Existing status list object" + } + ], + "argline": "git_status_list *statuslist", + "sig": "git_status_list *", + "return": { + "type": "size_t", + "comment": " the number of status entries" + }, + "description": "

Gets the count of status entries in this list.

\n", + "comments": "

If there are no changes in status (at least according the options given when the status list was created), this can return 0.

\n", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.8.4/status.html#git_status_list_entrycount-10", + "ex/v1.8.4/status.html#git_status_list_entrycount-11" + ] + } + }, + "git_status_byindex": { + "type": "function", + "file": "git2/status.h", + "line": 417, + "lineto": 419, + "args": [ + { + "name": "statuslist", + "type": "git_status_list *", + "comment": "Existing status list object" + }, + { "name": "idx", "type": "size_t", "comment": "Position of the entry" } + ], + "argline": "git_status_list *statuslist, size_t idx", + "sig": "git_status_list *::size_t", + "return": { + "type": "const git_status_entry *", + "comment": " Pointer to the entry; NULL if out of bounds" + }, + "description": "

Get a pointer to one of the entries in the status list.

\n", + "comments": "

The entry is not modifiable and should not be freed.

\n", + "group": "status", + "examples": { + "status.c": [ + "ex/v1.8.4/status.html#git_status_byindex-12", + "ex/v1.8.4/status.html#git_status_byindex-13", + "ex/v1.8.4/status.html#git_status_byindex-14", + "ex/v1.8.4/status.html#git_status_byindex-15", + "ex/v1.8.4/status.html#git_status_byindex-16", + "ex/v1.8.4/status.html#git_status_byindex-17" + ] + } + }, + "git_status_list_free": { + "type": "function", + "file": "git2/status.h", + "line": 426, + "lineto": 427, + "args": [ + { + "name": "statuslist", + "type": "git_status_list *", + "comment": "Existing status list object" + } + ], + "argline": "git_status_list *statuslist", + "sig": "git_status_list *", + "return": { "type": "void", "comment": null }, + "description": "

Free an existing status list

\n", + "comments": "", + "group": "status", + "examples": { + "status.c": ["ex/v1.8.4/status.html#git_status_list_free-18"] + } + }, + "git_status_should_ignore": { + "type": "function", + "file": "git2/status.h", + "line": 445, + "lineto": 448, + "args": [ + { + "name": "ignored", + "type": "int *", + "comment": "Boolean returning 0 if the file is not ignored, 1 if it is" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "A repository object" + }, + { + "name": "path", + "type": "const char *", + "comment": "The file to check ignores for, rooted at the repo's workdir." + } + ], + "argline": "int *ignored, git_repository *repo, const char *path", + "sig": "int *::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 if ignore rules could be processed for the file (regardless\n of whether it exists or not), or an error \n<\n 0 if they could not." + }, + "description": "

Test if the ignore rules apply to a given file.

\n", + "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git add ." on the directory containing the file, would it be added or not?

\n", + "group": "status" + }, + "git_strarray_dispose": { + "type": "function", + "file": "git2/strarray.h", + "line": 37, + "lineto": 37, + "args": [ + { + "name": "array", + "type": "git_strarray *", + "comment": "The git_strarray that contains strings to free" + } + ], + "argline": "git_strarray *array", + "sig": "git_strarray *", + "return": { "type": "void", "comment": null }, + "description": "

Free the strings contained in a string array. This method should\n be called on git_strarray objects that were provided by the\n library. Not doing so, will result in a memory leak.

\n", + "comments": "

This does not free the git_strarray itself, since the library will never allocate that object directly itself.

\n", + "group": "strarray", + "examples": { + "checkout.c": ["ex/v1.8.4/checkout.html#git_strarray_dispose-26"], + "general.c": ["ex/v1.8.4/general.html#git_strarray_dispose-74"], + "remote.c": [ + "ex/v1.8.4/remote.html#git_strarray_dispose-11", + "ex/v1.8.4/remote.html#git_strarray_dispose-12" + ], + "tag.c": ["ex/v1.8.4/tag.html#git_strarray_dispose-15"] + } + }, + "git_submodule_update_options_init": { + "type": "function", + "file": "git2/submodule.h", + "line": 171, + "lineto": 172, + "args": [ + { + "name": "opts", + "type": "git_submodule_update_options *", + "comment": "The `git_submodule_update_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_SUBMODULE_UPDATE_OPTIONS_VERSION`." + } + ], + "argline": "git_submodule_update_options *opts, unsigned int version", + "sig": "git_submodule_update_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_submodule_update_options structure

\n", + "comments": "

Initializes a git_submodule_update_options with default values. Equivalent to creating an instance with GIT_SUBMODULE_UPDATE_OPTIONS_INIT.

\n", + "group": "submodule" + }, + "git_submodule_update": { + "type": "function", + "file": "git2/submodule.h", + "line": 192, + "lineto": 192, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Submodule object" + }, + { + "name": "init", + "type": "int", + "comment": "If the submodule is not initialized, setting this flag to true\n will initialize the submodule before updating. Otherwise, this will\n return an error if attempting to update an uninitialized repository.\n but setting this to true forces them to be updated." + }, + { + "name": "options", + "type": "git_submodule_update_options *", + "comment": "configuration options for the update. If NULL, the\n function works as though GIT_SUBMODULE_UPDATE_OPTIONS_INIT was passed." + } + ], + "argline": "git_submodule *submodule, int init, git_submodule_update_options *options", + "sig": "git_submodule *::int::git_submodule_update_options *", + "return": { + "type": "int", + "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)." + }, + "description": "

Update a submodule. This will clone a missing submodule and\n checkout the subrepository to the commit specified in the index of\n the containing repository. If the submodule repository doesn't contain\n the target commit (e.g. because fetchRecurseSubmodules isn't set), then\n the submodule is fetched using the fetch options supplied in options.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_lookup": { + "type": "function", + "file": "git2/submodule.h", + "line": 221, + "lineto": 224, + "args": [ + { + "name": "out", + "type": "git_submodule **", + "comment": "Output ptr to submodule; pass NULL to just get return code" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The parent repository" + }, + { + "name": "name", + "type": "const char *", + "comment": "The name of or path to the submodule; trailing slashes okay" + } + ], + "argline": "git_submodule **out, git_repository *repo, const char *name", + "sig": "git_submodule **::git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if submodule does not exist,\n GIT_EEXISTS if a repository is found in working directory only,\n -1 on other errors." + }, + "description": "

Lookup submodule information by name or path.

\n", + "comments": "

Given either the submodule name or path (they are usually the same), this returns a structure describing the submodule.

\n\n

There are two expected error scenarios:

\n\n
    \n
  • The submodule is not mentioned in the HEAD, the index, and the config, but does "exist" in the working directory (i.e. there is a subdirectory that appears to be a Git repository). In this case, this function returns GIT_EEXISTS to indicate a sub-repository exists but not in a state where a git_submodule can be instantiated. - The submodule is not mentioned in the HEAD, index, or config and the working directory doesn't contain a value git repo at that path. There may or may not be anything else at that path, but nothing that looks like a submodule. In this case, this returns GIT_ENOTFOUND.
  • \n
\n\n

You must call git_submodule_free when done with the submodule.

\n", + "group": "submodule" + }, + "git_submodule_dup": { + "type": "function", + "file": "git2/submodule.h", + "line": 234, + "lineto": 234, + "args": [ + { + "name": "out", + "type": "git_submodule **", + "comment": "Pointer to store the copy of the submodule." + }, + { + "name": "source", + "type": "git_submodule *", + "comment": "Original submodule to copy." + } + ], + "argline": "git_submodule **out, git_submodule *source", + "sig": "git_submodule **::git_submodule *", + "return": { "type": "int", "comment": " 0" }, + "description": "

Create an in-memory copy of a submodule. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_free": { + "type": "function", + "file": "git2/submodule.h", + "line": 241, + "lineto": 241, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { "type": "void", "comment": null }, + "description": "

Release a submodule

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_foreach": { + "type": "function", + "file": "git2/submodule.h", + "line": 261, + "lineto": 264, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository" + }, + { + "name": "callback", + "type": "git_submodule_cb", + "comment": "Function to be called with the name of each submodule.\n Return a non-zero value to terminate the iteration." + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra data to pass to callback" + } + ], + "argline": "git_repository *repo, git_submodule_cb callback, void *payload", + "sig": "git_repository *::git_submodule_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on error, or non-zero return value of callback" + }, + "description": "

Iterate over all tracked submodules of a repository.

\n", + "comments": "

See the note on git_submodule above. This iterates over the tracked submodules as described therein.

\n\n

If you are concerned about items in the working directory that look like submodules but are not tracked, the diff API will generate a diff record for workdir items that look like submodules but are not tracked, showing them as added in the workdir. Also, the status API will treat the entire subdirectory of a contained git repo as a single GIT_STATUS_WT_NEW item.

\n", + "group": "submodule", + "examples": { + "status.c": ["ex/v1.8.4/status.html#git_submodule_foreach-19"] + } + }, + "git_submodule_add_setup": { + "type": "function", + "file": "git2/submodule.h", + "line": 292, + "lineto": 297, + "args": [ + { + "name": "out", + "type": "git_submodule **", + "comment": "The newly created submodule ready to open for clone" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository in which you want to create the submodule" + }, + { + "name": "url", + "type": "const char *", + "comment": "URL for the submodule's remote" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path at which the submodule should be created" + }, + { + "name": "use_gitlink", + "type": "int", + "comment": "Should workdir contain a gitlink to the repo in\n .git/modules vs. repo directly in workdir." + } + ], + "argline": "git_submodule **out, git_repository *repo, const char *url, const char *path, int use_gitlink", + "sig": "git_submodule **::git_repository *::const char *::const char *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EEXISTS if submodule already exists,\n -1 on other errors." + }, + "description": "

Set up a new git submodule for checkout.

\n", + "comments": "

This does "git submodule add" up to the fetch and checkout of the submodule contents. It preps a new submodule, creates an entry in .gitmodules and creates an empty initialized repository either at the given path in the working directory or in .git/modules with a gitlink from the working directory to the new repo.

\n\n

To fully emulate "git submodule add" call this function, then open the submodule repo and perform the clone step as needed (if you don't need anything custom see git_submodule_add_clone()). Lastly, call git_submodule_add_finalize() to wrap up adding the new submodule and .gitmodules to the index to be ready to commit.

\n\n

You must call git_submodule_free on the submodule object when done.

\n", + "group": "submodule" + }, + "git_submodule_clone": { + "type": "function", + "file": "git2/submodule.h", + "line": 310, + "lineto": 313, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "The newly created repository object. Optional." + }, + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule currently waiting for its clone." + }, + { + "name": "opts", + "type": "const git_submodule_update_options *", + "comment": "The options to use." + } + ], + "argline": "git_repository **out, git_submodule *submodule, const git_submodule_update_options *opts", + "sig": "git_repository **::git_submodule *::const git_submodule_update_options *", + "return": { + "type": "int", + "comment": " 0 on success, -1 on other errors (see git_clone)." + }, + "description": "

Perform the clone step for a newly created submodule.

\n", + "comments": "

This performs the necessary git_clone to setup a newly-created submodule.

\n", + "group": "submodule" + }, + "git_submodule_add_finalize": { + "type": "function", + "file": "git2/submodule.h", + "line": 326, + "lineto": 326, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to finish adding." + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Resolve the setup of a new git submodule.

\n", + "comments": "

This should be called on a submodule once you have called add setup and done the clone of the submodule. This adds the .gitmodules file and the newly cloned submodule to the index to be ready to be committed (but doesn't actually do the commit).

\n", + "group": "submodule" + }, + "git_submodule_add_to_index": { + "type": "function", + "file": "git2/submodule.h", + "line": 338, + "lineto": 340, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to add to the index" + }, + { + "name": "write_index", + "type": "int", + "comment": "Boolean if this should immediately write the index\n file. If you pass this as false, you will have to get the\n git_index and explicitly call `git_index_write()` on it to\n save the change." + } + ], + "argline": "git_submodule *submodule, int write_index", + "sig": "git_submodule *::int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Add current submodule HEAD commit to index of superproject.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_owner": { + "type": "function", + "file": "git2/submodule.h", + "line": 353, + "lineto": 353, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "git_repository *", + "comment": " Pointer to `git_repository`" + }, + "description": "

Get the containing repository for a submodule.

\n", + "comments": "

This returns a pointer to the repository that contains the submodule. This is a just a reference to the repository that was passed to the original git_submodule_lookup() call, so if that repository has been freed, then this may be a dangling reference.

\n", + "group": "submodule" + }, + "git_submodule_name": { + "type": "function", + "file": "git2/submodule.h", + "line": 361, + "lineto": 361, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const char *", + "comment": " Pointer to the submodule name" + }, + "description": "

Get the name of submodule.

\n", + "comments": "", + "group": "submodule", + "examples": { + "status.c": ["ex/v1.8.4/status.html#git_submodule_name-20"] + } + }, + "git_submodule_path": { + "type": "function", + "file": "git2/submodule.h", + "line": 372, + "lineto": 372, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const char *", + "comment": " Pointer to the submodule path" + }, + "description": "

Get the path to the submodule.

\n", + "comments": "

The path is almost always the same as the submodule name, but the two are actually not required to match.

\n", + "group": "submodule", + "examples": { + "status.c": ["ex/v1.8.4/status.html#git_submodule_path-21"] + } + }, + "git_submodule_url": { + "type": "function", + "file": "git2/submodule.h", + "line": 380, + "lineto": 380, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const char *", + "comment": " Pointer to the submodule url" + }, + "description": "

Get the URL for the submodule.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_resolve_url": { + "type": "function", + "file": "git2/submodule.h", + "line": 390, + "lineto": 390, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "buffer to store the absolute submodule url in" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Pointer to repository object" + }, + { "name": "url", "type": "const char *", "comment": "Relative url" } + ], + "argline": "git_buf *out, git_repository *repo, const char *url", + "sig": "git_buf *::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Resolve a submodule url relative to the given repository.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_branch": { + "type": "function", + "file": "git2/submodule.h", + "line": 398, + "lineto": 398, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const char *", + "comment": " Pointer to the submodule branch" + }, + "description": "

Get the branch for the submodule.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_set_branch": { + "type": "function", + "file": "git2/submodule.h", + "line": 411, + "lineto": 411, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the submodule to configure" + }, + { + "name": "branch", + "type": "const char *", + "comment": "Branch that should be used for the submodule" + } + ], + "argline": "git_repository *repo, const char *name, const char *branch", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Set the branch for the submodule in the configuration

\n", + "comments": "

After calling this, you may wish to call git_submodule_sync() to write the changes to the checked out submodule repository.

\n", + "group": "submodule" + }, + "git_submodule_set_url": { + "type": "function", + "file": "git2/submodule.h", + "line": 425, + "lineto": 425, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the submodule to configure" + }, + { + "name": "url", + "type": "const char *", + "comment": "URL that should be used for the submodule" + } + ], + "argline": "git_repository *repo, const char *name, const char *url", + "sig": "git_repository *::const char *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure" + }, + "description": "

Set the URL for the submodule in the configuration

\n", + "comments": "

After calling this, you may wish to call git_submodule_sync() to write the changes to the checked out submodule repository.

\n", + "group": "submodule" + }, + "git_submodule_index_id": { + "type": "function", + "file": "git2/submodule.h", + "line": 433, + "lineto": 433, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const git_oid *", + "comment": " Pointer to git_oid or NULL if submodule is not in index." + }, + "description": "

Get the OID for the submodule in the index.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_head_id": { + "type": "function", + "file": "git2/submodule.h", + "line": 441, + "lineto": 441, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const git_oid *", + "comment": " Pointer to git_oid or NULL if submodule is not in the HEAD." + }, + "description": "

Get the OID for the submodule in the current HEAD tree.

\n", + "comments": "", + "group": "submodule" + }, + "git_submodule_wd_id": { + "type": "function", + "file": "git2/submodule.h", + "line": 454, + "lineto": 454, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Pointer to submodule object" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "const git_oid *", + "comment": " Pointer to git_oid or NULL if submodule is not checked out." + }, + "description": "

Get the OID for the submodule in the current working directory.

\n", + "comments": "

This returns the OID that corresponds to looking up 'HEAD' in the checked out submodule. If there are pending changes in the index or anything else, this won't notice that. You should call git_submodule_status() for a more complete picture about the state of the working directory.

\n", + "group": "submodule" + }, + "git_submodule_ignore": { + "type": "function", + "file": "git2/submodule.h", + "line": 479, + "lineto": 480, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to check" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "git_submodule_ignore_t", + "comment": " The current git_submodule_ignore_t valyue what will be used for\n this submodule." + }, + "description": "

Get the ignore rule that will be used for the submodule.

\n", + "comments": "

These values control the behavior of git_submodule_status() for this submodule. There are four ignore values:

\n\n
    \n
  • GIT_SUBMODULE_IGNORE_NONE will consider any change to the contents of the submodule from a clean checkout to be dirty, including the addition of untracked files. This is the default if unspecified. - GIT_SUBMODULE_IGNORE_UNTRACKED examines the contents of the working tree (i.e. call git_status_foreach() on the submodule) but UNTRACKED files will not count as making the submodule dirty. - GIT_SUBMODULE_IGNORE_DIRTY means to only check if the HEAD of the submodule has moved for status. This is fast since it does not need to scan the working tree of the submodule at all. - GIT_SUBMODULE_IGNORE_ALL means not to open the submodule repo. The working directory will be consider clean so long as there is a checked out version present.
  • \n
\n", + "group": "submodule" + }, + "git_submodule_set_ignore": { + "type": "function", + "file": "git2/submodule.h", + "line": 492, + "lineto": 495, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the submdule" + }, + { + "name": "ignore", + "type": "git_submodule_ignore_t", + "comment": "The new value for the ignore rule" + } + ], + "argline": "git_repository *repo, const char *name, git_submodule_ignore_t ignore", + "sig": "git_repository *::const char *::git_submodule_ignore_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Set the ignore rule for the submodule in the configuration

\n", + "comments": "

This does not affect any currently-loaded instances.

\n", + "group": "submodule" + }, + "git_submodule_update_strategy": { + "type": "function", + "file": "git2/submodule.h", + "line": 507, + "lineto": 508, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to check" + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "git_submodule_update_t", + "comment": " The current git_submodule_update_t value that will be used\n for this submodule." + }, + "description": "

Get the update rule that will be used for the submodule.

\n", + "comments": "

This value controls the behavior of the git submodule update command. There are four useful values documented with git_submodule_update_t.

\n", + "group": "submodule" + }, + "git_submodule_set_update": { + "type": "function", + "file": "git2/submodule.h", + "line": 520, + "lineto": 523, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the name of the submodule to configure" + }, + { + "name": "update", + "type": "git_submodule_update_t", + "comment": "The new value to use" + } + ], + "argline": "git_repository *repo, const char *name, git_submodule_update_t update", + "sig": "git_repository *::const char *::git_submodule_update_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Set the update rule for the submodule in the configuration

\n", + "comments": "

This setting won't affect any existing instances.

\n", + "group": "submodule" + }, + "git_submodule_fetch_recurse_submodules": { + "type": "function", + "file": "git2/submodule.h", + "line": 536, + "lineto": 537, + "args": [ + { "name": "submodule", "type": "git_submodule *", "comment": null } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { + "type": "git_submodule_recurse_t", + "comment": " 0 if fetchRecurseSubmodules is false, 1 if true" + }, + "description": "

Read the fetchRecurseSubmodules rule for a submodule.

\n", + "comments": "

This accesses the submodule..fetchRecurseSubmodules value for the submodule that controls fetching behavior for the submodule.

\n\n

Note that at this time, libgit2 does not honor this setting and the fetch functionality current ignores submodules.

\n", + "group": "submodule" + }, + "git_submodule_set_fetch_recurse_submodules": { + "type": "function", + "file": "git2/submodule.h", + "line": 549, + "lineto": 552, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to affect" + }, + { + "name": "name", + "type": "const char *", + "comment": "the submodule to configure" + }, + { + "name": "fetch_recurse_submodules", + "type": "git_submodule_recurse_t", + "comment": "Boolean value" + } + ], + "argline": "git_repository *repo, const char *name, git_submodule_recurse_t fetch_recurse_submodules", + "sig": "git_repository *::const char *::git_submodule_recurse_t", + "return": { + "type": "int", + "comment": " old value for fetchRecurseSubmodules" + }, + "description": "

Set the fetchRecurseSubmodules rule for a submodule in the configuration

\n", + "comments": "

This setting won't affect any existing instances.

\n", + "group": "submodule" + }, + "git_submodule_init": { + "type": "function", + "file": "git2/submodule.h", + "line": 567, + "lineto": 567, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to write into the superproject config" + }, + { + "name": "overwrite", + "type": "int", + "comment": "By default, existing entries will not be overwritten,\n but setting this to true forces them to be updated." + } + ], + "argline": "git_submodule *submodule, int overwrite", + "sig": "git_submodule *::int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure." + }, + "description": "

Copy submodule info into ".git/config" file.

\n", + "comments": "

Just like "git submodule init", this copies information about the submodule into ".git/config". You can use the accessor functions above to alter the in-memory git_submodule object and control what is written to the config, overriding what is in .gitmodules.

\n", + "group": "submodule" + }, + "git_submodule_repo_init": { + "type": "function", + "file": "git2/submodule.h", + "line": 582, + "lineto": 585, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "Output pointer to the created git repository." + }, + { + "name": "sm", + "type": "const git_submodule *", + "comment": "The submodule to create a new subrepository from." + }, + { + "name": "use_gitlink", + "type": "int", + "comment": "Should the workdir contain a gitlink to\n the repo in .git/modules vs. repo directly in workdir." + } + ], + "argline": "git_repository **out, const git_submodule *sm, int use_gitlink", + "sig": "git_repository **::const git_submodule *::int", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 on failure." + }, + "description": "

Set up the subrepository for a submodule in preparation for clone.

\n", + "comments": "

This function can be called to init and set up a submodule repository from a submodule in preparation to clone it from its remote.

\n", + "group": "submodule" + }, + "git_submodule_sync": { + "type": "function", + "file": "git2/submodule.h", + "line": 598, + "lineto": 598, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to copy." + } + ], + "argline": "git_submodule *submodule", + "sig": "git_submodule *", + "return": { "type": "int", "comment": " 0 or an error code." }, + "description": "

Copy submodule remote info into submodule repo.

\n", + "comments": "

This copies the information about the submodules URL into the checked out submodule config, acting like "git submodule sync". This is useful if you have altered the URL for the submodule (or it has been altered by a fetch of upstream changes) and you need to update your local repo.

\n", + "group": "submodule" + }, + "git_submodule_open": { + "type": "function", + "file": "git2/submodule.h", + "line": 612, + "lineto": 614, + "args": [ + { + "name": "repo", + "type": "git_repository **", + "comment": "Pointer to the submodule repo which was opened" + }, + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Submodule to be opened" + } + ], + "argline": "git_repository **repo, git_submodule *submodule", + "sig": "git_repository **::git_submodule *", + "return": { + "type": "int", + "comment": " 0 on success, \n<\n0 if submodule repo could not be opened." + }, + "description": "

Open the repository for a submodule.

\n", + "comments": "

This is a newly opened repository object. The caller is responsible for calling git_repository_free() on it when done. Multiple calls to this function will return distinct git_repository objects. This will only work if the submodule is checked out into the working directory.

\n", + "group": "submodule" + }, + "git_submodule_reload": { + "type": "function", + "file": "git2/submodule.h", + "line": 626, + "lineto": 626, + "args": [ + { + "name": "submodule", + "type": "git_submodule *", + "comment": "The submodule to reload" + }, + { + "name": "force", + "type": "int", + "comment": "Force reload even if the data doesn't seem out of date" + } + ], + "argline": "git_submodule *submodule, int force", + "sig": "git_submodule *::int", + "return": { "type": "int", "comment": " 0 on success, \n<\n0 on error" }, + "description": "

Reread submodule info from config, index, and HEAD.

\n", + "comments": "

Call this to reread cached submodule information for this submodule if you have reason to believe that it has changed.

\n", + "group": "submodule" + }, + "git_submodule_status": { + "type": "function", + "file": "git2/submodule.h", + "line": 642, + "lineto": 646, + "args": [ + { + "name": "status", + "type": "unsigned int *", + "comment": "Combination of `GIT_SUBMODULE_STATUS` flags" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to look" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the submodule" + }, + { + "name": "ignore", + "type": "git_submodule_ignore_t", + "comment": "the ignore rules to follow" + } + ], + "argline": "unsigned int *status, git_repository *repo, const char *name, git_submodule_ignore_t ignore", + "sig": "unsigned int *::git_repository *::const char *::git_submodule_ignore_t", + "return": { "type": "int", "comment": " 0 on success, \n<\n0 on error" }, + "description": "

Get the status for a submodule.

\n", + "comments": "

This looks at a submodule and tries to determine the status. It will return a combination of the GIT_SUBMODULE_STATUS values above. How deeply it examines the working directory to do this will depend on the git_submodule_ignore_t value for the submodule.

\n", + "group": "submodule", + "examples": { + "status.c": ["ex/v1.8.4/status.html#git_submodule_status-22"] + } + }, + "git_submodule_location": { + "type": "function", + "file": "git2/submodule.h", + "line": 662, + "lineto": 664, + "args": [ + { + "name": "location_status", + "type": "unsigned int *", + "comment": "Combination of first four `GIT_SUBMODULE_STATUS` flags" + }, + { + "name": "submodule", + "type": "git_submodule *", + "comment": "Submodule for which to get status" + } + ], + "argline": "unsigned int *location_status, git_submodule *submodule", + "sig": "unsigned int *::git_submodule *", + "return": { "type": "int", "comment": " 0 on success, \n<\n0 on error" }, + "description": "

Get the locations of submodule information.

\n", + "comments": "

This is a bit like a very lightweight version of git_submodule_status. It just returns a made of the first four submodule status values (i.e. the ones like GIT_SUBMODULE_STATUS_IN_HEAD, etc) that tell you where the submodule data comes from (i.e. the HEAD commit, gitmodules file, etc.). This can be useful if you want to know if the submodule is present in the working directory at this point in time, etc.

\n", + "group": "submodule" + }, + "git_tag_lookup": { + "type": "function", + "file": "git2/tag.h", + "line": 33, + "lineto": 34, + "args": [ + { + "name": "out", + "type": "git_tag **", + "comment": "pointer to the looked up tag" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the tag." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the tag to locate." + } + ], + "argline": "git_tag **out, git_repository *repo, const git_oid *id", + "sig": "git_tag **::git_repository *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a tag object from the repository.

\n", + "comments": "", + "group": "tag", + "examples": { "general.c": ["ex/v1.8.4/general.html#git_tag_lookup-75"] } + }, + "git_tag_lookup_prefix": { + "type": "function", + "file": "git2/tag.h", + "line": 48, + "lineto": 49, + "args": [ + { + "name": "out", + "type": "git_tag **", + "comment": "pointer to the looked up tag" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the tag." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the tag to locate." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + } + ], + "argline": "git_tag **out, git_repository *repo, const git_oid *id, size_t len", + "sig": "git_tag **::git_repository *::const git_oid *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a tag object from the repository,\n given a prefix of its identifier (short id).

\n", + "comments": "", + "group": "tag" + }, + "git_tag_free": { + "type": "function", + "file": "git2/tag.h", + "line": 61, + "lineto": 61, + "args": [ + { "name": "tag", "type": "git_tag *", "comment": "the tag to close" } + ], + "argline": "git_tag *tag", + "sig": "git_tag *", + "return": { "type": "void", "comment": null }, + "description": "

Close an open tag

\n", + "comments": "

You can no longer use the git_tag pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you are through with a tag to release memory. Failure to do so will cause a memory leak.

\n", + "group": "tag", + "examples": { "general.c": ["ex/v1.8.4/general.html#git_tag_free-76"] } + }, + "git_tag_id": { + "type": "function", + "file": "git2/tag.h", + "line": 69, + "lineto": 69, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "const git_oid *", + "comment": " object identity for the tag." + }, + "description": "

Get the id of a tag.

\n", + "comments": "", + "group": "tag" + }, + "git_tag_owner": { + "type": "function", + "file": "git2/tag.h", + "line": 77, + "lineto": 77, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "A previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "git_repository *", + "comment": " Repository that contains this tag." + }, + "description": "

Get the repository that contains the tag.

\n", + "comments": "", + "group": "tag" + }, + "git_tag_target": { + "type": "function", + "file": "git2/tag.h", + "line": 89, + "lineto": 89, + "args": [ + { + "name": "target_out", + "type": "git_object **", + "comment": "pointer where to store the target" + }, + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "git_object **target_out, const git_tag *tag", + "sig": "git_object **::const git_tag *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Get the tagged object of a tag

\n", + "comments": "

This method performs a repository lookup for the given object and returns it

\n", + "group": "tag", + "examples": { "general.c": ["ex/v1.8.4/general.html#git_tag_target-77"] } + }, + "git_tag_target_id": { + "type": "function", + "file": "git2/tag.h", + "line": 97, + "lineto": 97, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { "type": "const git_oid *", "comment": " pointer to the OID" }, + "description": "

Get the OID of the tagged object of a tag

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tag_target_id-31"] + } + }, + "git_tag_target_type": { + "type": "function", + "file": "git2/tag.h", + "line": 105, + "lineto": 105, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "git_object_t", + "comment": " type of the tagged object" + }, + "description": "

Get the type of a tag's tagged object

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tag_target_type-32"], + "general.c": ["ex/v1.8.4/general.html#git_tag_target_type-78"] + } + }, + "git_tag_name": { + "type": "function", + "file": "git2/tag.h", + "line": 113, + "lineto": 113, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { "type": "const char *", "comment": " name of the tag" }, + "description": "

Get the name of a tag

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tag_name-33"], + "general.c": ["ex/v1.8.4/general.html#git_tag_name-79"], + "tag.c": ["ex/v1.8.4/tag.html#git_tag_name-16"] + } + }, + "git_tag_tagger": { + "type": "function", + "file": "git2/tag.h", + "line": 121, + "lineto": 121, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "const git_signature *", + "comment": " reference to the tag's author or NULL when unspecified" + }, + "description": "

Get the tagger (author) of a tag

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tag_tagger-34"] + } + }, + "git_tag_message": { + "type": "function", + "file": "git2/tag.h", + "line": 129, + "lineto": 129, + "args": [ + { + "name": "tag", + "type": "const git_tag *", + "comment": "a previously loaded tag." + } + ], + "argline": "const git_tag *tag", + "sig": "const git_tag *", + "return": { + "type": "const char *", + "comment": " message of the tag or NULL when unspecified" + }, + "description": "

Get the message of a tag

\n", + "comments": "", + "group": "tag", + "examples": { + "cat-file.c": [ + "ex/v1.8.4/cat-file.html#git_tag_message-35", + "ex/v1.8.4/cat-file.html#git_tag_message-36" + ], + "general.c": ["ex/v1.8.4/general.html#git_tag_message-80"], + "tag.c": ["ex/v1.8.4/tag.html#git_tag_message-17"] + } + }, + "git_tag_create": { + "type": "function", + "file": "git2/tag.h", + "line": 171, + "lineto": 178, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the\n newly created tag. If the tag already exists, this parameter\n will be the oid of the existing tag, and the function will\n return a GIT_EEXISTS error code." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the tag" + }, + { + "name": "tag_name", + "type": "const char *", + "comment": "Name for the tag; this name is validated\n for consistency. It should also not conflict with an\n already existing tag name" + }, + { + "name": "target", + "type": "const git_object *", + "comment": "Object to which this tag points. This object\n must belong to the given `repo`." + }, + { + "name": "tagger", + "type": "const git_signature *", + "comment": "Signature of the tagger for this tag, and\n of the tagging time" + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this tag" + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + } + ], + "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, const git_signature *tagger, const char *message, int force", + "sig": "git_oid *::git_repository *::const char *::const git_object *::const git_signature *::const char *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code\n\tA tag object is written to the ODB, and a proper reference\n\tis written in the /refs/tags folder, pointing to it" + }, + "description": "

Create a new tag in the repository from an object

\n", + "comments": "

A new reference will also be created pointing to this tag object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n\n

The tag name will be checked for validity. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.

\n", + "group": "tag", + "examples": { "tag.c": ["ex/v1.8.4/tag.html#git_tag_create-18"] } + }, + "git_tag_annotation_create": { + "type": "function", + "file": "git2/tag.h", + "line": 203, + "lineto": 209, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the\n newly created tag" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the tag" + }, + { + "name": "tag_name", + "type": "const char *", + "comment": "Name for the tag" + }, + { + "name": "target", + "type": "const git_object *", + "comment": "Object to which this tag points. This object\n must belong to the given `repo`." + }, + { + "name": "tagger", + "type": "const git_signature *", + "comment": "Signature of the tagger for this tag, and\n of the tagging time" + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this tag" + } + ], + "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, const git_signature *tagger, const char *message", + "sig": "git_oid *::git_repository *::const char *::const git_object *::const git_signature *::const char *", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Create a new tag in the object database pointing to a git_object

\n", + "comments": "

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n", + "group": "tag" + }, + "git_tag_create_from_buffer": { + "type": "function", + "file": "git2/tag.h", + "line": 220, + "lineto": 224, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the newly created tag" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the tag" + }, + { "name": "buffer", "type": "const char *", "comment": "Raw tag data" }, + { "name": "force", "type": "int", "comment": "Overwrite existing tags" } + ], + "argline": "git_oid *oid, git_repository *repo, const char *buffer, int force", + "sig": "git_oid *::git_repository *::const char *::int", + "return": { + "type": "int", + "comment": " 0 on success; error code otherwise" + }, + "description": "

Create a new tag in the repository from a buffer

\n", + "comments": "", + "group": "tag" + }, + "git_tag_create_lightweight": { + "type": "function", + "file": "git2/tag.h", + "line": 256, + "lineto": 261, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "Pointer where to store the OID of the provided\n target object. If the tag already exists, this parameter\n will be filled with the oid of the existing pointed object\n and the function will return a GIT_EEXISTS error code." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to store the lightweight tag" + }, + { + "name": "tag_name", + "type": "const char *", + "comment": "Name for the tag; this name is validated\n for consistency. It should also not conflict with an\n already existing tag name" + }, + { + "name": "target", + "type": "const git_object *", + "comment": "Object to which this tag points. This object\n must belong to the given `repo`." + }, + { + "name": "force", + "type": "int", + "comment": "Overwrite existing references" + } + ], + "argline": "git_oid *oid, git_repository *repo, const char *tag_name, const git_object *target, int force", + "sig": "git_oid *::git_repository *::const char *::const git_object *::int", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code\n\tA proper reference is written in the /refs/tags folder,\n pointing to the provided target object" + }, + "description": "

Create a new lightweight tag pointing at a target object

\n", + "comments": "

A new direct reference will be created pointing to this target object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", + "group": "tag", + "examples": { + "tag.c": ["ex/v1.8.4/tag.html#git_tag_create_lightweight-19"] + } + }, + "git_tag_delete": { + "type": "function", + "file": "git2/tag.h", + "line": 276, + "lineto": 278, + "args": [ + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where lives the tag" + }, + { + "name": "tag_name", + "type": "const char *", + "comment": "Name of the tag to be deleted;\n this name is validated for consistency." + } + ], + "argline": "git_repository *repo, const char *tag_name", + "sig": "git_repository *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EINVALIDSPEC or an error code" + }, + "description": "

Delete an existing tag reference.

\n", + "comments": "

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", + "group": "tag", + "examples": { "tag.c": ["ex/v1.8.4/tag.html#git_tag_delete-20"] } + }, + "git_tag_list": { + "type": "function", + "file": "git2/tag.h", + "line": 293, + "lineto": 295, + "args": [ + { + "name": "tag_names", + "type": "git_strarray *", + "comment": "Pointer to a git_strarray structure where\n\t\tthe tag names will be stored" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the tags" + } + ], + "argline": "git_strarray *tag_names, git_repository *repo", + "sig": "git_strarray *::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Fill a list with all the tags in the Repository

\n", + "comments": "

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", + "group": "tag" + }, + "git_tag_list_match": { + "type": "function", + "file": "git2/tag.h", + "line": 315, + "lineto": 318, + "args": [ + { + "name": "tag_names", + "type": "git_strarray *", + "comment": "Pointer to a git_strarray structure where\n\t\tthe tag names will be stored" + }, + { + "name": "pattern", + "type": "const char *", + "comment": "Standard fnmatch pattern" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to find the tags" + } + ], + "argline": "git_strarray *tag_names, const char *pattern, git_repository *repo", + "sig": "git_strarray *::const char *::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Fill a list with all the tags in the Repository\n which name match a defined pattern

\n", + "comments": "

If an empty pattern is provided, all the tags will be returned.

\n\n

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", + "group": "tag", + "examples": { "tag.c": ["ex/v1.8.4/tag.html#git_tag_list_match-21"] } + }, + "git_tag_foreach": { + "type": "function", + "file": "git2/tag.h", + "line": 339, + "lineto": 342, + "args": [ + { "name": "repo", "type": "git_repository *", "comment": "Repository" }, + { + "name": "callback", + "type": "git_tag_foreach_cb", + "comment": "Callback function" + }, + { + "name": "payload", + "type": "void *", + "comment": "Pointer to callback data (optional)" + } + ], + "argline": "git_repository *repo, git_tag_foreach_cb callback, void *payload", + "sig": "git_repository *::git_tag_foreach_cb::void *", + "return": { "type": "int", "comment": null }, + "description": "

Call callback `cb' for each tag in the repository

\n", + "comments": "", + "group": "tag" + }, + "git_tag_peel": { + "type": "function", + "file": "git2/tag.h", + "line": 355, + "lineto": 357, + "args": [ + { + "name": "tag_target_out", + "type": "git_object **", + "comment": "Pointer to the peeled git_object" + }, + { + "name": "tag", + "type": "const git_tag *", + "comment": "The tag to be processed" + } + ], + "argline": "git_object **tag_target_out, const git_tag *tag", + "sig": "git_object **::const git_tag *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Recursively peel a tag until a non tag git_object is found

\n", + "comments": "

The retrieved tag_target object is owned by the repository and should be closed with the git_object_free method.

\n", + "group": "tag" + }, + "git_tag_dup": { + "type": "function", + "file": "git2/tag.h", + "line": 367, + "lineto": 367, + "args": [ + { + "name": "out", + "type": "git_tag **", + "comment": "Pointer to store the copy of the tag" + }, + { + "name": "source", + "type": "git_tag *", + "comment": "Original tag to copy" + } + ], + "argline": "git_tag **out, git_tag *source", + "sig": "git_tag **::git_tag *", + "return": { "type": "int", "comment": " 0" }, + "description": "

Create an in-memory copy of a tag. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "tag" + }, + "git_tag_name_is_valid": { + "type": "function", + "file": "git2/tag.h", + "line": 379, + "lineto": 379, + "args": [ + { + "name": "valid", + "type": "int *", + "comment": "output pointer to set with validity of given tag name" + }, + { + "name": "name", + "type": "const char *", + "comment": "a tag name to test" + } + ], + "argline": "int *valid, const char *name", + "sig": "int *::const char *", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Determine whether a tag name is valid, meaning that (when prefixed\n with refs/tags/) that it is a valid reference name, and that any\n additional tag name restrictions are imposed (eg, it cannot start\n with a -).

\n", + "comments": "", + "group": "tag" + }, + "git_trace_set": { + "type": "function", + "file": "git2/trace.h", + "line": 63, + "lineto": 63, + "args": [ + { + "name": "level", + "type": "git_trace_level_t", + "comment": "Level to set tracing to" + }, + { + "name": "cb", + "type": "git_trace_cb", + "comment": "Function to call with trace data" + } + ], + "argline": "git_trace_level_t level, git_trace_cb cb", + "sig": "git_trace_level_t::git_trace_cb", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Sets the system tracing configuration to the specified level with the\n specified callback. When system events occur at a level equal to, or\n lower than, the given level they will be reported to the given callback.

\n", + "comments": "", + "group": "trace" + }, + "git_transaction_new": { + "type": "function", + "file": "git2/transaction.h", + "line": 32, + "lineto": 32, + "args": [ + { + "name": "out", + "type": "git_transaction **", + "comment": "the resulting transaction" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to lock" + } + ], + "argline": "git_transaction **out, git_repository *repo", + "sig": "git_transaction **::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a new transaction object

\n", + "comments": "

This does not lock anything, but sets up the transaction object to know from which repository to lock.

\n", + "group": "transaction" + }, + "git_transaction_lock_ref": { + "type": "function", + "file": "git2/transaction.h", + "line": 44, + "lineto": 44, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference to lock" + } + ], + "argline": "git_transaction *tx, const char *refname", + "sig": "git_transaction *::const char *", + "return": { "type": "int", "comment": " 0 or an error message" }, + "description": "

Lock a reference

\n", + "comments": "

Lock the specified reference. This is the first step to updating a reference.

\n", + "group": "transaction" + }, + "git_transaction_set_target": { + "type": "function", + "file": "git2/transaction.h", + "line": 59, + "lineto": 59, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "reference to update" + }, + { + "name": "target", + "type": "const git_oid *", + "comment": "target to set the reference to" + }, + { + "name": "sig", + "type": "const git_signature *", + "comment": "signature to use in the reflog; pass NULL to read the identity from the config" + }, + { + "name": "msg", + "type": "const char *", + "comment": "message to use in the reflog" + } + ], + "argline": "git_transaction *tx, const char *refname, const git_oid *target, const git_signature *sig, const char *msg", + "sig": "git_transaction *::const char *::const git_oid *::const git_signature *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" + }, + "description": "

Set the target of a reference

\n", + "comments": "

Set the target of the specified reference. This reference must be locked.

\n", + "group": "transaction" + }, + "git_transaction_set_symbolic_target": { + "type": "function", + "file": "git2/transaction.h", + "line": 74, + "lineto": 74, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "reference to update" + }, + { + "name": "target", + "type": "const char *", + "comment": "target to set the reference to" + }, + { + "name": "sig", + "type": "const git_signature *", + "comment": "signature to use in the reflog; pass NULL to read the identity from the config" + }, + { + "name": "msg", + "type": "const char *", + "comment": "message to use in the reflog" + } + ], + "argline": "git_transaction *tx, const char *refname, const char *target, const git_signature *sig, const char *msg", + "sig": "git_transaction *::const char *::const char *::const git_signature *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" + }, + "description": "

Set the target of a reference

\n", + "comments": "

Set the target of the specified reference. This reference must be locked.

\n", + "group": "transaction" + }, + "git_transaction_set_reflog": { + "type": "function", + "file": "git2/transaction.h", + "line": 87, + "lineto": 87, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference whose reflog to set" + }, + { + "name": "reflog", + "type": "const git_reflog *", + "comment": "the reflog as it should be written out" + } + ], + "argline": "git_transaction *tx, const char *refname, const git_reflog *reflog", + "sig": "git_transaction *::const char *::const git_reflog *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" + }, + "description": "

Set the reflog of a reference

\n", + "comments": "

Set the specified reference's reflog. If this is combined with setting the target, that update won't be written to the reflog.

\n", + "group": "transaction" + }, + "git_transaction_remove": { + "type": "function", + "file": "git2/transaction.h", + "line": 96, + "lineto": 96, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the reference to remove" + } + ], + "argline": "git_transaction *tx, const char *refname", + "sig": "git_transaction *::const char *", + "return": { + "type": "int", + "comment": " 0, GIT_ENOTFOUND if the reference is not among the locked ones, or an error code" + }, + "description": "

Remove a reference

\n", + "comments": "", + "group": "transaction" + }, + "git_transaction_commit": { + "type": "function", + "file": "git2/transaction.h", + "line": 107, + "lineto": 107, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + } + ], + "argline": "git_transaction *tx", + "sig": "git_transaction *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Commit the changes from the transaction

\n", + "comments": "

Perform the changes that have been queued. The updates will be made one by one, and the first failure will stop the processing.

\n", + "group": "transaction" + }, + "git_transaction_free": { + "type": "function", + "file": "git2/transaction.h", + "line": 117, + "lineto": 117, + "args": [ + { + "name": "tx", + "type": "git_transaction *", + "comment": "the transaction" + } + ], + "argline": "git_transaction *tx", + "sig": "git_transaction *", + "return": { "type": "void", "comment": null }, + "description": "

Free the resources allocated by this transaction

\n", + "comments": "

If any references remain locked, they will be unlocked without any changes made to them.

\n", + "group": "transaction" + }, + "git_tree_lookup": { + "type": "function", + "file": "git2/tree.h", + "line": 32, + "lineto": 33, + "args": [ + { + "name": "out", + "type": "git_tree **", + "comment": "Pointer to the looked up tree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repo to use when locating the tree." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "Identity of the tree to locate." + } + ], + "argline": "git_tree **out, git_repository *repo, const git_oid *id", + "sig": "git_tree **::git_repository *::const git_oid *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a tree object from the repository.

\n", + "comments": "", + "group": "tree", + "examples": { + "commit.c": ["ex/v1.8.4/commit.html#git_tree_lookup-12"], + "general.c": [ + "ex/v1.8.4/general.html#git_tree_lookup-81", + "ex/v1.8.4/general.html#git_tree_lookup-82" + ], + "init.c": ["ex/v1.8.4/init.html#git_tree_lookup-12"], + "merge.c": ["ex/v1.8.4/merge.html#git_tree_lookup-37"] + } + }, + "git_tree_lookup_prefix": { + "type": "function", + "file": "git2/tree.h", + "line": 47, + "lineto": 51, + "args": [ + { + "name": "out", + "type": "git_tree **", + "comment": "pointer to the looked up tree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when locating the tree." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "identity of the tree to locate." + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the short identifier" + } + ], + "argline": "git_tree **out, git_repository *repo, const git_oid *id, size_t len", + "sig": "git_tree **::git_repository *::const git_oid *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a tree object from the repository,\n given a prefix of its identifier (short id).

\n", + "comments": "", + "group": "tree" + }, + "git_tree_free": { + "type": "function", + "file": "git2/tree.h", + "line": 63, + "lineto": 63, + "args": [ + { "name": "tree", "type": "git_tree *", "comment": "The tree to close" } + ], + "argline": "git_tree *tree", + "sig": "git_tree *", + "return": { "type": "void", "comment": null }, + "description": "

Close an open tree

\n", + "comments": "

You can no longer use the git_tree pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you stop using a tree to release memory. Failure to do so will cause a memory leak.

\n", + "group": "tree", + "examples": { + "commit.c": ["ex/v1.8.4/commit.html#git_tree_free-13"], + "diff.c": [ + "ex/v1.8.4/diff.html#git_tree_free-19", + "ex/v1.8.4/diff.html#git_tree_free-20" + ], + "general.c": [ + "ex/v1.8.4/general.html#git_tree_free-83", + "ex/v1.8.4/general.html#git_tree_free-84" + ], + "init.c": ["ex/v1.8.4/init.html#git_tree_free-13"], + "log.c": [ + "ex/v1.8.4/log.html#git_tree_free-55", + "ex/v1.8.4/log.html#git_tree_free-56", + "ex/v1.8.4/log.html#git_tree_free-57", + "ex/v1.8.4/log.html#git_tree_free-58", + "ex/v1.8.4/log.html#git_tree_free-59" + ] + } + }, + "git_tree_id": { + "type": "function", + "file": "git2/tree.h", + "line": 71, + "lineto": 71, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + } + ], + "argline": "const git_tree *tree", + "sig": "const git_tree *", + "return": { + "type": "const git_oid *", + "comment": " object identity for the tree." + }, + "description": "

Get the id of a tree.

\n", + "comments": "", + "group": "tree" + }, + "git_tree_owner": { + "type": "function", + "file": "git2/tree.h", + "line": 79, + "lineto": 79, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "A previously loaded tree." + } + ], + "argline": "const git_tree *tree", + "sig": "const git_tree *", + "return": { + "type": "git_repository *", + "comment": " Repository that contains this tree." + }, + "description": "

Get the repository that contains the tree.

\n", + "comments": "", + "group": "tree" + }, + "git_tree_entrycount": { + "type": "function", + "file": "git2/tree.h", + "line": 87, + "lineto": 87, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + } + ], + "argline": "const git_tree *tree", + "sig": "const git_tree *", + "return": { + "type": "size_t", + "comment": " the number of entries in the tree" + }, + "description": "

Get the number of entries listed in a tree

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entrycount-37"], + "general.c": ["ex/v1.8.4/general.html#git_tree_entrycount-85"] + } + }, + "git_tree_entry_byname": { + "type": "function", + "file": "git2/tree.h", + "line": 99, + "lineto": 100, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + }, + { + "name": "filename", + "type": "const char *", + "comment": "the filename of the desired entry" + } + ], + "argline": "const git_tree *tree, const char *filename", + "sig": "const git_tree *::const char *", + "return": { + "type": "const git_tree_entry *", + "comment": " the tree entry; NULL if not found" + }, + "description": "

Lookup a tree entry by its filename

\n", + "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", + "group": "tree", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_tree_entry_byname-86"] + } + }, + "git_tree_entry_byindex": { + "type": "function", + "file": "git2/tree.h", + "line": 112, + "lineto": 113, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + }, + { + "name": "idx", + "type": "size_t", + "comment": "the position in the entry list" + } + ], + "argline": "const git_tree *tree, size_t idx", + "sig": "const git_tree *::size_t", + "return": { + "type": "const git_tree_entry *", + "comment": " the tree entry; NULL if not found" + }, + "description": "

Lookup a tree entry by its position in the tree

\n", + "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", + "group": "tree", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_byindex-38"], + "general.c": ["ex/v1.8.4/general.html#git_tree_entry_byindex-87"] + } + }, + "git_tree_entry_byid": { + "type": "function", + "file": "git2/tree.h", + "line": 127, + "lineto": 128, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "a previously loaded tree." + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "the sha being looked for" + } + ], + "argline": "const git_tree *tree, const git_oid *id", + "sig": "const git_tree *::const git_oid *", + "return": { + "type": "const git_tree_entry *", + "comment": " the tree entry; NULL if not found" + }, + "description": "

Lookup a tree entry by SHA value.

\n", + "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n\n

Warning: this must examine every entry in the tree, so it is not fast.

\n", + "group": "tree" + }, + "git_tree_entry_bypath": { + "type": "function", + "file": "git2/tree.h", + "line": 142, + "lineto": 145, + "args": [ + { + "name": "out", + "type": "git_tree_entry **", + "comment": "Pointer where to store the tree entry" + }, + { + "name": "root", + "type": "const git_tree *", + "comment": "Previously loaded tree which is the root of the relative path" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to the contained entry" + } + ], + "argline": "git_tree_entry **out, const git_tree *root, const char *path", + "sig": "git_tree_entry **::const git_tree *::const char *", + "return": { + "type": "int", + "comment": " 0 on success; GIT_ENOTFOUND if the path does not exist" + }, + "description": "

Retrieve a tree entry contained in a tree or in any of its subtrees,\n given its relative path.

\n", + "comments": "

Unlike the other lookup functions, the returned tree entry is owned by the user and must be freed explicitly with git_tree_entry_free().

\n", + "group": "tree" + }, + "git_tree_entry_dup": { + "type": "function", + "file": "git2/tree.h", + "line": 157, + "lineto": 157, + "args": [ + { + "name": "dest", + "type": "git_tree_entry **", + "comment": "pointer where to store the copy" + }, + { + "name": "source", + "type": "const git_tree_entry *", + "comment": "tree entry to duplicate" + } + ], + "argline": "git_tree_entry **dest, const git_tree_entry *source", + "sig": "git_tree_entry **::const git_tree_entry *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Duplicate a tree entry

\n", + "comments": "

Create a copy of a tree entry. The returned copy is owned by the user, and must be freed explicitly with git_tree_entry_free().

\n", + "group": "tree" + }, + "git_tree_entry_free": { + "type": "function", + "file": "git2/tree.h", + "line": 168, + "lineto": 168, + "args": [ + { + "name": "entry", + "type": "git_tree_entry *", + "comment": "The entry to free" + } + ], + "argline": "git_tree_entry *entry", + "sig": "git_tree_entry *", + "return": { "type": "void", "comment": null }, + "description": "

Free a user-owned tree entry

\n", + "comments": "

IMPORTANT: This function is only needed for tree entries owned by the user, such as the ones returned by git_tree_entry_dup() or git_tree_entry_bypath().

\n", + "group": "tree" + }, + "git_tree_entry_name": { + "type": "function", + "file": "git2/tree.h", + "line": 176, + "lineto": 176, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { "type": "const char *", "comment": " the name of the file" }, + "description": "

Get the filename of a tree entry

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_name-39"], + "general.c": [ + "ex/v1.8.4/general.html#git_tree_entry_name-88", + "ex/v1.8.4/general.html#git_tree_entry_name-89" + ] + } + }, + "git_tree_entry_id": { + "type": "function", + "file": "git2/tree.h", + "line": 184, + "lineto": 184, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "const git_oid *", + "comment": " the oid of the object" + }, + "description": "

Get the id of the object pointed by the entry

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_id-40"] + } + }, + "git_tree_entry_type": { + "type": "function", + "file": "git2/tree.h", + "line": 192, + "lineto": 192, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "git_object_t", + "comment": " the type of the pointed object" + }, + "description": "

Get the type of the object pointed by the entry

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_type-41"] + } + }, + "git_tree_entry_filemode": { + "type": "function", + "file": "git2/tree.h", + "line": 200, + "lineto": 200, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "git_filemode_t", + "comment": " filemode as an integer" + }, + "description": "

Get the UNIX file attributes of a tree entry

\n", + "comments": "", + "group": "tree", + "examples": { + "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_filemode-42"] + } + }, + "git_tree_entry_filemode_raw": { + "type": "function", + "file": "git2/tree.h", + "line": 212, + "lineto": 212, + "args": [ + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "const git_tree_entry *entry", + "sig": "const git_tree_entry *", + "return": { + "type": "git_filemode_t", + "comment": " filemode as an integer" + }, + "description": "

Get the raw UNIX file attributes of a tree entry

\n", + "comments": "

This function does not perform any normalization and is only useful if you need to be able to recreate the original tree object.

\n", + "group": "tree" + }, + "git_tree_entry_cmp": { + "type": "function", + "file": "git2/tree.h", + "line": 220, + "lineto": 220, + "args": [ + { + "name": "e1", + "type": "const git_tree_entry *", + "comment": "first tree entry" + }, + { + "name": "e2", + "type": "const git_tree_entry *", + "comment": "second tree entry" + } + ], + "argline": "const git_tree_entry *e1, const git_tree_entry *e2", + "sig": "const git_tree_entry *::const git_tree_entry *", + "return": { + "type": "int", + "comment": " \n<\n0 if e1 is before e2, 0 if e1 == e2, >0 if e1 is after e2" + }, + "description": "

Compare two tree entries

\n", + "comments": "", + "group": "tree" + }, + "git_tree_entry_to_object": { + "type": "function", + "file": "git2/tree.h", + "line": 232, + "lineto": 235, + "args": [ + { + "name": "object_out", + "type": "git_object **", + "comment": "pointer to the converted object" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository where to lookup the pointed object" + }, + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "a tree entry" + } + ], + "argline": "git_object **object_out, git_repository *repo, const git_tree_entry *entry", + "sig": "git_object **::git_repository *::const git_tree_entry *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Convert a tree entry to the git_object it points to.

\n", + "comments": "

You must call git_object_free() on the object when you are done with it.

\n", + "group": "tree", + "examples": { + "general.c": ["ex/v1.8.4/general.html#git_tree_entry_to_object-90"] + } + }, + "git_treebuilder_new": { + "type": "function", + "file": "git2/tree.h", + "line": 254, + "lineto": 255, + "args": [ + { + "name": "out", + "type": "git_treebuilder **", + "comment": "Pointer where to store the tree builder" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository in which to store the object" + }, + { + "name": "source", + "type": "const git_tree *", + "comment": "Source tree to initialize the builder (optional)" + } + ], + "argline": "git_treebuilder **out, git_repository *repo, const git_tree *source", + "sig": "git_treebuilder **::git_repository *::const git_tree *", + "return": { + "type": "int", + "comment": " 0 on success; error code otherwise" + }, + "description": "

Create a new tree builder.

\n", + "comments": "

The tree builder can be used to create or modify trees in memory and write them as tree objects to the database.

\n\n

If the source parameter is not NULL, the tree builder will be initialized with the entries of the given tree.

\n\n

If the source parameter is NULL, the tree builder will start with no entries and will have to be filled manually.

\n", + "group": "treebuilder" + }, + "git_treebuilder_clear": { + "type": "function", + "file": "git2/tree.h", + "line": 263, + "lineto": 263, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Builder to clear" + } + ], + "argline": "git_treebuilder *bld", + "sig": "git_treebuilder *", + "return": { + "type": "int", + "comment": " 0 on success; error code otherwise" + }, + "description": "

Clear all the entries in the builder

\n", + "comments": "", + "group": "treebuilder" + }, + "git_treebuilder_entrycount": { + "type": "function", + "file": "git2/tree.h", + "line": 271, + "lineto": 271, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "a previously loaded treebuilder." + } + ], + "argline": "git_treebuilder *bld", + "sig": "git_treebuilder *", + "return": { + "type": "size_t", + "comment": " the number of entries in the treebuilder" + }, + "description": "

Get the number of entries listed in a treebuilder

\n", + "comments": "", + "group": "treebuilder" + }, + "git_treebuilder_free": { + "type": "function", + "file": "git2/tree.h", + "line": 282, + "lineto": 282, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Builder to free" + } + ], + "argline": "git_treebuilder *bld", + "sig": "git_treebuilder *", + "return": { "type": "void", "comment": null }, + "description": "

Free a tree builder

\n", + "comments": "

This will clear all the entries and free to builder. Failing to free the builder after you're done using it will result in a memory leak

\n", + "group": "treebuilder" + }, + "git_treebuilder_get": { + "type": "function", + "file": "git2/tree.h", + "line": 294, + "lineto": 295, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder" + }, + { + "name": "filename", + "type": "const char *", + "comment": "Name of the entry" + } + ], + "argline": "git_treebuilder *bld, const char *filename", + "sig": "git_treebuilder *::const char *", + "return": { + "type": "const git_tree_entry *", + "comment": " pointer to the entry; NULL if not found" + }, + "description": "

Get an entry from the builder from its filename

\n", + "comments": "

The returned entry is owned by the builder and should not be freed manually.

\n", + "group": "treebuilder" + }, + "git_treebuilder_insert": { + "type": "function", + "file": "git2/tree.h", + "line": 325, + "lineto": 330, + "args": [ + { + "name": "out", + "type": "const git_tree_entry **", + "comment": "Pointer to store the entry (optional)" + }, + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder" + }, + { + "name": "filename", + "type": "const char *", + "comment": "Filename of the entry" + }, + { + "name": "id", + "type": "const git_oid *", + "comment": "SHA1 oid of the entry" + }, + { + "name": "filemode", + "type": "git_filemode_t", + "comment": "Folder attributes of the entry. This parameter must\n\t\t\tbe valued with one of the following entries: 0040000, 0100644,\n\t\t\t0100755, 0120000 or 0160000." + } + ], + "argline": "const git_tree_entry **out, git_treebuilder *bld, const char *filename, const git_oid *id, git_filemode_t filemode", + "sig": "const git_tree_entry **::git_treebuilder *::const char *::const git_oid *::git_filemode_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add or update an entry to the builder

\n", + "comments": "

Insert a new entry for filename in the builder with the given attributes.

\n\n

If an entry named filename already exists, its attributes will be updated with the given ones.

\n\n

The optional pointer out can be used to retrieve a pointer to the newly created/updated entry. Pass NULL if you do not need it. The pointer may not be valid past the next operation in this builder. Duplicate the entry if you want to keep it.

\n\n

By default the entry that you are inserting will be checked for validity; that it exists in the object database and is of the correct type. If you do not want this behavior, set the GIT_OPT_ENABLE_STRICT_OBJECT_CREATION library option to false.

\n", + "group": "treebuilder" + }, + "git_treebuilder_remove": { + "type": "function", + "file": "git2/tree.h", + "line": 339, + "lineto": 340, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder" + }, + { + "name": "filename", + "type": "const char *", + "comment": "Filename of the entry to remove" + } + ], + "argline": "git_treebuilder *bld, const char *filename", + "sig": "git_treebuilder *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Remove an entry from the builder by its filename

\n", + "comments": "", + "group": "treebuilder" + }, + "git_treebuilder_filter": { + "type": "function", + "file": "git2/tree.h", + "line": 364, + "lineto": 367, + "args": [ + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder" + }, + { + "name": "filter", + "type": "git_treebuilder_filter_cb", + "comment": "Callback to filter entries" + }, + { + "name": "payload", + "type": "void *", + "comment": "Extra data to pass to filter callback" + } + ], + "argline": "git_treebuilder *bld, git_treebuilder_filter_cb filter, void *payload", + "sig": "git_treebuilder *::git_treebuilder_filter_cb::void *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero callback return value, or error code" + }, + "description": "

Selectively remove entries in the tree

\n", + "comments": "

The filter callback will be called for each entry in the tree with a pointer to the entry and the provided payload; if the callback returns non-zero, the entry will be filtered (removed from the builder).

\n", + "group": "treebuilder" + }, + "git_treebuilder_write": { + "type": "function", + "file": "git2/tree.h", + "line": 379, + "lineto": 380, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "Pointer to store the OID of the newly written tree" + }, + { + "name": "bld", + "type": "git_treebuilder *", + "comment": "Tree builder to write" + } + ], + "argline": "git_oid *id, git_treebuilder *bld", + "sig": "git_oid *::git_treebuilder *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Write the contents of the tree builder as a tree object

\n", + "comments": "

The tree builder will be written to the given repo, and its identifying SHA1 hash will be stored in the id pointer.

\n", + "group": "treebuilder" + }, + "git_tree_walk": { + "type": "function", + "file": "git2/tree.h", + "line": 409, + "lineto": 413, + "args": [ + { + "name": "tree", + "type": "const git_tree *", + "comment": "The tree to walk" + }, + { + "name": "mode", + "type": "git_treewalk_mode", + "comment": "Traversal mode (pre or post-order)" + }, + { + "name": "callback", + "type": "git_treewalk_cb", + "comment": "Function to call on each tree entry" + }, + { + "name": "payload", + "type": "void *", + "comment": "Opaque pointer to be passed on each callback" + } + ], + "argline": "const git_tree *tree, git_treewalk_mode mode, git_treewalk_cb callback, void *payload", + "sig": "const git_tree *::git_treewalk_mode::git_treewalk_cb::void *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Traverse the entries in a tree and its subtrees in post or pre order.

\n", + "comments": "

The entries will be traversed in the specified order, children subtrees will be automatically loaded as required, and the callback will be called once per entry with the current (relative) root for the entry and the entry data itself.

\n\n

If the callback returns a positive value, the passed entry will be skipped on the traversal (in pre mode). A negative value stops the walk.

\n", + "group": "tree" + }, + "git_tree_dup": { + "type": "function", + "file": "git2/tree.h", + "line": 423, + "lineto": 423, + "args": [ + { + "name": "out", + "type": "git_tree **", + "comment": "Pointer to store the copy of the tree" + }, + { + "name": "source", + "type": "git_tree *", + "comment": "Original tree to copy" + } + ], + "argline": "git_tree **out, git_tree *source", + "sig": "git_tree **::git_tree *", + "return": { "type": "int", "comment": " 0" }, + "description": "

Create an in-memory copy of a tree. The copy must be explicitly\n free'd or it will leak.

\n", + "comments": "", + "group": "tree" + }, + "git_tree_create_updated": { + "type": "function", + "file": "git2/tree.h", + "line": 470, + "lineto": 470, + "args": [ + { "name": "out", "type": "git_oid *", "comment": "id of the new tree" }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to create the tree, must be the\n same as for `baseline`" + }, + { + "name": "baseline", + "type": "git_tree *", + "comment": "the tree to base these changes on" + }, + { + "name": "nupdates", + "type": "size_t", + "comment": "the number of elements in the update list" + }, + { + "name": "updates", + "type": "const git_tree_update *", + "comment": "the list of updates to perform" + } + ], + "argline": "git_oid *out, git_repository *repo, git_tree *baseline, size_t nupdates, const git_tree_update *updates", + "sig": "git_oid *::git_repository *::git_tree *::size_t::const git_tree_update *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a tree based on another one with the specified modifications

\n", + "comments": "

Given the baseline perform the changes described in the list of updates and create a new tree.

\n\n

This function is optimized for common file/directory addition, removal and replacement in trees. It is much more efficient than reading the tree into a git_index and modifying that, but in exchange it is not as flexible.

\n\n

Deleting and adding the same entry is undefined behaviour, changing a tree to a blob or viceversa is not supported.

\n", + "group": "tree" + }, + "git_worktree_list": { + "type": "function", + "file": "git2/worktree.h", + "line": 35, + "lineto": 35, + "args": [ + { + "name": "out", + "type": "git_strarray *", + "comment": "pointer to the array of working tree names" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repo to use when listing working trees" + } + ], + "argline": "git_strarray *out, git_repository *repo", + "sig": "git_strarray *::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

List names of linked working trees

\n", + "comments": "

The returned list should be released with git_strarray_free when no longer needed.

\n", + "group": "worktree" + }, + "git_worktree_lookup": { + "type": "function", + "file": "git2/worktree.h", + "line": 45, + "lineto": 45, + "args": [ + { + "name": "out", + "type": "git_worktree **", + "comment": "Output pointer to looked up worktree or `NULL`" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository containing worktrees" + }, + { + "name": "name", + "type": "const char *", + "comment": "Name of the working tree to look up" + } + ], + "argline": "git_worktree **out, git_repository *repo, const char *name", + "sig": "git_worktree **::git_repository *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Lookup a working tree by its name for a given repository

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_open_from_repository": { + "type": "function", + "file": "git2/worktree.h", + "line": 58, + "lineto": 58, + "args": [ + { + "name": "out", + "type": "git_worktree **", + "comment": "Out-pointer for the newly allocated worktree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository to look up worktree for" + } + ], + "argline": "git_worktree **out, git_repository *repo", + "sig": "git_worktree **::git_repository *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Open a worktree of a given repository

\n", + "comments": "

If a repository is not the main tree but a worktree, this function will look up the worktree inside the parent repository and create a new git_worktree structure.

\n", + "group": "worktree" + }, + "git_worktree_free": { + "type": "function", + "file": "git2/worktree.h", + "line": 65, + "lineto": 65, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "worktree handle to close. If NULL nothing occurs." + } + ], + "argline": "git_worktree *wt", + "sig": "git_worktree *", + "return": { "type": "void", "comment": null }, + "description": "

Free a previously allocated worktree

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_validate": { + "type": "function", + "file": "git2/worktree.h", + "line": 77, + "lineto": 77, + "args": [ + { + "name": "wt", + "type": "const git_worktree *", + "comment": "Worktree to check" + } + ], + "argline": "const git_worktree *wt", + "sig": "const git_worktree *", + "return": { + "type": "int", + "comment": " 0 when worktree is valid, error-code otherwise" + }, + "description": "

Check if worktree is valid

\n", + "comments": "

A valid worktree requires both the git data structures inside the linked parent repository and the linked working copy to be present.

\n", + "group": "worktree" + }, + "git_worktree_add_options_init": { + "type": "function", + "file": "git2/worktree.h", + "line": 113, + "lineto": 114, + "args": [ + { + "name": "opts", + "type": "git_worktree_add_options *", + "comment": "The `git_worktree_add_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_WORKTREE_ADD_OPTIONS_VERSION`." + } + ], + "argline": "git_worktree_add_options *opts, unsigned int version", + "sig": "git_worktree_add_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_worktree_add_options structure

\n", + "comments": "

Initializes a git_worktree_add_options with default values. Equivalent to creating an instance with GIT_WORKTREE_ADD_OPTIONS_INIT.

\n", + "group": "worktree" + }, + "git_worktree_add": { + "type": "function", + "file": "git2/worktree.h", + "line": 130, + "lineto": 132, + "args": [ + { + "name": "out", + "type": "git_worktree **", + "comment": "Output pointer containing new working tree" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository to create working tree for" + }, + { + "name": "name", + "type": "const char *", + "comment": "Name of the working tree" + }, + { + "name": "path", + "type": "const char *", + "comment": "Path to create working tree at" + }, + { + "name": "opts", + "type": "const git_worktree_add_options *", + "comment": "Options to modify default behavior. May be NULL" + } + ], + "argline": "git_worktree **out, git_repository *repo, const char *name, const char *path, const git_worktree_add_options *opts", + "sig": "git_worktree **::git_repository *::const char *::const char *::const git_worktree_add_options *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Add a new working tree

\n", + "comments": "

Add a new working tree for the repository, that is create the required data structures inside the repository and check out the current HEAD at path

\n", + "group": "worktree" + }, + "git_worktree_lock": { + "type": "function", + "file": "git2/worktree.h", + "line": 144, + "lineto": 144, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "Worktree to lock" + }, + { + "name": "reason", + "type": "const char *", + "comment": "Reason why the working tree is being locked" + } + ], + "argline": "git_worktree *wt, const char *reason", + "sig": "git_worktree *::const char *", + "return": { + "type": "int", + "comment": " 0 on success, non-zero otherwise" + }, + "description": "

Lock worktree if not already locked

\n", + "comments": "

Lock a worktree, optionally specifying a reason why the linked working tree is being locked.

\n", + "group": "worktree" + }, + "git_worktree_unlock": { + "type": "function", + "file": "git2/worktree.h", + "line": 153, + "lineto": 153, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "Worktree to unlock" + } + ], + "argline": "git_worktree *wt", + "sig": "git_worktree *", + "return": { + "type": "int", + "comment": " 0 on success, 1 if worktree was not locked, error-code\n otherwise" + }, + "description": "

Unlock a locked worktree

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_is_locked": { + "type": "function", + "file": "git2/worktree.h", + "line": 167, + "lineto": 167, + "args": [ + { + "name": "reason", + "type": "git_buf *", + "comment": "Buffer to store reason in. If NULL no reason is stored." + }, + { + "name": "wt", + "type": "const git_worktree *", + "comment": "Worktree to check" + } + ], + "argline": "git_buf *reason, const git_worktree *wt", + "sig": "git_buf *::const git_worktree *", + "return": { + "type": "int", + "comment": " 0 when the working tree not locked, a value greater\n than zero if it is locked, less than zero if there was an\n error" + }, + "description": "

Check if worktree is locked

\n", + "comments": "

A worktree may be locked if the linked working tree is stored on a portable device which is not available.

\n", + "group": "worktree" + }, + "git_worktree_name": { + "type": "function", + "file": "git2/worktree.h", + "line": 176, + "lineto": 176, + "args": [ + { + "name": "wt", + "type": "const git_worktree *", + "comment": "Worktree to get the name for" + } + ], + "argline": "const git_worktree *wt", + "sig": "const git_worktree *", + "return": { + "type": "const char *", + "comment": " The worktree's name. The pointer returned is valid for the\n lifetime of the git_worktree" + }, + "description": "

Retrieve the name of the worktree

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_path": { + "type": "function", + "file": "git2/worktree.h", + "line": 185, + "lineto": 185, + "args": [ + { + "name": "wt", + "type": "const git_worktree *", + "comment": "Worktree to get the path for" + } + ], + "argline": "const git_worktree *wt", + "sig": "const git_worktree *", + "return": { + "type": "const char *", + "comment": " The worktree's filesystem path. The pointer returned\n is valid for the lifetime of the git_worktree." + }, + "description": "

Retrieve the filesystem path for the worktree

\n", + "comments": "", + "group": "worktree" + }, + "git_worktree_prune_options_init": { + "type": "function", + "file": "git2/worktree.h", + "line": 227, + "lineto": 229, + "args": [ + { + "name": "opts", + "type": "git_worktree_prune_options *", + "comment": "The `git_worktree_prune_options` struct to initialize." + }, + { + "name": "version", + "type": "unsigned int", + "comment": "The struct version; pass `GIT_WORKTREE_PRUNE_OPTIONS_VERSION`." + } + ], + "argline": "git_worktree_prune_options *opts, unsigned int version", + "sig": "git_worktree_prune_options *::unsigned int", + "return": { + "type": "int", + "comment": " Zero on success; -1 on failure." + }, + "description": "

Initialize git_worktree_prune_options structure

\n", + "comments": "

Initializes a git_worktree_prune_options with default values. Equivalent to creating an instance with GIT_WORKTREE_PRUNE_OPTIONS_INIT.

\n", + "group": "worktree" + }, + "git_worktree_is_prunable": { + "type": "function", + "file": "git2/worktree.h", + "line": 251, + "lineto": 252, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "Worktree to check." + }, + { + "name": "opts", + "type": "git_worktree_prune_options *", + "comment": "The prunable options." + } + ], + "argline": "git_worktree *wt, git_worktree_prune_options *opts", + "sig": "git_worktree *::git_worktree_prune_options *", + "return": { + "type": "int", + "comment": " 1 if the worktree is prunable, 0 otherwise, or an error code." + }, + "description": "

Is the worktree prunable with the given options?

\n", + "comments": "

A worktree is not prunable in the following scenarios:

\n\n
    \n
  • the worktree is linking to a valid on-disk worktree. The valid member will cause this check to be ignored. - the worktree is locked. The locked flag will cause this check to be ignored.
  • \n
\n\n

If the worktree is not valid and not locked or if the above flags have been passed in, this function will return a positive value. If the worktree is not prunable, an error message will be set (visible in giterr_last) with details about why.

\n", + "group": "worktree" + }, + "git_worktree_prune": { + "type": "function", + "file": "git2/worktree.h", + "line": 266, + "lineto": 267, + "args": [ + { + "name": "wt", + "type": "git_worktree *", + "comment": "Worktree to prune" + }, + { + "name": "opts", + "type": "git_worktree_prune_options *", + "comment": "Specifies which checks to override. See\n `git_worktree_is_prunable`. May be NULL" + } + ], + "argline": "git_worktree *wt, git_worktree_prune_options *opts", + "sig": "git_worktree *::git_worktree_prune_options *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Prune working tree

\n", + "comments": "

Prune the working tree, that is remove the git data structures on disk. The repository will only be pruned of git_worktree_is_prunable succeeds.

\n", + "group": "worktree" + } + }, + "callbacks": { + "git_apply_delta_cb": { + "type": "callback", + "file": "git2/apply.h", + "line": 38, + "lineto": 40, + "args": [ + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": "The delta to be applied" + }, + { + "name": "payload", + "type": "void *", + "comment": "User-specified payload" + } + ], + "argline": "const git_diff_delta *delta, void *payload", + "sig": "const git_diff_delta *::void *", + "return": { + "type": "int", + "comment": " 0 if the delta is applied, \n<\n 0 if the apply process will be aborted\n\tor > 0 if the delta will not be applied." + }, + "description": "

When applying a patch, callback that will be made per delta (file).

\n", + "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the delta will not be applied, but the apply process continues - returns 0, the delta is applied, and the apply process continues.

\n" + }, + "git_apply_hunk_cb": { + "type": "callback", + "file": "git2/apply.h", + "line": 56, + "lineto": 58, + "args": [ + { + "name": "hunk", + "type": "const git_diff_hunk *", + "comment": "The hunk to be applied" + }, + { + "name": "payload", + "type": "void *", + "comment": "User-specified payload" + } + ], + "argline": "const git_diff_hunk *hunk, void *payload", + "sig": "const git_diff_hunk *::void *", + "return": { + "type": "int", + "comment": " 0 if the hunk is applied, \n<\n 0 if the apply process will be aborted\n\tor > 0 if the hunk will not be applied." + }, + "description": "

When applying a patch, callback that will be made per hunk.

\n", + "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the hunk will not be applied, but the apply process continues - returns 0, the hunk is applied, and the apply process continues.

\n" + }, + "git_attr_foreach_cb": { + "type": "callback", + "file": "git2/attr.h", + "line": 289, + "lineto": 289, + "args": [ + { + "name": "name", + "type": "const char *", + "comment": "The attribute name." + }, + { + "name": "value", + "type": "const char *", + "comment": "The attribute value. May be NULL if the attribute is explicitly\n set to UNSPECIFIED using the '!' sign." + }, + { + "name": "payload", + "type": "void *", + "comment": "A user-specified pointer." + } + ], + "argline": "const char *name, const char *value, void *payload", + "sig": "const char *::const char *::void *", + "return": { + "type": "int", + "comment": " 0 to continue looping, non-zero to stop. This value will be returned\n from git_attr_foreach." + }, + "description": "

The callback used with git_attr_foreach.

\n", + "comments": "

This callback will be invoked only once per attribute name, even if there are multiple rules for a given file. The highest priority rule will be used.

\n" + }, + "git_transport_certificate_check_cb": { + "type": "callback", + "file": "git2/cert.h", + "line": 72, + "lineto": 72, + "args": [ + { + "name": "cert", + "type": "git_cert *", + "comment": "The host certificate" + }, + { + "name": "valid", + "type": "int", + "comment": "Whether the libgit2 checks (OpenSSL or WinHTTP) think\n this certificate is valid" + }, + { + "name": "host", + "type": "const char *", + "comment": "Hostname of the host libgit2 connected to" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "git_cert *cert, int valid, const char *host, void *payload", + "sig": "git_cert *::int::const char *::void *", + "return": { + "type": "int", + "comment": " 0 to proceed with the connection, \n<\n 0 to fail the connection\n or > 0 to indicate that the callback refused to act and that\n the existing validity determination should be honored" + }, + "description": "

Callback for the user's custom certificate checks.

\n", + "comments": "" + }, + "git_checkout_notify_cb": { + "type": "callback", + "file": "git2/checkout.h", + "line": 255, + "lineto": 261, + "args": [ + { "name": "why", "type": "git_checkout_notify_t", "comment": null }, + { "name": "path", "type": "const char *", "comment": null }, + { + "name": "baseline", + "type": "const git_diff_file *", + "comment": null + }, + { "name": "target", "type": "const git_diff_file *", "comment": null }, + { "name": "workdir", "type": "const git_diff_file *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "git_checkout_notify_t why, const char *path, const git_diff_file *baseline, const git_diff_file *target, const git_diff_file *workdir, void *payload", + "sig": "git_checkout_notify_t::const char *::const git_diff_file *::const git_diff_file *::const git_diff_file *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Checkout notification callback function

\n", + "comments": "" + }, + "git_checkout_progress_cb": { + "type": "callback", + "file": "git2/checkout.h", + "line": 264, + "lineto": 268, + "args": [ + { "name": "path", "type": "const char *", "comment": null }, + { "name": "completed_steps", "type": "size_t", "comment": null }, + { "name": "total_steps", "type": "size_t", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const char *path, size_t completed_steps, size_t total_steps, void *payload", + "sig": "const char *::size_t::size_t::void *", + "return": { "type": "void", "comment": null }, + "description": "

Checkout progress notification function

\n", + "comments": "" + }, + "git_checkout_perfdata_cb": { + "type": "callback", + "file": "git2/checkout.h", + "line": 271, + "lineto": 273, + "args": [ + { + "name": "perfdata", + "type": "const git_checkout_perfdata *", + "comment": null + }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_checkout_perfdata *perfdata, void *payload", + "sig": "const git_checkout_perfdata *::void *", + "return": { "type": "void", "comment": null }, + "description": "

Checkout perfdata notification function

\n", + "comments": "" + }, + "git_remote_create_cb": { + "type": "callback", + "file": "git2/clone.h", + "line": 69, + "lineto": 74, + "args": [ + { + "name": "out", + "type": "git_remote **", + "comment": "the resulting remote" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository in which to create the remote" + }, + { + "name": "name", + "type": "const char *", + "comment": "the remote's name" + }, + { + "name": "url", + "type": "const char *", + "comment": "the remote's url" + }, + { "name": "payload", "type": "void *", "comment": "an opaque payload" } + ], + "argline": "git_remote **out, git_repository *repo, const char *name, const char *url, void *payload", + "sig": "git_remote **::git_repository *::const char *::const char *::void *", + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" + }, + "description": "

The signature of a function matching git_remote_create, with an additional\n void* as a callback payload.

\n", + "comments": "

Callers of git_clone may provide a function matching this signature to override the remote creation and customization process during a clone operation.

\n" + }, + "git_repository_create_cb": { + "type": "callback", + "file": "git2/clone.h", + "line": 90, + "lineto": 94, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "the resulting repository" + }, + { + "name": "path", + "type": "const char *", + "comment": "path in which to create the repository" + }, + { + "name": "bare", + "type": "int", + "comment": "whether the repository is bare. This is the value from the clone options" + }, + { + "name": "payload", + "type": "void *", + "comment": "payload specified by the options" + } + ], + "argline": "git_repository **out, const char *path, int bare, void *payload", + "sig": "git_repository **::const char *::int::void *", + "return": { + "type": "int", + "comment": " 0, or a negative value to indicate error" + }, + "description": "

The signature of a function matching git_repository_init, with an\n additional void * as callback payload.

\n", + "comments": "

Callers of git_clone my provide a function matching this signature to override the repository creation and customization process during a clone operation.

\n" + }, + "git_commit_create_cb": { + "type": "callback", + "file": "git2/commit.h", + "line": 576, + "lineto": 585, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "pointer that this callback will populate with the object\n id of the commit that is created" + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "the author name and time of the commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "the committer name and time of the commit" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "the encoding of the given message, or NULL\n to assume UTF8" + }, + { + "name": "message", + "type": "const char *", + "comment": "the commit message" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "the tree to be committed" + }, + { + "name": "parent_count", + "type": "size_t", + "comment": "the number of parents for this commit" + }, + { + "name": "parents", + "type": "const git_commit *[]", + "comment": "the commit parents" + }, + { + "name": "payload", + "type": "void *", + "comment": "the payload pointer in the rebase options" + } + ], + "argline": "git_oid *out, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents, void *payload", + "sig": "git_oid *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]::void *", + "return": { + "type": "int", + "comment": " 0 if this callback has created the commit and populated the out\n parameter, GIT_PASSTHROUGH if the callback has not created a\n commit and wants the calling function to create the commit as\n if no callback had been specified, any other value to stop\n and return a failure" + }, + "description": "

Commit creation callback: used when a function is going to create\n commits (for example, in git_rebase_commit) to allow callers to\n override the commit creation behavior. For example, users may\n wish to sign commits by providing this information to\n git_commit_create_buffer, signing that buffer, then calling\n git_commit_create_with_signature. The resultant commit id\n should be set in the out object id parameter.

\n", + "comments": "" + }, + "git_config_foreach_cb": { + "type": "callback", + "file": "git2/config.h", + "line": 122, + "lineto": 122, + "args": [ + { + "name": "entry", + "type": "const git_config_entry *", + "comment": "the entry currently being enumerated" + }, + { + "name": "payload", + "type": "void *", + "comment": "a user-specified pointer" + } + ], + "argline": "const git_config_entry *entry, void *payload", + "sig": "const git_config_entry *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration." + }, + "description": "

A config enumeration callback

\n", + "comments": "" + }, + "git_credential_acquire_cb": { + "type": "callback", + "file": "git2/credential.h", + "line": 131, + "lineto": 136, + "args": [ + { + "name": "out", + "type": "git_credential **", + "comment": "The newly created credential object." + }, + { + "name": "url", + "type": "const char *", + "comment": "The resource for which we are demanding a credential." + }, + { + "name": "username_from_url", + "type": "const char *", + "comment": "The username that was embedded in a \"user\n@\nhost\"\n remote url, or NULL if not included." + }, + { + "name": "allowed_types", + "type": "unsigned int", + "comment": "A bitmask stating which credential types are OK to return." + }, + { + "name": "payload", + "type": "void *", + "comment": "The payload provided when specifying this callback." + } + ], + "argline": "git_credential **out, const char *url, const char *username_from_url, unsigned int allowed_types, void *payload", + "sig": "git_credential **::const char *::const char *::unsigned int::void *", + "return": { + "type": "int", + "comment": " 0 for success, \n<\n 0 to indicate an error, > 0 to indicate\n no credential was acquired" + }, + "description": "

Credential acquisition callback.

\n", + "comments": "

This callback is usually involved any time another system might need authentication. As such, you are expected to provide a valid git_credential object back, depending on allowed_types (a git_credential_t bitmask).

\n\n

Note that most authentication details are your responsibility - this callback will be called until the authentication succeeds, or you report an error. As such, it's easy to get in a loop if you fail to stop providing the same incorrect credentials.

\n" + }, + "git_commit_signing_cb": { + "type": "callback", + "file": "git2/deprecated.h", + "line": 276, + "lineto": 280, + "args": [ + { "name": "signature", "type": "git_buf *", "comment": null }, + { "name": "signature_field", "type": "git_buf *", "comment": null }, + { "name": "commit_content", "type": "const char *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "git_buf *signature, git_buf *signature_field, const char *commit_content, void *payload", + "sig": "git_buf *::git_buf *::const char *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Provide a commit signature during commit creation.

\n", + "comments": "

Callers should instead define a git_commit_create_cb that generates a commit buffer using git_commit_create_buffer, sign that buffer and call git_commit_create_with_signature.

\n" + }, + "git_headlist_cb": { + "type": "callback", + "file": "git2/deprecated.h", + "line": 855, + "lineto": 855, + "args": [ + { "name": "rhead", "type": "git_remote_head *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "git_remote_head *rhead, void *payload", + "sig": "git_remote_head *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Callback for listing the remote heads

\n", + "comments": "" + }, + "git_diff_notify_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 346, + "lineto": 350, + "args": [ + { "name": "diff_so_far", "type": "const git_diff *", "comment": null }, + { + "name": "delta_to_add", + "type": "const git_diff_delta *", + "comment": null + }, + { "name": "matched_pathspec", "type": "const char *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_diff *diff_so_far, const git_diff_delta *delta_to_add, const char *matched_pathspec, void *payload", + "sig": "const git_diff *::const git_diff_delta *::const char *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Diff notification callback function.

\n", + "comments": "

The callback will be called for each file, just before the git_diff_delta gets inserted into the diff.

\n\n

When the callback: - returns < 0, the diff process will be aborted. - returns > 0, the delta will not be inserted into the diff, but the diff process continues. - returns 0, the delta is inserted into the diff, and the diff process continues.

\n" + }, + "git_diff_progress_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 362, + "lineto": 366, + "args": [ + { + "name": "diff_so_far", + "type": "const git_diff *", + "comment": "The diff being generated." + }, + { + "name": "old_path", + "type": "const char *", + "comment": "The path to the old file or NULL." + }, + { + "name": "new_path", + "type": "const char *", + "comment": "The path to the new file or NULL." + }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_diff *diff_so_far, const char *old_path, const char *new_path, void *payload", + "sig": "const git_diff *::const char *::const char *::void *", + "return": { "type": "int", "comment": " Non-zero to abort the diff." }, + "description": "

Diff progress callback.

\n", + "comments": "

Called before each file comparison.

\n" + }, + "git_diff_file_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 496, + "lineto": 499, + "args": [ + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": "A pointer to the delta data for the file" + }, + { + "name": "progress", + "type": "float", + "comment": "Goes from 0 to 1 over the diff" + }, + { + "name": "payload", + "type": "void *", + "comment": "User-specified pointer from foreach function" + } + ], + "argline": "const git_diff_delta *delta, float progress, void *payload", + "sig": "const git_diff_delta *::float::void *", + "return": { "type": "int", "comment": null }, + "description": "

When iterating over a diff, callback that will be made per file.

\n", + "comments": "" + }, + "git_diff_binary_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 562, + "lineto": 565, + "args": [ + { "name": "delta", "type": "const git_diff_delta *", "comment": null }, + { + "name": "binary", + "type": "const git_diff_binary *", + "comment": null + }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_diff_delta *delta, const git_diff_binary *binary, void *payload", + "sig": "const git_diff_delta *::const git_diff_binary *::void *", + "return": { "type": "int", "comment": null }, + "description": "

When iterating over a diff, callback that will be made for\n binary content within the diff.

\n", + "comments": "" + }, + "git_diff_hunk_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 588, + "lineto": 591, + "args": [ + { "name": "delta", "type": "const git_diff_delta *", "comment": null }, + { "name": "hunk", "type": "const git_diff_hunk *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, void *payload", + "sig": "const git_diff_delta *::const git_diff_hunk *::void *", + "return": { "type": "int", "comment": null }, + "description": "

When iterating over a diff, callback that will be made per hunk.

\n", + "comments": "" + }, + "git_diff_line_cb": { + "type": "callback", + "file": "git2/diff.h", + "line": 649, + "lineto": 653, + "args": [ + { "name": "delta", "type": "const git_diff_delta *", "comment": null }, + { "name": "hunk", "type": "const git_diff_hunk *", "comment": null }, + { "name": "line", "type": "const git_diff_line *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, const git_diff_line *line, void *payload", + "sig": "const git_diff_delta *::const git_diff_hunk *::const git_diff_line *::void *", + "return": { "type": "int", "comment": null }, + "description": "

When iterating over a diff, callback that will be made per text diff\n line. In this context, the provided range will be NULL.

\n", + "comments": "

When printing a diff, callback that will be made to output each line of text. This uses some extra GIT_DIFF_LINE_... constants for output of lines of file and hunk headers.

\n" + }, + "git_index_matched_path_cb": { + "type": "callback", + "file": "git2/index.h", + "line": 135, + "lineto": 136, + "args": [ + { "name": "path", "type": "const char *", "comment": null }, + { "name": "matched_pathspec", "type": "const char *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const char *path, const char *matched_pathspec, void *payload", + "sig": "const char *::const char *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Callback for APIs that add/remove/update files matching pathspec

\n", + "comments": "" + }, + "git_indexer_progress_cb": { + "type": "callback", + "file": "git2/indexer.h", + "line": 57, + "lineto": 57, + "args": [ + { + "name": "stats", + "type": "const git_indexer_progress *", + "comment": "Structure containing information about the state of the transfer" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by caller" + } + ], + "argline": "const git_indexer_progress *stats, void *payload", + "sig": "const git_indexer_progress *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Type for progress callbacks during indexing. Return a value less\n than zero to cancel the indexing or download.

\n", + "comments": "" + }, + "git_note_foreach_cb": { + "type": "callback", + "file": "git2/notes.h", + "line": 29, + "lineto": 30, + "args": [ + { "name": "blob_id", "type": "const git_oid *", "comment": null }, + { + "name": "annotated_object_id", + "type": "const git_oid *", + "comment": null + }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_oid *blob_id, const git_oid *annotated_object_id, void *payload", + "sig": "const git_oid *::const git_oid *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Callback for git_note_foreach.

\n", + "comments": "

Receives: - blob_id: Oid of the blob containing the message - annotated_object_id: Oid of the git object being annotated - payload: Payload data passed to git_note_foreach

\n" + }, + "git_odb_foreach_cb": { + "type": "callback", + "file": "git2/odb.h", + "line": 39, + "lineto": 39, + "args": [ + { "name": "id", "type": "const git_oid *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_oid *id, void *payload", + "sig": "const git_oid *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Function type for callbacks from git_odb_foreach.

\n", + "comments": "" + }, + "git_packbuilder_foreach_cb": { + "type": "callback", + "file": "git2/pack.h", + "line": 208, + "lineto": 208, + "args": [ + { + "name": "buf", + "type": "void *", + "comment": "A pointer to the object's data" + }, + { + "name": "size", + "type": "size_t", + "comment": "The size of the underlying object" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_packbuilder_foreach" + } + ], + "argline": "void *buf, size_t size, void *payload", + "sig": "void *::size_t::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over packed objects

\n", + "comments": "" + }, + "git_packbuilder_progress": { + "type": "callback", + "file": "git2/pack.h", + "line": 237, + "lineto": 241, + "args": [ + { "name": "stage", "type": "int", "comment": null }, + { "name": "current", "type": "uint32_t", "comment": null }, + { "name": "total", "type": "uint32_t", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "int stage, uint32_t current, uint32_t total, void *payload", + "sig": "int::uint32_t::uint32_t::void *", + "return": { "type": "int", "comment": null }, + "description": "

Packbuilder progress notification function

\n", + "comments": "" + }, + "git_reference_foreach_cb": { + "type": "callback", + "file": "git2/refs.h", + "line": 437, + "lineto": 437, + "args": [ + { + "name": "reference", + "type": "git_reference *", + "comment": "The reference object" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_reference_foreach" + } + ], + "argline": "git_reference *reference, void *payload", + "sig": "git_reference *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over references

\n", + "comments": "" + }, + "git_reference_foreach_name_cb": { + "type": "callback", + "file": "git2/refs.h", + "line": 448, + "lineto": 448, + "args": [ + { + "name": "name", + "type": "const char *", + "comment": "The reference name" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_reference_foreach_name" + } + ], + "argline": "const char *name, void *payload", + "sig": "const char *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over reference names

\n", + "comments": "" + }, + "git_push_transfer_progress_cb": { + "type": "callback", + "file": "git2/remote.h", + "line": 470, + "lineto": 474, + "args": [ + { "name": "current", "type": "unsigned int", "comment": null }, + { "name": "total", "type": "unsigned int", "comment": null }, + { "name": "bytes", "type": "size_t", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "unsigned int current, unsigned int total, size_t bytes, void *payload", + "sig": "unsigned int::unsigned int::size_t::void *", + "return": { "type": "int", "comment": null }, + "description": "

Push network progress notification function

\n", + "comments": "" + }, + "git_push_negotiation": { + "type": "callback", + "file": "git2/remote.h", + "line": 506, + "lineto": 506, + "args": [ + { + "name": "updates", + "type": "const git_push_update **", + "comment": "an array containing the updates which will be sent\n as commands to the destination." + }, + { + "name": "len", + "type": "size_t", + "comment": "number of elements in `updates`" + }, + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "const git_push_update **updates, size_t len, void *payload", + "sig": "const git_push_update **::size_t::void *", + "return": { "type": "int", "comment": null }, + "description": "

Callback used to inform of upcoming updates.

\n", + "comments": "" + }, + "git_push_update_reference_cb": { + "type": "callback", + "file": "git2/remote.h", + "line": 520, + "lineto": 520, + "args": [ + { + "name": "refname", + "type": "const char *", + "comment": "refname specifying to the remote ref" + }, + { + "name": "status", + "type": "const char *", + "comment": "status message sent from the remote" + }, + { + "name": "data", + "type": "void *", + "comment": "data provided by the caller" + } + ], + "argline": "const char *refname, const char *status, void *data", + "sig": "const char *::const char *::void *", + "return": { + "type": "int", + "comment": " 0 on success, otherwise an error" + }, + "description": "

Callback used to inform of the update status from the remote.

\n", + "comments": "

Called for each updated reference on push. If status is not NULL, the update was rejected by the remote server and status contains the reason given.

\n" + }, + "git_url_resolve_cb": { + "type": "callback", + "file": "git2/remote.h", + "line": 536, + "lineto": 536, + "args": [ + { + "name": "url_resolved", + "type": "git_buf *", + "comment": "The buffer to write the resolved URL to" + }, + { + "name": "url", + "type": "const char *", + "comment": "The URL to resolve" }, - "git_checkout_notify_cb": { - "type": "callback", - "file": "git2/checkout.h", - "line": 255, - "lineto": 261, - "args": [ - { - "name": "why", - "type": "git_checkout_notify_t", - "comment": null - }, - { - "name": "path", - "type": "const char *", - "comment": null - }, - { - "name": "baseline", - "type": "const git_diff_file *", - "comment": null - }, - { - "name": "target", - "type": "const git_diff_file *", - "comment": null - }, - { - "name": "workdir", - "type": "const git_diff_file *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "git_checkout_notify_t why, const char *path, const git_diff_file *baseline, const git_diff_file *target, const git_diff_file *workdir, void *payload", - "sig": "git_checkout_notify_t::const char *::const git_diff_file *::const git_diff_file *::const git_diff_file *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Checkout notification callback function

\n", - "comments": "" + { + "name": "direction", + "type": "int", + "comment": "GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" }, - "git_checkout_progress_cb": { - "type": "callback", - "file": "git2/checkout.h", - "line": 264, - "lineto": 268, - "args": [ - { - "name": "path", - "type": "const char *", - "comment": null - }, - { - "name": "completed_steps", - "type": "size_t", - "comment": null - }, - { - "name": "total_steps", - "type": "size_t", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const char *path, size_t completed_steps, size_t total_steps, void *payload", - "sig": "const char *::size_t::size_t::void *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Checkout progress notification function

\n", - "comments": "" + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "git_buf *url_resolved, const char *url, int direction, void *payload", + "sig": "git_buf *::const char *::int::void *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_PASSTHROUGH or an error\n " + }, + "description": "

Callback to resolve URLs before connecting to remote

\n", + "comments": "

If you return GIT_PASSTHROUGH, you don't need to write anything to url_resolved.

\n" + }, + "git_remote_ready_cb": { + "type": "callback", + "file": "git2/remote.h", + "line": 549, + "lineto": 549, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "The remote to be connected" }, - "git_checkout_perfdata_cb": { - "type": "callback", - "file": "git2/checkout.h", - "line": 271, - "lineto": 273, - "args": [ - { - "name": "perfdata", - "type": "const git_checkout_perfdata *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_checkout_perfdata *perfdata, void *payload", - "sig": "const git_checkout_perfdata *::void *", - "return": { - "type": "void", - "comment": null - }, - "description": "

Checkout perfdata notification function

\n", - "comments": "" + { + "name": "direction", + "type": "int", + "comment": "GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" }, - "git_remote_create_cb": { - "type": "callback", - "file": "git2/clone.h", - "line": 69, - "lineto": 74, - "args": [ - { - "name": "out", - "type": "git_remote **", - "comment": "the resulting remote" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "the repository in which to create the remote" - }, - { - "name": "name", - "type": "const char *", - "comment": "the remote's name" - }, - { - "name": "url", - "type": "const char *", - "comment": "the remote's url" - }, - { - "name": "payload", - "type": "void *", - "comment": "an opaque payload" - } - ], - "argline": "git_remote **out, git_repository *repo, const char *name, const char *url, void *payload", - "sig": "git_remote **::git_repository *::const char *::const char *::void *", - "return": { - "type": "int", - "comment": " 0, GIT_EINVALIDSPEC, GIT_EEXISTS or an error code" - }, - "description": "

The signature of a function matching git_remote_create, with an additional\n void* as a callback payload.

\n", - "comments": "

Callers of git_clone may provide a function matching this signature to override the remote creation and customization process during a clone operation.

\n" - }, - "git_repository_create_cb": { - "type": "callback", - "file": "git2/clone.h", - "line": 90, - "lineto": 94, - "args": [ - { - "name": "out", - "type": "git_repository **", - "comment": "the resulting repository" - }, - { - "name": "path", - "type": "const char *", - "comment": "path in which to create the repository" - }, - { - "name": "bare", - "type": "int", - "comment": "whether the repository is bare. This is the value from the clone options" - }, - { - "name": "payload", - "type": "void *", - "comment": "payload specified by the options" - } - ], - "argline": "git_repository **out, const char *path, int bare, void *payload", - "sig": "git_repository **::const char *::int::void *", - "return": { - "type": "int", - "comment": " 0, or a negative value to indicate error" - }, - "description": "

The signature of a function matching git_repository_init, with an\n additional void * as callback payload.

\n", - "comments": "

Callers of git_clone my provide a function matching this signature to override the repository creation and customization process during a clone operation.

\n" - }, - "git_commit_create_cb": { - "type": "callback", - "file": "git2/commit.h", - "line": 533, - "lineto": 542, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer that this callback will populate with the object\n id of the commit that is created" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "the author name and time of the commit" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "the committer name and time of the commit" - }, - { - "name": "message_encoding", - "type": "const char *", - "comment": "the encoding of the given message, or NULL\n to assume UTF8" - }, - { - "name": "message", - "type": "const char *", - "comment": "the commit message" - }, - { - "name": "tree", - "type": "const git_tree *", - "comment": "the tree to be committed" - }, - { - "name": "parent_count", - "type": "size_t", - "comment": "the number of parents for this commit" - }, - { - "name": "parents", - "type": "const git_commit *[]", - "comment": "the commit parents" - }, - { - "name": "payload", - "type": "void *", - "comment": "the payload pointer in the rebase options" - } - ], - "argline": "git_oid *out, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count, const git_commit *[] parents, void *payload", - "sig": "git_oid *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t::const git_commit *[]::void *", - "return": { - "type": "int", - "comment": " 0 if this callback has created the commit and populated the out\n parameter, GIT_PASSTHROUGH if the callback has not created a\n commit and wants the calling function to create the commit as\n if no callback had been specified, any other value to stop\n and return a failure" - }, - "description": "

Commit creation callback: used when a function is going to create\n commits (for example, in git_rebase_commit) to allow callers to\n override the commit creation behavior. For example, users may\n wish to sign commits by providing this information to\n git_commit_create_buffer, signing that buffer, then calling\n git_commit_create_with_signature. The resultant commit id\n should be set in the out object id parameter.

\n", - "comments": "" + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "git_remote *remote, int direction, void *payload", + "sig": "git_remote *::int::void *", + "return": { "type": "int", "comment": " 0 on success, or an error" }, + "description": "

Callback invoked immediately before we attempt to connect to the\n given url. Callers may change the URL before the connection by\n calling git_remote_set_instance_url in the callback.

\n", + "comments": "" + }, + "git_repository_fetchhead_foreach_cb": { + "type": "callback", + "file": "git2/repository.h", + "line": 726, + "lineto": 730, + "args": [ + { + "name": "ref_name", + "type": "const char *", + "comment": "The reference name" }, - "git_config_foreach_cb": { - "type": "callback", - "file": "git2/config.h", - "line": 87, - "lineto": 87, - "args": [ - { - "name": "entry", - "type": "const git_config_entry *", - "comment": "the entry currently being enumerated" - }, - { - "name": "payload", - "type": "void *", - "comment": "a user-specified pointer" - } - ], - "argline": "const git_config_entry *entry, void *payload", - "sig": "const git_config_entry *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration." - }, - "description": "

A config enumeration callback

\n", - "comments": "" + { + "name": "remote_url", + "type": "const char *", + "comment": "The remote URL" }, - "git_credential_acquire_cb": { - "type": "callback", - "file": "git2/credential.h", - "line": 131, - "lineto": 136, - "args": [ - { - "name": "out", - "type": "git_credential **", - "comment": "The newly created credential object." - }, - { - "name": "url", - "type": "const char *", - "comment": "The resource for which we are demanding a credential." - }, - { - "name": "username_from_url", - "type": "const char *", - "comment": "The username that was embedded in a \"user\n@\nhost\"\n remote url, or NULL if not included." - }, - { - "name": "allowed_types", - "type": "unsigned int", - "comment": "A bitmask stating which credential types are OK to return." - }, - { - "name": "payload", - "type": "void *", - "comment": "The payload provided when specifying this callback." - } - ], - "argline": "git_credential **out, const char *url, const char *username_from_url, unsigned int allowed_types, void *payload", - "sig": "git_credential **::const char *::const char *::unsigned int::void *", - "return": { - "type": "int", - "comment": " 0 for success, \n<\n 0 to indicate an error, > 0 to indicate\n no credential was acquired" - }, - "description": "

Credential acquisition callback.

\n", - "comments": "

This callback is usually involved any time another system might need authentication. As such, you are expected to provide a valid git_credential object back, depending on allowed_types (a git_credential_t bitmask).

\n\n

Note that most authentication details are your responsibility - this callback will be called until the authentication succeeds, or you report an error. As such, it's easy to get in a loop if you fail to stop providing the same incorrect credentials.

\n" - }, - "git_commit_signing_cb": { - "type": "callback", - "file": "git2/deprecated.h", - "line": 276, - "lineto": 280, - "args": [ - { - "name": "signature", - "type": "git_buf *", - "comment": null - }, - { - "name": "signature_field", - "type": "git_buf *", - "comment": null - }, - { - "name": "commit_content", - "type": "const char *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "git_buf *signature, git_buf *signature_field, const char *commit_content, void *payload", - "sig": "git_buf *::git_buf *::const char *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Provide a commit signature during commit creation.

\n", - "comments": "

Callers should instead define a git_commit_create_cb that generates a commit buffer using git_commit_create_buffer, sign that buffer and call git_commit_create_with_signature.

\n" - }, - "git_headlist_cb": { - "type": "callback", - "file": "git2/deprecated.h", - "line": 855, - "lineto": 855, - "args": [ - { - "name": "rhead", - "type": "git_remote_head *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "git_remote_head *rhead, void *payload", - "sig": "git_remote_head *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for listing the remote heads

\n", - "comments": "" + { + "name": "oid", + "type": "const git_oid *", + "comment": "The reference target OID" }, - "git_diff_notify_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 346, - "lineto": 350, - "args": [ - { - "name": "diff_so_far", - "type": "const git_diff *", - "comment": null - }, - { - "name": "delta_to_add", - "type": "const git_diff_delta *", - "comment": null - }, - { - "name": "matched_pathspec", - "type": "const char *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff *diff_so_far, const git_diff_delta *delta_to_add, const char *matched_pathspec, void *payload", - "sig": "const git_diff *::const git_diff_delta *::const char *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Diff notification callback function.

\n", - "comments": "

The callback will be called for each file, just before the git_diff_delta gets inserted into the diff.

\n\n

When the callback: - returns < 0, the diff process will be aborted. - returns > 0, the delta will not be inserted into the diff, but the diff process continues. - returns 0, the delta is inserted into the diff, and the diff process continues.

\n" - }, - "git_diff_progress_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 362, - "lineto": 366, - "args": [ - { - "name": "diff_so_far", - "type": "const git_diff *", - "comment": "The diff being generated." - }, - { - "name": "old_path", - "type": "const char *", - "comment": "The path to the old file or NULL." - }, - { - "name": "new_path", - "type": "const char *", - "comment": "The path to the new file or NULL." - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff *diff_so_far, const char *old_path, const char *new_path, void *payload", - "sig": "const git_diff *::const char *::const char *::void *", - "return": { - "type": "int", - "comment": " Non-zero to abort the diff." - }, - "description": "

Diff progress callback.

\n", - "comments": "

Called before each file comparison.

\n" - }, - "git_diff_file_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 496, - "lineto": 499, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": "A pointer to the delta data for the file" - }, - { - "name": "progress", - "type": "float", - "comment": "Goes from 0 to 1 over the diff" - }, - { - "name": "payload", - "type": "void *", - "comment": "User-specified pointer from foreach function" - } - ], - "argline": "const git_diff_delta *delta, float progress, void *payload", - "sig": "const git_diff_delta *::float::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When iterating over a diff, callback that will be made per file.

\n", - "comments": "" + { + "name": "is_merge", + "type": "unsigned int", + "comment": "Was the reference the result of a merge" }, - "git_diff_binary_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 562, - "lineto": 565, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": null - }, - { - "name": "binary", - "type": "const git_diff_binary *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff_delta *delta, const git_diff_binary *binary, void *payload", - "sig": "const git_diff_delta *::const git_diff_binary *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When iterating over a diff, callback that will be made for\n binary content within the diff.

\n", - "comments": "" + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_repository_fetchhead_foreach" + } + ], + "argline": "const char *ref_name, const char *remote_url, const git_oid *oid, unsigned int is_merge, void *payload", + "sig": "const char *::const char *::const git_oid *::unsigned int::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over each FETCH_HEAD entry

\n", + "comments": "" + }, + "git_repository_mergehead_foreach_cb": { + "type": "callback", + "file": "git2/repository.h", + "line": 757, + "lineto": 758, + "args": [ + { + "name": "oid", + "type": "const git_oid *", + "comment": "The merge OID" }, - "git_diff_hunk_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 588, - "lineto": 591, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": null - }, - { - "name": "hunk", - "type": "const git_diff_hunk *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, void *payload", - "sig": "const git_diff_delta *::const git_diff_hunk *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When iterating over a diff, callback that will be made per hunk.

\n", - "comments": "" + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_repository_mergehead_foreach" + } + ], + "argline": "const git_oid *oid, void *payload", + "sig": "const git_oid *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over each MERGE_HEAD entry

\n", + "comments": "" + }, + "git_revwalk_hide_cb": { + "type": "callback", + "file": "git2/revwalk.h", + "line": 283, + "lineto": 285, + "args": [ + { + "name": "commit_id", + "type": "const git_oid *", + "comment": "oid of Commit" }, - "git_diff_line_cb": { - "type": "callback", - "file": "git2/diff.h", - "line": 649, - "lineto": 653, - "args": [ - { - "name": "delta", - "type": "const git_diff_delta *", - "comment": null - }, - { - "name": "hunk", - "type": "const git_diff_hunk *", - "comment": null - }, - { - "name": "line", - "type": "const git_diff_line *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, const git_diff_line *line, void *payload", - "sig": "const git_diff_delta *::const git_diff_hunk *::const git_diff_line *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

When iterating over a diff, callback that will be made per text diff\n line. In this context, the provided range will be NULL.

\n", - "comments": "

When printing a diff, callback that will be made to output each line of text. This uses some extra GIT_DIFF_LINE_... constants for output of lines of file and hunk headers.

\n" - }, - "git_index_matched_path_cb": { - "type": "callback", - "file": "git2/index.h", - "line": 135, - "lineto": 136, - "args": [ - { - "name": "path", - "type": "const char *", - "comment": null - }, - { - "name": "matched_pathspec", - "type": "const char *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const char *path, const char *matched_pathspec, void *payload", - "sig": "const char *::const char *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for APIs that add/remove/update files matching pathspec

\n", - "comments": "" + { + "name": "payload", + "type": "void *", + "comment": "User-specified pointer to data to be passed as data payload" + } + ], + "argline": "const git_oid *commit_id, void *payload", + "sig": "const git_oid *::void *", + "return": { + "type": "int", + "comment": " non-zero to hide the commmit and it parent." + }, + "description": "

This is a callback function that user can provide to hide a\n commit and its parents. If the callback function returns non-zero value,\n then this commit and its parents will be hidden.

\n", + "comments": "" + }, + "git_stash_apply_progress_cb": { + "type": "callback", + "file": "git2/stash.h", + "line": 169, + "lineto": 171, + "args": [ + { + "name": "progress", + "type": "git_stash_apply_progress_t", + "comment": null + }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "git_stash_apply_progress_t progress, void *payload", + "sig": "git_stash_apply_progress_t::void *", + "return": { "type": "int", "comment": null }, + "description": "

Stash application progress notification function.\n Return 0 to continue processing, or a negative value to\n abort the stash application.

\n", + "comments": "" + }, + "git_stash_cb": { + "type": "callback", + "file": "git2/stash.h", + "line": 255, + "lineto": 259, + "args": [ + { + "name": "index", + "type": "size_t", + "comment": "The position within the stash list. 0 points to the\n most recent stashed state." }, - "git_indexer_progress_cb": { - "type": "callback", - "file": "git2/indexer.h", - "line": 57, - "lineto": 57, - "args": [ - { - "name": "stats", - "type": "const git_indexer_progress *", - "comment": "Structure containing information about the state of the transfer" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by caller" - } - ], - "argline": "const git_indexer_progress *stats, void *payload", - "sig": "const git_indexer_progress *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Type for progress callbacks during indexing. Return a value less\n than zero to cancel the indexing or download.

\n", - "comments": "" + { + "name": "message", + "type": "const char *", + "comment": "The stash message." }, - "git_note_foreach_cb": { - "type": "callback", - "file": "git2/notes.h", - "line": 29, - "lineto": 30, - "args": [ - { - "name": "blob_id", - "type": "const git_oid *", - "comment": null - }, - { - "name": "annotated_object_id", - "type": "const git_oid *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_oid *blob_id, const git_oid *annotated_object_id, void *payload", - "sig": "const git_oid *::const git_oid *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for git_note_foreach.

\n", - "comments": "

Receives: - blob_id: Oid of the blob containing the message - annotated_object_id: Oid of the git object being annotated - payload: Payload data passed to git_note_foreach

\n" - }, - "git_odb_foreach_cb": { - "type": "callback", - "file": "git2/odb.h", - "line": 39, - "lineto": 39, - "args": [ - { - "name": "id", - "type": "const git_oid *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_oid *id, void *payload", - "sig": "const git_oid *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Function type for callbacks from git_odb_foreach.

\n", - "comments": "" + { + "name": "stash_id", + "type": "const git_oid *", + "comment": "The commit oid of the stashed state." }, - "git_packbuilder_foreach_cb": { - "type": "callback", - "file": "git2/pack.h", - "line": 208, - "lineto": 208, - "args": [ - { - "name": "buf", - "type": "void *", - "comment": "A pointer to the object's data" - }, - { - "name": "size", - "type": "size_t", - "comment": "The size of the underlying object" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_packbuilder_foreach" - } - ], - "argline": "void *buf, size_t size, void *payload", - "sig": "void *::size_t::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over packed objects

\n", - "comments": "" + { + "name": "payload", + "type": "void *", + "comment": "Extra parameter to callback function." + } + ], + "argline": "size_t index, const char *message, const git_oid *stash_id, void *payload", + "sig": "size_t::const char *::const git_oid *::void *", + "return": { + "type": "int", + "comment": " 0 to continue iterating or non-zero to stop." + }, + "description": "

This is a callback function you can provide to iterate over all the\n stashed states that will be invoked per entry.

\n", + "comments": "" + }, + "git_status_cb": { + "type": "callback", + "file": "git2/status.h", + "line": 63, + "lineto": 64, + "args": [ + { "name": "path", "type": "const char *", "comment": null }, + { "name": "status_flags", "type": "unsigned int", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const char *path, unsigned int status_flags, void *payload", + "sig": "const char *::unsigned int::void *", + "return": { "type": "int", "comment": null }, + "description": "

Function pointer to receive status on individual files

\n", + "comments": "

path is the relative path to the file from the root of the repository.

\n\n

status_flags is a combination of git_status_t values that apply.

\n\n

payload is the value you passed to the foreach function as payload.

\n" + }, + "git_submodule_cb": { + "type": "callback", + "file": "git2/submodule.h", + "line": 118, + "lineto": 119, + "args": [ + { + "name": "sm", + "type": "git_submodule *", + "comment": "git_submodule currently being visited" + }, + { + "name": "name", + "type": "const char *", + "comment": "name of the submodule" + }, + { + "name": "payload", + "type": "void *", + "comment": "value you passed to the foreach function as payload" + } + ], + "argline": "git_submodule *sm, const char *name, void *payload", + "sig": "git_submodule *::const char *::void *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Function pointer to receive each submodule

\n", + "comments": "" + }, + "git_tag_foreach_cb": { + "type": "callback", + "file": "git2/tag.h", + "line": 330, + "lineto": 330, + "args": [ + { "name": "name", "type": "const char *", "comment": "The tag name" }, + { "name": "oid", "type": "git_oid *", "comment": "The tag's OID" }, + { + "name": "payload", + "type": "void *", + "comment": "Payload passed to git_tag_foreach" + } + ], + "argline": "const char *name, git_oid *oid, void *payload", + "sig": "const char *::git_oid *::void *", + "return": { + "type": "int", + "comment": " non-zero to terminate the iteration" + }, + "description": "

Callback used to iterate over tag names

\n", + "comments": "" + }, + "git_trace_cb": { + "type": "callback", + "file": "git2/trace.h", + "line": 52, + "lineto": 52, + "args": [ + { "name": "level", "type": "git_trace_level_t", "comment": null }, + { "name": "msg", "type": "const char *", "comment": null } + ], + "argline": "git_trace_level_t level, const char *msg", + "sig": "git_trace_level_t::const char *", + "return": { "type": "void", "comment": null }, + "description": "

An instance for a tracing function

\n", + "comments": "" + }, + "git_transport_message_cb": { + "type": "callback", + "file": "git2/transport.h", + "line": 34, + "lineto": 34, + "args": [ + { + "name": "str", + "type": "const char *", + "comment": "The message from the transport" + }, + { + "name": "len", + "type": "int", + "comment": "The length of the message" }, - "git_packbuilder_progress": { - "type": "callback", - "file": "git2/pack.h", - "line": 237, - "lineto": 241, - "args": [ - { - "name": "stage", - "type": "int", - "comment": null - }, - { - "name": "current", - "type": "uint32_t", - "comment": null - }, - { - "name": "total", - "type": "uint32_t", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "int stage, uint32_t current, uint32_t total, void *payload", - "sig": "int::uint32_t::uint32_t::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Packbuilder progress notification function

\n", + { + "name": "payload", + "type": "void *", + "comment": "Payload provided by the caller" + } + ], + "argline": "const char *str, int len, void *payload", + "sig": "const char *::int::void *", + "return": { "type": "int", "comment": null }, + "description": "

Callback for messages received by the transport.

\n", + "comments": "

Return a negative value to cancel the network operation.

\n" + }, + "git_transport_cb": { + "type": "callback", + "file": "git2/transport.h", + "line": 37, + "lineto": 37, + "args": [ + { "name": "out", "type": "git_transport **", "comment": null }, + { "name": "owner", "type": "git_remote *", "comment": null }, + { "name": "param", "type": "void *", "comment": null } + ], + "argline": "git_transport **out, git_remote *owner, void *param", + "sig": "git_transport **::git_remote *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Signature of a function which creates a transport

\n", + "comments": "" + }, + "git_treebuilder_filter_cb": { + "type": "callback", + "file": "git2/tree.h", + "line": 349, + "lineto": 350, + "args": [ + { "name": "entry", "type": "const git_tree_entry *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const git_tree_entry *entry, void *payload", + "sig": "const git_tree_entry *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Callback for git_treebuilder_filter

\n", + "comments": "

The return value is treated as a boolean, with zero indicating that the entry should be left alone and any non-zero value meaning that the entry should be removed from the treebuilder list (i.e. filtered out).

\n" + }, + "git_treewalk_cb": { + "type": "callback", + "file": "git2/tree.h", + "line": 383, + "lineto": 384, + "args": [ + { "name": "root", "type": "const char *", "comment": null }, + { "name": "entry", "type": "const git_tree_entry *", "comment": null }, + { "name": "payload", "type": "void *", "comment": null } + ], + "argline": "const char *root, const git_tree_entry *entry, void *payload", + "sig": "const char *::const git_tree_entry *::void *", + "return": { "type": "int", "comment": null }, + "description": "

Callback for the tree traversal method

\n", + "comments": "" + } + }, + "globals": {}, + "types": [ + [ + "git_annotated_commit", + { + "decl": "git_annotated_commit", + "type": "struct", + "value": "git_annotated_commit", + "file": "git2/types.h", + "line": 198, + "lineto": 198, + "tdef": "typedef", + "description": " Annotated commits, the input to merge and rebase. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_annotated_commit_free", + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_from_ref", + "git_annotated_commit_from_revspec", + "git_annotated_commit_id", + "git_annotated_commit_lookup", + "git_annotated_commit_ref", + "git_branch_create_from_annotated", + "git_merge", + "git_merge_analysis", + "git_merge_analysis_for_ref", + "git_rebase_init", + "git_repository_set_head_detached_from_annotated", + "git_reset_from_annotated" + ] + } + } + ], + [ + "git_apply_flags_t", + { + "decl": ["GIT_APPLY_CHECK"], + "type": "enum", + "file": "git2/apply.h", + "line": 61, + "lineto": 67, + "block": "GIT_APPLY_CHECK", + "tdef": "typedef", + "description": " Flags controlling the behavior of git_apply ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_APPLY_CHECK", + "comments": "

Don't actually make changes, just test that the patch applies.\n This is the equivalent of git apply --check.

\n", + "value": 1 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_apply_location_t", + { + "decl": [ + "GIT_APPLY_LOCATION_WORKDIR", + "GIT_APPLY_LOCATION_INDEX", + "GIT_APPLY_LOCATION_BOTH" + ], + "type": "enum", + "file": "git2/apply.h", + "line": 127, + "lineto": 145, + "block": "GIT_APPLY_LOCATION_WORKDIR\nGIT_APPLY_LOCATION_INDEX\nGIT_APPLY_LOCATION_BOTH", + "tdef": "typedef", + "description": " Possible application locations for git_apply ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_APPLY_LOCATION_WORKDIR", + "comments": "

Apply the patch to the workdir, leaving the index untouched.\n This is the equivalent of git apply with no location argument.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_APPLY_LOCATION_INDEX", + "comments": "

Apply the patch to the index, leaving the working directory\n untouched. This is the equivalent of git apply --cached.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_APPLY_LOCATION_BOTH", + "comments": "

Apply the patch to both the working directory and the index.\n This is the equivalent of git apply --index.

\n", + "value": 2 + } + ], + "used": { "returns": [], "needs": ["git_apply"] } + } + ], + [ + "git_apply_options", + { + "decl": [ + "unsigned int version", + "git_apply_delta_cb delta_cb", + "git_apply_hunk_cb hunk_cb", + "void * payload", + "unsigned int flags" + ], + "type": "struct", + "value": "git_apply_options", + "file": "git2/apply.h", + "line": 77, + "lineto": 91, + "block": "unsigned int version\ngit_apply_delta_cb delta_cb\ngit_apply_hunk_cb hunk_cb\nvoid * payload\nunsigned int flags", + "tdef": "typedef", + "description": " Apply options structure", + "comments": "

Initialize with GIT_APPLY_OPTIONS_INIT. Alternatively, you can use git_apply_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " The version " + }, + { + "type": "git_apply_delta_cb", + "name": "delta_cb", + "comments": " When applying a patch, callback that will be made per delta (file). " + }, + { + "type": "git_apply_hunk_cb", + "name": "hunk_cb", + "comments": " When applying a patch, callback that will be made per hunk. " + }, + { + "type": "void *", + "name": "payload", + "comments": " Payload passed to both delta_cb \n&\n hunk_cb. " + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " Bitmask of git_apply_flags_t " + } + ], + "used": { + "returns": [], + "needs": ["git_apply", "git_apply_options_init", "git_apply_to_tree"] + } + } + ], + [ + "git_attr_options", + { + "decl": [ + "unsigned int version", + "unsigned int flags", + "git_oid * commit_id", + "git_oid attr_commit_id" + ], + "type": "struct", + "value": "git_attr_options", + "file": "git2/attr.h", + "line": 142, + "lineto": 159, + "block": "unsigned int version\nunsigned int flags\ngit_oid * commit_id\ngit_oid attr_commit_id", + "tdef": "typedef", + "description": " An options structure for querying attributes.", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "unsigned int", + "name": "flags", + "comments": " A combination of GIT_ATTR_CHECK flags " + }, + { "type": "git_oid *", "name": "commit_id", "comments": "" }, + { + "type": "git_oid", + "name": "attr_commit_id", + "comments": " The commit to load attributes from, when\n `GIT_ATTR_CHECK_INCLUDE_COMMIT` is specified." + } + ], + "used": { + "returns": [], + "needs": [ + "git_attr_foreach_ext", + "git_attr_get_ext", + "git_attr_get_many_ext" + ] + } + } + ], + [ + "git_attr_value_t", + { + "decl": [ + "GIT_ATTR_VALUE_UNSPECIFIED", + "GIT_ATTR_VALUE_TRUE", + "GIT_ATTR_VALUE_FALSE", + "GIT_ATTR_VALUE_STRING" + ], + "type": "enum", + "file": "git2/attr.h", + "line": 82, + "lineto": 87, + "block": "GIT_ATTR_VALUE_UNSPECIFIED\nGIT_ATTR_VALUE_TRUE\nGIT_ATTR_VALUE_FALSE\nGIT_ATTR_VALUE_STRING", + "tdef": "typedef", + "description": " Possible states for an attribute", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_ATTR_VALUE_UNSPECIFIED", + "comments": "

The attribute has been left unspecified

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_ATTR_VALUE_TRUE", + "comments": "

The attribute has been set

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_ATTR_VALUE_FALSE", + "comments": "

The attribute has been unset

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_ATTR_VALUE_STRING", + "comments": "

This attribute has a value

\n", + "value": 3 + } + ], + "used": { "returns": ["git_attr_value"], "needs": [] } + } + ], + [ + "git_blame", + { + "decl": "git_blame", + "type": "struct", + "value": "git_blame", + "file": "git2/blame.h", + "line": 202, + "lineto": 202, + "tdef": "typedef", + "description": " Opaque structure to hold blame results ", + "comments": "", + "used": { + "returns": [ + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline" + ], + "needs": [ + "git_blame_buffer", + "git_blame_file", + "git_blame_free", + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline", + "git_blame_get_hunk_count", + "git_blame_init_options", + "git_blame_options_init" + ] + } + } + ], + [ + "git_blame_flag_t", + { + "decl": [ + "GIT_BLAME_NORMAL", + "GIT_BLAME_TRACK_COPIES_SAME_FILE", + "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES", + "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES", + "GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES", + "GIT_BLAME_FIRST_PARENT", + "GIT_BLAME_USE_MAILMAP", + "GIT_BLAME_IGNORE_WHITESPACE" + ], + "type": "enum", + "file": "git2/blame.h", + "line": 26, + "lineto": 77, + "block": "GIT_BLAME_NORMAL\nGIT_BLAME_TRACK_COPIES_SAME_FILE\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES\nGIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES\nGIT_BLAME_FIRST_PARENT\nGIT_BLAME_USE_MAILMAP\nGIT_BLAME_IGNORE_WHITESPACE", + "tdef": "typedef", + "description": " Flags for indicating option behavior for git_blame APIs.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_BLAME_NORMAL", + "comments": "

Normal blame, the default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_BLAME_TRACK_COPIES_SAME_FILE", + "comments": "

Track lines that have moved within a file (like git blame -M).

\n\n

This is not yet implemented and reserved for future use.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES", + "comments": "

Track lines that have moved across files in the same commit\n (like git blame -C).

\n\n

This is not yet implemented and reserved for future use.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES", + "comments": "

Track lines that have been copied from another file that exists\n in the same commit (like git blame -CC). Implies SAME_FILE.

\n\n

This is not yet implemented and reserved for future use.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES", + "comments": "

Track lines that have been copied from another file that exists in\n any commit (like git blame -CCC). Implies SAME_COMMIT_COPIES.

\n\n

This is not yet implemented and reserved for future use.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_BLAME_FIRST_PARENT", + "comments": "

Restrict the search of commits to those reachable following only\n the first parents.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_BLAME_USE_MAILMAP", + "comments": "

Use mailmap file to map author and committer names and email\n addresses to canonical real names and email addresses. The\n mailmap will be read from the working directory, or HEAD in a\n bare repository.

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_BLAME_IGNORE_WHITESPACE", + "comments": "

Ignore whitespace differences

\n", + "value": 64 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_blame_hunk", + { + "decl": [ + "size_t lines_in_hunk", + "git_oid final_commit_id", + "size_t final_start_line_number", + "git_signature * final_signature", + "git_oid orig_commit_id", + "const char * orig_path", + "size_t orig_start_line_number", + "git_signature * orig_signature", + "char boundary" + ], + "type": "struct", + "value": "git_blame_hunk", + "file": "git2/blame.h", + "line": 145, + "lineto": 198, + "block": "size_t lines_in_hunk\ngit_oid final_commit_id\nsize_t final_start_line_number\ngit_signature * final_signature\ngit_oid orig_commit_id\nconst char * orig_path\nsize_t orig_start_line_number\ngit_signature * orig_signature\nchar boundary", + "tdef": "typedef", + "description": " Structure that represents a blame hunk.", + "comments": "", + "fields": [ + { + "type": "size_t", + "name": "lines_in_hunk", + "comments": " The number of lines in this hunk." + }, + { + "type": "git_oid", + "name": "final_commit_id", + "comments": " The OID of the commit where this line was last changed." + }, + { + "type": "size_t", + "name": "final_start_line_number", + "comments": " The 1-based line number where this hunk begins, in the final version\n of the file." + }, + { + "type": "git_signature *", + "name": "final_signature", + "comments": " The author of `final_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." + }, + { + "type": "git_oid", + "name": "orig_commit_id", + "comments": " The OID of the commit where this hunk was found.\n This will usually be the same as `final_commit_id`, except when\n `GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES` has been specified." + }, + { + "type": "const char *", + "name": "orig_path", + "comments": " The path to the file where this hunk originated, as of the commit\n specified by `orig_commit_id`." + }, + { + "type": "size_t", + "name": "orig_start_line_number", + "comments": " The 1-based line number where this hunk begins in the file named by\n `orig_path` in the commit specified by `orig_commit_id`." + }, + { + "type": "git_signature *", + "name": "orig_signature", + "comments": " The author of `orig_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." + }, + { + "type": "char", + "name": "boundary", + "comments": " The 1 iff the hunk has been tracked to a boundary commit (the root,\n or the commit specified in git_blame_options.oldest_commit)" + } + ], + "used": { + "returns": [ + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline" + ], + "needs": [] + } + } + ], + [ + "git_blame_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "uint16_t min_match_characters", + "git_oid newest_commit", + "git_oid oldest_commit", + "size_t min_line", + "size_t max_line" + ], + "type": "struct", + "value": "git_blame_options", + "file": "git2/blame.h", + "line": 86, + "lineto": 123, + "block": "unsigned int version\nuint32_t flags\nuint16_t min_match_characters\ngit_oid newest_commit\ngit_oid oldest_commit\nsize_t min_line\nsize_t max_line", + "tdef": "typedef", + "description": " Blame options structure", + "comments": "

Initialize with GIT_BLAME_OPTIONS_INIT. Alternatively, you can use git_blame_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of `git_blame_flag_t` " + }, + { + "type": "uint16_t", + "name": "min_match_characters", + "comments": " The lower bound on the number of alphanumeric characters that\n must be detected as moving/copying within a file for it to\n associate those lines with the parent commit. The default value\n is 20.\n\n This value only takes effect if any of the `GIT_BLAME_TRACK_COPIES_*`\n flags are specified." + }, + { + "type": "git_oid", + "name": "newest_commit", + "comments": " The id of the newest commit to consider. The default is HEAD. " + }, + { + "type": "git_oid", + "name": "oldest_commit", + "comments": " The id of the oldest commit to consider.\n The default is the first commit encountered with a NULL parent." + }, + { + "type": "size_t", + "name": "min_line", + "comments": " The first line in the file to blame.\n The default is 1 (line numbers start with 1)." + }, + { + "type": "size_t", + "name": "max_line", + "comments": " The last line in the file to blame.\n The default is the last line of the file." + } + ], + "used": { + "returns": [], + "needs": [ + "git_blame_file", + "git_blame_init_options", + "git_blame_options_init" + ] + } + } + ], + [ + "git_blob", + { + "decl": "git_blob", + "type": "struct", + "value": "git_blob", + "file": "git2/types.h", + "line": 133, + "lineto": 133, + "tdef": "typedef", + "description": " In-memory representation of a blob object. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_blob_dup", + "git_blob_filter", + "git_blob_filter_options_init", + "git_blob_filtered_content", + "git_blob_free", + "git_blob_id", + "git_blob_is_binary", + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_blob_owner", + "git_blob_rawcontent", + "git_blob_rawsize", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_filter_list_apply_to_blob", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_blob", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs" + ] + } + } + ], + [ + "git_blob_filter_flag_t", + { + "decl": [ + "GIT_BLOB_FILTER_CHECK_FOR_BINARY", + "GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES", + "GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD", + "GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT" + ], + "type": "enum", + "file": "git2/blob.h", + "line": 102, + "lineto": 123, + "block": "GIT_BLOB_FILTER_CHECK_FOR_BINARY\nGIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", + "tdef": "typedef", + "description": " Flags to control the functionality of `git_blob_filter`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_BLOB_FILTER_CHECK_FOR_BINARY", + "comments": "

When set, filters will not be applied to binary files.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES", + "comments": "

When set, filters will not load configuration from the\n system-wide gitattributes in /etc (or system equivalent).

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD", + "comments": "

When set, filters will be loaded from a .gitattributes file\n in the HEAD commit.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", + "comments": "

When set, filters will be loaded from a .gitattributes file\n in the specified commit.

\n", + "value": 8 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_blob_filter_options", + { + "decl": [ + "int version", + "uint32_t flags", + "git_oid * commit_id", + "git_oid attr_commit_id" + ], + "type": "struct", + "value": "git_blob_filter_options", + "file": "git2/blob.h", + "line": 132, + "lineto": 149, + "block": "int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", + "tdef": "typedef", + "description": " The options used when applying filter options to a file.", + "comments": "

Initialize with GIT_BLOB_FILTER_OPTIONS_INIT. Alternatively, you can use git_blob_filter_options_init.

\n", + "fields": [ + { "type": "int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " Flags to control the filtering process, see `git_blob_filter_flag_t` above " + }, + { "type": "git_oid *", "name": "commit_id", "comments": "" }, + { + "type": "git_oid", + "name": "attr_commit_id", + "comments": " The commit to load attributes from, when\n `GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT` is specified." + } + ], + "used": { + "returns": [], + "needs": ["git_blob_filter", "git_blob_filter_options_init"] + } + } + ], + [ + "git_branch_iterator", + { + "decl": "git_branch_iterator", + "type": "struct", + "value": "git_branch_iterator", + "file": "git2/branch.h", + "line": 90, + "lineto": 90, + "tdef": "typedef", + "description": " Iterator type for branches ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_branch_iterator_free", + "git_branch_iterator_new", + "git_branch_next" + ] + } + } + ], + [ + "git_branch_t", + { + "decl": ["GIT_BRANCH_LOCAL", "GIT_BRANCH_REMOTE", "GIT_BRANCH_ALL"], + "type": "enum", + "file": "git2/types.h", + "line": 215, + "lineto": 219, + "block": "GIT_BRANCH_LOCAL\nGIT_BRANCH_REMOTE\nGIT_BRANCH_ALL", + "tdef": "typedef", + "description": " Basic type of any Git branch. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_BRANCH_LOCAL", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_BRANCH_REMOTE", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_BRANCH_ALL", + "comments": "", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": [ + "git_branch_iterator_new", + "git_branch_lookup", + "git_branch_next" + ] + } + } + ], + [ + "git_buf", + { + "decl": ["char * ptr", "size_t reserved", "size_t size"], + "type": "struct", + "value": "git_buf", + "file": "git2/buffer.h", + "line": 33, + "lineto": 52, + "block": "char * ptr\nsize_t reserved\nsize_t size", + "tdef": "typedef", + "description": " A data buffer for exporting data from libgit2", + "comments": "

Sometimes libgit2 wants to return an allocated data buffer to the caller and have the caller take responsibility for freeing that memory. To make ownership clear in these cases, libgit2 uses git_buf to return this data. Callers should use git_buf_dispose() to release the memory when they are done.

\n\n

A git_buf contains a pointer to a NUL-terminated C string, and the length of the string (not including the NUL terminator).

\n", + "fields": [ + { + "type": "char *", + "name": "ptr", + "comments": " The buffer contents. `ptr` points to the start of the buffer\n being returned. The buffer's length (in bytes) is specified\n by the `size` member of the structure, and contains a NUL\n terminator at position `(size + 1)`." + }, + { + "type": "size_t", + "name": "reserved", + "comments": " This field is reserved and unused." + }, + { + "type": "size_t", + "name": "size", + "comments": " The length (in bytes) of the buffer pointed to by `ptr`,\n not including a NUL terminator." + } + ], + "used": { + "returns": [], + "needs": [ + "git_blob_filter", + "git_blob_filtered_content", + "git_branch_remote_name", + "git_branch_upstream_merge", + "git_branch_upstream_name", + "git_branch_upstream_remote", + "git_buf_contains_nul", + "git_buf_dispose", + "git_buf_free", + "git_buf_grow", + "git_buf_is_binary", + "git_buf_set", + "git_commit_create_buffer", + "git_commit_extract_signature", + "git_commit_header_field", + "git_commit_signing_cb", + "git_config_find_global", + "git_config_find_programdata", + "git_config_find_system", + "git_config_find_xdg", + "git_config_get_path", + "git_config_get_string_buf", + "git_config_parse_path", + "git_describe_format", + "git_diff_commit_as_email", + "git_diff_format_email", + "git_diff_stats_to_buf", + "git_diff_to_buf", + "git_email_create_from_commit", + "git_email_create_from_diff", + "git_filter_list_apply_to_blob", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_data", + "git_filter_list_apply_to_file", + "git_filter_list_stream_data", + "git_message_prettify", + "git_note_default_ref", + "git_object_short_id", + "git_packbuilder_write_buf", + "git_patch_to_buf", + "git_refspec_rtransform", + "git_refspec_transform", + "git_remote_default_branch", + "git_repository_discover", + "git_repository_item_path", + "git_repository_message", + "git_submodule_resolve_url", + "git_treebuilder_write_with_buffer", + "git_url_resolve_cb", + "git_worktree_is_locked" + ] + } + } + ], + [ + "git_cert", + { + "decl": "git_cert", + "type": "struct", + "value": "git_cert", + "file": "git2/types.h", + "line": 262, + "lineto": 262, + "block": "git_cert_t cert_type", + "tdef": "typedef", + "description": " Parent type for `git_cert_hostkey` and `git_cert_x509`.", + "comments": "", + "fields": [ + { + "type": "git_cert_t", + "name": "cert_type", + "comments": " Type of certificate. A `GIT_CERT_` value." + } + ], + "used": { + "returns": [], + "needs": ["git_transport_certificate_check_cb"] + } + } + ], + [ + "git_cert_hostkey", + { + "decl": [ + "git_cert parent", + "git_cert_ssh_t type", + "unsigned char [16] hash_md5", + "unsigned char [20] hash_sha1", + "unsigned char [32] hash_sha256", + "git_cert_ssh_raw_type_t raw_type", + "const char * hostkey", + "size_t hostkey_len" + ], + "type": "struct", + "value": "git_cert_hostkey", + "file": "git2/cert.h", + "line": 108, + "lineto": 151, + "block": "git_cert parent\ngit_cert_ssh_t type\nunsigned char [16] hash_md5\nunsigned char [20] hash_sha1\nunsigned char [32] hash_sha256\ngit_cert_ssh_raw_type_t raw_type\nconst char * hostkey\nsize_t hostkey_len", + "tdef": "typedef", + "description": " Hostkey information taken from libssh2", + "comments": "", + "fields": [ + { + "type": "git_cert", + "name": "parent", + "comments": " The parent cert " + }, + { + "type": "git_cert_ssh_t", + "name": "type", + "comments": " A bitmask containing the available fields." + }, + { + "type": "unsigned char [16]", + "name": "hash_md5", + "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_MD5` set, this will\n have the MD5 hash of the hostkey." + }, + { + "type": "unsigned char [20]", + "name": "hash_sha1", + "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_SHA1` set, this will\n have the SHA-1 hash of the hostkey." + }, + { + "type": "unsigned char [32]", + "name": "hash_sha256", + "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_SHA256` set, this will\n have the SHA-256 hash of the hostkey." + }, + { + "type": "git_cert_ssh_raw_type_t", + "name": "raw_type", + "comments": " Raw hostkey type. If `type` has `GIT_CERT_SSH_RAW` set, this will\n have the type of the raw hostkey." + }, + { + "type": "const char *", + "name": "hostkey", + "comments": " Pointer to the raw hostkey. If `type` has `GIT_CERT_SSH_RAW` set,\n this will have the raw contents of the hostkey." + }, + { + "type": "size_t", + "name": "hostkey_len", + "comments": " Raw hostkey length. If `type` has `GIT_CERT_SSH_RAW` set, this will\n have the length of the raw contents of the hostkey." + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_cert_ssh_t", + { + "decl": [ + "GIT_CERT_SSH_MD5", + "GIT_CERT_SSH_SHA1", + "GIT_CERT_SSH_SHA256", + "GIT_CERT_SSH_RAW" + ], + "type": "enum", + "file": "git2/cert.h", + "line": 77, + "lineto": 86, + "block": "GIT_CERT_SSH_MD5\nGIT_CERT_SSH_SHA1\nGIT_CERT_SSH_SHA256\nGIT_CERT_SSH_RAW", + "tdef": "typedef", + "description": " Type of SSH host fingerprint", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_CERT_SSH_MD5", + "comments": "

MD5 is available

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CERT_SSH_SHA1", + "comments": "

SHA-1 is available

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CERT_SSH_SHA256", + "comments": "

SHA-256 is available

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CERT_SSH_RAW", + "comments": "

Raw hostkey is available

\n", + "value": 8 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_cert_t", + { + "decl": [ + "GIT_CERT_NONE", + "GIT_CERT_X509", + "GIT_CERT_HOSTKEY_LIBSSH2", + "GIT_CERT_STRARRAY" + ], + "type": "enum", + "file": "git2/cert.h", + "line": 25, + "lineto": 48, + "block": "GIT_CERT_NONE\nGIT_CERT_X509\nGIT_CERT_HOSTKEY_LIBSSH2\nGIT_CERT_STRARRAY\nGIT_CERT_NONE\nGIT_CERT_X509\nGIT_CERT_HOSTKEY_LIBSSH2\nGIT_CERT_STRARRAY", + "tdef": "typedef", + "description": " Type of host certificate structure that is passed to the check callback", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_CERT_NONE", + "comments": "

No information about the certificate is available. This may\n happen when using curl.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CERT_X509", + "comments": "

The data argument to the callback will be a pointer to\n the DER-encoded data.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CERT_HOSTKEY_LIBSSH2", + "comments": "

The data argument to the callback will be a pointer to a\n git_cert_hostkey structure.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CERT_STRARRAY", + "comments": "

The data argument to the callback will be a pointer to a\n git_strarray with name:content strings containing\n information about the certificate. This is used when using\n curl.

\n", + "value": 3 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_cert_x509", + { + "decl": ["git_cert parent", "void * data", "size_t len"], + "type": "struct", + "value": "git_cert_x509", + "file": "git2/cert.h", + "line": 156, + "lineto": 168, + "block": "git_cert parent\nvoid * data\nsize_t len", + "tdef": "typedef", + "description": " X.509 certificate information", + "comments": "", + "fields": [ + { + "type": "git_cert", + "name": "parent", + "comments": " The parent cert " + }, + { + "type": "void *", + "name": "data", + "comments": " Pointer to the X.509 certificate data" + }, + { + "type": "size_t", + "name": "len", + "comments": " Length of the memory block pointed to by `data`." + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_checkout_notify_t", + { + "decl": [ + "GIT_CHECKOUT_NOTIFY_NONE", + "GIT_CHECKOUT_NOTIFY_CONFLICT", + "GIT_CHECKOUT_NOTIFY_DIRTY", + "GIT_CHECKOUT_NOTIFY_UPDATED", + "GIT_CHECKOUT_NOTIFY_UNTRACKED", + "GIT_CHECKOUT_NOTIFY_IGNORED", + "GIT_CHECKOUT_NOTIFY_ALL" + ], + "type": "enum", + "file": "git2/checkout.h", + "line": 214, + "lineto": 245, + "block": "GIT_CHECKOUT_NOTIFY_NONE\nGIT_CHECKOUT_NOTIFY_CONFLICT\nGIT_CHECKOUT_NOTIFY_DIRTY\nGIT_CHECKOUT_NOTIFY_UPDATED\nGIT_CHECKOUT_NOTIFY_UNTRACKED\nGIT_CHECKOUT_NOTIFY_IGNORED\nGIT_CHECKOUT_NOTIFY_ALL", + "tdef": "typedef", + "description": " Checkout notification flags", + "comments": "

Checkout will invoke an options notification callback (notify_cb) for certain cases - you pick which ones via notify_flags:

\n\n

Returning a non-zero value from this callback will cancel the checkout. The non-zero return value will be propagated back and returned by the git_checkout_... call.

\n\n

Notification callbacks are made prior to modifying any files on disk, so canceling on any notification will still happen prior to any files being modified.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_NONE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_CONFLICT", + "comments": "

Invokes checkout on conflicting paths.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_DIRTY", + "comments": "

Notifies about "dirty" files, i.e. those that do not need an update\n but no longer match the baseline. Core git displays these files when\n checkout runs, but won't stop the checkout.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_UPDATED", + "comments": "

Sends notification for any file changed.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_UNTRACKED", + "comments": "

Notifies about untracked files.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_IGNORED", + "comments": "

Notifies about ignored files.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NOTIFY_ALL", + "comments": "

Notifies about ignored files.

\n", + "value": 65535 + } + ], + "used": { "returns": [], "needs": ["git_checkout_notify_cb"] } + } + ], + [ + "git_checkout_options", + { + "decl": [ + "unsigned int version", + "unsigned int checkout_strategy", + "int disable_filters", + "unsigned int dir_mode", + "unsigned int file_mode", + "int file_open_flags", + "unsigned int notify_flags", + "git_checkout_notify_cb notify_cb", + "void * notify_payload", + "git_checkout_progress_cb progress_cb", + "void * progress_payload", + "git_strarray paths", + "git_tree * baseline", + "git_index * baseline_index", + "const char * target_directory", + "const char * ancestor_label", + "const char * our_label", + "const char * their_label", + "git_checkout_perfdata_cb perfdata_cb", + "void * perfdata_payload" + ], + "type": "struct", + "value": "git_checkout_options", + "file": "git2/checkout.h", + "line": 282, + "lineto": 345, + "block": "unsigned int version\nunsigned int checkout_strategy\nint disable_filters\nunsigned int dir_mode\nunsigned int file_mode\nint file_open_flags\nunsigned int notify_flags\ngit_checkout_notify_cb notify_cb\nvoid * notify_payload\ngit_checkout_progress_cb progress_cb\nvoid * progress_payload\ngit_strarray paths\ngit_tree * baseline\ngit_index * baseline_index\nconst char * target_directory\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_checkout_perfdata_cb perfdata_cb\nvoid * perfdata_payload", + "tdef": "typedef", + "description": " Checkout options structure", + "comments": "

Initialize with GIT_CHECKOUT_OPTIONS_INIT. Alternatively, you can use git_checkout_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " The version " + }, + { + "type": "unsigned int", + "name": "checkout_strategy", + "comments": " default will be a safe checkout " + }, + { + "type": "int", + "name": "disable_filters", + "comments": " don't apply filters like CRLF conversion " + }, + { + "type": "unsigned int", + "name": "dir_mode", + "comments": " default is 0755 " + }, + { + "type": "unsigned int", + "name": "file_mode", + "comments": " default is 0644 or 0755 as dictated by blob " + }, + { + "type": "int", + "name": "file_open_flags", + "comments": " default is O_CREAT | O_TRUNC | O_WRONLY " + }, + { + "type": "unsigned int", + "name": "notify_flags", + "comments": " see `git_checkout_notify_t` above " + }, + { + "type": "git_checkout_notify_cb", + "name": "notify_cb", + "comments": " Optional callback to get notifications on specific file states.\n " + }, + { + "type": "void *", + "name": "notify_payload", + "comments": " Payload passed to notify_cb " + }, + { + "type": "git_checkout_progress_cb", + "name": "progress_cb", + "comments": " Optional callback to notify the consumer of checkout progress. " + }, + { + "type": "void *", + "name": "progress_payload", + "comments": " Payload passed to progress_cb " + }, + { + "type": "git_strarray", + "name": "paths", + "comments": " A list of wildmatch patterns or paths.\n\n By default, all paths are processed. If you pass an array of wildmatch\n patterns, those will be used to filter which paths should be taken into\n account.\n\n Use GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH to treat as a simple list." + }, + { + "type": "git_tree *", + "name": "baseline", + "comments": " The expected content of the working directory; defaults to HEAD.\n\n If the working directory does not match this baseline information,\n that will produce a checkout conflict." + }, + { + "type": "git_index *", + "name": "baseline_index", + "comments": " Like `baseline` above, though expressed as an index. This\n option overrides `baseline`." + }, + { + "type": "const char *", + "name": "target_directory", + "comments": " alternative checkout path to workdir " + }, + { + "type": "const char *", + "name": "ancestor_label", + "comments": " the name of the common ancestor side of conflicts " + }, + { + "type": "const char *", + "name": "our_label", + "comments": " the name of the \"our\" side of conflicts " + }, + { + "type": "const char *", + "name": "their_label", + "comments": " the name of the \"their\" side of conflicts " + }, + { + "type": "git_checkout_perfdata_cb", + "name": "perfdata_cb", + "comments": " Optional callback to notify the consumer of performance data. " + }, + { + "type": "void *", + "name": "perfdata_payload", + "comments": " Payload passed to perfdata_cb " + } + ], + "used": { + "returns": [], + "needs": [ + "git_checkout_head", + "git_checkout_index", + "git_checkout_options_init", + "git_checkout_tree", + "git_merge", + "git_reset", + "git_reset_from_annotated" + ] + } + } + ], + [ + "git_checkout_perfdata", + { + "decl": [ + "size_t mkdir_calls", + "size_t stat_calls", + "size_t chmod_calls" + ], + "type": "struct", + "value": "git_checkout_perfdata", + "file": "git2/checkout.h", + "line": 248, + "lineto": 252, + "block": "size_t mkdir_calls\nsize_t stat_calls\nsize_t chmod_calls", + "tdef": "typedef", + "description": " Checkout performance-reporting structure ", + "comments": "", + "fields": [ + { "type": "size_t", "name": "mkdir_calls", "comments": "" }, + { "type": "size_t", "name": "stat_calls", "comments": "" }, + { "type": "size_t", "name": "chmod_calls", "comments": "" } + ], + "used": { "returns": [], "needs": ["git_checkout_perfdata_cb"] } + } + ], + [ + "git_checkout_strategy_t", + { + "decl": [ + "GIT_CHECKOUT_NONE", + "GIT_CHECKOUT_SAFE", + "GIT_CHECKOUT_FORCE", + "GIT_CHECKOUT_RECREATE_MISSING", + "GIT_CHECKOUT_ALLOW_CONFLICTS", + "GIT_CHECKOUT_REMOVE_UNTRACKED", + "GIT_CHECKOUT_REMOVE_IGNORED", + "GIT_CHECKOUT_UPDATE_ONLY", + "GIT_CHECKOUT_DONT_UPDATE_INDEX", + "GIT_CHECKOUT_NO_REFRESH", + "GIT_CHECKOUT_SKIP_UNMERGED", + "GIT_CHECKOUT_USE_OURS", + "GIT_CHECKOUT_USE_THEIRS", + "GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH", + "GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES", + "GIT_CHECKOUT_DONT_OVERWRITE_IGNORED", + "GIT_CHECKOUT_CONFLICT_STYLE_MERGE", + "GIT_CHECKOUT_CONFLICT_STYLE_DIFF3", + "GIT_CHECKOUT_DONT_REMOVE_EXISTING", + "GIT_CHECKOUT_DONT_WRITE_INDEX", + "GIT_CHECKOUT_DRY_RUN", + "GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3", + "GIT_CHECKOUT_UPDATE_SUBMODULES", + "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED" + ], + "type": "enum", + "file": "git2/checkout.h", + "line": 106, + "lineto": 198, + "block": "GIT_CHECKOUT_NONE\nGIT_CHECKOUT_SAFE\nGIT_CHECKOUT_FORCE\nGIT_CHECKOUT_RECREATE_MISSING\nGIT_CHECKOUT_ALLOW_CONFLICTS\nGIT_CHECKOUT_REMOVE_UNTRACKED\nGIT_CHECKOUT_REMOVE_IGNORED\nGIT_CHECKOUT_UPDATE_ONLY\nGIT_CHECKOUT_DONT_UPDATE_INDEX\nGIT_CHECKOUT_NO_REFRESH\nGIT_CHECKOUT_SKIP_UNMERGED\nGIT_CHECKOUT_USE_OURS\nGIT_CHECKOUT_USE_THEIRS\nGIT_CHECKOUT_DISABLE_PATHSPEC_MATCH\nGIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES\nGIT_CHECKOUT_DONT_OVERWRITE_IGNORED\nGIT_CHECKOUT_CONFLICT_STYLE_MERGE\nGIT_CHECKOUT_CONFLICT_STYLE_DIFF3\nGIT_CHECKOUT_DONT_REMOVE_EXISTING\nGIT_CHECKOUT_DONT_WRITE_INDEX\nGIT_CHECKOUT_DRY_RUN\nGIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3\nGIT_CHECKOUT_UPDATE_SUBMODULES\nGIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", + "tdef": "typedef", + "description": " Checkout behavior flags", + "comments": "

In libgit2, checkout is used to update the working directory and index to match a target tree. Unlike git checkout, it does not move the HEAD commit for you - use git_repository_set_head or the like to do that.

\n\n

Checkout looks at (up to) four things: the "target" tree you want to check out, the "baseline" tree of what was checked out previously, the working directory for actual files, and the index for staged changes.

\n\n

You give checkout one of three strategies for update:

\n\n
    \n
  • GIT_CHECKOUT_NONE is a dry-run strategy that checks for conflicts, etc., but doesn't make any actual changes.

  • \n
  • GIT_CHECKOUT_FORCE is at the opposite extreme, taking any action to make the working directory match the target (including potentially discarding modified files).

  • \n
  • GIT_CHECKOUT_SAFE is between these two options, it will only make modifications that will not lose changes.

    \n\n
                     |  target == baseline   |  target != baseline  |    ---------------------|-----------------------|----------------------|     workdir == baseline |       no action       |  create, update, or  |                         |                       |     delete file      |    ---------------------|-----------------------|----------------------|     workdir exists and  |       no action       |   conflict (notify   |       is != baseline    | notify dirty MODIFIED | and cancel checkout) |    ---------------------|-----------------------|----------------------|      workdir missing,   | notify dirty DELETED  |     create file      |      baseline present   |                       |                      |    ---------------------|-----------------------|----------------------|\n
  • \n
\n\n

To emulate git checkout, use GIT_CHECKOUT_SAFE with a checkout notification callback (see below) that displays information about dirty files. The default behavior will cancel checkout on conflicts.

\n\n

To emulate git checkout-index, use GIT_CHECKOUT_SAFE with a notification callback that cancels the operation if a dirty-but-existing file is found in the working directory. This core git command isn't quite "force" but is sensitive about some types of changes.

\n\n

To emulate git checkout -f, use GIT_CHECKOUT_FORCE.

\n\n

There are some additional flags to modify the behavior of checkout:

\n\n
    \n
  • GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates even if there are conflicts (instead of cancelling the checkout).

  • \n
  • GIT_CHECKOUT_REMOVE_UNTRACKED means remove untracked files (i.e. not in target, baseline, or index, and not ignored) from the working dir.

  • \n
  • GIT_CHECKOUT_REMOVE_IGNORED means remove ignored files (that are also untracked) from the working directory as well.

  • \n
  • GIT_CHECKOUT_UPDATE_ONLY means to only update the content of files that already exist. Files will not be created nor deleted. This just skips applying adds, deletes, and typechanges.

  • \n
  • GIT_CHECKOUT_DONT_UPDATE_INDEX prevents checkout from writing the updated files' information to the index.

  • \n
  • Normally, checkout will reload the index and git attributes from disk before any operations. GIT_CHECKOUT_NO_REFRESH prevents this reload.

  • \n
  • Unmerged index entries are conflicts. GIT_CHECKOUT_SKIP_UNMERGED skips files with unmerged index entries instead. GIT_CHECKOUT_USE_OURS and GIT_CHECKOUT_USE_THEIRS to proceed with the checkout using either the stage 2 ("ours") or stage 3 ("theirs") version of files in the index.

  • \n
  • GIT_CHECKOUT_DONT_OVERWRITE_IGNORED prevents ignored files from being overwritten. Normally, files that are ignored in the working directory are not considered "precious" and may be overwritten if the checkout target contains that file.

  • \n
  • GIT_CHECKOUT_DONT_REMOVE_EXISTING prevents checkout from removing files or folders that fold to the same name on case insensitive filesystems. This can cause files to retain their existing names and write through existing symbolic links.

  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_CHECKOUT_NONE", + "comments": "

default is a dry run, no actual updates

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_SAFE", + "comments": "

Allow safe updates that cannot overwrite uncommitted data.\n If the uncommitted changes don't conflict with the checked out files,\n the checkout will still proceed, leaving the changes intact.

\n\n

Mutually exclusive with GIT_CHECKOUT_FORCE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_FORCE", + "comments": "

Allow all updates to force working directory to look like index.

\n\n

Mutually exclusive with GIT_CHECKOUT_SAFE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_RECREATE_MISSING", + "comments": "

Allow checkout to recreate missing files

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_ALLOW_CONFLICTS", + "comments": "

Allow checkout to make safe updates even if conflicts are found

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_REMOVE_UNTRACKED", + "comments": "

Remove untracked files not in index (that are not ignored)

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_REMOVE_IGNORED", + "comments": "

Remove ignored files not in index

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_UPDATE_ONLY", + "comments": "

Only update existing files, don't create new ones

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DONT_UPDATE_INDEX", + "comments": "

Normally checkout updates index entries as it goes; this stops that.\n Implies GIT_CHECKOUT_DONT_WRITE_INDEX.

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_NO_REFRESH", + "comments": "

Don't refresh index/config/etc before doing checkout

\n", + "value": 512 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_SKIP_UNMERGED", + "comments": "

Allow checkout to skip unmerged files

\n", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_USE_OURS", + "comments": "

For unmerged files, checkout stage 2 from index

\n", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_USE_THEIRS", + "comments": "

For unmerged files, checkout stage 3 from index

\n", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH", + "comments": "

Treat pathspec as simple list of exact match file paths

\n", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES", + "comments": "

Ignore directories in use, they will be left empty

\n", + "value": 262144 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DONT_OVERWRITE_IGNORED", + "comments": "

Don't overwrite ignored files that exist in the checkout target

\n", + "value": 524288 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_CONFLICT_STYLE_MERGE", + "comments": "

Write normal merge files for conflicts

\n", + "value": 1048576 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_CONFLICT_STYLE_DIFF3", + "comments": "

Include common ancestor data in diff3 format files for conflicts

\n", + "value": 2097152 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DONT_REMOVE_EXISTING", + "comments": "

Don't overwrite existing files or folders

\n", + "value": 4194304 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DONT_WRITE_INDEX", + "comments": "

Normally checkout writes the index upon completion; this prevents that.

\n", + "value": 8388608 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_DRY_RUN", + "comments": "

Show what would be done by a checkout. Stop after sending\n notifications; don't update the working directory or index.

\n", + "value": 16777216 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3", + "comments": "

Include common ancestor data in zdiff3 format for conflicts

\n", + "value": 33554432 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_UPDATE_SUBMODULES", + "comments": "

Recursively checkout submodules with same options (NOT IMPLEMENTED)

\n", + "value": 65536 + }, + { + "type": "int", + "name": "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", + "comments": "

Recursively checkout submodules if HEAD moved in super repo (NOT IMPLEMENTED)

\n", + "value": 131072 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_cherrypick_options", + { + "decl": [ + "unsigned int version", + "unsigned int mainline", + "git_merge_options merge_opts", + "git_checkout_options checkout_opts" + ], + "type": "struct", + "value": "git_cherrypick_options", + "file": "git2/cherrypick.h", + "line": 26, + "lineto": 34, + "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", + "tdef": "typedef", + "description": " Cherry-pick options", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "unsigned int", + "name": "mainline", + "comments": " For merge commits, the \"mainline\" is treated as the parent. " + }, + { + "type": "git_merge_options", + "name": "merge_opts", + "comments": " Options for the merging " + }, + { + "type": "git_checkout_options", + "name": "checkout_opts", + "comments": " Options for the checkout " + } + ], + "used": { + "returns": [], + "needs": ["git_cherrypick", "git_cherrypick_options_init"] + } + } + ], + [ + "git_clone_local_t", + { + "decl": [ + "GIT_CLONE_LOCAL_AUTO", + "GIT_CLONE_LOCAL", + "GIT_CLONE_NO_LOCAL", + "GIT_CLONE_LOCAL_NO_LINKS" + ], + "type": "enum", + "file": "git2/clone.h", + "line": 33, + "lineto": 53, + "block": "GIT_CLONE_LOCAL_AUTO\nGIT_CLONE_LOCAL\nGIT_CLONE_NO_LOCAL\nGIT_CLONE_LOCAL_NO_LINKS", + "tdef": "typedef", + "description": " Options for bypassing the git-aware transport on clone. Bypassing\n it means that instead of a fetch, libgit2 will copy the object\n database directory instead of figuring out what it needs, which is\n faster. If possible, it will hardlink the files to save space.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_CLONE_LOCAL_AUTO", + "comments": "

Auto-detect (default), libgit2 will bypass the git-aware\n transport for local paths, but use a normal fetch for\n file:// urls.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CLONE_LOCAL", + "comments": "

Bypass the git-aware transport even for a file:// url.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CLONE_NO_LOCAL", + "comments": "

Do no bypass the git-aware transport

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CLONE_LOCAL_NO_LINKS", + "comments": "

Bypass the git-aware transport, but do not try to use\n hardlinks.

\n", + "value": 3 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_clone_options", + { + "decl": [ + "unsigned int version", + "git_checkout_options checkout_opts", + "git_fetch_options fetch_opts", + "int bare", + "git_clone_local_t local", + "const char * checkout_branch", + "git_repository_create_cb repository_cb", + "void * repository_cb_payload", + "git_remote_create_cb remote_cb", + "void * remote_cb_payload" + ], + "type": "struct", + "value": "git_clone_options", + "file": "git2/clone.h", + "line": 103, + "lineto": 164, + "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint bare\ngit_clone_local_t local\nconst char * checkout_branch\ngit_repository_create_cb repository_cb\nvoid * repository_cb_payload\ngit_remote_create_cb remote_cb\nvoid * remote_cb_payload", + "tdef": "typedef", + "description": " Clone options structure", + "comments": "

Initialize with GIT_CLONE_OPTIONS_INIT. Alternatively, you can use git_clone_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "git_checkout_options", + "name": "checkout_opts", + "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`." + }, + { + "type": "git_fetch_options", + "name": "fetch_opts", + "comments": " Options which control the fetch, including callbacks.\n\n The callbacks are used for reporting fetch progress, and for acquiring\n credentials in the event they are needed." + }, + { + "type": "int", + "name": "bare", + "comments": " Set to zero (false) to create a standard repo, or non-zero\n for a bare repo" + }, + { + "type": "git_clone_local_t", + "name": "local", + "comments": " Whether to use a fetch or copy the object database." + }, + { + "type": "const char *", + "name": "checkout_branch", + "comments": " The name of the branch to checkout. NULL means use the\n remote's default branch." + }, + { + "type": "git_repository_create_cb", + "name": "repository_cb", + "comments": " A callback used to create the new repository into which to\n clone. If NULL, the 'bare' field will be used to determine\n whether to create a bare repository." + }, + { + "type": "void *", + "name": "repository_cb_payload", + "comments": " An opaque payload to pass to the git_repository creation callback.\n This parameter is ignored unless repository_cb is non-NULL." + }, + { + "type": "git_remote_create_cb", + "name": "remote_cb", + "comments": " A callback used to create the git_remote, prior to its being\n used to perform the clone operation. See the documentation for\n git_remote_create_cb for details. This parameter may be NULL,\n indicating that git_clone should provide default behavior." + }, + { + "type": "void *", + "name": "remote_cb_payload", + "comments": " An opaque payload to pass to the git_remote creation callback.\n This parameter is ignored unless remote_cb is non-NULL." + } + ], + "used": { + "returns": [], + "needs": ["git_clone", "git_clone_options_init"] + } + } + ], + [ + "git_commit", + { + "decl": "git_commit", + "type": "struct", + "value": "git_commit", + "file": "git2/types.h", + "line": 136, + "lineto": 136, + "tdef": "typedef", + "description": " Parsed representation of a commit object. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_branch_create", + "git_cherrypick", + "git_cherrypick_commit", + "git_commit_amend", + "git_commit_author", + "git_commit_author_with_mailmap", + "git_commit_body", + "git_commit_committer", + "git_commit_committer_with_mailmap", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_cb", + "git_commit_create_from_stage", + "git_commit_dup", + "git_commit_free", + "git_commit_header_field", + "git_commit_id", + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_commit_message", + "git_commit_message_encoding", + "git_commit_message_raw", + "git_commit_nth_gen_ancestor", + "git_commit_owner", + "git_commit_parent", + "git_commit_parent_id", + "git_commit_parentcount", + "git_commit_raw_header", + "git_commit_summary", + "git_commit_time", + "git_commit_time_offset", + "git_commit_tree", + "git_commit_tree_id", + "git_commitarray_dispose", + "git_diff_commit_as_email", + "git_email_create_from_commit", + "git_merge_commits", + "git_note_commit_create", + "git_note_commit_iterator_new", + "git_note_commit_read", + "git_note_commit_remove", + "git_odb_set_commit_graph", + "git_repository_commit_parents", + "git_revert", + "git_revert_commit" + ] + } + } + ], + [ + "git_commit_graph", + { + "decl": "git_commit_graph", + "type": "struct", + "value": "git_commit_graph", + "file": "git2/types.h", + "line": 109, + "lineto": 109, + "tdef": "typedef", + "description": " A git commit-graph ", + "comments": "", + "used": { "returns": [], "needs": ["git_odb_set_commit_graph"] } + } + ], + [ + "git_commit_graph_split_strategy_t", + { + "decl": ["GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE"], + "type": "enum", + "file": "git2/sys/commit_graph.h", + "line": 102, + "lineto": 108, + "block": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", + "tdef": "typedef", + "description": " The strategy to use when adding a new set of commits to a pre-existing\n commit-graph chain.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", + "comments": "

Do not split commit-graph files. The other split strategy-related option\n fields are ignored.

\n", + "value": 0 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_commit_graph_writer", + { + "decl": "git_commit_graph_writer", + "type": "struct", + "value": "git_commit_graph_writer", + "file": "git2/types.h", + "line": 112, + "lineto": 112, + "tdef": "typedef", + "description": " a writer for commit-graph files. ", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_commitarray", + { + "decl": ["git_commit *const * commits", "size_t count"], + "type": "struct", + "value": "git_commitarray", + "file": "git2/commit.h", + "line": 588, + "lineto": 591, + "block": "git_commit *const * commits\nsize_t count", + "tdef": "typedef", + "description": " An array of commits returned from the library ", + "comments": "", + "fields": [ + { "type": "git_commit *const *", "name": "commits", "comments": "" }, + { "type": "size_t", "name": "count", "comments": "" } + ], + "used": { + "returns": [], + "needs": ["git_commitarray_dispose", "git_repository_commit_parents"] + } + } + ], + [ + "git_config", + { + "decl": "git_config", + "type": "struct", + "value": "git_config", + "file": "git2/types.h", + "line": 157, + "lineto": 157, + "tdef": "typedef", + "description": " Memory representation of a set of config files ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_config_add_file_ondisk", + "git_config_backend_foreach_match", + "git_config_delete_entry", + "git_config_delete_multivar", + "git_config_entry_free", + "git_config_foreach", + "git_config_foreach_cb", + "git_config_foreach_match", + "git_config_free", + "git_config_get_bool", + "git_config_get_entry", + "git_config_get_int32", + "git_config_get_int64", + "git_config_get_mapped", + "git_config_get_multivar_foreach", + "git_config_get_path", + "git_config_get_string", + "git_config_get_string_buf", + "git_config_iterator_free", + "git_config_iterator_glob_new", + "git_config_iterator_new", + "git_config_lock", + "git_config_lookup_map_value", + "git_config_multivar_iterator_new", + "git_config_new", + "git_config_next", + "git_config_open_default", + "git_config_open_global", + "git_config_open_level", + "git_config_open_ondisk", + "git_config_set_bool", + "git_config_set_int32", + "git_config_set_int64", + "git_config_set_multivar", + "git_config_set_string", + "git_config_snapshot", + "git_repository_config", + "git_repository_config_snapshot" + ] + } + } + ], + [ + "git_config_backend", + { + "decl": "git_config_backend", + "type": "struct", + "value": "git_config_backend", + "file": "git2/types.h", + "line": 160, + "lineto": 160, + "tdef": "typedef", + "description": " Interface to access a configuration file ", + "comments": "", + "used": { "returns": [], "needs": ["git_config_backend_foreach_match"] } + } + ], + [ + "git_config_backend_memory_options", + { + "decl": [ + "unsigned int version", + "const char * backend_type", + "const char * origin_path" + ], + "type": "struct", + "value": "git_config_backend_memory_options", + "file": "git2/sys/config.h", + "line": 129, + "lineto": 143, + "block": "unsigned int version\nconst char * backend_type\nconst char * origin_path", + "tdef": "typedef", + "description": " Options for in-memory configuration backends. ", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "const char *", + "name": "backend_type", + "comments": " The type of this backend (eg, \"command line\"). If this is\n NULL, then this will be \"in-memory\"." + }, + { + "type": "const char *", + "name": "origin_path", + "comments": " The path to the origin; if this is NULL then it will be\n left unset in the resulting configuration entries." + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_config_entry", + { + "decl": [ + "const char * name", + "const char * value", + "const char * backend_type", + "const char * origin_path", + "unsigned int include_depth", + "git_config_level_t level", + "void (*)(struct git_config_entry *) free" + ], + "type": "struct", + "value": "git_config_entry", + "file": "git2/config.h", + "line": 79, + "lineto": 106, + "block": "const char * name\nconst char * value\nconst char * backend_type\nconst char * origin_path\nunsigned int include_depth\ngit_config_level_t level\nvoid (*)(struct git_config_entry *) free", + "tdef": "typedef", + "description": " An entry in a configuration file", + "comments": "", + "fields": [ + { + "type": "const char *", + "name": "name", + "comments": " Name of the configuration entry (normalized) " + }, + { + "type": "const char *", + "name": "value", + "comments": " Literal (string) value of the entry " + }, + { + "type": "const char *", + "name": "backend_type", + "comments": " The type of backend that this entry exists in (eg, \"file\") " + }, + { + "type": "const char *", + "name": "origin_path", + "comments": " The path to the origin of this entry. For config files, this is\n the path to the file." + }, + { + "type": "unsigned int", + "name": "include_depth", + "comments": " Depth of includes where this variable was found " + }, + { + "type": "git_config_level_t", + "name": "level", + "comments": " Configuration level for the file this was found in " + }, + { + "type": "void (*)(struct git_config_entry *)", + "name": "free", + "comments": "" + } + ], + "used": { + "returns": [], + "needs": [ + "git_config_entry_free", + "git_config_foreach_cb", + "git_config_get_entry", + "git_config_next" + ] + } + } + ], + [ + "git_config_iterator", + { + "decl": "git_config_iterator", + "type": "struct", + "value": "git_config_iterator", + "file": "git2/config.h", + "line": 127, + "lineto": 127, + "tdef": "typedef", + "description": " An opaque structure for a configuration iterator", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_config_iterator_free", + "git_config_iterator_glob_new", + "git_config_iterator_new", + "git_config_multivar_iterator_new", + "git_config_next" + ] + } + } + ], + [ + "git_config_level_t", + { + "decl": [ + "GIT_CONFIG_LEVEL_PROGRAMDATA", + "GIT_CONFIG_LEVEL_SYSTEM", + "GIT_CONFIG_LEVEL_XDG", + "GIT_CONFIG_LEVEL_GLOBAL", + "GIT_CONFIG_LEVEL_LOCAL", + "GIT_CONFIG_LEVEL_WORKTREE", + "GIT_CONFIG_LEVEL_APP", + "GIT_CONFIG_HIGHEST_LEVEL" + ], + "type": "enum", + "file": "git2/config.h", + "line": 42, + "lineto": 74, + "block": "GIT_CONFIG_LEVEL_PROGRAMDATA\nGIT_CONFIG_LEVEL_SYSTEM\nGIT_CONFIG_LEVEL_XDG\nGIT_CONFIG_LEVEL_GLOBAL\nGIT_CONFIG_LEVEL_LOCAL\nGIT_CONFIG_LEVEL_WORKTREE\nGIT_CONFIG_LEVEL_APP\nGIT_CONFIG_HIGHEST_LEVEL", + "tdef": "typedef", + "description": " Priority level of a config file.", + "comments": "

These priority levels correspond to the natural escalation logic (from higher to lower) when reading or searching for config entries in git.git. Meaning that for the same key, the configuration in the local configuration is preferred over the configuration in the system configuration file.

\n\n

Callers can add their own custom configuration, beginning at the GIT_CONFIG_LEVEL_APP level.

\n\n

Writes, by default, occur in the highest priority level backend that is writable. This ordering can be overridden with git_config_set_writeorder.

\n\n

git_config_open_default() and git_repository_config() honor those priority levels as well.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_PROGRAMDATA", + "comments": "

System-wide on Windows, for compatibility with portable git

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_SYSTEM", + "comments": "

System-wide configuration file; /etc/gitconfig on Linux systems

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_XDG", + "comments": "

XDG compatible configuration file; typically ~/.config/git/config

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_GLOBAL", + "comments": "

User-specific configuration file (also called Global configuration\n file); typically ~/.gitconfig

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_LOCAL", + "comments": "

Repository specific configuration file; $WORK_DIR/.git/config on\n non-bare repos

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_WORKTREE", + "comments": "

Worktree specific configuration file; $GIT_DIR/config.worktree

\n", + "value": 6 + }, + { + "type": "int", + "name": "GIT_CONFIG_LEVEL_APP", + "comments": "

Application specific configuration file; freely defined by applications

\n", + "value": 7 + }, + { + "type": "int", + "name": "GIT_CONFIG_HIGHEST_LEVEL", + "comments": "

Represents the highest level available config file (i.e. the most\n specific config file available that actually is loaded)

\n", + "value": -1 + } + ], + "used": { + "returns": [], + "needs": ["git_config_add_file_ondisk", "git_config_open_level"] + } + } + ], + [ + "git_configmap", + { + "decl": [ + "git_configmap_t type", + "const char * str_match", + "int map_value" + ], + "type": "struct", + "value": "git_configmap", + "file": "git2/config.h", + "line": 142, + "lineto": 146, + "block": "git_configmap_t type\nconst char * str_match\nint map_value", + "tdef": "typedef", + "description": " Mapping from config variables to values.", + "comments": "", + "fields": [ + { "type": "git_configmap_t", "name": "type", "comments": "" }, + { "type": "const char *", "name": "str_match", "comments": "" }, + { "type": "int", "name": "map_value", "comments": "" } + ], + "used": { + "returns": [], + "needs": ["git_config_get_mapped", "git_config_lookup_map_value"] + } + } + ], + [ + "git_configmap_t", + { + "decl": [ + "GIT_CONFIGMAP_FALSE", + "GIT_CONFIGMAP_TRUE", + "GIT_CONFIGMAP_INT32", + "GIT_CONFIGMAP_STRING" + ], + "type": "enum", + "file": "git2/config.h", + "line": 132, + "lineto": 137, + "block": "GIT_CONFIGMAP_FALSE\nGIT_CONFIGMAP_TRUE\nGIT_CONFIGMAP_INT32\nGIT_CONFIGMAP_STRING", + "tdef": "typedef", + "description": " Config var type", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_CONFIGMAP_FALSE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_CONFIGMAP_TRUE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CONFIGMAP_INT32", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CONFIGMAP_STRING", + "comments": "", + "value": 3 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_credential", + { + "decl": "git_credential", + "type": "struct", + "value": "git_credential", + "file": "git2/credential.h", + "line": 84, + "lineto": 84, + "tdef": "typedef", + "description": " The base structure for all credential types", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_credential_acquire_cb", + "git_credential_default_new", + "git_credential_free", + "git_credential_get_username", + "git_credential_has_username", + "git_credential_ssh_custom_new", + "git_credential_ssh_interactive_new", + "git_credential_ssh_key_from_agent", + "git_credential_ssh_key_memory_new", + "git_credential_ssh_key_new", + "git_credential_username_new", + "git_credential_userpass", + "git_credential_userpass_plaintext_new" + ] + } + } + ], + [ + "git_credential_default", + { + "decl": "git_credential_default", + "type": "struct", + "value": "git_credential_default", + "file": "git2/credential.h", + "line": 92, + "lineto": 92, + "tdef": "typedef", + "description": " A key for NTLM/Kerberos \"default\" credentials ", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_credential_ssh_custom", + { + "decl": "git_credential_ssh_custom", + "type": "struct", + "value": "git_credential_ssh_custom", + "file": "git2/credential.h", + "line": 107, + "lineto": 107, + "tdef": "typedef", + "description": " A key with a custom signature function", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_credential_ssh_interactive", + { + "decl": "git_credential_ssh_interactive", + "type": "struct", + "value": "git_credential_ssh_interactive", + "file": "git2/credential.h", + "line": 102, + "lineto": 102, + "tdef": "typedef", + "description": " Keyboard-interactive based ssh authentication", + "comments": "", + "used": { + "returns": [], + "needs": ["git_credential_ssh_interactive_new"] + } + } + ], + [ + "git_credential_ssh_key", + { + "decl": "git_credential_ssh_key", + "type": "struct", + "value": "git_credential_ssh_key", + "file": "git2/credential.h", + "line": 97, + "lineto": 97, + "tdef": "typedef", + "description": " A ssh key from disk", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_credential_t", + { + "decl": [ + "GIT_CREDENTIAL_USERPASS_PLAINTEXT", + "GIT_CREDENTIAL_SSH_KEY", + "GIT_CREDENTIAL_SSH_CUSTOM", + "GIT_CREDENTIAL_DEFAULT", + "GIT_CREDENTIAL_SSH_INTERACTIVE", + "GIT_CREDENTIAL_USERNAME", + "GIT_CREDENTIAL_SSH_MEMORY" + ], + "type": "enum", + "file": "git2/credential.h", + "line": 27, + "lineto": 79, + "block": "GIT_CREDENTIAL_USERPASS_PLAINTEXT\nGIT_CREDENTIAL_SSH_KEY\nGIT_CREDENTIAL_SSH_CUSTOM\nGIT_CREDENTIAL_DEFAULT\nGIT_CREDENTIAL_SSH_INTERACTIVE\nGIT_CREDENTIAL_USERNAME\nGIT_CREDENTIAL_SSH_MEMORY", + "tdef": "typedef", + "description": " Supported credential types", + "comments": "

This represents the various types of authentication methods supported by the library.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_CREDENTIAL_USERPASS_PLAINTEXT", + "comments": "

A vanilla user/password request

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_SSH_KEY", + "comments": "

An SSH key-based authentication request

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_SSH_CUSTOM", + "comments": "

An SSH key-based authentication request, with a custom signature

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_DEFAULT", + "comments": "

An NTLM/Negotiate-based authentication request.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_SSH_INTERACTIVE", + "comments": "

An SSH interactive authentication request

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_USERNAME", + "comments": "

Username-only authentication request

\n\n

Used as a pre-authentication step if the underlying transport\n (eg. SSH, with no username in its URL) does not know which username\n to use.

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_CREDENTIAL_SSH_MEMORY", + "comments": "

An SSH key-based authentication request

\n\n

Allows credentials to be read from memory instead of files.\n Note that because of differences in crypto backend support, it might\n not be functional.

\n", + "value": 64 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_credential_username", + { + "decl": "git_credential_username", + "type": "struct", + "value": "git_credential_username", + "file": "git2/credential.h", + "line": 89, + "lineto": 89, + "tdef": "typedef", + "description": " Username-only credential information ", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_credential_userpass_payload", + { + "decl": ["const char * username", "const char * password"], + "type": "struct", + "value": "git_credential_userpass_payload", + "file": "git2/credential_helpers.h", + "line": 24, + "lineto": 27, + "block": "const char * username\nconst char * password", + "tdef": "typedef", + "description": " Payload for git_credential_userpass_plaintext.", + "comments": "", + "fields": [ + { "type": "const char *", "name": "username", "comments": "" }, + { "type": "const char *", "name": "password", "comments": "" } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_delta_t", + { + "decl": [ + "GIT_DELTA_UNMODIFIED", + "GIT_DELTA_ADDED", + "GIT_DELTA_DELETED", + "GIT_DELTA_MODIFIED", + "GIT_DELTA_RENAMED", + "GIT_DELTA_COPIED", + "GIT_DELTA_IGNORED", + "GIT_DELTA_UNTRACKED", + "GIT_DELTA_TYPECHANGE", + "GIT_DELTA_UNREADABLE", + "GIT_DELTA_CONFLICTED" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 224, + "lineto": 236, + "block": "GIT_DELTA_UNMODIFIED\nGIT_DELTA_ADDED\nGIT_DELTA_DELETED\nGIT_DELTA_MODIFIED\nGIT_DELTA_RENAMED\nGIT_DELTA_COPIED\nGIT_DELTA_IGNORED\nGIT_DELTA_UNTRACKED\nGIT_DELTA_TYPECHANGE\nGIT_DELTA_UNREADABLE\nGIT_DELTA_CONFLICTED", + "tdef": "typedef", + "description": " What type of change is described by a git_diff_delta?", + "comments": "

GIT_DELTA_RENAMED and GIT_DELTA_COPIED will only show up if you run git_diff_find_similar() on the diff object.

\n\n

GIT_DELTA_TYPECHANGE only shows up given GIT_DIFF_INCLUDE_TYPECHANGE in the option flags (otherwise type changes will be split into ADDED / DELETED pairs).

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DELTA_UNMODIFIED", + "comments": "

no changes

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DELTA_ADDED", + "comments": "

entry does not exist in old version

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DELTA_DELETED", + "comments": "

entry does not exist in new version

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DELTA_MODIFIED", + "comments": "

entry content changed between old and new

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_DELTA_RENAMED", + "comments": "

entry was renamed between old and new

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DELTA_COPIED", + "comments": "

entry was copied from another old entry

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_DELTA_IGNORED", + "comments": "

entry is ignored item in workdir

\n", + "value": 6 + }, + { + "type": "int", + "name": "GIT_DELTA_UNTRACKED", + "comments": "

entry is untracked item in workdir

\n", + "value": 7 + }, + { + "type": "int", + "name": "GIT_DELTA_TYPECHANGE", + "comments": "

type of entry changed between old and new

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_DELTA_UNREADABLE", + "comments": "

entry is unreadable

\n", + "value": 9 + }, + { + "type": "int", + "name": "GIT_DELTA_CONFLICTED", + "comments": "

entry in the index is conflicted

\n", + "value": 10 + } + ], + "used": { + "returns": [], + "needs": ["git_diff_num_deltas_of_type", "git_diff_status_char"] + } + } + ], + [ + "git_describe_format_options", + { + "decl": [ + "unsigned int version", + "unsigned int abbreviated_size", + "int always_use_long_format", + "const char * dirty_suffix" + ], + "type": "struct", + "value": "git_describe_format_options", + "file": "git2/describe.h", + "line": 91, + "lineto": 111, + "block": "unsigned int version\nunsigned int abbreviated_size\nint always_use_long_format\nconst char * dirty_suffix", + "tdef": "typedef", + "description": " Describe format options structure", + "comments": "

Initialize with GIT_DESCRIBE_FORMAT_OPTIONS_INIT. Alternatively, you can use git_describe_format_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "unsigned int", + "name": "abbreviated_size", + "comments": " Size of the abbreviated commit id to use. This value is the\n lower bound for the length of the abbreviated string. The\n default is 7." + }, + { + "type": "int", + "name": "always_use_long_format", + "comments": " Set to use the long format even when a shorter name could be used." + }, + { + "type": "const char *", + "name": "dirty_suffix", + "comments": " If the workdir is dirty and this is set, this string will\n be appended to the description string." + } + ], + "used": { + "returns": [], + "needs": ["git_describe_format", "git_describe_format_options_init"] + } + } + ], + [ + "git_describe_options", + { + "decl": [ + "unsigned int version", + "unsigned int max_candidates_tags", + "unsigned int describe_strategy", + "const char * pattern", + "int only_follow_first_parent", + "int show_commit_oid_as_fallback" + ], + "type": "struct", + "value": "git_describe_options", + "file": "git2/describe.h", + "line": 43, + "lineto": 61, + "block": "unsigned int version\nunsigned int max_candidates_tags\nunsigned int describe_strategy\nconst char * pattern\nint only_follow_first_parent\nint show_commit_oid_as_fallback", + "tdef": "typedef", + "description": " Describe options structure", + "comments": "

Initialize with GIT_DESCRIBE_OPTIONS_INIT. Alternatively, you can use git_describe_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "unsigned int", + "name": "max_candidates_tags", + "comments": " default: 10 " + }, + { + "type": "unsigned int", + "name": "describe_strategy", + "comments": " default: GIT_DESCRIBE_DEFAULT " + }, + { "type": "const char *", "name": "pattern", "comments": "" }, + { + "type": "int", + "name": "only_follow_first_parent", + "comments": " When calculating the distance from the matching tag or\n reference, only walk down the first-parent ancestry." + }, + { + "type": "int", + "name": "show_commit_oid_as_fallback", + "comments": " If no matching tag or reference is found, the describe\n operation would normally fail. If this option is set, it\n will instead fall back to showing the full id of the\n commit." + } + ], + "used": { + "returns": [], + "needs": [ + "git_describe_commit", + "git_describe_options_init", + "git_describe_workdir" + ] + } + } + ], + [ + "git_describe_result", + { + "decl": "git_describe_result", + "type": "struct", + "value": "git_describe_result", + "file": "git2/describe.h", + "line": 134, + "lineto": 134, + "tdef": "typedef", + "description": " A struct that stores the result of a describe operation.", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_describe_commit", + "git_describe_format", + "git_describe_result_free", + "git_describe_workdir" + ] + } + } + ], + [ + "git_describe_strategy_t", + { + "decl": [ + "GIT_DESCRIBE_DEFAULT", + "GIT_DESCRIBE_TAGS", + "GIT_DESCRIBE_ALL" + ], + "type": "enum", + "file": "git2/describe.h", + "line": 30, + "lineto": 34, + "block": "GIT_DESCRIBE_DEFAULT\nGIT_DESCRIBE_TAGS\nGIT_DESCRIBE_ALL", + "tdef": "typedef", + "description": " Reference lookup strategy", + "comments": "

These behave like the --tags and --all options to git-describe, namely they say to look for any reference in either refs/tags/ or refs/ respectively.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DESCRIBE_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DESCRIBE_TAGS", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DESCRIBE_ALL", + "comments": "", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff", + { + "decl": "git_diff", + "type": "struct", + "value": "git_diff", + "file": "git2/diff.h", + "line": 196, + "lineto": 196, + "tdef": "typedef", + "description": " The diff object that contains all individual file deltas.", + "comments": "

A diff represents the cumulative list of differences between two snapshots of a repository (possibly filtered by a set of file name patterns).

\n\n

Calculating diffs is generally done in two phases: building a list of diffs then traversing it. This makes is easier to share logic across the various types of diffs (tree vs tree, workdir vs index, etc.), and also allows you to insert optional diff post-processing phases, such as rename detection, in between the steps. When you are done with a diff object, it must be freed.

\n\n

This is an opaque structure which will be allocated by one of the diff generator functions below (such as git_diff_tree_to_tree). You are responsible for releasing the object memory when done, using the git_diff_free() function.

\n", + "used": { + "returns": [ + "git_diff_get_delta", + "git_patch_get_delta", + "git_pathspec_match_list_diff_entry" + ], + "needs": [ + "git_apply", + "git_apply_delta_cb", + "git_apply_hunk_cb", + "git_apply_to_tree", + "git_checkout_notify_cb", + "git_diff_binary_cb", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_commit_as_email", + "git_diff_file_cb", + "git_diff_find_options_init", + "git_diff_find_similar", + "git_diff_foreach", + "git_diff_format_email", + "git_diff_format_email_options_init", + "git_diff_free", + "git_diff_from_buffer", + "git_diff_get_delta", + "git_diff_get_stats", + "git_diff_hunk_cb", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_is_sorted_icase", + "git_diff_line_cb", + "git_diff_merge", + "git_diff_notify_cb", + "git_diff_num_deltas", + "git_diff_num_deltas_of_type", + "git_diff_options_init", + "git_diff_patchid", + "git_diff_patchid_options_init", + "git_diff_print", + "git_diff_progress_cb", + "git_diff_stats_deletions", + "git_diff_stats_files_changed", + "git_diff_stats_free", + "git_diff_stats_insertions", + "git_diff_stats_to_buf", + "git_diff_to_buf", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_email_create_from_diff", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs", + "git_patch_from_buffers", + "git_patch_from_diff", + "git_patch_get_hunk", + "git_patch_get_line_in_hunk", + "git_patch_print", + "git_pathspec_match_diff" + ] + } + } + ], + [ + "git_diff_binary", + { + "decl": [ + "unsigned int contains_data", + "git_diff_binary_file old_file", + "git_diff_binary_file new_file" + ], + "type": "struct", + "value": "git_diff_binary", + "file": "git2/diff.h", + "line": 544, + "lineto": 556, + "block": "unsigned int contains_data\ngit_diff_binary_file old_file\ngit_diff_binary_file new_file", + "tdef": "typedef", + "description": " Structure describing the binary contents of a diff.", + "comments": "

A binary file / delta is a file (or pair) for which no text diffs should be generated. A diff can contain delta entries that are binary, but no diff content will be output for those files. There is a base heuristic for binary detection and you can further tune the behavior with git attributes or diff flags and option settings.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "contains_data", + "comments": " Whether there is data in this binary structure or not.\n\n If this is `1`, then this was produced and included binary content.\n If this is `0` then this was generated knowing only that a binary\n file changed but without providing the data, probably from a patch\n that said `Binary files a/file.txt and b/file.txt differ`." + }, + { + "type": "git_diff_binary_file", + "name": "old_file", + "comments": " The contents of the old file. " + }, + { + "type": "git_diff_binary_file", + "name": "new_file", + "comments": " The contents of the new file. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_binary_cb", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_foreach" + ] + } + } + ], + [ + "git_diff_binary_file", + { + "decl": [ + "git_diff_binary_t type", + "const char * data", + "size_t datalen", + "size_t inflatedlen" + ], + "type": "struct", + "value": "git_diff_binary_file", + "file": "git2/diff.h", + "line": 521, + "lineto": 533, + "block": "git_diff_binary_t type\nconst char * data\nsize_t datalen\nsize_t inflatedlen", + "tdef": "typedef", + "description": " The contents of one of the files in a binary diff. ", + "comments": "", + "fields": [ + { + "type": "git_diff_binary_t", + "name": "type", + "comments": " The type of binary data for this file. " + }, + { + "type": "const char *", + "name": "data", + "comments": " The binary data, deflated. " + }, + { + "type": "size_t", + "name": "datalen", + "comments": " The length of the binary data. " + }, + { + "type": "size_t", + "name": "inflatedlen", + "comments": " The length of the binary data after inflation. " + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_binary_t", + { + "decl": [ + "GIT_DIFF_BINARY_NONE", + "GIT_DIFF_BINARY_LITERAL", + "GIT_DIFF_BINARY_DELTA" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 509, + "lineto": 518, + "block": "GIT_DIFF_BINARY_NONE\nGIT_DIFF_BINARY_LITERAL\nGIT_DIFF_BINARY_DELTA", + "tdef": "typedef", + "description": " When producing a binary diff, the binary data returned will be\n either the deflated full (\"literal\") contents of the file, or\n the deflated binary delta between the two sides (whichever is\n smaller).", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_BINARY_NONE", + "comments": "

There is no binary delta.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_BINARY_LITERAL", + "comments": "

The binary data is the literal contents of the file.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_BINARY_DELTA", + "comments": "

The binary data is the delta from one side to the other.

\n", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_delta", + { + "decl": [ + "git_delta_t status", + "uint32_t flags", + "uint16_t similarity", + "uint16_t nfiles", + "git_diff_file old_file", + "git_diff_file new_file" + ], + "type": "struct", + "value": "git_diff_delta", + "file": "git2/diff.h", + "line": 324, + "lineto": 331, + "block": "git_delta_t status\nuint32_t flags\nuint16_t similarity\nuint16_t nfiles\ngit_diff_file old_file\ngit_diff_file new_file", + "tdef": "typedef", + "description": " Description of changes to one entry.", + "comments": "

A delta is a file pair with an old and new revision. The old version may be absent if the file was just created and the new version may be absent if the file was deleted. A diff is mostly just a list of deltas.

\n\n

When iterating over a diff, this will be passed to most callbacks and you can use the contents to understand exactly what has changed.

\n\n

The old_file represents the "from" side of the diff and the new_file represents to "to" side of the diff. What those means depend on the function that was used to generate the diff and will be documented below. You can also use the GIT_DIFF_REVERSE flag to flip it around.

\n\n

Although the two sides of the delta are named "old_file" and "new_file", they actually may correspond to entries that represent a file, a symbolic link, a submodule commit id, or even a tree (if you are tracking type changes or ignored/untracked directories).

\n\n

Under some circumstances, in the name of efficiency, not all fields will be filled in, but we generally try to fill in as much as possible. One example is that the "flags" field may not have either the BINARY or the NOT_BINARY flag set to avoid examining file contents if you do not pass in hunk and/or line callbacks to the diff foreach iteration function. It will just use the git attributes for those files.

\n\n

The similarity score is zero unless you call git_diff_find_similar() which does a similarity analysis of files in the diff. Use that function to do rename and copy detection, and to split heavily modified files in add/delete pairs. After that call, deltas with a status of GIT_DELTA_RENAMED or GIT_DELTA_COPIED will have a similarity score between 0 and 100 indicating how similar the old and new sides are.

\n\n

If you ask git_diff_find_similar to find heavily modified files to break, but to not actually break the records, then GIT_DELTA_MODIFIED records may have a non-zero similarity score if the self-similarity is below the split threshold. To display this value like core Git, invert the score (a la printf("M%03d", 100 - delta->similarity)).

\n", + "fields": [ + { "type": "git_delta_t", "name": "status", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " git_diff_flag_t values " + }, + { + "type": "uint16_t", + "name": "similarity", + "comments": " for RENAMED and COPIED, value 0-100 " + }, + { + "type": "uint16_t", + "name": "nfiles", + "comments": " number of files in this delta " + }, + { "type": "git_diff_file", "name": "old_file", "comments": "" }, + { "type": "git_diff_file", "name": "new_file", "comments": "" } + ], + "used": { + "returns": [ + "git_diff_get_delta", + "git_patch_get_delta", + "git_pathspec_match_list_diff_entry" + ], + "needs": [ + "git_apply_delta_cb", + "git_diff_binary_cb", + "git_diff_file_cb", + "git_diff_hunk_cb", + "git_diff_line_cb", + "git_diff_notify_cb" + ] + } + } + ], + [ + "git_diff_file", + { + "decl": [ + "git_oid id", + "const char * path", + "git_object_size_t size", + "uint32_t flags", + "uint16_t mode", + "uint16_t id_abbrev" + ], + "type": "struct", + "value": "git_diff_file", + "file": "git2/diff.h", + "line": 245, + "lineto": 282, + "block": "git_oid id\nconst char * path\ngit_object_size_t size\nuint32_t flags\nuint16_t mode\nuint16_t id_abbrev", + "tdef": "typedef", + "description": " Description of one side of a delta.", + "comments": "

Although this is called a "file", it could represent a file, a symbolic link, a submodule commit id, or even a tree (although that only if you are tracking type changes or ignored/untracked directories).

\n", + "fields": [ + { + "type": "git_oid", + "name": "id", + "comments": " The `git_oid` of the item. If the entry represents an\n absent side of a diff (e.g. the `old_file` of a `GIT_DELTA_ADDED` delta),\n then the oid will be zeroes." + }, + { + "type": "const char *", + "name": "path", + "comments": " The NUL-terminated path to the entry relative to the working\n directory of the repository." + }, + { + "type": "git_object_size_t", + "name": "size", + "comments": " The size of the entry in bytes." + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of the `git_diff_flag_t` types" + }, + { + "type": "uint16_t", + "name": "mode", + "comments": " Roughly, the stat() `st_mode` value for the item. This will\n be restricted to one of the `git_filemode_t` values." + }, + { + "type": "uint16_t", + "name": "id_abbrev", + "comments": " Represents the known length of the `id` field, when\n converted to a hex string. It is generally `GIT_OID_SHA1_HEXSIZE`, unless this\n delta was created from reading a patch file, in which case it may be\n abbreviated to something reasonable, like 7 characters." + } + ], + "used": { + "returns": [], + "needs": [ + "git_checkout_notify_cb", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_foreach" + ] + } + } + ], + [ + "git_diff_find_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "uint16_t rename_threshold", + "uint16_t rename_from_rewrite_threshold", + "uint16_t copy_threshold", + "uint16_t break_rewrite_threshold", + "size_t rename_limit", + "git_diff_similarity_metric * metric" + ], + "type": "struct", + "value": "git_diff_find_options", + "file": "git2/diff.h", + "line": 749, + "lineto": 803, + "block": "unsigned int version\nuint32_t flags\nuint16_t rename_threshold\nuint16_t rename_from_rewrite_threshold\nuint16_t copy_threshold\nuint16_t break_rewrite_threshold\nsize_t rename_limit\ngit_diff_similarity_metric * metric", + "tdef": "typedef", + "description": " Control behavior of rename and copy detection", + "comments": "

These options mostly mimic parameters that can be passed to git-diff.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " Combination of git_diff_find_t values (default GIT_DIFF_FIND_BY_CONFIG).\n NOTE: if you don't explicitly set this, `diff.renames` could be set\n to false, resulting in `git_diff_find_similar` doing nothing." + }, + { + "type": "uint16_t", + "name": "rename_threshold", + "comments": " Threshold above which similar files will be considered renames.\n This is equivalent to the -M option. Defaults to 50." + }, + { + "type": "uint16_t", + "name": "rename_from_rewrite_threshold", + "comments": " Threshold below which similar files will be eligible to be a rename source.\n This is equivalent to the first part of the -B option. Defaults to 50." + }, + { + "type": "uint16_t", + "name": "copy_threshold", + "comments": " Threshold above which similar files will be considered copies.\n This is equivalent to the -C option. Defaults to 50." + }, + { + "type": "uint16_t", + "name": "break_rewrite_threshold", + "comments": " Threshold below which similar files will be split into a delete/add pair.\n This is equivalent to the last part of the -B option. Defaults to 60." + }, + { + "type": "size_t", + "name": "rename_limit", + "comments": " Maximum number of matches to consider for a particular file.\n\n This is a little different from the `-l` option from Git because we\n will still process up to this many matches before abandoning the search.\n Defaults to 1000." + }, + { + "type": "git_diff_similarity_metric *", + "name": "metric", + "comments": " The `metric` option allows you to plug in a custom similarity metric.\n\n Set it to NULL to use the default internal metric.\n\n The default metric is based on sampling hashes of ranges of data in\n the file, which is a pretty good similarity approximation that should\n work fairly well for both text and binary data while still being\n pretty fast with a fixed memory overhead." + } + ], + "used": { + "returns": [], + "needs": ["git_diff_find_options_init", "git_diff_find_similar"] + } + } + ], + [ + "git_diff_find_t", + { + "decl": [ + "GIT_DIFF_FIND_BY_CONFIG", + "GIT_DIFF_FIND_RENAMES", + "GIT_DIFF_FIND_RENAMES_FROM_REWRITES", + "GIT_DIFF_FIND_COPIES", + "GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED", + "GIT_DIFF_FIND_REWRITES", + "GIT_DIFF_BREAK_REWRITES", + "GIT_DIFF_FIND_AND_BREAK_REWRITES", + "GIT_DIFF_FIND_FOR_UNTRACKED", + "GIT_DIFF_FIND_ALL", + "GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE", + "GIT_DIFF_FIND_IGNORE_WHITESPACE", + "GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE", + "GIT_DIFF_FIND_EXACT_MATCH_ONLY", + "GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY", + "GIT_DIFF_FIND_REMOVE_UNMODIFIED" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 658, + "lineto": 727, + "block": "GIT_DIFF_FIND_BY_CONFIG\nGIT_DIFF_FIND_RENAMES\nGIT_DIFF_FIND_RENAMES_FROM_REWRITES\nGIT_DIFF_FIND_COPIES\nGIT_DIFF_FIND_COPIES_FROM_UNMODIFIED\nGIT_DIFF_FIND_REWRITES\nGIT_DIFF_BREAK_REWRITES\nGIT_DIFF_FIND_AND_BREAK_REWRITES\nGIT_DIFF_FIND_FOR_UNTRACKED\nGIT_DIFF_FIND_ALL\nGIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE\nGIT_DIFF_FIND_IGNORE_WHITESPACE\nGIT_DIFF_FIND_DONT_IGNORE_WHITESPACE\nGIT_DIFF_FIND_EXACT_MATCH_ONLY\nGIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY\nGIT_DIFF_FIND_REMOVE_UNMODIFIED", + "tdef": "typedef", + "description": " Flags to control the behavior of diff rename/copy detection.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_FIND_BY_CONFIG", + "comments": "

Obey diff.renames. Overridden by any other GIT_DIFF_FIND_... flag.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_RENAMES", + "comments": "

Look for renames? (--find-renames)

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_RENAMES_FROM_REWRITES", + "comments": "

Consider old side of MODIFIED for renames? (--break-rewrites=N)

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_COPIES", + "comments": "

Look for copies? (a la --find-copies).

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED", + "comments": "

Consider UNMODIFIED as copy sources? (--find-copies-harder).

\n\n

For this to work correctly, use GIT_DIFF_INCLUDE_UNMODIFIED when\n the initial git_diff is being generated.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_REWRITES", + "comments": "

Mark significant rewrites for split (--break-rewrites=/M)

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_DIFF_BREAK_REWRITES", + "comments": "

Actually split large rewrites into delete/add pairs

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_AND_BREAK_REWRITES", + "comments": "

Mark rewrites for split and break into delete/add pairs

\n", + "value": 48 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_FOR_UNTRACKED", + "comments": "

Find renames/copies for UNTRACKED items in working directory.

\n\n

For this to work correctly, use GIT_DIFF_INCLUDE_UNTRACKED when the\n initial git_diff is being generated (and obviously the diff must\n be against the working directory for this to make sense).

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_ALL", + "comments": "

Turn on all finding features.

\n", + "value": 255 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE", + "comments": "

Measure similarity ignoring leading whitespace (default)

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_IGNORE_WHITESPACE", + "comments": "

Measure similarity ignoring all whitespace

\n", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE", + "comments": "

Measure similarity including all data

\n", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_EXACT_MATCH_ONLY", + "comments": "

Measure similarity only by comparing SHAs (fast and cheap)

\n", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY", + "comments": "

Do not break rewrites unless they contribute to a rename.

\n\n

Normally, GIT_DIFF_FIND_AND_BREAK_REWRITES will measure the self-\n similarity of modified files and split the ones that have changed a\n lot into a DELETE / ADD pair. Then the sides of that pair will be\n considered candidates for rename and copy detection.

\n\n

If you add this flag in and the split pair is not used for an\n actual rename or copy, then the modified record will be restored to\n a regular MODIFIED record instead of being split.

\n", + "value": 32768 + }, + { + "type": "int", + "name": "GIT_DIFF_FIND_REMOVE_UNMODIFIED", + "comments": "

Remove any UNMODIFIED deltas after find_similar is done.

\n\n

Using GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED to emulate the\n --find-copies-harder behavior requires building a diff with the\n GIT_DIFF_INCLUDE_UNMODIFIED flag. If you do not want UNMODIFIED\n records in the final result, pass this flag to have them removed.

\n", + "value": 65536 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_flag_t", + { + "decl": [ + "GIT_DIFF_FLAG_BINARY", + "GIT_DIFF_FLAG_NOT_BINARY", + "GIT_DIFF_FLAG_VALID_ID", + "GIT_DIFF_FLAG_EXISTS", + "GIT_DIFF_FLAG_VALID_SIZE" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 206, + "lineto": 212, + "block": "GIT_DIFF_FLAG_BINARY\nGIT_DIFF_FLAG_NOT_BINARY\nGIT_DIFF_FLAG_VALID_ID\nGIT_DIFF_FLAG_EXISTS\nGIT_DIFF_FLAG_VALID_SIZE", + "tdef": "typedef", + "description": " Flags for the delta object and the file objects on each side.", + "comments": "

These flags are used for both the flags value of the git_diff_delta and the flags for the git_diff_file objects representing the old and new sides of the delta. Values outside of this public range should be considered reserved for internal or future use.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_FLAG_BINARY", + "comments": "

file(s) treated as binary data

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_FLAG_NOT_BINARY", + "comments": "

file(s) treated as text data

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_FLAG_VALID_ID", + "comments": "

id value is known correct

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_FLAG_EXISTS", + "comments": "

file exists at this side of the delta

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_DIFF_FLAG_VALID_SIZE", + "comments": "

file size value is known correct

\n", + "value": 16 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_format_email_flags_t", + { + "decl": [ + "GIT_DIFF_FORMAT_EMAIL_NONE", + "GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER" + ], + "type": "enum", + "file": "git2/deprecated.h", + "line": 311, + "lineto": 318, + "block": "GIT_DIFF_FORMAT_EMAIL_NONE\nGIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", + "tdef": "typedef", + "description": " Formatting options for diff e-mail generation", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_FORMAT_EMAIL_NONE", + "comments": "

Normal patch, the default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", + "comments": "

Don't insert "[PATCH]" in the subject header

\n", + "value": 1 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_format_email_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "size_t patch_no", + "size_t total_patches", + "const git_oid * id", + "const char * summary", + "const char * body", + "const git_signature * author" + ], + "type": "struct", + "value": "git_diff_format_email_options", + "file": "git2/deprecated.h", + "line": 323, + "lineto": 346, + "block": "unsigned int version\nuint32_t flags\nsize_t patch_no\nsize_t total_patches\nconst git_oid * id\nconst char * summary\nconst char * body\nconst git_signature * author", + "tdef": "typedef", + "description": " Options for controlling the formatting of the generated e-mail.", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " see `git_diff_format_email_flags_t` above " + }, + { + "type": "size_t", + "name": "patch_no", + "comments": " This patch number " + }, + { + "type": "size_t", + "name": "total_patches", + "comments": " Total number of patches in this series " + }, + { + "type": "const git_oid *", + "name": "id", + "comments": " id to use for the commit " + }, + { + "type": "const char *", + "name": "summary", + "comments": " Summary of the change " + }, + { + "type": "const char *", + "name": "body", + "comments": " Commit message's body " + }, + { + "type": "const git_signature *", + "name": "author", + "comments": " Author of the change " + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_format_email", + "git_diff_format_email_options_init" + ] + } + } + ], + [ + "git_diff_format_t", + { + "decl": [ + "GIT_DIFF_FORMAT_PATCH", + "GIT_DIFF_FORMAT_PATCH_HEADER", + "GIT_DIFF_FORMAT_RAW", + "GIT_DIFF_FORMAT_NAME_ONLY", + "GIT_DIFF_FORMAT_NAME_STATUS", + "GIT_DIFF_FORMAT_PATCH_ID" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 1128, + "lineto": 1135, + "block": "GIT_DIFF_FORMAT_PATCH\nGIT_DIFF_FORMAT_PATCH_HEADER\nGIT_DIFF_FORMAT_RAW\nGIT_DIFF_FORMAT_NAME_ONLY\nGIT_DIFF_FORMAT_NAME_STATUS\nGIT_DIFF_FORMAT_PATCH_ID", + "tdef": "typedef", + "description": " Possible output formats for diff data", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_FORMAT_PATCH", + "comments": "

full git diff

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_PATCH_HEADER", + "comments": "

just the file headers of patch

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_RAW", + "comments": "

like git diff --raw

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_NAME_ONLY", + "comments": "

like git diff --name-only

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_NAME_STATUS", + "comments": "

like git diff --name-status

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_DIFF_FORMAT_PATCH_ID", + "comments": "

git diff as used by git patch-id

\n", + "value": 6 + } + ], + "used": { + "returns": [], + "needs": ["git_diff_print", "git_diff_to_buf"] + } + } + ], + [ + "git_diff_hunk", + { + "decl": [ + "int old_start", + "int old_lines", + "int new_start", + "int new_lines", + "size_t header_len", + "char [128] header" + ], + "type": "struct", + "value": "git_diff_hunk", + "file": "git2/diff.h", + "line": 576, + "lineto": 583, + "block": "int old_start\nint old_lines\nint new_start\nint new_lines\nsize_t header_len\nchar [128] header", + "tdef": "typedef", + "description": " Structure describing a hunk of a diff.", + "comments": "

A hunk is a span of modified lines in a delta along with some stable surrounding context. You can configure the amount of context and other properties of how hunks are generated. Each hunk also comes with a header that described where it starts and ends in both the old and new versions in the delta.

\n", + "fields": [ + { + "type": "int", + "name": "old_start", + "comments": " Starting line number in old_file " + }, + { + "type": "int", + "name": "old_lines", + "comments": " Number of lines in old_file " + }, + { + "type": "int", + "name": "new_start", + "comments": " Starting line number in new_file " + }, + { + "type": "int", + "name": "new_lines", + "comments": " Number of lines in new_file " + }, + { + "type": "size_t", + "name": "header_len", + "comments": " Number of bytes in header text " + }, + { + "type": "char [128]", + "name": "header", + "comments": " Header text, NUL-byte terminated " + } + ], + "used": { + "returns": [], + "needs": [ + "git_apply_hunk_cb", + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_foreach", + "git_diff_hunk_cb", + "git_diff_line_cb", + "git_patch_get_hunk" + ] + } + } + ], + [ + "git_diff_line", + { + "decl": [ + "char origin", + "int old_lineno", + "int new_lineno", + "int num_lines", + "size_t content_len", + "git_off_t content_offset", + "const char * content" + ], + "type": "struct", + "value": "git_diff_line", + "file": "git2/diff.h", + "line": 631, + "lineto": 639, + "block": "char origin\nint old_lineno\nint new_lineno\nint num_lines\nsize_t content_len\ngit_off_t content_offset\nconst char * content", + "tdef": "typedef", + "description": " Structure describing a line (or data span) of a diff.", + "comments": "

A line is a range of characters inside a hunk. It could be a context line (i.e. in both old and new versions), an added line (i.e. only in the new version), or a removed line (i.e. only in the old version). Unfortunately, we don't know anything about the encoding of data in the file being diffed, so we cannot tell you much about the line content. Line data will not be NUL-byte terminated, however, because it will be just a span of bytes inside the larger file.

\n", + "fields": [ + { + "type": "char", + "name": "origin", + "comments": " A git_diff_line_t value " + }, + { + "type": "int", + "name": "old_lineno", + "comments": " Line number in old file or -1 for added line " + }, + { + "type": "int", + "name": "new_lineno", + "comments": " Line number in new file or -1 for deleted line " + }, + { + "type": "int", + "name": "num_lines", + "comments": " Number of newline characters in content " + }, + { + "type": "size_t", + "name": "content_len", + "comments": " Number of bytes of data " + }, + { + "type": "git_off_t", + "name": "content_offset", + "comments": " Offset in the original file to the content " + }, + { + "type": "const char *", + "name": "content", + "comments": " Pointer to diff text, not NUL-byte terminated " + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_foreach", + "git_diff_line_cb", + "git_diff_print", + "git_patch_get_line_in_hunk", + "git_patch_print" + ] + } + } + ], + [ + "git_diff_line_t", + { + "decl": [ + "GIT_DIFF_LINE_CONTEXT", + "GIT_DIFF_LINE_ADDITION", + "GIT_DIFF_LINE_DELETION", + "GIT_DIFF_LINE_CONTEXT_EOFNL", + "GIT_DIFF_LINE_ADD_EOFNL", + "GIT_DIFF_LINE_DEL_EOFNL", + "GIT_DIFF_LINE_FILE_HDR", + "GIT_DIFF_LINE_HUNK_HDR", + "GIT_DIFF_LINE_BINARY" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 602, + "lineto": 618, + "block": "GIT_DIFF_LINE_CONTEXT\nGIT_DIFF_LINE_ADDITION\nGIT_DIFF_LINE_DELETION\nGIT_DIFF_LINE_CONTEXT_EOFNL\nGIT_DIFF_LINE_ADD_EOFNL\nGIT_DIFF_LINE_DEL_EOFNL\nGIT_DIFF_LINE_FILE_HDR\nGIT_DIFF_LINE_HUNK_HDR\nGIT_DIFF_LINE_BINARY", + "tdef": "typedef", + "description": " Line origin constants.", + "comments": "

These values describe where a line came from and will be passed to the git_diff_line_cb when iterating over a diff. There are some special origin constants at the end that are used for the text output callbacks to demarcate lines that are actually part of the file or hunk headers.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_LINE_CONTEXT", + "comments": "", + "value": 32 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_ADDITION", + "comments": "", + "value": 43 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_DELETION", + "comments": "", + "value": 45 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_CONTEXT_EOFNL", + "comments": "

Both files have no LF at end

\n", + "value": 61 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_ADD_EOFNL", + "comments": "

Old has no LF at end, new does

\n", + "value": 62 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_DEL_EOFNL", + "comments": "

Old has LF at end, new does not

\n", + "value": 60 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_FILE_HDR", + "comments": "", + "value": 70 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_HUNK_HDR", + "comments": "", + "value": 72 + }, + { + "type": "int", + "name": "GIT_DIFF_LINE_BINARY", + "comments": "

For "Binary files x and y differ"

\n", + "value": 66 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_option_t", + { + "decl": [ + "GIT_DIFF_NORMAL", + "GIT_DIFF_REVERSE", + "GIT_DIFF_INCLUDE_IGNORED", + "GIT_DIFF_RECURSE_IGNORED_DIRS", + "GIT_DIFF_INCLUDE_UNTRACKED", + "GIT_DIFF_RECURSE_UNTRACKED_DIRS", + "GIT_DIFF_INCLUDE_UNMODIFIED", + "GIT_DIFF_INCLUDE_TYPECHANGE", + "GIT_DIFF_INCLUDE_TYPECHANGE_TREES", + "GIT_DIFF_IGNORE_FILEMODE", + "GIT_DIFF_IGNORE_SUBMODULES", + "GIT_DIFF_IGNORE_CASE", + "GIT_DIFF_INCLUDE_CASECHANGE", + "GIT_DIFF_DISABLE_PATHSPEC_MATCH", + "GIT_DIFF_SKIP_BINARY_CHECK", + "GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS", + "GIT_DIFF_UPDATE_INDEX", + "GIT_DIFF_INCLUDE_UNREADABLE", + "GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED", + "GIT_DIFF_INDENT_HEURISTIC", + "GIT_DIFF_IGNORE_BLANK_LINES", + "GIT_DIFF_FORCE_TEXT", + "GIT_DIFF_FORCE_BINARY", + "GIT_DIFF_IGNORE_WHITESPACE", + "GIT_DIFF_IGNORE_WHITESPACE_CHANGE", + "GIT_DIFF_IGNORE_WHITESPACE_EOL", + "GIT_DIFF_SHOW_UNTRACKED_CONTENT", + "GIT_DIFF_SHOW_UNMODIFIED", + "GIT_DIFF_PATIENCE", + "GIT_DIFF_MINIMAL", + "GIT_DIFF_SHOW_BINARY" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 28, + "lineto": 174, + "block": "GIT_DIFF_NORMAL\nGIT_DIFF_REVERSE\nGIT_DIFF_INCLUDE_IGNORED\nGIT_DIFF_RECURSE_IGNORED_DIRS\nGIT_DIFF_INCLUDE_UNTRACKED\nGIT_DIFF_RECURSE_UNTRACKED_DIRS\nGIT_DIFF_INCLUDE_UNMODIFIED\nGIT_DIFF_INCLUDE_TYPECHANGE\nGIT_DIFF_INCLUDE_TYPECHANGE_TREES\nGIT_DIFF_IGNORE_FILEMODE\nGIT_DIFF_IGNORE_SUBMODULES\nGIT_DIFF_IGNORE_CASE\nGIT_DIFF_INCLUDE_CASECHANGE\nGIT_DIFF_DISABLE_PATHSPEC_MATCH\nGIT_DIFF_SKIP_BINARY_CHECK\nGIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS\nGIT_DIFF_UPDATE_INDEX\nGIT_DIFF_INCLUDE_UNREADABLE\nGIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED\nGIT_DIFF_INDENT_HEURISTIC\nGIT_DIFF_IGNORE_BLANK_LINES\nGIT_DIFF_FORCE_TEXT\nGIT_DIFF_FORCE_BINARY\nGIT_DIFF_IGNORE_WHITESPACE\nGIT_DIFF_IGNORE_WHITESPACE_CHANGE\nGIT_DIFF_IGNORE_WHITESPACE_EOL\nGIT_DIFF_SHOW_UNTRACKED_CONTENT\nGIT_DIFF_SHOW_UNMODIFIED\nGIT_DIFF_PATIENCE\nGIT_DIFF_MINIMAL\nGIT_DIFF_SHOW_BINARY", + "tdef": "typedef", + "description": " Flags for diff options. A combination of these flags can be passed\n in via the `flags` value in the `git_diff_options`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_NORMAL", + "comments": "

Normal diff, the default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_REVERSE", + "comments": "

Reverse the sides of the diff

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_IGNORED", + "comments": "

Include ignored files in the diff

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_RECURSE_IGNORED_DIRS", + "comments": "

Even with GIT_DIFF_INCLUDE_IGNORED, an entire ignored directory\n will be marked with only a single entry in the diff; this flag\n adds all files under the directory as IGNORED entries, too.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_UNTRACKED", + "comments": "

Include untracked files in the diff

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_DIFF_RECURSE_UNTRACKED_DIRS", + "comments": "

Even with GIT_DIFF_INCLUDE_UNTRACKED, an entire untracked\n directory will be marked with only a single entry in the diff\n (a la what core Git does in git status); this flag adds all\n files under untracked directories as UNTRACKED entries, too.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_UNMODIFIED", + "comments": "

Include unmodified files in the diff

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_TYPECHANGE", + "comments": "

Normally, a type change between files will be converted into a\n DELETED record for the old and an ADDED record for the new; this\n options enabled the generation of TYPECHANGE delta records.

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_TYPECHANGE_TREES", + "comments": "

Even with GIT_DIFF_INCLUDE_TYPECHANGE, blob->tree changes still\n generally show as a DELETED blob. This flag tries to correctly\n label blob->tree transitions as TYPECHANGE records with new_file's\n mode set to tree. Note: the tree SHA will not be available.

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_FILEMODE", + "comments": "

Ignore file mode changes

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_SUBMODULES", + "comments": "

Treat all submodules as unmodified

\n", + "value": 512 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_CASE", + "comments": "

Use case insensitive filename comparisons

\n", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_CASECHANGE", + "comments": "

May be combined with GIT_DIFF_IGNORE_CASE to specify that a file\n that has changed case will be returned as an add/delete pair.

\n", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_DIFF_DISABLE_PATHSPEC_MATCH", + "comments": "

If the pathspec is set in the diff options, this flags indicates\n that the paths will be treated as literal paths instead of\n fnmatch patterns. Each path in the list must either be a full\n path to a file or a directory. (A trailing slash indicates that\n the path will only match a directory). If a directory is\n specified, all children will be included.

\n", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_DIFF_SKIP_BINARY_CHECK", + "comments": "

Disable updating of the binary flag in delta records. This is\n useful when iterating over a diff if you don't need hunk and data\n callbacks and want to avoid having to load file completely.

\n", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS", + "comments": "

When diff finds an untracked directory, to match the behavior of\n core Git, it scans the contents for IGNORED and UNTRACKED files.\n If all contents are IGNORED, then the directory is IGNORED; if\n any contents are not IGNORED, then the directory is UNTRACKED.\n This is extra work that may not matter in many cases. This flag\n turns off that scan and immediately labels an untracked directory\n as UNTRACKED (changing the behavior to not match core Git).

\n", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_DIFF_UPDATE_INDEX", + "comments": "

When diff finds a file in the working directory with stat\n information different from the index, but the OID ends up being the\n same, write the correct stat information into the index. Note:\n without this flag, diff will always leave the index untouched.

\n", + "value": 32768 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_UNREADABLE", + "comments": "

Include unreadable files in the diff

\n", + "value": 65536 + }, + { + "type": "int", + "name": "GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED", + "comments": "

Include unreadable files in the diff

\n", + "value": 131072 + }, + { + "type": "int", + "name": "GIT_DIFF_INDENT_HEURISTIC", + "comments": "

Use a heuristic that takes indentation and whitespace into account\n which generally can produce better diffs when dealing with ambiguous\n diff hunks.

\n", + "value": 262144 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_BLANK_LINES", + "comments": "

Ignore blank lines

\n", + "value": 524288 + }, + { + "type": "int", + "name": "GIT_DIFF_FORCE_TEXT", + "comments": "

Treat all files as text, disabling binary attributes \n&\n detection

\n", + "value": 1048576 + }, + { + "type": "int", + "name": "GIT_DIFF_FORCE_BINARY", + "comments": "

Treat all files as binary, disabling text diffs

\n", + "value": 2097152 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_WHITESPACE", + "comments": "

Ignore all whitespace

\n", + "value": 4194304 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_WHITESPACE_CHANGE", + "comments": "

Ignore changes in amount of whitespace

\n", + "value": 8388608 + }, + { + "type": "int", + "name": "GIT_DIFF_IGNORE_WHITESPACE_EOL", + "comments": "

Ignore whitespace at end of line

\n", + "value": 16777216 + }, + { + "type": "int", + "name": "GIT_DIFF_SHOW_UNTRACKED_CONTENT", + "comments": "

When generating patch text, include the content of untracked\n files. This automatically turns on GIT_DIFF_INCLUDE_UNTRACKED but\n it does not turn on GIT_DIFF_RECURSE_UNTRACKED_DIRS. Add that\n flag if you want the content of every single UNTRACKED file.

\n", + "value": 33554432 + }, + { + "type": "int", + "name": "GIT_DIFF_SHOW_UNMODIFIED", + "comments": "

When generating output, include the names of unmodified files if\n they are included in the git_diff. Normally these are skipped in\n the formats that list files (e.g. name-only, name-status, raw).\n Even with this, these will not be included in patch format.

\n", + "value": 67108864 + }, + { + "type": "int", + "name": "GIT_DIFF_PATIENCE", + "comments": "

Use the "patience diff" algorithm

\n", + "value": 268435456 + }, + { + "type": "int", + "name": "GIT_DIFF_MINIMAL", + "comments": "

Take extra time to find minimal diff

\n", + "value": 536870912 + }, + { + "type": "int", + "name": "GIT_DIFF_SHOW_BINARY", + "comments": "

Include the necessary deflate / delta information so that git-apply\n can apply given diff information to binary files.

\n", + "value": 1073741824 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "git_submodule_ignore_t ignore_submodules", + "git_strarray pathspec", + "git_diff_notify_cb notify_cb", + "git_diff_progress_cb progress_cb", + "void * payload", + "uint32_t context_lines", + "uint32_t interhunk_lines", + "git_oid_t oid_type", + "uint16_t id_abbrev", + "git_off_t max_size", + "const char * old_prefix", + "const char * new_prefix" + ], + "type": "struct", + "value": "git_diff_options", + "file": "git2/diff.h", + "line": 376, + "lineto": 464, + "block": "unsigned int version\nuint32_t flags\ngit_submodule_ignore_t ignore_submodules\ngit_strarray pathspec\ngit_diff_notify_cb notify_cb\ngit_diff_progress_cb progress_cb\nvoid * payload\nuint32_t context_lines\nuint32_t interhunk_lines\ngit_oid_t oid_type\nuint16_t id_abbrev\ngit_off_t max_size\nconst char * old_prefix\nconst char * new_prefix", + "tdef": "typedef", + "description": " Structure describing options about how the diff should be executed.", + "comments": "

Setting all values of the structure to zero will yield the default values. Similarly, passing NULL for the options structure will give the defaults. The default values are marked below.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " version for the struct " + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of `git_diff_option_t` values above.\n Defaults to GIT_DIFF_NORMAL" + }, + { + "type": "git_submodule_ignore_t", + "name": "ignore_submodules", + "comments": " Overrides the submodule ignore setting for all submodules in the diff. " + }, + { + "type": "git_strarray", + "name": "pathspec", + "comments": " An array of paths / fnmatch patterns to constrain diff.\n All paths are included by default." + }, + { + "type": "git_diff_notify_cb", + "name": "notify_cb", + "comments": " An optional callback function, notifying the consumer of changes to\n the diff as new deltas are added." + }, + { + "type": "git_diff_progress_cb", + "name": "progress_cb", + "comments": " An optional callback function, notifying the consumer of which files\n are being examined as the diff is generated." + }, + { + "type": "void *", + "name": "payload", + "comments": " The payload to pass to the callback functions. " + }, + { + "type": "uint32_t", + "name": "context_lines", + "comments": " The number of unchanged lines that define the boundary of a hunk\n (and to display before and after). Defaults to 3." + }, + { + "type": "uint32_t", + "name": "interhunk_lines", + "comments": " The maximum number of unchanged lines between hunk boundaries before\n the hunks will be merged into one. Defaults to 0." + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": " The object ID type to emit in diffs; this is used by functions\n that operate without a repository - namely `git_diff_buffers`,\n or `git_diff_blobs` and `git_diff_blob_to_buffer` when one blob\n is `NULL`.\n\n This may be omitted (set to `0`). If a repository is available,\n the object ID format of the repository will be used. If no\n repository is available then the default is `GIT_OID_SHA`.\n\n If this is specified and a repository is available, then the\n specified `oid_type` must match the repository's object ID\n format." + }, + { + "type": "uint16_t", + "name": "id_abbrev", + "comments": " The abbreviation length to use when formatting object ids.\n Defaults to the value of 'core.abbrev' from the config, or 7 if unset." + }, + { + "type": "git_off_t", + "name": "max_size", + "comments": " A size (in bytes) above which a blob will be marked as binary\n automatically; pass a negative value to disable.\n Defaults to 512MB." + }, + { + "type": "const char *", + "name": "old_prefix", + "comments": " The virtual \"directory\" prefix for old file names in hunk headers.\n Default is \"a\"." + }, + { + "type": "const char *", + "name": "new_prefix", + "comments": " The virtual \"directory\" prefix for new file names in hunk headers.\n Defaults to \"b\"." + } + ], + "used": { + "returns": [], + "needs": [ + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_commit_as_email", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_options_init", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs", + "git_patch_from_buffers" + ] + } + } + ], + [ + "git_diff_parse_options", + { + "decl": ["unsigned int version", "git_oid_t oid_type"], + "type": "struct", + "value": "git_diff_parse_options", + "file": "git2/diff.h", + "line": 1294, + "lineto": 1297, + "block": "unsigned int version\ngit_oid_t oid_type", + "tdef": "typedef", + "description": " Options for parsing a diff / patch file.", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { "type": "git_oid_t", "name": "oid_type", "comments": "" } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_patchid_options", + { + "decl": ["unsigned int version"], + "type": "struct", + "value": "git_diff_patchid_options", + "file": "git2/diff.h", + "line": 1431, + "lineto": 1433, + "block": "unsigned int version", + "tdef": "typedef", + "description": " Patch ID options structure", + "comments": "

Initialize with GIT_PATCHID_OPTIONS_INIT. Alternatively, you can use git_diff_patchid_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" } + ], + "used": { + "returns": [], + "needs": ["git_diff_patchid", "git_diff_patchid_options_init"] + } + } + ], + [ + "git_diff_similarity_metric", + { + "decl": [ + "int (*)(void **, const git_diff_file *, const char *, void *) file_signature", + "int (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature", + "void (*)(void *, void *) free_signature", + "int (*)(int *, void *, void *, void *) similarity", + "void * payload" + ], + "type": "struct", + "value": "git_diff_similarity_metric", + "file": "git2/diff.h", + "line": 732, + "lineto": 742, + "block": "int (*)(void **, const git_diff_file *, const char *, void *) file_signature\nint (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature\nvoid (*)(void *, void *) free_signature\nint (*)(int *, void *, void *, void *) similarity\nvoid * payload", + "tdef": "typedef", + "description": " Pluggable similarity metric", + "comments": "", + "fields": [ + { + "type": "int (*)(void **, const git_diff_file *, const char *, void *)", + "name": "file_signature", + "comments": "" + }, + { + "type": "int (*)(void **, const git_diff_file *, const char *, size_t, void *)", + "name": "buffer_signature", + "comments": "" + }, + { + "type": "void (*)(void *, void *)", + "name": "free_signature", + "comments": "" + }, + { + "type": "int (*)(int *, void *, void *, void *)", + "name": "similarity", + "comments": "" + }, + { "type": "void *", "name": "payload", "comments": "" } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_diff_stats", + { + "decl": "git_diff_stats", + "type": "struct", + "value": "git_diff_stats", + "file": "git2/diff.h", + "line": 1341, + "lineto": 1341, + "tdef": "typedef", + "description": " This is an opaque structure which is allocated by `git_diff_get_stats`.\n You are responsible for releasing the object memory when done, using the\n `git_diff_stats_free()` function.", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_diff_get_stats", + "git_diff_stats_deletions", + "git_diff_stats_files_changed", + "git_diff_stats_free", + "git_diff_stats_insertions", + "git_diff_stats_to_buf" + ] + } + } + ], + [ + "git_diff_stats_format_t", + { + "decl": [ + "GIT_DIFF_STATS_NONE", + "GIT_DIFF_STATS_FULL", + "GIT_DIFF_STATS_SHORT", + "GIT_DIFF_STATS_NUMBER", + "GIT_DIFF_STATS_INCLUDE_SUMMARY" + ], + "type": "enum", + "file": "git2/diff.h", + "line": 1346, + "lineto": 1361, + "block": "GIT_DIFF_STATS_NONE\nGIT_DIFF_STATS_FULL\nGIT_DIFF_STATS_SHORT\nGIT_DIFF_STATS_NUMBER\nGIT_DIFF_STATS_INCLUDE_SUMMARY", + "tdef": "typedef", + "description": " Formatting options for diff stats", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_DIFF_STATS_NONE", + "comments": "

No stats

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIFF_STATS_FULL", + "comments": "

Full statistics, equivalent of --stat

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_DIFF_STATS_SHORT", + "comments": "

Short statistics, equivalent of --shortstat

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_DIFF_STATS_NUMBER", + "comments": "

Number statistics, equivalent of --numstat

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_DIFF_STATS_INCLUDE_SUMMARY", + "comments": "

Extended header information such as creations, renames and mode changes, equivalent of --summary

\n", + "value": 8 + } + ], + "used": { "returns": [], "needs": ["git_diff_stats_to_buf"] } + } + ], + [ + "git_direction", + { + "decl": ["GIT_DIRECTION_FETCH", "GIT_DIRECTION_PUSH"], + "type": "enum", + "file": "git2/net.h", + "line": 31, + "lineto": 34, + "block": "GIT_DIRECTION_FETCH\nGIT_DIRECTION_PUSH", + "tdef": "typedef", + "description": " Direction of the connection.", + "comments": "

We need this because we need to know whether we should call git-upload-pack or git-receive-pack on the remote end when get_refs gets called.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_DIRECTION_FETCH", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_DIRECTION_PUSH", + "comments": "", + "value": 1 + } + ], + "used": { + "returns": ["git_refspec_direction"], + "needs": ["git_remote_connect", "git_remote_connect_ext"] + } + } + ], + [ + "git_email_create_flags_t", + { + "decl": [ + "GIT_EMAIL_CREATE_DEFAULT", + "GIT_EMAIL_CREATE_OMIT_NUMBERS", + "GIT_EMAIL_CREATE_ALWAYS_NUMBER", + "GIT_EMAIL_CREATE_NO_RENAMES" + ], + "type": "enum", + "file": "git2/email.h", + "line": 24, + "lineto": 39, + "block": "GIT_EMAIL_CREATE_DEFAULT\nGIT_EMAIL_CREATE_OMIT_NUMBERS\nGIT_EMAIL_CREATE_ALWAYS_NUMBER\nGIT_EMAIL_CREATE_NO_RENAMES", + "tdef": "typedef", + "description": " Formatting options for diff e-mail generation", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_EMAIL_CREATE_DEFAULT", + "comments": "

Normal patch, the default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_EMAIL_CREATE_OMIT_NUMBERS", + "comments": "

Do not include patch numbers in the subject prefix.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_EMAIL_CREATE_ALWAYS_NUMBER", + "comments": "

Include numbers in the subject prefix even when the\n patch is for a single commit (1/1).

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_EMAIL_CREATE_NO_RENAMES", + "comments": "

Do not perform rename or similarity detection.

\n", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_email_create_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "git_diff_options diff_opts", + "git_diff_find_options diff_find_opts", + "const char * subject_prefix", + "size_t start_number", + "size_t reroll_number" + ], + "type": "struct", + "value": "git_email_create_options", + "file": "git2/email.h", + "line": 44, + "lineto": 72, + "block": "unsigned int version\nuint32_t flags\ngit_diff_options diff_opts\ngit_diff_find_options diff_find_opts\nconst char * subject_prefix\nsize_t start_number\nsize_t reroll_number", + "tdef": "typedef", + "description": " Options for controlling the formatting of the generated e-mail.", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " see `git_email_create_flags_t` above " + }, + { + "type": "git_diff_options", + "name": "diff_opts", + "comments": " Options to use when creating diffs " + }, + { + "type": "git_diff_find_options", + "name": "diff_find_opts", + "comments": " Options for finding similarities within diffs " + }, + { + "type": "const char *", + "name": "subject_prefix", + "comments": " The subject prefix, by default \"PATCH\". If set to an empty\n string (\"\") then only the patch numbers will be shown in the\n prefix. If the subject_prefix is empty and patch numbers\n are not being shown, the prefix will be omitted entirely." + }, + { + "type": "size_t", + "name": "start_number", + "comments": " The starting patch number; this cannot be 0. By default,\n this is 1." + }, + { + "type": "size_t", + "name": "reroll_number", + "comments": " The \"re-roll\" number. By default, there is no re-roll. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_email_create_from_commit", + "git_email_create_from_diff" + ] + } + } + ], + [ + "git_error", + { + "decl": ["char * message", "int klass"], + "type": "struct", + "value": "git_error", + "file": "git2/errors.h", + "line": 74, + "lineto": 77, + "block": "char * message\nint klass", + "tdef": "typedef", + "description": " Structure to store extra details of the last error that occurred.", + "comments": "

This is kept on a per-thread basis if GIT_THREADS was defined when the library was build, otherwise one is kept globally for the library

\n", + "fields": [ + { "type": "char *", "name": "message", "comments": "" }, + { "type": "int", "name": "klass", "comments": "" } + ], + "used": { "returns": ["git_error_last", "giterr_last"], "needs": [] } + } + ], + [ + "git_error_code", + { + "decl": [ + "GIT_OK", + "GIT_ERROR", + "GIT_ENOTFOUND", + "GIT_EEXISTS", + "GIT_EAMBIGUOUS", + "GIT_EBUFS", + "GIT_EUSER", + "GIT_EBAREREPO", + "GIT_EUNBORNBRANCH", + "GIT_EUNMERGED", + "GIT_ENONFASTFORWARD", + "GIT_EINVALIDSPEC", + "GIT_ECONFLICT", + "GIT_ELOCKED", + "GIT_EMODIFIED", + "GIT_EAUTH", + "GIT_ECERTIFICATE", + "GIT_EAPPLIED", + "GIT_EPEEL", + "GIT_EEOF", + "GIT_EINVALID", + "GIT_EUNCOMMITTED", + "GIT_EDIRECTORY", + "GIT_EMERGECONFLICT", + "GIT_PASSTHROUGH", + "GIT_ITEROVER", + "GIT_RETRY", + "GIT_EMISMATCH", + "GIT_EINDEXDIRTY", + "GIT_EAPPLYFAIL", + "GIT_EOWNER", + "GIT_TIMEOUT", + "GIT_EUNCHANGED", + "GIT_ENOTSUPPORTED", + "GIT_EREADONLY" + ], + "type": "enum", + "file": "git2/errors.h", + "line": 21, + "lineto": 66, + "block": "GIT_OK\nGIT_ERROR\nGIT_ENOTFOUND\nGIT_EEXISTS\nGIT_EAMBIGUOUS\nGIT_EBUFS\nGIT_EUSER\nGIT_EBAREREPO\nGIT_EUNBORNBRANCH\nGIT_EUNMERGED\nGIT_ENONFASTFORWARD\nGIT_EINVALIDSPEC\nGIT_ECONFLICT\nGIT_ELOCKED\nGIT_EMODIFIED\nGIT_EAUTH\nGIT_ECERTIFICATE\nGIT_EAPPLIED\nGIT_EPEEL\nGIT_EEOF\nGIT_EINVALID\nGIT_EUNCOMMITTED\nGIT_EDIRECTORY\nGIT_EMERGECONFLICT\nGIT_PASSTHROUGH\nGIT_ITEROVER\nGIT_RETRY\nGIT_EMISMATCH\nGIT_EINDEXDIRTY\nGIT_EAPPLYFAIL\nGIT_EOWNER\nGIT_TIMEOUT\nGIT_EUNCHANGED\nGIT_ENOTSUPPORTED\nGIT_EREADONLY", + "tdef": "typedef", + "description": " Generic return codes ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_OK", + "comments": "

No error

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_ERROR", + "comments": "

Generic error

\n", + "value": -1 + }, + { + "type": "int", + "name": "GIT_ENOTFOUND", + "comments": "

Requested object could not be found

\n", + "value": -3 + }, + { + "type": "int", + "name": "GIT_EEXISTS", + "comments": "

Object exists preventing operation

\n", + "value": -4 + }, + { + "type": "int", + "name": "GIT_EAMBIGUOUS", + "comments": "

More than one object matches

\n", + "value": -5 + }, + { + "type": "int", + "name": "GIT_EBUFS", + "comments": "

Output buffer too short to hold data

\n", + "value": -6 + }, + { + "type": "int", + "name": "GIT_EUSER", + "comments": "

GIT_EUSER is a special error that is never generated by libgit2\n code. You can return it from a callback (e.g to stop an iteration)\n to know that it was generated by the callback and not by libgit2.

\n", + "value": -7 + }, + { + "type": "int", + "name": "GIT_EBAREREPO", + "comments": "

Operation not allowed on bare repository

\n", + "value": -8 + }, + { + "type": "int", + "name": "GIT_EUNBORNBRANCH", + "comments": "

HEAD refers to branch with no commits

\n", + "value": -9 + }, + { + "type": "int", + "name": "GIT_EUNMERGED", + "comments": "

Merge in progress prevented operation

\n", + "value": -10 + }, + { + "type": "int", + "name": "GIT_ENONFASTFORWARD", + "comments": "

Reference was not fast-forwardable

\n", + "value": -11 + }, + { + "type": "int", + "name": "GIT_EINVALIDSPEC", + "comments": "

Name/ref spec was not in a valid format

\n", + "value": -12 + }, + { + "type": "int", + "name": "GIT_ECONFLICT", + "comments": "

Checkout conflicts prevented operation

\n", + "value": -13 + }, + { + "type": "int", + "name": "GIT_ELOCKED", + "comments": "

Lock file prevented operation

\n", + "value": -14 + }, + { + "type": "int", + "name": "GIT_EMODIFIED", + "comments": "

Reference value does not match expected

\n", + "value": -15 + }, + { + "type": "int", + "name": "GIT_EAUTH", + "comments": "

Authentication error

\n", + "value": -16 + }, + { + "type": "int", + "name": "GIT_ECERTIFICATE", + "comments": "

Server certificate is invalid

\n", + "value": -17 + }, + { + "type": "int", + "name": "GIT_EAPPLIED", + "comments": "

Patch/merge has already been applied

\n", + "value": -18 + }, + { + "type": "int", + "name": "GIT_EPEEL", + "comments": "

The requested peel operation is not possible

\n", + "value": -19 + }, + { + "type": "int", + "name": "GIT_EEOF", + "comments": "

Unexpected EOF

\n", + "value": -20 + }, + { + "type": "int", + "name": "GIT_EINVALID", + "comments": "

Invalid operation or input

\n", + "value": -21 + }, + { + "type": "int", + "name": "GIT_EUNCOMMITTED", + "comments": "

Uncommitted changes in index prevented operation

\n", + "value": -22 + }, + { + "type": "int", + "name": "GIT_EDIRECTORY", + "comments": "

The operation is not valid for a directory

\n", + "value": -23 + }, + { + "type": "int", + "name": "GIT_EMERGECONFLICT", + "comments": "

A merge conflict exists and cannot continue

\n", + "value": -24 + }, + { + "type": "int", + "name": "GIT_PASSTHROUGH", + "comments": "

A user-configured callback refused to act

\n", + "value": -30 + }, + { + "type": "int", + "name": "GIT_ITEROVER", + "comments": "

Signals end of iteration with iterator

\n", + "value": -31 + }, + { + "type": "int", + "name": "GIT_RETRY", + "comments": "

Internal only

\n", + "value": -32 + }, + { + "type": "int", + "name": "GIT_EMISMATCH", + "comments": "

Hashsum mismatch in object

\n", + "value": -33 + }, + { + "type": "int", + "name": "GIT_EINDEXDIRTY", + "comments": "

Unsaved changes in the index would be overwritten

\n", + "value": -34 + }, + { + "type": "int", + "name": "GIT_EAPPLYFAIL", + "comments": "

Patch application failed

\n", + "value": -35 + }, + { + "type": "int", + "name": "GIT_EOWNER", + "comments": "

The object is not owned by the current user

\n", + "value": -36 + }, + { + "type": "int", + "name": "GIT_TIMEOUT", + "comments": "

The operation timed out

\n", + "value": -37 + }, + { + "type": "int", + "name": "GIT_EUNCHANGED", + "comments": "

There were no changes

\n", + "value": -38 + }, + { + "type": "int", + "name": "GIT_ENOTSUPPORTED", + "comments": "

An option is not supported

\n", + "value": -39 + }, + { + "type": "int", + "name": "GIT_EREADONLY", + "comments": "

The subject is read-only

\n", + "value": -40 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_error_t", + { + "decl": [ + "GIT_ERROR_NONE", + "GIT_ERROR_NOMEMORY", + "GIT_ERROR_OS", + "GIT_ERROR_INVALID", + "GIT_ERROR_REFERENCE", + "GIT_ERROR_ZLIB", + "GIT_ERROR_REPOSITORY", + "GIT_ERROR_CONFIG", + "GIT_ERROR_REGEX", + "GIT_ERROR_ODB", + "GIT_ERROR_INDEX", + "GIT_ERROR_OBJECT", + "GIT_ERROR_NET", + "GIT_ERROR_TAG", + "GIT_ERROR_TREE", + "GIT_ERROR_INDEXER", + "GIT_ERROR_SSL", + "GIT_ERROR_SUBMODULE", + "GIT_ERROR_THREAD", + "GIT_ERROR_STASH", + "GIT_ERROR_CHECKOUT", + "GIT_ERROR_FETCHHEAD", + "GIT_ERROR_MERGE", + "GIT_ERROR_SSH", + "GIT_ERROR_FILTER", + "GIT_ERROR_REVERT", + "GIT_ERROR_CALLBACK", + "GIT_ERROR_CHERRYPICK", + "GIT_ERROR_DESCRIBE", + "GIT_ERROR_REBASE", + "GIT_ERROR_FILESYSTEM", + "GIT_ERROR_PATCH", + "GIT_ERROR_WORKTREE", + "GIT_ERROR_SHA", + "GIT_ERROR_HTTP", + "GIT_ERROR_INTERNAL", + "GIT_ERROR_GRAFTS" + ], + "type": "enum", + "file": "git2/errors.h", + "line": 80, + "lineto": 118, + "block": "GIT_ERROR_NONE\nGIT_ERROR_NOMEMORY\nGIT_ERROR_OS\nGIT_ERROR_INVALID\nGIT_ERROR_REFERENCE\nGIT_ERROR_ZLIB\nGIT_ERROR_REPOSITORY\nGIT_ERROR_CONFIG\nGIT_ERROR_REGEX\nGIT_ERROR_ODB\nGIT_ERROR_INDEX\nGIT_ERROR_OBJECT\nGIT_ERROR_NET\nGIT_ERROR_TAG\nGIT_ERROR_TREE\nGIT_ERROR_INDEXER\nGIT_ERROR_SSL\nGIT_ERROR_SUBMODULE\nGIT_ERROR_THREAD\nGIT_ERROR_STASH\nGIT_ERROR_CHECKOUT\nGIT_ERROR_FETCHHEAD\nGIT_ERROR_MERGE\nGIT_ERROR_SSH\nGIT_ERROR_FILTER\nGIT_ERROR_REVERT\nGIT_ERROR_CALLBACK\nGIT_ERROR_CHERRYPICK\nGIT_ERROR_DESCRIBE\nGIT_ERROR_REBASE\nGIT_ERROR_FILESYSTEM\nGIT_ERROR_PATCH\nGIT_ERROR_WORKTREE\nGIT_ERROR_SHA\nGIT_ERROR_HTTP\nGIT_ERROR_INTERNAL\nGIT_ERROR_GRAFTS", + "tdef": "typedef", + "description": " Error classes ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_ERROR_NONE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_ERROR_NOMEMORY", + "comments": "", + "value": 1 + }, + { "type": "int", "name": "GIT_ERROR_OS", "comments": "", "value": 2 }, + { + "type": "int", + "name": "GIT_ERROR_INVALID", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_ERROR_REFERENCE", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_ERROR_ZLIB", + "comments": "", + "value": 5 + }, + { + "type": "int", + "name": "GIT_ERROR_REPOSITORY", + "comments": "", + "value": 6 + }, + { + "type": "int", + "name": "GIT_ERROR_CONFIG", + "comments": "", + "value": 7 + }, + { + "type": "int", + "name": "GIT_ERROR_REGEX", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_ERROR_ODB", + "comments": "", + "value": 9 + }, + { + "type": "int", + "name": "GIT_ERROR_INDEX", + "comments": "", + "value": 10 + }, + { + "type": "int", + "name": "GIT_ERROR_OBJECT", + "comments": "", + "value": 11 + }, + { + "type": "int", + "name": "GIT_ERROR_NET", + "comments": "", + "value": 12 + }, + { + "type": "int", + "name": "GIT_ERROR_TAG", + "comments": "", + "value": 13 + }, + { + "type": "int", + "name": "GIT_ERROR_TREE", + "comments": "", + "value": 14 + }, + { + "type": "int", + "name": "GIT_ERROR_INDEXER", + "comments": "", + "value": 15 + }, + { + "type": "int", + "name": "GIT_ERROR_SSL", + "comments": "", + "value": 16 + }, + { + "type": "int", + "name": "GIT_ERROR_SUBMODULE", + "comments": "", + "value": 17 + }, + { + "type": "int", + "name": "GIT_ERROR_THREAD", + "comments": "", + "value": 18 + }, + { + "type": "int", + "name": "GIT_ERROR_STASH", + "comments": "", + "value": 19 + }, + { + "type": "int", + "name": "GIT_ERROR_CHECKOUT", + "comments": "", + "value": 20 + }, + { + "type": "int", + "name": "GIT_ERROR_FETCHHEAD", + "comments": "", + "value": 21 + }, + { + "type": "int", + "name": "GIT_ERROR_MERGE", + "comments": "", + "value": 22 + }, + { + "type": "int", + "name": "GIT_ERROR_SSH", + "comments": "", + "value": 23 + }, + { + "type": "int", + "name": "GIT_ERROR_FILTER", + "comments": "", + "value": 24 + }, + { + "type": "int", + "name": "GIT_ERROR_REVERT", + "comments": "", + "value": 25 + }, + { + "type": "int", + "name": "GIT_ERROR_CALLBACK", + "comments": "", + "value": 26 + }, + { + "type": "int", + "name": "GIT_ERROR_CHERRYPICK", + "comments": "", + "value": 27 + }, + { + "type": "int", + "name": "GIT_ERROR_DESCRIBE", + "comments": "", + "value": 28 + }, + { + "type": "int", + "name": "GIT_ERROR_REBASE", + "comments": "", + "value": 29 + }, + { + "type": "int", + "name": "GIT_ERROR_FILESYSTEM", + "comments": "", + "value": 30 + }, + { + "type": "int", + "name": "GIT_ERROR_PATCH", + "comments": "", + "value": 31 + }, + { + "type": "int", + "name": "GIT_ERROR_WORKTREE", + "comments": "", + "value": 32 + }, + { + "type": "int", + "name": "GIT_ERROR_SHA", + "comments": "", + "value": 33 + }, + { + "type": "int", + "name": "GIT_ERROR_HTTP", + "comments": "", + "value": 34 + }, + { + "type": "int", + "name": "GIT_ERROR_INTERNAL", + "comments": "", + "value": 35 + }, + { + "type": "int", + "name": "GIT_ERROR_GRAFTS", + "comments": "", + "value": 36 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_feature_t", + { + "decl": [ + "GIT_FEATURE_THREADS", + "GIT_FEATURE_HTTPS", + "GIT_FEATURE_SSH", + "GIT_FEATURE_NSEC" + ], + "type": "enum", + "file": "git2/common.h", + "line": 134, + "lineto": 157, + "block": "GIT_FEATURE_THREADS\nGIT_FEATURE_HTTPS\nGIT_FEATURE_SSH\nGIT_FEATURE_NSEC", + "tdef": "typedef", + "description": " Combinations of these values describe the features with which libgit2\n was compiled", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FEATURE_THREADS", + "comments": "

If set, libgit2 was built thread-aware and can be safely used from multiple\n threads.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_FEATURE_HTTPS", + "comments": "

If set, libgit2 was built with and linked against a TLS implementation.\n Custom TLS streams may still be added by the user to support HTTPS\n regardless of this.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_FEATURE_SSH", + "comments": "

If set, libgit2 was built with and linked against libssh2. A custom\n transport may still be added by the user to support libssh2 regardless of\n this.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_FEATURE_NSEC", + "comments": "

If set, libgit2 was built with support for sub-second resolution in file\n modification times.

\n", + "value": 8 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_fetch_depth_t", + { + "decl": ["GIT_FETCH_DEPTH_FULL", "GIT_FETCH_DEPTH_UNSHALLOW"], + "type": "enum", + "file": "git2/remote.h", + "line": 717, + "lineto": 723, + "block": "GIT_FETCH_DEPTH_FULL\nGIT_FETCH_DEPTH_UNSHALLOW", + "tdef": "typedef", + "description": " Constants for fetch depth (shallowness of fetch). ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FETCH_DEPTH_FULL", + "comments": "

The fetch is "full" (not shallow). This is the default.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FETCH_DEPTH_UNSHALLOW", + "comments": "

The fetch should "unshallow" and fetch missing data.

\n", + "value": 2147483647 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_fetch_options", + { + "decl": [ + "int version", + "git_remote_callbacks callbacks", + "git_fetch_prune_t prune", + "unsigned int update_fetchhead", + "git_remote_autotag_option_t download_tags", + "git_proxy_options proxy_opts", + "int depth", + "git_remote_redirect_t follow_redirects", + "git_strarray custom_headers" + ], + "type": "struct", + "value": "git_fetch_options", + "file": "git2/remote.h", + "line": 733, + "lineto": 785, + "block": "int version\ngit_remote_callbacks callbacks\ngit_fetch_prune_t prune\nunsigned int update_fetchhead\ngit_remote_autotag_option_t download_tags\ngit_proxy_options proxy_opts\nint depth\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", + "tdef": "typedef", + "description": " Fetch options structure.", + "comments": "

Zero out for defaults. Initialize with GIT_FETCH_OPTIONS_INIT macro to correctly set the version field. E.g.

\n\n
    git_fetch_options opts = GIT_FETCH_OPTIONS_INIT;\n
\n", + "fields": [ + { "type": "int", "name": "version", "comments": "" }, + { + "type": "git_remote_callbacks", + "name": "callbacks", + "comments": " Callbacks to use for this fetch operation" + }, + { + "type": "git_fetch_prune_t", + "name": "prune", + "comments": " Whether to perform a prune after the fetch" + }, + { + "type": "unsigned int", + "name": "update_fetchhead", + "comments": " How to handle reference updates; see `git_remote_update_flags`." + }, + { + "type": "git_remote_autotag_option_t", + "name": "download_tags", + "comments": " Determines how to behave regarding tags on the remote, such\n as auto-downloading tags for objects we're downloading or\n downloading all of them.\n\n The default is to auto-follow tags." + }, + { + "type": "git_proxy_options", + "name": "proxy_opts", + "comments": " Proxy options to use, by default no proxy is used." + }, + { + "type": "int", + "name": "depth", + "comments": " Depth of the fetch to perform, or `GIT_FETCH_DEPTH_FULL`\n (or `0`) for full history, or `GIT_FETCH_DEPTH_UNSHALLOW`\n to \"unshallow\" a shallow repository.\n\n The default is full (`GIT_FETCH_DEPTH_FULL` or `0`)." + }, + { + "type": "git_remote_redirect_t", + "name": "follow_redirects", + "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." + }, + { + "type": "git_strarray", + "name": "custom_headers", + "comments": " Extra headers for this fetch operation" + } + ], + "used": { + "returns": [], + "needs": [ + "git_fetch_options_init", + "git_remote_download", + "git_remote_fetch" + ] + } + } + ], + [ + "git_fetch_prune_t", + { + "decl": [ + "GIT_FETCH_PRUNE_UNSPECIFIED", + "GIT_FETCH_PRUNE", + "GIT_FETCH_NO_PRUNE" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 676, + "lineto": 689, + "block": "GIT_FETCH_PRUNE_UNSPECIFIED\nGIT_FETCH_PRUNE\nGIT_FETCH_NO_PRUNE", + "tdef": "typedef", + "description": " Acceptable prune settings when fetching ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FETCH_PRUNE_UNSPECIFIED", + "comments": "

Use the setting from the configuration

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FETCH_PRUNE", + "comments": "

Force pruning on

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_FETCH_NO_PRUNE", + "comments": "

Force pruning off

\n", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_filemode_t", + { + "decl": [ + "GIT_FILEMODE_UNREADABLE", + "GIT_FILEMODE_TREE", + "GIT_FILEMODE_BLOB", + "GIT_FILEMODE_BLOB_EXECUTABLE", + "GIT_FILEMODE_LINK", + "GIT_FILEMODE_COMMIT" + ], + "type": "enum", + "file": "git2/types.h", + "line": 222, + "lineto": 229, + "block": "GIT_FILEMODE_UNREADABLE\nGIT_FILEMODE_TREE\nGIT_FILEMODE_BLOB\nGIT_FILEMODE_BLOB_EXECUTABLE\nGIT_FILEMODE_LINK\nGIT_FILEMODE_COMMIT", + "tdef": "typedef", + "description": " Valid modes for index and tree entries. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FILEMODE_UNREADABLE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FILEMODE_TREE", + "comments": "", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_FILEMODE_BLOB", + "comments": "", + "value": 33188 + }, + { + "type": "int", + "name": "GIT_FILEMODE_BLOB_EXECUTABLE", + "comments": "", + "value": 33261 + }, + { + "type": "int", + "name": "GIT_FILEMODE_LINK", + "comments": "", + "value": 40960 + }, + { + "type": "int", + "name": "GIT_FILEMODE_COMMIT", + "comments": "", + "value": 57344 + } + ], + "used": { + "returns": ["git_tree_entry_filemode", "git_tree_entry_filemode_raw"], + "needs": ["git_treebuilder_insert"] + } + } + ], + [ + "git_filter", + { + "decl": "git_filter", + "type": "struct", + "value": "git_filter", + "file": "git2/filter.h", + "line": 100, + "lineto": 100, + "tdef": "typedef", + "description": " A filter that can transform file data", + "comments": "

This represents a filter that can be used to transform or even replace file data. Libgit2 includes one built in filter and it is possible to write your own (see git2/sys/filter.h for information on that).

\n\n

The two builtin filters are:

\n\n
    \n
  • "crlf" which uses the complex rules with the "text", "eol", and "crlf" file attributes to decide how to convert between LF and CRLF line endings * "ident" which replaces "$Id$" in a blob with "$Id: $" upon checkout and replaced "$Id: $" with "$Id$" on checkin.
  • \n
\n", + "used": { + "returns": [], + "needs": [ + "git_filter_list_apply_to_blob", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_data", + "git_filter_list_apply_to_file", + "git_filter_list_contains", + "git_filter_list_free", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_data", + "git_filter_list_stream_file" + ] + } + } + ], + [ + "git_filter_flag_t", + { + "decl": [ + "GIT_FILTER_DEFAULT", + "GIT_FILTER_ALLOW_UNSAFE", + "GIT_FILTER_NO_SYSTEM_ATTRIBUTES", + "GIT_FILTER_ATTRIBUTES_FROM_HEAD", + "GIT_FILTER_ATTRIBUTES_FROM_COMMIT" + ], + "type": "enum", + "file": "git2/filter.h", + "line": 41, + "lineto": 58, + "block": "GIT_FILTER_DEFAULT\nGIT_FILTER_ALLOW_UNSAFE\nGIT_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_FILTER_ATTRIBUTES_FROM_COMMIT", + "tdef": "typedef", + "description": " Filter option flags.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FILTER_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FILTER_ALLOW_UNSAFE", + "comments": "

Don't error for safecrlf violations, allow them to continue.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_FILTER_NO_SYSTEM_ATTRIBUTES", + "comments": "

Don't load /etc/gitattributes (or the system equivalent)

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_FILTER_ATTRIBUTES_FROM_HEAD", + "comments": "

Load attributes from .gitattributes in the root of HEAD

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_FILTER_ATTRIBUTES_FROM_COMMIT", + "comments": "

Load attributes from .gitattributes in a given commit.\n This can only be specified in a git_filter_options.

\n", + "value": 8 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_filter_list", + { + "decl": "git_filter_list", + "type": "struct", + "value": "git_filter_list", + "file": "git2/filter.h", + "line": 112, + "lineto": 112, + "tdef": "typedef", + "description": " List of filters to be applied", + "comments": "

This represents a list of filters to be applied to a file / blob. You can build the list with one call, apply it with another, and dispose it with a third. In typical usage, there are not many occasions where a git_filter_list is needed directly since the library will generally handle conversions for you, but it can be convenient to be able to build and apply the list sometimes.

\n", + "used": { + "returns": [], + "needs": [ + "git_filter_list_apply_to_blob", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_data", + "git_filter_list_apply_to_file", + "git_filter_list_contains", + "git_filter_list_free", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_data", + "git_filter_list_stream_file" + ] + } + } + ], + [ + "git_filter_mode_t", + { + "decl": [ + "GIT_FILTER_TO_WORKTREE", + "GIT_FILTER_SMUDGE", + "GIT_FILTER_TO_ODB", + "GIT_FILTER_CLEAN" + ], + "type": "enum", + "file": "git2/filter.h", + "line": 31, + "lineto": 36, + "block": "GIT_FILTER_TO_WORKTREE\nGIT_FILTER_SMUDGE\nGIT_FILTER_TO_ODB\nGIT_FILTER_CLEAN", + "tdef": "typedef", + "description": " Filters are applied in one of two directions: smudging - which is\n exporting a file from the Git object database to the working directory,\n and cleaning - which is importing a file from the working directory to\n the Git object database. These values control which direction of\n change is being applied.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_FILTER_TO_WORKTREE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FILTER_SMUDGE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_FILTER_TO_ODB", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_FILTER_CLEAN", + "comments": "", + "value": 1 + } + ], + "used": { + "returns": [], + "needs": ["git_filter_list_load", "git_filter_list_load_ext"] + } + } + ], + [ + "git_filter_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "git_oid * commit_id", + "git_oid attr_commit_id" + ], + "type": "struct", + "value": "git_filter_options", + "file": "git2/filter.h", + "line": 63, + "lineto": 80, + "block": "unsigned int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", + "tdef": "typedef", + "description": " Filtering options", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " See `git_filter_flag_t` above " + }, + { "type": "git_oid *", "name": "commit_id", "comments": "" }, + { + "type": "git_oid", + "name": "attr_commit_id", + "comments": " The commit to load attributes from, when\n `GIT_FILTER_ATTRIBUTES_FROM_COMMIT` is specified." + } + ], + "used": { "returns": [], "needs": ["git_filter_list_load_ext"] } + } + ], + [ + "git_filter_source", + { + "decl": "git_filter_source", + "type": "struct", + "value": "git_filter_source", + "file": "git2/sys/filter.h", + "line": 95, + "lineto": 95, + "tdef": "typedef", + "description": " A filter source represents a file/blob to be processed", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_hashsig_option_t", + { + "decl": [ + "GIT_HASHSIG_NORMAL", + "GIT_HASHSIG_IGNORE_WHITESPACE", + "GIT_HASHSIG_SMART_WHITESPACE", + "GIT_HASHSIG_ALLOW_SMALL_FILES" + ], + "type": "enum", + "file": "git2/sys/hashsig.h", + "line": 25, + "lineto": 45, + "block": "GIT_HASHSIG_NORMAL\nGIT_HASHSIG_IGNORE_WHITESPACE\nGIT_HASHSIG_SMART_WHITESPACE\nGIT_HASHSIG_ALLOW_SMALL_FILES", + "tdef": "typedef", + "description": " Options for hashsig computation", + "comments": "

The options GIT_HASHSIG_NORMAL, GIT_HASHSIG_IGNORE_WHITESPACE, GIT_HASHSIG_SMART_WHITESPACE are exclusive and should not be combined.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_HASHSIG_NORMAL", + "comments": "

Use all data

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_HASHSIG_IGNORE_WHITESPACE", + "comments": "

Ignore whitespace

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_HASHSIG_SMART_WHITESPACE", + "comments": "

Ignore

\n\n

and all space after

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_HASHSIG_ALLOW_SMALL_FILES", + "comments": "

Allow hashing of small files

\n", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_index", + { + "decl": "git_index", + "type": "struct", + "value": "git_index", + "file": "git2/types.h", + "line": 148, + "lineto": 148, + "tdef": "typedef", + "description": " Memory representation of an index file. ", + "comments": "", + "used": { + "returns": [ + "git_index_get_byindex", + "git_index_get_bypath", + "git_remote_stats" + ], + "needs": [ + "git_apply_to_tree", + "git_checkout_index", + "git_cherrypick_commit", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_tree_to_index", + "git_index_add", + "git_index_add_all", + "git_index_add_bypath", + "git_index_add_from_buffer", + "git_index_caps", + "git_index_checksum", + "git_index_clear", + "git_index_conflict_add", + "git_index_conflict_cleanup", + "git_index_conflict_get", + "git_index_conflict_iterator_free", + "git_index_conflict_iterator_new", + "git_index_conflict_next", + "git_index_conflict_remove", + "git_index_entry_is_conflict", + "git_index_entry_stage", + "git_index_entrycount", + "git_index_find", + "git_index_find_prefix", + "git_index_free", + "git_index_get_byindex", + "git_index_get_bypath", + "git_index_has_conflicts", + "git_index_iterator_free", + "git_index_iterator_new", + "git_index_iterator_next", + "git_index_owner", + "git_index_path", + "git_index_read", + "git_index_read_tree", + "git_index_remove", + "git_index_remove_all", + "git_index_remove_bypath", + "git_index_remove_directory", + "git_index_set_caps", + "git_index_set_version", + "git_index_update_all", + "git_index_version", + "git_index_write", + "git_index_write_tree", + "git_index_write_tree_to", + "git_indexer_append", + "git_indexer_commit", + "git_indexer_free", + "git_indexer_hash", + "git_indexer_name", + "git_indexer_new", + "git_indexer_options_init", + "git_indexer_progress_cb", + "git_merge_commits", + "git_merge_file_from_index", + "git_merge_trees", + "git_odb_write_pack", + "git_packbuilder_write", + "git_pathspec_match_index", + "git_rebase_inmemory_index", + "git_repository_index", + "git_revert_commit" + ] + } + } + ], + [ + "git_index_add_option_t", + { + "decl": [ + "GIT_INDEX_ADD_DEFAULT", + "GIT_INDEX_ADD_FORCE", + "GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH", + "GIT_INDEX_ADD_CHECK_PATHSPEC" + ], + "type": "enum", + "file": "git2/index.h", + "line": 139, + "lineto": 144, + "block": "GIT_INDEX_ADD_DEFAULT\nGIT_INDEX_ADD_FORCE\nGIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH\nGIT_INDEX_ADD_CHECK_PATHSPEC", + "tdef": "typedef", + "description": " Flags for APIs that add files matching pathspec ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_ADD_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_INDEX_ADD_FORCE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_INDEX_ADD_CHECK_PATHSPEC", + "comments": "", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_index_capability_t", + { + "decl": [ + "GIT_INDEX_CAPABILITY_IGNORE_CASE", + "GIT_INDEX_CAPABILITY_NO_FILEMODE", + "GIT_INDEX_CAPABILITY_NO_SYMLINKS", + "GIT_INDEX_CAPABILITY_FROM_OWNER" + ], + "type": "enum", + "file": "git2/index.h", + "line": 126, + "lineto": 131, + "block": "GIT_INDEX_CAPABILITY_IGNORE_CASE\nGIT_INDEX_CAPABILITY_NO_FILEMODE\nGIT_INDEX_CAPABILITY_NO_SYMLINKS\nGIT_INDEX_CAPABILITY_FROM_OWNER", + "tdef": "typedef", + "description": " Capabilities of system that affect index actions. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_CAPABILITY_IGNORE_CASE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_INDEX_CAPABILITY_NO_FILEMODE", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_INDEX_CAPABILITY_NO_SYMLINKS", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_INDEX_CAPABILITY_FROM_OWNER", + "comments": "", + "value": -1 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_index_conflict_iterator", + { + "decl": "git_index_conflict_iterator", + "type": "struct", + "value": "git_index_conflict_iterator", + "file": "git2/types.h", + "line": 154, + "lineto": 154, + "tdef": "typedef", + "description": " An iterator for conflicts in the index. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_index_conflict_iterator_free", + "git_index_conflict_iterator_new", + "git_index_conflict_next" + ] + } + } + ], + [ + "git_index_entry", + { + "decl": [ + "git_index_time ctime", + "git_index_time mtime", + "uint32_t dev", + "uint32_t ino", + "uint32_t mode", + "uint32_t uid", + "uint32_t gid", + "uint32_t file_size", + "git_oid id", + "uint16_t flags", + "uint16_t flags_extended", + "const char * path" + ], + "type": "struct", + "value": "git_index_entry", + "file": "git2/index.h", + "line": 53, + "lineto": 70, + "block": "git_index_time ctime\ngit_index_time mtime\nuint32_t dev\nuint32_t ino\nuint32_t mode\nuint32_t uid\nuint32_t gid\nuint32_t file_size\ngit_oid id\nuint16_t flags\nuint16_t flags_extended\nconst char * path", + "tdef": "typedef", + "description": " In-memory representation of a file entry in the index.", + "comments": "

This is a public structure that represents a file entry in the index. The meaning of the fields corresponds to core Git's documentation (in "Documentation/technical/index-format.txt").

\n\n

The flags field consists of a number of bit fields which can be accessed via the first set of GIT_INDEX_ENTRY_... bitmasks below. These flags are all read from and persisted to disk.

\n\n

The flags_extended field also has a number of bit fields which can be accessed via the later GIT_INDEX_ENTRY_... bitmasks below. Some of these flags are read from and written to disk, but some are set aside for in-memory only reference.

\n\n

Note that the time and size fields are truncated to 32 bits. This is enough to detect changes, which is enough for the index to function as a cache, but it should not be taken as an authoritative source for that data.

\n", + "fields": [ + { "type": "git_index_time", "name": "ctime", "comments": "" }, + { "type": "git_index_time", "name": "mtime", "comments": "" }, + { "type": "uint32_t", "name": "dev", "comments": "" }, + { "type": "uint32_t", "name": "ino", "comments": "" }, + { "type": "uint32_t", "name": "mode", "comments": "" }, + { "type": "uint32_t", "name": "uid", "comments": "" }, + { "type": "uint32_t", "name": "gid", "comments": "" }, + { "type": "uint32_t", "name": "file_size", "comments": "" }, + { "type": "git_oid", "name": "id", "comments": "" }, + { "type": "uint16_t", "name": "flags", "comments": "" }, + { "type": "uint16_t", "name": "flags_extended", "comments": "" }, + { "type": "const char *", "name": "path", "comments": "" } + ], + "used": { + "returns": ["git_index_get_byindex", "git_index_get_bypath"], + "needs": [ + "git_index_add", + "git_index_add_from_buffer", + "git_index_conflict_add", + "git_index_conflict_get", + "git_index_conflict_next", + "git_index_entry_is_conflict", + "git_index_entry_stage", + "git_index_iterator_next", + "git_merge_file_from_index" + ] + } + } + ], + [ + "git_index_entry_extended_flag_t", + { + "decl": [ + "GIT_INDEX_ENTRY_INTENT_TO_ADD", + "GIT_INDEX_ENTRY_SKIP_WORKTREE", + "GIT_INDEX_ENTRY_EXTENDED_FLAGS", + "GIT_INDEX_ENTRY_UPTODATE" + ], + "type": "enum", + "file": "git2/index.h", + "line": 116, + "lineto": 123, + "block": "GIT_INDEX_ENTRY_INTENT_TO_ADD\nGIT_INDEX_ENTRY_SKIP_WORKTREE\nGIT_INDEX_ENTRY_EXTENDED_FLAGS\nGIT_INDEX_ENTRY_UPTODATE", + "tdef": "typedef", + "description": " Bitmasks for on-disk fields of `git_index_entry`'s `flags_extended`", + "comments": "

In memory, the flags_extended fields are divided into two parts: the fields that are read from and written to disk, and other fields that in-memory only and used by libgit2. Only the flags in GIT_INDEX_ENTRY_EXTENDED_FLAGS will get saved on-disk.

\n\n

Thee first three bitmasks match the three fields in the git_index_entry flags_extended value that belong on disk. You can use them to interpret the data in the flags_extended.

\n\n

The rest of the bitmasks match the other fields in the git_index_entry flags_extended value that are only used in-memory by libgit2. You can use them to interpret the data in the flags_extended.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_ENTRY_INTENT_TO_ADD", + "comments": "", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_INDEX_ENTRY_SKIP_WORKTREE", + "comments": "", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_INDEX_ENTRY_EXTENDED_FLAGS", + "comments": "", + "value": 24576 + }, + { + "type": "int", + "name": "GIT_INDEX_ENTRY_UPTODATE", + "comments": "", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_index_entry_flag_t", + { + "decl": ["GIT_INDEX_ENTRY_EXTENDED", "GIT_INDEX_ENTRY_VALID"], + "type": "enum", + "file": "git2/index.h", + "line": 87, + "lineto": 90, + "block": "GIT_INDEX_ENTRY_EXTENDED\nGIT_INDEX_ENTRY_VALID", + "tdef": "typedef", + "description": " Flags for index entries", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_ENTRY_EXTENDED", + "comments": "", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_INDEX_ENTRY_VALID", + "comments": "", + "value": 32768 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_index_iterator", + { + "decl": "git_index_iterator", + "type": "struct", + "value": "git_index_iterator", + "file": "git2/types.h", + "line": 151, + "lineto": 151, + "tdef": "typedef", + "description": " An iterator for entries in the index. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_index_iterator_free", + "git_index_iterator_new", + "git_index_iterator_next" + ] + } + } + ], + [ + "git_index_stage_t", + { + "decl": [ + "GIT_INDEX_STAGE_ANY", + "GIT_INDEX_STAGE_NORMAL", + "GIT_INDEX_STAGE_ANCESTOR", + "GIT_INDEX_STAGE_OURS", + "GIT_INDEX_STAGE_THEIRS" + ], + "type": "enum", + "file": "git2/index.h", + "line": 147, + "lineto": 167, + "block": "GIT_INDEX_STAGE_ANY\nGIT_INDEX_STAGE_NORMAL\nGIT_INDEX_STAGE_ANCESTOR\nGIT_INDEX_STAGE_OURS\nGIT_INDEX_STAGE_THEIRS", + "tdef": "typedef", + "description": " Git index stage states ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_INDEX_STAGE_ANY", + "comments": "

Match any index stage.

\n\n

Some index APIs take a stage to match; pass this value to match\n any entry matching the path regardless of stage.

\n", + "value": -1 + }, + { + "type": "int", + "name": "GIT_INDEX_STAGE_NORMAL", + "comments": "

A normal staged file in the index.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_INDEX_STAGE_ANCESTOR", + "comments": "

The ancestor side of a conflict.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_INDEX_STAGE_OURS", + "comments": "

The "ours" side of a conflict.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_INDEX_STAGE_THEIRS", + "comments": "

The "theirs" side of a conflict.

\n", + "value": 3 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_index_time", + { + "decl": ["int32_t seconds", "uint32_t nanoseconds"], + "type": "struct", + "value": "git_index_time", + "file": "git2/index.h", + "line": 26, + "lineto": 30, + "block": "int32_t seconds\nuint32_t nanoseconds", + "tdef": "typedef", + "description": " Time structure used in a git index entry ", + "comments": "", + "fields": [ + { "type": "int32_t", "name": "seconds", "comments": "" }, + { "type": "uint32_t", "name": "nanoseconds", "comments": "" } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_indexer", + { + "decl": "git_indexer", + "type": "struct", + "value": "git_indexer", + "file": "git2/indexer.h", + "line": 17, + "lineto": 17, + "tdef": "typedef", + "description": " A git indexer object ", + "comments": "", + "used": { + "returns": ["git_remote_stats"], + "needs": [ + "git_indexer_append", + "git_indexer_commit", + "git_indexer_free", + "git_indexer_hash", + "git_indexer_name", + "git_indexer_new", + "git_indexer_options_init", + "git_indexer_progress_cb", + "git_odb_write_pack", + "git_packbuilder_write" + ] + } + } + ], + [ + "git_indexer_options", + { + "decl": [ + "unsigned int version", + "git_indexer_progress_cb progress_cb", + "void * progress_cb_payload", + "unsigned char verify" + ], + "type": "struct", + "value": "git_indexer_options", + "file": "git2/indexer.h", + "line": 62, + "lineto": 86, + "block": "unsigned int version\ngit_indexer_progress_cb progress_cb\nvoid * progress_cb_payload\nunsigned char verify", + "tdef": "typedef", + "description": " Options for indexer configuration", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "git_indexer_progress_cb", + "name": "progress_cb", + "comments": " progress_cb function to call with progress information " + }, + { + "type": "void *", + "name": "progress_cb_payload", + "comments": " progress_cb_payload payload for the progress callback " + }, + { + "type": "unsigned char", + "name": "verify", + "comments": " Do connectivity checks for the received pack " + } + ], + "used": { + "returns": [], + "needs": ["git_indexer_new", "git_indexer_options_init"] + } + } + ], + [ + "git_indexer_progress", + { + "decl": [ + "unsigned int total_objects", + "unsigned int indexed_objects", + "unsigned int received_objects", + "unsigned int local_objects", + "unsigned int total_deltas", + "unsigned int indexed_deltas", + "size_t received_bytes" + ], + "type": "struct", + "value": "git_indexer_progress", + "file": "git2/indexer.h", + "line": 24, + "lineto": 48, + "block": "unsigned int total_objects\nunsigned int indexed_objects\nunsigned int received_objects\nunsigned int local_objects\nunsigned int total_deltas\nunsigned int indexed_deltas\nsize_t received_bytes", + "tdef": "typedef", + "description": " This structure is used to provide callers information about the\n progress of indexing a packfile, either directly or part of a\n fetch or clone that downloads a packfile.", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "total_objects", + "comments": " number of objects in the packfile being indexed " + }, + { + "type": "unsigned int", + "name": "indexed_objects", + "comments": " received objects that have been hashed " + }, + { + "type": "unsigned int", + "name": "received_objects", + "comments": " received_objects: objects which have been downloaded " + }, + { + "type": "unsigned int", + "name": "local_objects", + "comments": " locally-available objects that have been injected in order\n to fix a thin pack" + }, + { + "type": "unsigned int", + "name": "total_deltas", + "comments": " number of deltas in the packfile being indexed " + }, + { + "type": "unsigned int", + "name": "indexed_deltas", + "comments": " received deltas that have been indexed " + }, + { + "type": "size_t", + "name": "received_bytes", + "comments": " size of the packfile received up to now " + } + ], + "used": { + "returns": ["git_remote_stats"], + "needs": [ + "git_indexer_append", + "git_indexer_commit", + "git_indexer_progress_cb", + "git_odb_write_pack", + "git_packbuilder_write" + ] + } + } + ], + [ + "git_libgit2_opt_t", + { + "decl": [ + "GIT_OPT_GET_MWINDOW_SIZE", + "GIT_OPT_SET_MWINDOW_SIZE", + "GIT_OPT_GET_MWINDOW_MAPPED_LIMIT", + "GIT_OPT_SET_MWINDOW_MAPPED_LIMIT", + "GIT_OPT_GET_SEARCH_PATH", + "GIT_OPT_SET_SEARCH_PATH", + "GIT_OPT_SET_CACHE_OBJECT_LIMIT", + "GIT_OPT_SET_CACHE_MAX_SIZE", + "GIT_OPT_ENABLE_CACHING", + "GIT_OPT_GET_CACHED_MEMORY", + "GIT_OPT_GET_TEMPLATE_PATH", + "GIT_OPT_SET_TEMPLATE_PATH", + "GIT_OPT_SET_SSL_CERT_LOCATIONS", + "GIT_OPT_SET_USER_AGENT", + "GIT_OPT_ENABLE_STRICT_OBJECT_CREATION", + "GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION", + "GIT_OPT_SET_SSL_CIPHERS", + "GIT_OPT_GET_USER_AGENT", + "GIT_OPT_ENABLE_OFS_DELTA", + "GIT_OPT_ENABLE_FSYNC_GITDIR", + "GIT_OPT_GET_WINDOWS_SHAREMODE", + "GIT_OPT_SET_WINDOWS_SHAREMODE", + "GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION", + "GIT_OPT_SET_ALLOCATOR", + "GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY", + "GIT_OPT_GET_PACK_MAX_OBJECTS", + "GIT_OPT_SET_PACK_MAX_OBJECTS", + "GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS", + "GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE", + "GIT_OPT_GET_MWINDOW_FILE_LIMIT", + "GIT_OPT_SET_MWINDOW_FILE_LIMIT", + "GIT_OPT_SET_ODB_PACKED_PRIORITY", + "GIT_OPT_SET_ODB_LOOSE_PRIORITY", + "GIT_OPT_GET_EXTENSIONS", + "GIT_OPT_SET_EXTENSIONS", + "GIT_OPT_GET_OWNER_VALIDATION", + "GIT_OPT_SET_OWNER_VALIDATION", + "GIT_OPT_GET_HOMEDIR", + "GIT_OPT_SET_HOMEDIR", + "GIT_OPT_SET_SERVER_CONNECT_TIMEOUT", + "GIT_OPT_GET_SERVER_CONNECT_TIMEOUT", + "GIT_OPT_SET_SERVER_TIMEOUT", + "GIT_OPT_GET_SERVER_TIMEOUT", + "GIT_OPT_SET_USER_AGENT_PRODUCT", + "GIT_OPT_GET_USER_AGENT_PRODUCT" + ], + "type": "enum", + "file": "git2/common.h", + "line": 188, + "lineto": 234, + "block": "GIT_OPT_GET_MWINDOW_SIZE\nGIT_OPT_SET_MWINDOW_SIZE\nGIT_OPT_GET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_SET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_GET_SEARCH_PATH\nGIT_OPT_SET_SEARCH_PATH\nGIT_OPT_SET_CACHE_OBJECT_LIMIT\nGIT_OPT_SET_CACHE_MAX_SIZE\nGIT_OPT_ENABLE_CACHING\nGIT_OPT_GET_CACHED_MEMORY\nGIT_OPT_GET_TEMPLATE_PATH\nGIT_OPT_SET_TEMPLATE_PATH\nGIT_OPT_SET_SSL_CERT_LOCATIONS\nGIT_OPT_SET_USER_AGENT\nGIT_OPT_ENABLE_STRICT_OBJECT_CREATION\nGIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION\nGIT_OPT_SET_SSL_CIPHERS\nGIT_OPT_GET_USER_AGENT\nGIT_OPT_ENABLE_OFS_DELTA\nGIT_OPT_ENABLE_FSYNC_GITDIR\nGIT_OPT_GET_WINDOWS_SHAREMODE\nGIT_OPT_SET_WINDOWS_SHAREMODE\nGIT_OPT_ENABLE_STRICT_HASH_VERIFICATION\nGIT_OPT_SET_ALLOCATOR\nGIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY\nGIT_OPT_GET_PACK_MAX_OBJECTS\nGIT_OPT_SET_PACK_MAX_OBJECTS\nGIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS\nGIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE\nGIT_OPT_GET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_ODB_PACKED_PRIORITY\nGIT_OPT_SET_ODB_LOOSE_PRIORITY\nGIT_OPT_GET_EXTENSIONS\nGIT_OPT_SET_EXTENSIONS\nGIT_OPT_GET_OWNER_VALIDATION\nGIT_OPT_SET_OWNER_VALIDATION\nGIT_OPT_GET_HOMEDIR\nGIT_OPT_SET_HOMEDIR\nGIT_OPT_SET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_GET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_SET_SERVER_TIMEOUT\nGIT_OPT_GET_SERVER_TIMEOUT\nGIT_OPT_SET_USER_AGENT_PRODUCT\nGIT_OPT_GET_USER_AGENT_PRODUCT", + "tdef": "typedef", + "description": " Global library options", + "comments": "

These are used to select which global option to set or get and are used in git_libgit2_opts().

\n", + "fields": [ + { + "type": "int", + "name": "GIT_OPT_GET_MWINDOW_SIZE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_OPT_SET_MWINDOW_SIZE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_OPT_GET_MWINDOW_MAPPED_LIMIT", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_OPT_SET_MWINDOW_MAPPED_LIMIT", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_OPT_GET_SEARCH_PATH", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SEARCH_PATH", + "comments": "", + "value": 5 + }, + { + "type": "int", + "name": "GIT_OPT_SET_CACHE_OBJECT_LIMIT", + "comments": "", + "value": 6 + }, + { + "type": "int", + "name": "GIT_OPT_SET_CACHE_MAX_SIZE", + "comments": "", + "value": 7 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_CACHING", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_OPT_GET_CACHED_MEMORY", + "comments": "", + "value": 9 + }, + { + "type": "int", + "name": "GIT_OPT_GET_TEMPLATE_PATH", + "comments": "", + "value": 10 + }, + { + "type": "int", + "name": "GIT_OPT_SET_TEMPLATE_PATH", + "comments": "", + "value": 11 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SSL_CERT_LOCATIONS", + "comments": "", + "value": 12 + }, + { + "type": "int", + "name": "GIT_OPT_SET_USER_AGENT", + "comments": "", + "value": 13 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_STRICT_OBJECT_CREATION", + "comments": "", + "value": 14 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION", + "comments": "", + "value": 15 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SSL_CIPHERS", + "comments": "", + "value": 16 + }, + { + "type": "int", + "name": "GIT_OPT_GET_USER_AGENT", + "comments": "", + "value": 17 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_OFS_DELTA", + "comments": "", + "value": 18 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_FSYNC_GITDIR", + "comments": "", + "value": 19 + }, + { + "type": "int", + "name": "GIT_OPT_GET_WINDOWS_SHAREMODE", + "comments": "", + "value": 20 + }, + { + "type": "int", + "name": "GIT_OPT_SET_WINDOWS_SHAREMODE", + "comments": "", + "value": 21 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION", + "comments": "", + "value": 22 + }, + { + "type": "int", + "name": "GIT_OPT_SET_ALLOCATOR", + "comments": "", + "value": 23 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY", + "comments": "", + "value": 24 + }, + { + "type": "int", + "name": "GIT_OPT_GET_PACK_MAX_OBJECTS", + "comments": "", + "value": 25 + }, + { + "type": "int", + "name": "GIT_OPT_SET_PACK_MAX_OBJECTS", + "comments": "", + "value": 26 + }, + { + "type": "int", + "name": "GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS", + "comments": "", + "value": 27 + }, + { + "type": "int", + "name": "GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE", + "comments": "", + "value": 28 + }, + { + "type": "int", + "name": "GIT_OPT_GET_MWINDOW_FILE_LIMIT", + "comments": "", + "value": 29 + }, + { + "type": "int", + "name": "GIT_OPT_SET_MWINDOW_FILE_LIMIT", + "comments": "", + "value": 30 + }, + { + "type": "int", + "name": "GIT_OPT_SET_ODB_PACKED_PRIORITY", + "comments": "", + "value": 31 + }, + { + "type": "int", + "name": "GIT_OPT_SET_ODB_LOOSE_PRIORITY", + "comments": "", + "value": 32 + }, + { + "type": "int", + "name": "GIT_OPT_GET_EXTENSIONS", + "comments": "", + "value": 33 + }, + { + "type": "int", + "name": "GIT_OPT_SET_EXTENSIONS", + "comments": "", + "value": 34 + }, + { + "type": "int", + "name": "GIT_OPT_GET_OWNER_VALIDATION", + "comments": "", + "value": 35 + }, + { + "type": "int", + "name": "GIT_OPT_SET_OWNER_VALIDATION", + "comments": "", + "value": 36 + }, + { + "type": "int", + "name": "GIT_OPT_GET_HOMEDIR", + "comments": "", + "value": 37 + }, + { + "type": "int", + "name": "GIT_OPT_SET_HOMEDIR", + "comments": "", + "value": 38 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SERVER_CONNECT_TIMEOUT", + "comments": "", + "value": 39 + }, + { + "type": "int", + "name": "GIT_OPT_GET_SERVER_CONNECT_TIMEOUT", + "comments": "", + "value": 40 + }, + { + "type": "int", + "name": "GIT_OPT_SET_SERVER_TIMEOUT", + "comments": "", + "value": 41 + }, + { + "type": "int", + "name": "GIT_OPT_GET_SERVER_TIMEOUT", + "comments": "", + "value": 42 + }, + { + "type": "int", + "name": "GIT_OPT_SET_USER_AGENT_PRODUCT", + "comments": "", + "value": 43 + }, + { + "type": "int", + "name": "GIT_OPT_GET_USER_AGENT_PRODUCT", + "comments": "", + "value": 44 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_mailmap", + { + "decl": "git_mailmap", + "type": "struct", + "value": "git_mailmap", + "file": "git2/types.h", + "line": 366, + "lineto": 366, + "tdef": "typedef", + "description": " Representation of .mailmap file state. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_commit_author_with_mailmap", + "git_commit_committer_with_mailmap", + "git_mailmap_add_entry", + "git_mailmap_free", + "git_mailmap_from_buffer", + "git_mailmap_from_repository", + "git_mailmap_new", + "git_mailmap_resolve", + "git_mailmap_resolve_signature" + ] + } + } + ], + [ + "git_merge_analysis_t", + { + "decl": [ + "GIT_MERGE_ANALYSIS_NONE", + "GIT_MERGE_ANALYSIS_NORMAL", + "GIT_MERGE_ANALYSIS_UP_TO_DATE", + "GIT_MERGE_ANALYSIS_FASTFORWARD", + "GIT_MERGE_ANALYSIS_UNBORN" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 334, + "lineto": 363, + "block": "GIT_MERGE_ANALYSIS_NONE\nGIT_MERGE_ANALYSIS_NORMAL\nGIT_MERGE_ANALYSIS_UP_TO_DATE\nGIT_MERGE_ANALYSIS_FASTFORWARD\nGIT_MERGE_ANALYSIS_UNBORN", + "tdef": "typedef", + "description": " The results of `git_merge_analysis` indicate the merge opportunities.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_NONE", + "comments": "

No merge is possible. (Unused.)

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_NORMAL", + "comments": "

A "normal" merge; both HEAD and the given merge input have diverged\n from their common ancestor. The divergent commits must be merged.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_UP_TO_DATE", + "comments": "

All given merge inputs are reachable from HEAD, meaning the\n repository is up-to-date and no merge needs to be performed.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_FASTFORWARD", + "comments": "

The given merge input is a fast-forward from HEAD and no merge\n needs to be performed. Instead, the client can check out the\n given merge input.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_MERGE_ANALYSIS_UNBORN", + "comments": "

The HEAD of the current repository is "unborn" and does not point to\n a valid commit. No merge can be performed, but the caller may wish\n to simply set HEAD to the target commit(s).

\n", + "value": 8 + } + ], + "used": { + "returns": [], + "needs": ["git_merge_analysis", "git_merge_analysis_for_ref"] + } + } + ], + [ + "git_merge_driver_source", + { + "decl": "git_merge_driver_source", + "type": "struct", + "value": "git_merge_driver_source", + "file": "git2/sys/merge.h", + "line": 41, + "lineto": 41, + "tdef": "typedef", + "description": " A merge driver source represents the file to be merged", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_merge_file_favor_t", + { + "decl": [ + "GIT_MERGE_FILE_FAVOR_NORMAL", + "GIT_MERGE_FILE_FAVOR_OURS", + "GIT_MERGE_FILE_FAVOR_THEIRS", + "GIT_MERGE_FILE_FAVOR_UNION" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 109, + "lineto": 139, + "block": "GIT_MERGE_FILE_FAVOR_NORMAL\nGIT_MERGE_FILE_FAVOR_OURS\nGIT_MERGE_FILE_FAVOR_THEIRS\nGIT_MERGE_FILE_FAVOR_UNION", + "tdef": "typedef", + "description": " Merge file favor options for `git_merge_options` instruct the file-level\n merging functionality how to deal with conflicting regions of the files.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_FILE_FAVOR_NORMAL", + "comments": "

When a region of a file is changed in both branches, a conflict\n will be recorded in the index so that git_checkout can produce\n a merge file with conflict markers in the working directory.\n This is the default.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_FAVOR_OURS", + "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain the "ours" side of any conflicting\n region. The index will not record a conflict.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_FAVOR_THEIRS", + "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain the "theirs" side of any conflicting\n region. The index will not record a conflict.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_FAVOR_UNION", + "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain each unique line from each side,\n which has the result of combining both files. The index will not\n record a conflict.

\n", + "value": 3 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_merge_file_flag_t", + { + "decl": [ + "GIT_MERGE_FILE_DEFAULT", + "GIT_MERGE_FILE_STYLE_MERGE", + "GIT_MERGE_FILE_STYLE_DIFF3", + "GIT_MERGE_FILE_SIMPLIFY_ALNUM", + "GIT_MERGE_FILE_IGNORE_WHITESPACE", + "GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE", + "GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL", + "GIT_MERGE_FILE_DIFF_PATIENCE", + "GIT_MERGE_FILE_DIFF_MINIMAL", + "GIT_MERGE_FILE_STYLE_ZDIFF3", + "GIT_MERGE_FILE_ACCEPT_CONFLICTS" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 144, + "lineto": 181, + "block": "GIT_MERGE_FILE_DEFAULT\nGIT_MERGE_FILE_STYLE_MERGE\nGIT_MERGE_FILE_STYLE_DIFF3\nGIT_MERGE_FILE_SIMPLIFY_ALNUM\nGIT_MERGE_FILE_IGNORE_WHITESPACE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_EOL\nGIT_MERGE_FILE_DIFF_PATIENCE\nGIT_MERGE_FILE_DIFF_MINIMAL\nGIT_MERGE_FILE_STYLE_ZDIFF3\nGIT_MERGE_FILE_ACCEPT_CONFLICTS", + "tdef": "typedef", + "description": " File merging flags", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_FILE_DEFAULT", + "comments": "

Defaults

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_STYLE_MERGE", + "comments": "

Create standard conflicted merge files

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_STYLE_DIFF3", + "comments": "

Create diff3-style files

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_SIMPLIFY_ALNUM", + "comments": "

Condense non-alphanumeric regions for simplified diff file

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE", + "comments": "

Ignore all whitespace

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE", + "comments": "

Ignore changes in amount of whitespace

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL", + "comments": "

Ignore whitespace at end of line

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_DIFF_PATIENCE", + "comments": "

Use the "patience diff" algorithm

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_DIFF_MINIMAL", + "comments": "

Take extra time to find minimal diff

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_STYLE_ZDIFF3", + "comments": "

Create zdiff3 ("zealous diff3")-style files

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_MERGE_FILE_ACCEPT_CONFLICTS", + "comments": "

Do not produce file conflicts when common regions have\n changed; keep the conflict markers in the file and accept\n that as the merge result.

\n", + "value": 512 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_merge_file_input", + { + "decl": [ + "unsigned int version", + "const char * ptr", + "size_t size", + "const char * path", + "unsigned int mode" + ], + "type": "struct", + "value": "git_merge_file_input", + "file": "git2/merge.h", + "line": 32, + "lineto": 46, + "block": "unsigned int version\nconst char * ptr\nsize_t size\nconst char * path\nunsigned int mode", + "tdef": "typedef", + "description": " The file inputs to `git_merge_file`. Callers should populate the\n `git_merge_file_input` structure with descriptions of the files in\n each side of the conflict for use in producing the merge file.", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "const char *", + "name": "ptr", + "comments": " Pointer to the contents of the file. " + }, + { + "type": "size_t", + "name": "size", + "comments": " Size of the contents pointed to in `ptr`. " + }, + { + "type": "const char *", + "name": "path", + "comments": " File name of the conflicted file, or `NULL` to not merge the path. " + }, + { + "type": "unsigned int", + "name": "mode", + "comments": " File mode of the conflicted file, or `0` to not merge the mode. " + } + ], + "used": { + "returns": [], + "needs": ["git_merge_file", "git_merge_file_input_init"] + } + } + ], + [ + "git_merge_file_options", + { + "decl": [ + "unsigned int version", + "const char * ancestor_label", + "const char * our_label", + "const char * their_label", + "git_merge_file_favor_t favor", + "uint32_t flags", + "unsigned short marker_size" + ], + "type": "struct", + "value": "git_merge_file_options", + "file": "git2/merge.h", + "line": 188, + "lineto": 218, + "block": "unsigned int version\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_merge_file_favor_t favor\nuint32_t flags\nunsigned short marker_size", + "tdef": "typedef", + "description": " Options for merging a file", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "const char *", + "name": "ancestor_label", + "comments": " Label for the ancestor file side of the conflict which will be prepended\n to labels in diff3-format merge files." + }, + { + "type": "const char *", + "name": "our_label", + "comments": " Label for our file side of the conflict which will be prepended\n to labels in merge files." + }, + { + "type": "const char *", + "name": "their_label", + "comments": " Label for their file side of the conflict which will be prepended\n to labels in merge files." + }, + { + "type": "git_merge_file_favor_t", + "name": "favor", + "comments": " The file to favor in region conflicts. " + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " see `git_merge_file_flag_t` above " + }, + { + "type": "unsigned short", + "name": "marker_size", + "comments": " The size of conflict markers (eg, \"\n<\n<\n<\n<\n<\n<\n<\n\"). Default is\n GIT_MERGE_CONFLICT_MARKER_SIZE. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_file", + "git_merge_file_from_index", + "git_merge_file_options_init" + ] + } + } + ], + [ + "git_merge_file_result", + { + "decl": [ + "unsigned int automergeable", + "const char * path", + "unsigned int mode", + "const char * ptr", + "size_t len" + ], + "type": "struct", + "value": "git_merge_file_result", + "file": "git2/merge.h", + "line": 238, + "lineto": 259, + "block": "unsigned int automergeable\nconst char * path\nunsigned int mode\nconst char * ptr\nsize_t len", + "tdef": "typedef", + "description": " Information about file-level merging", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "automergeable", + "comments": " True if the output was automerged, false if the output contains\n conflict markers." + }, + { + "type": "const char *", + "name": "path", + "comments": " The path that the resultant merge file should use, or NULL if a\n filename conflict would occur." + }, + { + "type": "unsigned int", + "name": "mode", + "comments": " The mode that the resultant merge file should use. " + }, + { + "type": "const char *", + "name": "ptr", + "comments": " The contents of the merge. " + }, + { + "type": "size_t", + "name": "len", + "comments": " The length of the merge contents. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_file", + "git_merge_file_from_index", + "git_merge_file_result_free" + ] + } + } + ], + [ + "git_merge_flag_t", + { + "decl": [ + "GIT_MERGE_FIND_RENAMES", + "GIT_MERGE_FAIL_ON_CONFLICT", + "GIT_MERGE_SKIP_REUC", + "GIT_MERGE_NO_RECURSIVE", + "GIT_MERGE_VIRTUAL_BASE" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 68, + "lineto": 103, + "block": "GIT_MERGE_FIND_RENAMES\nGIT_MERGE_FAIL_ON_CONFLICT\nGIT_MERGE_SKIP_REUC\nGIT_MERGE_NO_RECURSIVE\nGIT_MERGE_VIRTUAL_BASE", + "tdef": "typedef", + "description": " Flags for `git_merge` options. A combination of these flags can be\n passed in via the `flags` value in the `git_merge_options`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_FIND_RENAMES", + "comments": "

Detect renames that occur between the common ancestor and the "ours"\n side or the common ancestor and the "theirs" side. This will enable\n the ability to merge between a modified and renamed file.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_FAIL_ON_CONFLICT", + "comments": "

If a conflict occurs, exit immediately instead of attempting to\n continue resolving conflicts. The merge operation will fail with\n GIT_EMERGECONFLICT and no index will be returned.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_MERGE_SKIP_REUC", + "comments": "

Do not write the REUC extension on the generated index

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_MERGE_NO_RECURSIVE", + "comments": "

If the commits being merged have multiple merge bases, do not build\n a recursive merge base (by merging the multiple merge bases),\n instead simply use the first base. This flag provides a similar\n merge base to git-merge-resolve.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_MERGE_VIRTUAL_BASE", + "comments": "

Treat this merge as if it is to produce the virtual base\n of a recursive merge. This will ensure that there are\n no conflicts, any conflicting regions will keep conflict\n markers in the merge result.

\n", + "value": 16 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_merge_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "unsigned int rename_threshold", + "unsigned int target_limit", + "git_diff_similarity_metric * metric", + "unsigned int recursion_limit", + "const char * default_driver", + "git_merge_file_favor_t file_favor", + "uint32_t file_flags" + ], + "type": "struct", + "value": "git_merge_options", + "file": "git2/merge.h", + "line": 264, + "lineto": 313, + "block": "unsigned int version\nuint32_t flags\nunsigned int rename_threshold\nunsigned int target_limit\ngit_diff_similarity_metric * metric\nunsigned int recursion_limit\nconst char * default_driver\ngit_merge_file_favor_t file_favor\nuint32_t file_flags", + "tdef": "typedef", + "description": " Merging options", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " See `git_merge_flag_t` above " + }, + { + "type": "unsigned int", + "name": "rename_threshold", + "comments": " Similarity to consider a file renamed (default 50). If\n `GIT_MERGE_FIND_RENAMES` is enabled, added files will be compared\n with deleted files to determine their similarity. Files that are\n more similar than the rename threshold (percentage-wise) will be\n treated as a rename." + }, + { + "type": "unsigned int", + "name": "target_limit", + "comments": " Maximum similarity sources to examine for renames (default 200).\n If the number of rename candidates (add / delete pairs) is greater\n than this value, inexact rename detection is aborted.\n\n This setting overrides the `merge.renameLimit` configuration value." + }, + { + "type": "git_diff_similarity_metric *", + "name": "metric", + "comments": " Pluggable similarity metric; pass NULL to use internal metric " + }, + { + "type": "unsigned int", + "name": "recursion_limit", + "comments": " Maximum number of times to merge common ancestors to build a\n virtual merge base when faced with criss-cross merges. When this\n limit is reached, the next ancestor will simply be used instead of\n attempting to merge it. The default is unlimited." + }, + { + "type": "const char *", + "name": "default_driver", + "comments": " Default merge driver to be used when both sides of a merge have\n changed. The default is the `text` driver." + }, + { + "type": "git_merge_file_favor_t", + "name": "file_favor", + "comments": " Flags for handling conflicting content, to be used with the standard\n (`text`) merge driver." + }, + { + "type": "uint32_t", + "name": "file_flags", + "comments": " see `git_merge_file_flag_t` above " + } + ], + "used": { + "returns": [], + "needs": [ + "git_cherrypick_commit", + "git_merge", + "git_merge_commits", + "git_merge_options_init", + "git_merge_trees", + "git_revert_commit" + ] + } + } + ], + [ + "git_merge_preference_t", + { + "decl": [ + "GIT_MERGE_PREFERENCE_NONE", + "GIT_MERGE_PREFERENCE_NO_FASTFORWARD", + "GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY" + ], + "type": "enum", + "file": "git2/merge.h", + "line": 368, + "lineto": 386, + "block": "GIT_MERGE_PREFERENCE_NONE\nGIT_MERGE_PREFERENCE_NO_FASTFORWARD\nGIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", + "tdef": "typedef", + "description": " The user's stated preference for merges.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_MERGE_PREFERENCE_NONE", + "comments": "

No configuration was found that suggests a preferred behavior for\n merge.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_MERGE_PREFERENCE_NO_FASTFORWARD", + "comments": "

There is a merge.ff=false configuration setting, suggesting that\n the user does not want to allow a fast-forward merge.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", + "comments": "

There is a merge.ff=only configuration setting, suggesting that\n the user only wants fast-forward merges.

\n", + "value": 2 + } + ], + "used": { + "returns": [], + "needs": ["git_merge_analysis", "git_merge_analysis_for_ref"] + } + } + ], + [ + "git_message_trailer", + { + "decl": ["const char * key", "const char * value"], + "type": "struct", + "value": "git_message_trailer", + "file": "git2/message.h", + "line": 43, + "lineto": 46, + "block": "const char * key\nconst char * value", + "tdef": "typedef", + "description": " Represents a single git message trailer.", + "comments": "", + "fields": [ + { "type": "const char *", "name": "key", "comments": "" }, + { "type": "const char *", "name": "value", "comments": "" } + ], + "used": { + "returns": [], + "needs": ["git_message_trailer_array_free", "git_message_trailers"] + } + } + ], + [ + "git_message_trailer_array", + { + "decl": [ + "git_message_trailer * trailers", + "size_t count", + "char * _trailer_block" + ], + "type": "struct", + "value": "git_message_trailer_array", + "file": "git2/message.h", + "line": 54, + "lineto": 60, + "block": "git_message_trailer * trailers\nsize_t count\nchar * _trailer_block", + "tdef": "typedef", + "description": " Represents an array of git message trailers.", + "comments": "

Struct members under the private comment are private, subject to change and should not be used by callers.

\n", + "fields": [ + { + "type": "git_message_trailer *", + "name": "trailers", + "comments": "" + }, + { "type": "size_t", "name": "count", "comments": "" }, + { "type": "char *", "name": "_trailer_block", "comments": "" } + ], + "used": { + "returns": [], + "needs": ["git_message_trailer_array_free", "git_message_trailers"] + } + } + ], + [ + "git_midx_writer", + { + "decl": "git_midx_writer", + "type": "struct", + "value": "git_midx_writer", + "file": "git2/types.h", + "line": 100, + "lineto": 100, + "tdef": "typedef", + "description": " a writer for multi-pack-index files. ", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_note", + { + "decl": "git_note", + "type": "struct", + "value": "git_note", + "file": "git2/types.h", + "line": 169, + "lineto": 169, + "tdef": "typedef", + "description": " Representation of a git note ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_note_author", + "git_note_commit_iterator_new", + "git_note_commit_read", + "git_note_committer", + "git_note_foreach", + "git_note_free", + "git_note_id", + "git_note_iterator_free", + "git_note_iterator_new", + "git_note_message", + "git_note_next", + "git_note_read" + ] + } + } + ], + [ + "git_note_iterator", + { + "decl": "git_note_iterator", + "type": "struct", + "value": "git_note_iterator", + "file": "git2/notes.h", + "line": 35, + "lineto": 35, + "tdef": "typedef", + "description": " note iterator", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_note_commit_iterator_new", + "git_note_iterator_free", + "git_note_iterator_new", + "git_note_next" + ] + } + } + ], + [ + "git_object", + { + "decl": "git_object", + "type": "struct", + "value": "git_object", + "file": "git2/types.h", + "line": 124, + "lineto": 124, + "tdef": "typedef", + "description": " Representation of a generic object in a repository ", + "comments": "", + "used": { + "returns": [ + "git_blob_rawsize", + "git_object_string2type", + "git_object_type", + "git_odb_object_type", + "git_tag_target_type", + "git_tree_entry_type" + ], + "needs": [ + "git_checkout_tree", + "git_describe_commit", + "git_object__size", + "git_object_dup", + "git_object_free", + "git_object_id", + "git_object_lookup", + "git_object_lookup_bypath", + "git_object_lookup_prefix", + "git_object_owner", + "git_object_peel", + "git_object_rawcontent_is_valid", + "git_object_short_id", + "git_object_type", + "git_object_type2string", + "git_object_typeisloose", + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_read_header", + "git_odb_write", + "git_reference_peel", + "git_repository_hashfile", + "git_reset", + "git_reset_default", + "git_revparse_ext", + "git_revparse_single", + "git_tag_annotation_create", + "git_tag_create", + "git_tag_create_lightweight", + "git_tag_peel", + "git_tag_target", + "git_tree_entry_to_object" + ] + } + } + ], + [ + "git_object_t", + { + "decl": [ + "GIT_OBJECT_ANY", + "GIT_OBJECT_INVALID", + "GIT_OBJECT_COMMIT", + "GIT_OBJECT_TREE", + "GIT_OBJECT_BLOB", + "GIT_OBJECT_TAG", + "GIT_OBJECT_OFS_DELTA", + "GIT_OBJECT_REF_DELTA" + ], + "type": "enum", + "file": "git2/types.h", + "line": 73, + "lineto": 82, + "block": "GIT_OBJECT_ANY\nGIT_OBJECT_INVALID\nGIT_OBJECT_COMMIT\nGIT_OBJECT_TREE\nGIT_OBJECT_BLOB\nGIT_OBJECT_TAG\nGIT_OBJECT_OFS_DELTA\nGIT_OBJECT_REF_DELTA", + "tdef": "typedef", + "description": " Basic type (loose or packed) of any Git object. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_OBJECT_ANY", + "comments": "

Object can be any of the following

\n", + "value": -2 + }, + { + "type": "int", + "name": "GIT_OBJECT_INVALID", + "comments": "

Object is invalid.

\n", + "value": -1 + }, + { + "type": "int", + "name": "GIT_OBJECT_COMMIT", + "comments": "

A commit object.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_OBJECT_TREE", + "comments": "

A tree (directory listing) object.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_OBJECT_BLOB", + "comments": "

A file revision object.

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_OBJECT_TAG", + "comments": "

An annotated tag object.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_OBJECT_OFS_DELTA", + "comments": "

A delta, base is given by an offset.

\n", + "value": 6 + }, + { + "type": "int", + "name": "GIT_OBJECT_REF_DELTA", + "comments": "

A delta, base is given by object id.

\n", + "value": 7 + } + ], + "used": { + "returns": [ + "git_object_string2type", + "git_object_type", + "git_odb_object_type", + "git_tag_target_type", + "git_tree_entry_type" + ], + "needs": [ + "git_object__size", + "git_object_lookup", + "git_object_lookup_bypath", + "git_object_lookup_prefix", + "git_object_peel", + "git_object_rawcontent_is_valid", + "git_object_type2string", + "git_object_typeisloose", + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_read_header", + "git_odb_write", + "git_reference_peel", + "git_repository_hashfile" + ] + } + } + ], + [ + "git_odb", + { + "decl": "git_odb", + "type": "struct", + "value": "git_odb", + "file": "git2/types.h", + "line": 85, + "lineto": 85, + "tdef": "typedef", + "description": " An open object database handle. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_indexer_new", + "git_odb_add_alternate", + "git_odb_add_backend", + "git_odb_add_disk_alternate", + "git_odb_exists", + "git_odb_exists_ext", + "git_odb_exists_prefix", + "git_odb_expand_ids", + "git_odb_foreach", + "git_odb_free", + "git_odb_get_backend", + "git_odb_num_backends", + "git_odb_object_data", + "git_odb_object_dup", + "git_odb_object_free", + "git_odb_object_id", + "git_odb_object_size", + "git_odb_object_type", + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_read", + "git_odb_read_header", + "git_odb_read_prefix", + "git_odb_refresh", + "git_odb_set_commit_graph", + "git_odb_stream_finalize_write", + "git_odb_stream_free", + "git_odb_stream_read", + "git_odb_stream_write", + "git_odb_write", + "git_odb_write_multi_pack_index", + "git_odb_write_pack", + "git_repository_odb" + ] + } + } + ], + [ + "git_odb_backend", + { + "decl": "git_odb_backend", + "type": "struct", + "value": "git_odb_backend", + "file": "git2/types.h", + "line": 88, + "lineto": 88, + "tdef": "typedef", + "description": " A custom backend in an ODB ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_odb_add_alternate", + "git_odb_add_backend", + "git_odb_get_backend" + ] + } + } + ], + [ + "git_odb_backend_loose_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "int compression_level", + "unsigned int dir_mode", + "unsigned int file_mode", + "git_oid_t oid_type" + ], + "type": "struct", + "value": "git_odb_backend_loose_options", + "file": "git2/odb_backend.h", + "line": 93, + "lineto": 119, + "block": "unsigned int version\nuint32_t flags\nint compression_level\nunsigned int dir_mode\nunsigned int file_mode\ngit_oid_t oid_type", + "tdef": "typedef", + "description": " Options for configuring a loose object backend. ", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " version for the struct " + }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of the `git_odb_backend_loose_flag_t` types. " + }, + { + "type": "int", + "name": "compression_level", + "comments": " zlib compression level to use (0-9), where 1 is the fastest\n at the expense of larger files, and 9 produces the best\n compression at the expense of speed. 0 indicates that no\n compression should be performed. -1 is the default (currently\n optimizing for speed)." + }, + { + "type": "unsigned int", + "name": "dir_mode", + "comments": " Permissions to use creating a directory or 0 for defaults " + }, + { + "type": "unsigned int", + "name": "file_mode", + "comments": " Permissions to use creating a file or 0 for defaults " + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_odb_backend_pack_options", + { + "decl": ["unsigned int version", "git_oid_t oid_type"], + "type": "struct", + "value": "git_odb_backend_pack_options", + "file": "git2/odb_backend.h", + "line": 28, + "lineto": 36, + "block": "unsigned int version\ngit_oid_t oid_type", + "tdef": "typedef", + "description": " Options for configuring a packfile object backend. ", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " version for the struct " + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_odb_expand_id", + { + "decl": ["git_oid id", "unsigned short length", "git_object_t type"], + "type": "struct", + "value": "git_odb_expand_id", + "file": "git2/odb.h", + "line": 230, + "lineto": 245, + "block": "git_oid id\nunsigned short length\ngit_object_t type", + "tdef": "typedef", + "description": " The information about object IDs to query in `git_odb_expand_ids`,\n which will be populated upon return.", + "comments": "", + "fields": [ + { + "type": "git_oid", + "name": "id", + "comments": " The object ID to expand " + }, + { + "type": "unsigned short", + "name": "length", + "comments": " The length of the object ID (in nibbles, or packets of 4 bits; the\n number of hex characters)" + }, + { + "type": "git_object_t", + "name": "type", + "comments": " The (optional) type of the object to search for; leave as `0` or set\n to `GIT_OBJECT_ANY` to query for any object matching the ID." + } + ], + "used": { "returns": [], "needs": ["git_odb_expand_ids"] } + } + ], + [ + "git_odb_lookup_flags_t", + { + "decl": ["GIT_ODB_LOOKUP_NO_REFRESH"], + "type": "enum", + "file": "git2/odb.h", + "line": 26, + "lineto": 34, + "block": "GIT_ODB_LOOKUP_NO_REFRESH", + "tdef": "typedef", + "description": " Flags controlling the behavior of ODB lookup operations ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_ODB_LOOKUP_NO_REFRESH", + "comments": "

Don't call git_odb_refresh if the lookup fails. Useful when doing\n a batch of lookup operations for objects that may legitimately not\n exist. When using this flag, you may wish to manually call\n git_odb_refresh before processing a batch of objects.

\n", + "value": 1 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_odb_object", + { + "decl": "git_odb_object", + "type": "struct", + "value": "git_odb_object", + "file": "git2/types.h", + "line": 91, + "lineto": 91, + "tdef": "typedef", + "description": " An object read from the ODB ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_odb_object_data", + "git_odb_object_dup", + "git_odb_object_free", + "git_odb_object_id", + "git_odb_object_size", + "git_odb_object_type", + "git_odb_read", + "git_odb_read_prefix" + ] + } + } + ], + [ + "git_odb_options", + { + "decl": ["unsigned int version", "git_oid_t oid_type"], + "type": "struct", + "value": "git_odb_options", + "file": "git2/odb.h", + "line": 42, + "lineto": 50, + "block": "unsigned int version\ngit_oid_t oid_type", + "tdef": "typedef", + "description": " Options for configuring a loose object backend. ", + "comments": "", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " version for the struct " + }, + { + "type": "git_oid_t", + "name": "oid_type", + "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_odb_stream", + { + "decl": "git_odb_stream", + "type": "struct", + "value": "git_odb_stream", + "file": "git2/types.h", + "line": 94, + "lineto": 94, + "block": "git_odb_backend * backend\nunsigned int mode\nvoid * hash_ctx\ngit_object_size_t declared_size\ngit_object_size_t received_bytes\nint (*)(git_odb_stream *, char *, size_t) read\nint (*)(git_odb_stream *, const char *, size_t) write\nint (*)(git_odb_stream *, const git_oid *) finalize_write\nvoid (*)(git_odb_stream *) free", + "tdef": "typedef", + "description": " A stream to read/write from the ODB ", + "comments": "", + "fields": [ + { "type": "git_odb_backend *", "name": "backend", "comments": "" }, + { "type": "unsigned int", "name": "mode", "comments": "" }, + { "type": "void *", "name": "hash_ctx", "comments": "" }, + { + "type": "git_object_size_t", + "name": "declared_size", "comments": "" - }, - "git_reference_foreach_cb": { - "type": "callback", - "file": "git2/refs.h", - "line": 437, - "lineto": 437, - "args": [ - { - "name": "reference", - "type": "git_reference *", - "comment": "The reference object" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_reference_foreach" - } - ], - "argline": "git_reference *reference, void *payload", - "sig": "git_reference *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over references

\n", + }, + { + "type": "git_object_size_t", + "name": "received_bytes", "comments": "" - }, - "git_reference_foreach_name_cb": { - "type": "callback", - "file": "git2/refs.h", - "line": 448, - "lineto": 448, - "args": [ - { - "name": "name", - "type": "const char *", - "comment": "The reference name" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_reference_foreach_name" - } - ], - "argline": "const char *name, void *payload", - "sig": "const char *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over reference names

\n", + }, + { + "type": "int (*)(git_odb_stream *, char *, size_t)", + "name": "read", "comments": "" - }, - "git_push_transfer_progress_cb": { - "type": "callback", - "file": "git2/remote.h", - "line": 459, - "lineto": 463, - "args": [ - { - "name": "current", - "type": "unsigned int", - "comment": null - }, - { - "name": "total", - "type": "unsigned int", - "comment": null - }, - { - "name": "bytes", - "type": "size_t", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "unsigned int current, unsigned int total, size_t bytes, void *payload", - "sig": "unsigned int::unsigned int::size_t::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Push network progress notification function

\n", + }, + { + "type": "int (*)(git_odb_stream *, const char *, size_t)", + "name": "write", "comments": "" - }, - "git_push_negotiation": { - "type": "callback", - "file": "git2/remote.h", - "line": 495, - "lineto": 495, - "args": [ - { - "name": "updates", - "type": "const git_push_update **", - "comment": "an array containing the updates which will be sent\n as commands to the destination." - }, - { - "name": "len", - "type": "size_t", - "comment": "number of elements in `updates`" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "const git_push_update **updates, size_t len, void *payload", - "sig": "const git_push_update **::size_t::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback used to inform of upcoming updates.

\n", + }, + { + "type": "int (*)(git_odb_stream *, const git_oid *)", + "name": "finalize_write", "comments": "" - }, - "git_push_update_reference_cb": { - "type": "callback", - "file": "git2/remote.h", - "line": 509, - "lineto": 509, - "args": [ - { - "name": "refname", - "type": "const char *", - "comment": "refname specifying to the remote ref" - }, - { - "name": "status", - "type": "const char *", - "comment": "status message sent from the remote" - }, - { - "name": "data", - "type": "void *", - "comment": "data provided by the caller" - } - ], - "argline": "const char *refname, const char *status, void *data", - "sig": "const char *::const char *::void *", - "return": { - "type": "int", - "comment": " 0 on success, otherwise an error" - }, - "description": "

Callback used to inform of the update status from the remote.

\n", - "comments": "

Called for each updated reference on push. If status is not NULL, the update was rejected by the remote server and status contains the reason given.

\n" - }, - "git_url_resolve_cb": { - "type": "callback", - "file": "git2/remote.h", - "line": 525, - "lineto": 525, - "args": [ - { - "name": "url_resolved", - "type": "git_buf *", - "comment": "The buffer to write the resolved URL to" - }, - { - "name": "url", - "type": "const char *", - "comment": "The URL to resolve" - }, - { - "name": "direction", - "type": "int", - "comment": "GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "git_buf *url_resolved, const char *url, int direction, void *payload", - "sig": "git_buf *::const char *::int::void *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_PASSTHROUGH or an error\n " - }, - "description": "

Callback to resolve URLs before connecting to remote

\n", - "comments": "

If you return GIT_PASSTHROUGH, you don't need to write anything to url_resolved.

\n" - }, - "git_remote_ready_cb": { - "type": "callback", - "file": "git2/remote.h", - "line": 538, - "lineto": 538, - "args": [ - { - "name": "remote", - "type": "git_remote *", - "comment": "The remote to be connected" - }, - { - "name": "direction", - "type": "int", - "comment": "GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "git_remote *remote, int direction, void *payload", - "sig": "git_remote *::int::void *", - "return": { - "type": "int", - "comment": " 0 on success, or an error" - }, - "description": "

Callback invoked immediately before we attempt to connect to the\n given url. Callers may change the URL before the connection by\n calling git_remote_set_instance_url in the callback.

\n", + }, + { + "type": "void (*)(git_odb_stream *)", + "name": "free", "comments": "" - }, - "git_repository_fetchhead_foreach_cb": { - "type": "callback", - "file": "git2/repository.h", - "line": 724, - "lineto": 728, - "args": [ - { - "name": "ref_name", - "type": "const char *", - "comment": "The reference name" - }, - { - "name": "remote_url", - "type": "const char *", - "comment": "The remote URL" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "The reference target OID" - }, - { - "name": "is_merge", - "type": "unsigned int", - "comment": "Was the reference the result of a merge" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_repository_fetchhead_foreach" - } - ], - "argline": "const char *ref_name, const char *remote_url, const git_oid *oid, unsigned int is_merge, void *payload", - "sig": "const char *::const char *::const git_oid *::unsigned int::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over each FETCH_HEAD entry

\n", + } + ], + "used": { + "returns": [], + "needs": [ + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_stream_finalize_write", + "git_odb_stream_free", + "git_odb_stream_read", + "git_odb_stream_write" + ] + } + } + ], + [ + "git_odb_stream_t", + { + "decl": ["GIT_STREAM_RDONLY", "GIT_STREAM_WRONLY", "GIT_STREAM_RW"], + "type": "enum", + "file": "git2/odb_backend.h", + "line": 155, + "lineto": 159, + "block": "GIT_STREAM_RDONLY\nGIT_STREAM_WRONLY\nGIT_STREAM_RW", + "tdef": "typedef", + "description": " Streaming mode ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STREAM_RDONLY", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STREAM_WRONLY", + "comments": "", + "value": 4 + }, + { "type": "int", "name": "GIT_STREAM_RW", "comments": "", "value": 6 } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_odb_writepack", + { + "decl": "git_odb_writepack", + "type": "struct", + "value": "git_odb_writepack", + "file": "git2/types.h", + "line": 97, + "lineto": 97, + "block": "git_odb_backend * backend\nint (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *) append\nint (*)(git_odb_writepack *, git_indexer_progress *) commit\nvoid (*)(git_odb_writepack *) free", + "tdef": "typedef", + "description": " A stream to write a packfile to the ODB ", + "comments": "", + "fields": [ + { "type": "git_odb_backend *", "name": "backend", "comments": "" }, + { + "type": "int (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *)", + "name": "append", "comments": "" - }, - "git_repository_mergehead_foreach_cb": { - "type": "callback", - "file": "git2/repository.h", - "line": 755, - "lineto": 756, - "args": [ - { - "name": "oid", - "type": "const git_oid *", - "comment": "The merge OID" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_repository_mergehead_foreach" - } - ], - "argline": "const git_oid *oid, void *payload", - "sig": "const git_oid *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over each MERGE_HEAD entry

\n", + }, + { + "type": "int (*)(git_odb_writepack *, git_indexer_progress *)", + "name": "commit", "comments": "" - }, - "git_revwalk_hide_cb": { - "type": "callback", - "file": "git2/revwalk.h", - "line": 283, - "lineto": 285, - "args": [ - { - "name": "commit_id", - "type": "const git_oid *", - "comment": "oid of Commit" - }, - { - "name": "payload", - "type": "void *", - "comment": "User-specified pointer to data to be passed as data payload" - } - ], - "argline": "const git_oid *commit_id, void *payload", - "sig": "const git_oid *::void *", - "return": { - "type": "int", - "comment": " non-zero to hide the commmit and it parent." - }, - "description": "

This is a callback function that user can provide to hide a\n commit and its parents. If the callback function returns non-zero value,\n then this commit and its parents will be hidden.

\n", + }, + { + "type": "void (*)(git_odb_writepack *)", + "name": "free", "comments": "" - }, - "git_stash_apply_progress_cb": { - "type": "callback", - "file": "git2/stash.h", - "line": 169, - "lineto": 171, - "args": [ - { - "name": "progress", - "type": "git_stash_apply_progress_t", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "git_stash_apply_progress_t progress, void *payload", - "sig": "git_stash_apply_progress_t::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Stash application progress notification function.\n Return 0 to continue processing, or a negative value to\n abort the stash application.

\n", + } + ], + "used": { "returns": [], "needs": ["git_odb_write_pack"] } + } + ], + [ + "git_oid", + { + "decl": ["unsigned char [20] id"], + "type": "struct", + "value": "git_oid", + "file": "git2/oid.h", + "line": 99, + "lineto": 108, + "block": "unsigned char [20] id", + "tdef": "typedef", + "description": " Unique identity of any object (commit, tree, blob, tag). ", + "comments": "", + "fields": [ + { + "type": "unsigned char [20]", + "name": "id", + "comments": " raw binary formatted id " + } + ], + "used": { + "returns": [ + "git_annotated_commit_id", + "git_blob_id", + "git_commit_id", + "git_commit_parent_id", + "git_commit_tree_id", + "git_index_checksum", + "git_indexer_hash", + "git_note_id", + "git_object_id", + "git_odb_object_id", + "git_oid_shorten_new", + "git_packbuilder_hash", + "git_rebase_onto_id", + "git_rebase_orig_head_id", + "git_reference_target", + "git_reference_target_peel", + "git_reflog_entry_id_new", + "git_reflog_entry_id_old", + "git_repository_oid_type", + "git_submodule_head_id", + "git_submodule_index_id", + "git_submodule_wd_id", + "git_tag_id", + "git_tag_target_id", + "git_tree_entry_id", + "git_tree_id" + ], + "needs": [ + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_lookup", + "git_blob_create_from_buffer", + "git_blob_create_from_disk", + "git_blob_create_from_stream_commit", + "git_blob_create_from_workdir", + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_commit_amend", + "git_commit_create", + "git_commit_create_cb", + "git_commit_create_from_stage", + "git_commit_create_v", + "git_commit_create_with_signature", + "git_commit_extract_signature", + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_diff_patchid", + "git_email_create_from_diff", + "git_graph_ahead_behind", + "git_graph_descendant_of", + "git_graph_reachable_from_any", + "git_index_write_tree", + "git_index_write_tree_to", + "git_merge_base", + "git_merge_base_many", + "git_merge_base_octopus", + "git_merge_bases", + "git_merge_bases_many", + "git_note_commit_create", + "git_note_commit_read", + "git_note_commit_remove", + "git_note_create", + "git_note_foreach_cb", + "git_note_next", + "git_note_read", + "git_note_remove", + "git_object_lookup", + "git_object_lookup_prefix", + "git_odb_exists", + "git_odb_exists_ext", + "git_odb_exists_prefix", + "git_odb_foreach_cb", + "git_odb_open_rstream", + "git_odb_read", + "git_odb_read_header", + "git_odb_read_prefix", + "git_odb_stream_finalize_write", + "git_odb_write", + "git_oid_cmp", + "git_oid_cpy", + "git_oid_equal", + "git_oid_fmt", + "git_oid_is_zero", + "git_oid_ncmp", + "git_oid_nfmt", + "git_oid_pathfmt", + "git_oid_shorten_add", + "git_oid_shorten_free", + "git_oid_strcmp", + "git_oid_streq", + "git_oid_tostr", + "git_oid_tostr_s", + "git_oidarray_dispose", + "git_oidarray_free", + "git_packbuilder_insert", + "git_packbuilder_insert_commit", + "git_packbuilder_insert_recur", + "git_packbuilder_insert_tree", + "git_rebase_commit", + "git_reference_create", + "git_reference_create_matching", + "git_reference_name_to_id", + "git_reference_set_target", + "git_reflog_append", + "git_repository_fetchhead_foreach_cb", + "git_repository_hashfile", + "git_repository_mergehead_foreach_cb", + "git_repository_set_head_detached", + "git_revwalk_hide", + "git_revwalk_hide_cb", + "git_revwalk_next", + "git_revwalk_push", + "git_stash_cb", + "git_stash_save", + "git_stash_save_with_opts", + "git_tag_annotation_create", + "git_tag_create", + "git_tag_create_from_buffer", + "git_tag_create_lightweight", + "git_tag_foreach_cb", + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_transaction_set_target", + "git_tree_create_updated", + "git_tree_entry_byid", + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_treebuilder_insert", + "git_treebuilder_write", + "git_treebuilder_write_with_buffer" + ] + } + } + ], + [ + "git_oid_shorten", + { + "decl": "git_oid_shorten", + "type": "struct", + "value": "git_oid_shorten", + "file": "git2/oid.h", + "line": 320, + "lineto": 320, + "tdef": "typedef", + "description": " OID Shortener object", + "comments": "", + "used": { + "returns": ["git_oid_shorten_new"], + "needs": ["git_oid_shorten_add", "git_oid_shorten_free"] + } + } + ], + [ + "git_oid_t", + { + "decl": ["GIT_OID_SHA1"], + "type": "enum", + "file": "git2/oid.h", + "line": 24, + "lineto": 33, + "block": "GIT_OID_SHA1", + "tdef": "typedef", + "description": " The type of object id. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_OID_SHA1", + "comments": "

SHA1

\n", + "value": 1 + } + ], + "used": { "returns": ["git_repository_oid_type"], "needs": [] } + } + ], + [ + "git_oidarray", + { + "decl": ["git_oid * ids", "size_t count"], + "type": "struct", + "value": "git_oidarray", + "file": "git2/oidarray.h", + "line": 16, + "lineto": 19, + "block": "git_oid * ids\nsize_t count", + "tdef": "typedef", + "description": " Array of object ids ", + "comments": "", + "fields": [ + { "type": "git_oid *", "name": "ids", "comments": "" }, + { "type": "size_t", "name": "count", "comments": "" } + ], + "used": { + "returns": [], + "needs": [ + "git_merge_bases", + "git_merge_bases_many", + "git_oidarray_dispose", + "git_oidarray_free" + ] + } + } + ], + [ + "git_packbuilder", + { + "decl": "git_packbuilder", + "type": "struct", + "value": "git_packbuilder", + "file": "git2/types.h", + "line": 172, + "lineto": 172, + "tdef": "typedef", + "description": " Representation of a git packbuilder ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_packbuilder_foreach", + "git_packbuilder_free", + "git_packbuilder_hash", + "git_packbuilder_insert", + "git_packbuilder_insert_commit", + "git_packbuilder_insert_recur", + "git_packbuilder_insert_tree", + "git_packbuilder_insert_walk", + "git_packbuilder_name", + "git_packbuilder_new", + "git_packbuilder_object_count", + "git_packbuilder_set_callbacks", + "git_packbuilder_set_threads", + "git_packbuilder_write", + "git_packbuilder_write_buf", + "git_packbuilder_written" + ] + } + } + ], + [ + "git_packbuilder_stage_t", + { + "decl": [ + "GIT_PACKBUILDER_ADDING_OBJECTS", + "GIT_PACKBUILDER_DELTAFICATION" + ], + "type": "enum", + "file": "git2/pack.h", + "line": 52, + "lineto": 55, + "block": "GIT_PACKBUILDER_ADDING_OBJECTS\nGIT_PACKBUILDER_DELTAFICATION", + "tdef": "typedef", + "description": " Stages that are reported by the packbuilder progress callback.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_PACKBUILDER_ADDING_OBJECTS", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_PACKBUILDER_DELTAFICATION", + "comments": "", + "value": 1 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_patch", + { + "decl": "git_patch", + "type": "struct", + "value": "git_patch", + "file": "git2/patch.h", + "line": 29, + "lineto": 29, + "tdef": "typedef", + "description": " The diff patch is used to store all the text diffs for a delta.", + "comments": "

You can easily loop over the content of patches and get information about them.

\n", + "used": { + "returns": [], + "needs": [ + "git_patch_free", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs", + "git_patch_from_buffers", + "git_patch_from_diff", + "git_patch_get_delta", + "git_patch_get_hunk", + "git_patch_get_line_in_hunk", + "git_patch_line_stats", + "git_patch_num_hunks", + "git_patch_num_lines_in_hunk", + "git_patch_owner", + "git_patch_print", + "git_patch_size", + "git_patch_to_buf" + ] + } + } + ], + [ + "git_path_fs", + { + "decl": ["GIT_PATH_FS_GENERIC", "GIT_PATH_FS_NTFS", "GIT_PATH_FS_HFS"], + "type": "enum", + "file": "git2/sys/path.h", + "line": 34, + "lineto": 41, + "block": "GIT_PATH_FS_GENERIC\nGIT_PATH_FS_NTFS\nGIT_PATH_FS_HFS", + "tdef": "typedef", + "description": " The kinds of checks to perform according to which filesystem we are trying to\n protect.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_PATH_FS_GENERIC", + "comments": "

Do both NTFS- and HFS-specific checks

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_PATH_FS_NTFS", + "comments": "

Do NTFS-specific checks only

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_PATH_FS_HFS", + "comments": "

Do HFS-specific checks only

\n", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_pathspec", + { + "decl": "git_pathspec", + "type": "struct", + "value": "git_pathspec", + "file": "git2/pathspec.h", + "line": 20, + "lineto": 20, + "tdef": "typedef", + "description": " Compiled pathspec", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_pathspec_free", + "git_pathspec_match_diff", + "git_pathspec_match_index", + "git_pathspec_match_list_diff_entry", + "git_pathspec_match_list_entry", + "git_pathspec_match_list_entrycount", + "git_pathspec_match_list_failed_entry", + "git_pathspec_match_list_failed_entrycount", + "git_pathspec_match_list_free", + "git_pathspec_match_tree", + "git_pathspec_match_workdir", + "git_pathspec_matches_path", + "git_pathspec_new" + ] + } + } + ], + [ + "git_pathspec_flag_t", + { + "decl": [ + "GIT_PATHSPEC_DEFAULT", + "GIT_PATHSPEC_IGNORE_CASE", + "GIT_PATHSPEC_USE_CASE", + "GIT_PATHSPEC_NO_GLOB", + "GIT_PATHSPEC_NO_MATCH_ERROR", + "GIT_PATHSPEC_FIND_FAILURES", + "GIT_PATHSPEC_FAILURES_ONLY" + ], + "type": "enum", + "file": "git2/pathspec.h", + "line": 30, + "lineto": 73, + "block": "GIT_PATHSPEC_DEFAULT\nGIT_PATHSPEC_IGNORE_CASE\nGIT_PATHSPEC_USE_CASE\nGIT_PATHSPEC_NO_GLOB\nGIT_PATHSPEC_NO_MATCH_ERROR\nGIT_PATHSPEC_FIND_FAILURES\nGIT_PATHSPEC_FAILURES_ONLY", + "tdef": "typedef", + "description": " Options controlling how pathspec match should be executed", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_PATHSPEC_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_IGNORE_CASE", + "comments": "

GIT_PATHSPEC_IGNORE_CASE forces match to ignore case; otherwise\n match will use native case sensitivity of platform filesystem

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_USE_CASE", + "comments": "

GIT_PATHSPEC_USE_CASE forces case sensitive match; otherwise\n match will use native case sensitivity of platform filesystem

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_NO_GLOB", + "comments": "

GIT_PATHSPEC_NO_GLOB disables glob patterns and just uses simple\n string comparison for matching

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_NO_MATCH_ERROR", + "comments": "

GIT_PATHSPEC_NO_MATCH_ERROR means the match functions return error\n code GIT_ENOTFOUND if no matches are found; otherwise no matches is\n still success (return 0) but git_pathspec_match_list_entrycount\n will indicate 0 matches.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_FIND_FAILURES", + "comments": "

GIT_PATHSPEC_FIND_FAILURES means that the git_pathspec_match_list\n should track which patterns matched which files so that at the end of\n the match we can identify patterns that did not match any files.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_PATHSPEC_FAILURES_ONLY", + "comments": "

GIT_PATHSPEC_FAILURES_ONLY means that the git_pathspec_match_list\n does not need to keep the actual matching filenames. Use this to\n just test if there were any matches at all or in combination with\n GIT_PATHSPEC_FIND_FAILURES to validate a pathspec.

\n", + "value": 32 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_pathspec_match_list", + { + "decl": "git_pathspec_match_list", + "type": "struct", + "value": "git_pathspec_match_list", + "file": "git2/pathspec.h", + "line": 25, + "lineto": 25, + "tdef": "typedef", + "description": " List of filenames matching a pathspec", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_pathspec_match_diff", + "git_pathspec_match_index", + "git_pathspec_match_list_diff_entry", + "git_pathspec_match_list_entry", + "git_pathspec_match_list_entrycount", + "git_pathspec_match_list_failed_entry", + "git_pathspec_match_list_failed_entrycount", + "git_pathspec_match_list_free", + "git_pathspec_match_tree", + "git_pathspec_match_workdir" + ] + } + } + ], + [ + "git_proxy_options", + { + "decl": [ + "unsigned int version", + "git_proxy_t type", + "const char * url", + "git_credential_acquire_cb credentials", + "git_transport_certificate_check_cb certificate_check", + "void * payload" + ], + "type": "struct", + "value": "git_proxy_options", + "file": "git2/proxy.h", + "line": 44, + "lineto": 79, + "block": "unsigned int version\ngit_proxy_t type\nconst char * url\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\nvoid * payload", + "tdef": "typedef", + "description": " Options for connecting through a proxy", + "comments": "

Note that not all types may be supported, depending on the platform and compilation options.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "git_proxy_t", + "name": "type", + "comments": " The type of proxy to use, by URL, auto-detect." + }, + { + "type": "const char *", + "name": "url", + "comments": " The URL of the proxy." + }, + { + "type": "git_credential_acquire_cb", + "name": "credentials", + "comments": " This will be called if the remote host requires\n authentication in order to connect to it.\n\n Returning GIT_PASSTHROUGH will make libgit2 behave as\n though this field isn't set." + }, + { + "type": "git_transport_certificate_check_cb", + "name": "certificate_check", + "comments": " If cert verification fails, this will be called to let the\n user make the final decision of whether to allow the\n connection to proceed. Returns 0 to allow the connection\n or a negative value to indicate an error." + }, + { + "type": "void *", + "name": "payload", + "comments": " Payload to be provided to the credentials and certificate\n check callbacks." + } + ], + "used": { + "returns": [], + "needs": ["git_proxy_options_init", "git_remote_connect"] + } + } + ], + [ + "git_proxy_t", + { + "decl": ["GIT_PROXY_NONE", "GIT_PROXY_AUTO", "GIT_PROXY_SPECIFIED"], + "type": "enum", + "file": "git2/proxy.h", + "line": 20, + "lineto": 36, + "block": "GIT_PROXY_NONE\nGIT_PROXY_AUTO\nGIT_PROXY_SPECIFIED", + "tdef": "typedef", + "description": " The type of proxy to use.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_PROXY_NONE", + "comments": "

Do not attempt to connect through a proxy

\n\n

If built against libcurl, it itself may attempt to connect\n to a proxy if the environment variables specify it.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_PROXY_AUTO", + "comments": "

Try to auto-detect the proxy from the git configuration.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_PROXY_SPECIFIED", + "comments": "

Connect via the URL given in the options

\n", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_push", + { + "decl": "git_push", + "type": "struct", + "value": "git_push", + "file": "git2/types.h", + "line": 253, + "lineto": 253, + "tdef": "typedef", + "description": " Preparation for a push operation. Can be used to configure what to\n push and the level of parallelism of the packfile builder.", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_push_negotiation", + "git_push_options_init", + "git_remote_push", + "git_remote_upload" + ] + } + } + ], + [ + "git_push_options", + { + "decl": [ + "unsigned int version", + "unsigned int pb_parallelism", + "git_remote_callbacks callbacks", + "git_proxy_options proxy_opts", + "git_remote_redirect_t follow_redirects", + "git_strarray custom_headers", + "git_strarray remote_push_options" + ], + "type": "struct", + "value": "git_push_options", + "file": "git2/remote.h", + "line": 814, + "lineto": 853, + "block": "unsigned int version\nunsigned int pb_parallelism\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers\ngit_strarray remote_push_options", + "tdef": "typedef", + "description": " Controls the behavior of a git_push object.", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "unsigned int", + "name": "pb_parallelism", + "comments": " If the transport being used to push to the remote requires the creation\n of a pack file, this controls the number of worker threads used by\n the packbuilder when creating that pack file to be sent to the remote.\n\n If set to 0, the packbuilder will auto-detect the number of threads\n to create. The default value is 1." + }, + { + "type": "git_remote_callbacks", + "name": "callbacks", + "comments": " Callbacks to use for this push operation" + }, + { + "type": "git_proxy_options", + "name": "proxy_opts", + "comments": " Proxy options to use, by default no proxy is used." + }, + { + "type": "git_remote_redirect_t", + "name": "follow_redirects", + "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." + }, + { + "type": "git_strarray", + "name": "custom_headers", + "comments": " Extra headers for this push operation" + }, + { + "type": "git_strarray", + "name": "remote_push_options", + "comments": " \"Push options\" to deliver to the remote." + } + ], + "used": { + "returns": [], + "needs": [ + "git_push_options_init", + "git_remote_push", + "git_remote_upload" + ] + } + } + ], + [ + "git_push_update", + { + "decl": [ + "char * src_refname", + "char * dst_refname", + "git_oid src", + "git_oid dst" + ], + "type": "struct", + "value": "git_push_update", + "file": "git2/remote.h", + "line": 479, + "lineto": 496, + "block": "char * src_refname\nchar * dst_refname\ngit_oid src\ngit_oid dst", + "tdef": "typedef", + "description": " Represents an update which will be performed on the remote during push", + "comments": "", + "fields": [ + { + "type": "char *", + "name": "src_refname", + "comments": " The source name of the reference" + }, + { + "type": "char *", + "name": "dst_refname", + "comments": " The name of the reference to update on the server" + }, + { + "type": "git_oid", + "name": "src", + "comments": " The current target of the reference" + }, + { + "type": "git_oid", + "name": "dst", + "comments": " The new target for the reference" + } + ], + "used": { "returns": [], "needs": ["git_push_negotiation"] } + } + ], + [ + "git_rebase", + { + "decl": "git_rebase", + "type": "struct", + "value": "git_rebase", + "file": "git2/types.h", + "line": 204, + "lineto": 204, + "tdef": "typedef", + "description": " Representation of a rebase ", + "comments": "", + "used": { + "returns": ["git_rebase_operation_byindex"], + "needs": [ + "git_rebase_abort", + "git_rebase_commit", + "git_rebase_finish", + "git_rebase_free", + "git_rebase_init", + "git_rebase_inmemory_index", + "git_rebase_next", + "git_rebase_onto_id", + "git_rebase_onto_name", + "git_rebase_open", + "git_rebase_operation_byindex", + "git_rebase_operation_current", + "git_rebase_operation_entrycount", + "git_rebase_options_init", + "git_rebase_orig_head_id", + "git_rebase_orig_head_name" + ] + } + } + ], + [ + "git_rebase_operation", + { + "decl": [ + "git_rebase_operation_t type", + "const git_oid id", + "const char * exec" + ], + "type": "struct", + "value": "git_rebase_operation", + "file": "git2/rebase.h", + "line": 172, + "lineto": 187, + "block": "git_rebase_operation_t type\nconst git_oid id\nconst char * exec", + "tdef": "typedef", + "description": " A rebase operation", + "comments": "

Describes a single instruction/operation to be performed during the rebase.

\n", + "fields": [ + { + "type": "git_rebase_operation_t", + "name": "type", + "comments": " The type of rebase operation. " + }, + { + "type": "const git_oid", + "name": "id", + "comments": " The commit ID being cherry-picked. This will be populated for\n all operations except those of type `GIT_REBASE_OPERATION_EXEC`." + }, + { + "type": "const char *", + "name": "exec", + "comments": " The executable the user has requested be run. This will only\n be populated for operations of type `GIT_REBASE_OPERATION_EXEC`." + } + ], + "used": { + "returns": ["git_rebase_operation_byindex"], + "needs": ["git_rebase_next"] + } + } + ], + [ + "git_rebase_operation_t", + { + "decl": [ + "GIT_REBASE_OPERATION_PICK", + "GIT_REBASE_OPERATION_REWORD", + "GIT_REBASE_OPERATION_EDIT", + "GIT_REBASE_OPERATION_SQUASH", + "GIT_REBASE_OPERATION_FIXUP", + "GIT_REBASE_OPERATION_EXEC" + ], + "type": "enum", + "file": "git2/rebase.h", + "line": 120, + "lineto": 156, + "block": "GIT_REBASE_OPERATION_PICK\nGIT_REBASE_OPERATION_REWORD\nGIT_REBASE_OPERATION_EDIT\nGIT_REBASE_OPERATION_SQUASH\nGIT_REBASE_OPERATION_FIXUP\nGIT_REBASE_OPERATION_EXEC", + "tdef": "typedef", + "description": " Type of rebase operation in-progress after calling `git_rebase_next`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REBASE_OPERATION_PICK", + "comments": "

The given commit is to be cherry-picked. The client should commit\n the changes and continue if there are no conflicts.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_REWORD", + "comments": "

The given commit is to be cherry-picked, but the client should prompt\n the user to provide an updated commit message.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_EDIT", + "comments": "

The given commit is to be cherry-picked, but the client should stop\n to allow the user to edit the changes before committing them.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_SQUASH", + "comments": "

The given commit is to be squashed into the previous commit. The\n commit message will be merged with the previous message.

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_FIXUP", + "comments": "

The given commit is to be squashed into the previous commit. The\n commit message from this commit will be discarded.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REBASE_OPERATION_EXEC", + "comments": "

No commit will be cherry-picked. The client should run the given\n command and (if successful) continue.

\n", + "value": 5 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_rebase_options", + { + "decl": [ + "unsigned int version", + "int quiet", + "int inmemory", + "const char * rewrite_notes_ref", + "git_merge_options merge_options", + "git_checkout_options checkout_options", + "git_commit_create_cb commit_create_cb", + "int (*)(git_buf *, git_buf *, const char *, void *) signing_cb", + "void * payload" + ], + "type": "struct", + "value": "git_rebase_options", + "file": "git2/rebase.h", + "line": 32, + "lineto": 115, + "block": "unsigned int version\nint quiet\nint inmemory\nconst char * rewrite_notes_ref\ngit_merge_options merge_options\ngit_checkout_options checkout_options\ngit_commit_create_cb commit_create_cb\nint (*)(git_buf *, git_buf *, const char *, void *) signing_cb\nvoid * payload", + "tdef": "typedef", + "description": " Rebase options", + "comments": "

Use to tell the rebase machinery how to operate.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "int", + "name": "quiet", + "comments": " Used by `git_rebase_init`, this will instruct other clients working\n on this rebase that you want a quiet rebase experience, which they\n may choose to provide in an application-specific manner. This has no\n effect upon libgit2 directly, but is provided for interoperability\n between Git tools." + }, + { + "type": "int", + "name": "inmemory", + "comments": " Used by `git_rebase_init`, this will begin an in-memory rebase,\n which will allow callers to step through the rebase operations and\n commit the rebased changes, but will not rewind HEAD or update the\n repository to be in a rebasing state. This will not interfere with\n the working directory (if there is one)." + }, + { + "type": "const char *", + "name": "rewrite_notes_ref", + "comments": " Used by `git_rebase_finish`, this is the name of the notes reference\n used to rewrite notes for rebased commits when finishing the rebase;\n if NULL, the contents of the configuration option `notes.rewriteRef`\n is examined, unless the configuration option `notes.rewrite.rebase`\n is set to false. If `notes.rewriteRef` is also NULL, notes will\n not be rewritten." + }, + { + "type": "git_merge_options", + "name": "merge_options", + "comments": " Options to control how trees are merged during `git_rebase_next`." + }, + { + "type": "git_checkout_options", + "name": "checkout_options", + "comments": " Options to control how files are written during `git_rebase_init`,\n `git_rebase_next` and `git_rebase_abort`. Note that a minimum\n strategy of `GIT_CHECKOUT_SAFE` is defaulted in `init` and `next`,\n and a minimum strategy of `GIT_CHECKOUT_FORCE` is defaulted in\n `abort` to match git semantics." + }, + { + "type": "git_commit_create_cb", + "name": "commit_create_cb", + "comments": " Optional callback that allows users to override commit\n creation in `git_rebase_commit`. If specified, users can\n create their own commit and provide the commit ID, which\n may be useful for signing commits or otherwise customizing\n the commit creation.\n\n If this callback returns `GIT_PASSTHROUGH`, then\n `git_rebase_commit` will continue to create the commit." + }, + { + "type": "int (*)(git_buf *, git_buf *, const char *, void *)", + "name": "signing_cb", + "comments": " If provided, this will be called with the commit content, allowing\n a signature to be added to the rebase commit. Can be skipped with\n GIT_PASSTHROUGH. If GIT_PASSTHROUGH is returned, a commit will be made\n without a signature.\n\n This field is only used when performing git_rebase_commit.\n\n This callback is not invoked if a `git_commit_create_cb` is\n specified.\n\n This callback is deprecated; users should provide a\n creation callback as `commit_create_cb` that produces a\n commit buffer, signs it, and commits it." + }, + { + "type": "void *", + "name": "payload", + "comments": " This will be passed to each of the callbacks in this struct\n as the last parameter." + } + ], + "used": { + "returns": [], + "needs": [ + "git_rebase_init", + "git_rebase_open", + "git_rebase_options_init" + ] + } + } + ], + [ + "git_refdb", + { + "decl": "git_refdb", + "type": "struct", + "value": "git_refdb", + "file": "git2/types.h", + "line": 103, + "lineto": 103, + "tdef": "typedef", + "description": " An open refs database handle. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_refdb_compress", + "git_refdb_free", + "git_refdb_new", + "git_refdb_open", + "git_repository_refdb" + ] + } + } + ], + [ + "git_refdb_backend", + { + "decl": "git_refdb_backend", + "type": "struct", + "value": "git_refdb_backend", + "file": "git2/types.h", + "line": 106, + "lineto": 106, + "tdef": "typedef", + "description": " A custom backend for refs ", + "comments": "", + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_reference", + { + "decl": "git_reference", + "type": "struct", + "value": "git_reference", + "file": "git2/types.h", + "line": 189, + "lineto": 189, + "tdef": "typedef", + "description": " In-memory representation of a reference. ", + "comments": "", + "used": { + "returns": ["git_reference_type"], + "needs": [ + "git_annotated_commit_from_ref", + "git_branch_create", + "git_branch_create_from_annotated", + "git_branch_delete", + "git_branch_is_checked_out", + "git_branch_is_head", + "git_branch_lookup", + "git_branch_move", + "git_branch_name", + "git_branch_next", + "git_branch_set_upstream", + "git_branch_upstream", + "git_merge_analysis_for_ref", + "git_reference_cmp", + "git_reference_create", + "git_reference_create_matching", + "git_reference_delete", + "git_reference_dup", + "git_reference_dwim", + "git_reference_foreach", + "git_reference_foreach_cb", + "git_reference_foreach_glob", + "git_reference_foreach_name", + "git_reference_free", + "git_reference_is_branch", + "git_reference_is_note", + "git_reference_is_remote", + "git_reference_is_tag", + "git_reference_iterator_free", + "git_reference_iterator_glob_new", + "git_reference_iterator_new", + "git_reference_lookup", + "git_reference_name", + "git_reference_next", + "git_reference_next_name", + "git_reference_owner", + "git_reference_peel", + "git_reference_rename", + "git_reference_resolve", + "git_reference_set_target", + "git_reference_shorthand", + "git_reference_symbolic_create", + "git_reference_symbolic_create_matching", + "git_reference_symbolic_set_target", + "git_reference_symbolic_target", + "git_reference_target", + "git_reference_target_peel", + "git_reference_type", + "git_repository_head", + "git_repository_head_for_worktree", + "git_revparse_ext" + ] + } + } + ], + [ + "git_reference_format_t", + { + "decl": [ + "GIT_REFERENCE_FORMAT_NORMAL", + "GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL", + "GIT_REFERENCE_FORMAT_REFSPEC_PATTERN", + "GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND" + ], + "type": "enum", + "file": "git2/refs.h", + "line": 661, + "lineto": 690, + "block": "GIT_REFERENCE_FORMAT_NORMAL\nGIT_REFERENCE_FORMAT_ALLOW_ONELEVEL\nGIT_REFERENCE_FORMAT_REFSPEC_PATTERN\nGIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", + "tdef": "typedef", + "description": " Normalization options for reference lookup", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REFERENCE_FORMAT_NORMAL", + "comments": "

No particular normalization.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL", + "comments": "

Control whether one-level refnames are accepted\n (i.e., refnames that do not contain multiple /-separated\n components). Those are expected to be written only using\n uppercase letters and underscore (FETCH_HEAD, ...)

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REFERENCE_FORMAT_REFSPEC_PATTERN", + "comments": "

Interpret the provided name as a reference pattern for a\n refspec (as used with remote repositories). If this option\n is enabled, the name is allowed to contain a single * (\n<star

\n\n
\n

)\n in place of a one full pathname component\n (e.g., foo/\n<star\n/bar but not foo/bar\n<star\n).

\n
\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", + "comments": "

Interpret the name as part of a refspec in shorthand form\n so the ONELEVEL naming rules aren't enforced and 'master'\n becomes a valid name.

\n", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_reference_iterator", + { + "decl": "git_reference_iterator", + "type": "struct", + "value": "git_reference_iterator", + "file": "git2/types.h", + "line": 192, + "lineto": 192, + "tdef": "typedef", + "description": " Iterator for references ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_reference_iterator_free", + "git_reference_iterator_glob_new", + "git_reference_iterator_new", + "git_reference_next", + "git_reference_next_name" + ] + } + } + ], + [ + "git_reference_t", + { + "decl": [ + "GIT_REFERENCE_INVALID", + "GIT_REFERENCE_DIRECT", + "GIT_REFERENCE_SYMBOLIC", + "GIT_REFERENCE_ALL" + ], + "type": "enum", + "file": "git2/types.h", + "line": 207, + "lineto": 212, + "block": "GIT_REFERENCE_INVALID\nGIT_REFERENCE_DIRECT\nGIT_REFERENCE_SYMBOLIC\nGIT_REFERENCE_ALL", + "tdef": "typedef", + "description": " Basic type of any Git reference. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REFERENCE_INVALID", + "comments": "

Invalid reference

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REFERENCE_DIRECT", + "comments": "

A reference that points at an object id

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REFERENCE_SYMBOLIC", + "comments": "

A reference that points at another reference

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REFERENCE_ALL", + "comments": "", + "value": 3 + } + ], + "used": { "returns": ["git_reference_type"], "needs": [] } + } + ], + [ + "git_reflog", + { + "decl": "git_reflog", + "type": "struct", + "value": "git_reflog", + "file": "git2/types.h", + "line": 166, + "lineto": 166, + "tdef": "typedef", + "description": " Representation of a reference log ", + "comments": "", + "used": { + "returns": ["git_reflog_entry_byindex"], + "needs": [ + "git_reflog_append", + "git_reflog_drop", + "git_reflog_entry_byindex", + "git_reflog_entry_committer", + "git_reflog_entry_id_new", + "git_reflog_entry_id_old", + "git_reflog_entry_message", + "git_reflog_entrycount", + "git_reflog_free", + "git_reflog_read", + "git_reflog_write", + "git_transaction_set_reflog" + ] + } + } + ], + [ + "git_reflog_entry", + { + "decl": "git_reflog_entry", + "type": "struct", + "value": "git_reflog_entry", + "file": "git2/types.h", + "line": 163, + "lineto": 163, + "tdef": "typedef", + "description": " Representation of a reference log entry ", + "comments": "", + "used": { + "returns": ["git_reflog_entry_byindex"], + "needs": [ + "git_reflog_entry_committer", + "git_reflog_entry_id_new", + "git_reflog_entry_id_old", + "git_reflog_entry_message" + ] + } + } + ], + [ + "git_refspec", + { + "decl": "git_refspec", + "type": "struct", + "value": "git_refspec", + "file": "git2/types.h", + "line": 235, + "lineto": 235, + "tdef": "typedef", + "description": " A refspec specifies the mapping between remote and local reference\n names when fetch or pushing.", + "comments": "", + "used": { + "returns": ["git_remote_get_refspec"], + "needs": [ + "git_refspec_direction", + "git_refspec_dst", + "git_refspec_dst_matches", + "git_refspec_force", + "git_refspec_free", + "git_refspec_parse", + "git_refspec_rtransform", + "git_refspec_src", + "git_refspec_src_matches", + "git_refspec_string", + "git_refspec_transform" + ] + } + } + ], + [ + "git_remote", + { + "decl": "git_remote", + "type": "struct", + "value": "git_remote", + "file": "git2/types.h", + "line": 241, + "lineto": 241, + "tdef": "typedef", + "description": " Git's idea of a remote repository. A remote can be anonymous (in\n which case it does not have backing configuration entries).", + "comments": "", + "used": { + "returns": ["git_remote_autotag"], + "needs": [ + "git_headlist_cb", + "git_remote_autotag", + "git_remote_connect", + "git_remote_connect_ext", + "git_remote_connect_options_init", + "git_remote_connected", + "git_remote_create", + "git_remote_create_anonymous", + "git_remote_create_cb", + "git_remote_create_detached", + "git_remote_create_options_init", + "git_remote_create_with_fetchspec", + "git_remote_create_with_opts", + "git_remote_default_branch", + "git_remote_disconnect", + "git_remote_download", + "git_remote_dup", + "git_remote_fetch", + "git_remote_free", + "git_remote_get_fetch_refspecs", + "git_remote_get_push_refspecs", + "git_remote_get_refspec", + "git_remote_init_callbacks", + "git_remote_lookup", + "git_remote_ls", + "git_remote_name", + "git_remote_owner", + "git_remote_prune", + "git_remote_prune_refs", + "git_remote_push", + "git_remote_pushurl", + "git_remote_ready_cb", + "git_remote_refspec_count", + "git_remote_set_autotag", + "git_remote_set_instance_pushurl", + "git_remote_set_instance_url", + "git_remote_stats", + "git_remote_stop", + "git_remote_update_tips", + "git_remote_upload", + "git_remote_url", + "git_transport_cb" + ] + } + } + ], + [ + "git_remote_autotag_option_t", + { + "decl": [ + "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED", + "GIT_REMOTE_DOWNLOAD_TAGS_AUTO", + "GIT_REMOTE_DOWNLOAD_TAGS_NONE", + "GIT_REMOTE_DOWNLOAD_TAGS_ALL" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 696, + "lineto": 714, + "block": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED\nGIT_REMOTE_DOWNLOAD_TAGS_AUTO\nGIT_REMOTE_DOWNLOAD_TAGS_NONE\nGIT_REMOTE_DOWNLOAD_TAGS_ALL", + "tdef": "typedef", + "description": " Automatic tag following option", + "comments": "

Lets us select the --tags option to use.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED", + "comments": "

Use the setting from the configuration.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REMOTE_DOWNLOAD_TAGS_AUTO", + "comments": "

Ask the server for tags pointing to objects we're already\n downloading.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_DOWNLOAD_TAGS_NONE", + "comments": "

Don't ask for any tags beyond the refspecs.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REMOTE_DOWNLOAD_TAGS_ALL", + "comments": "

Ask for the all the tags.

\n", + "value": 3 + } + ], + "used": { + "returns": ["git_remote_autotag"], + "needs": ["git_remote_set_autotag", "git_remote_update_tips"] + } + } + ], + [ + "git_remote_callbacks", + { + "decl": [ + "unsigned int version", + "git_transport_message_cb sideband_progress", + "int (*)(git_remote_completion_t, void *) completion", + "git_credential_acquire_cb credentials", + "git_transport_certificate_check_cb certificate_check", + "git_indexer_progress_cb transfer_progress", + "int (*)(const char *, const git_oid *, const git_oid *, void *) update_tips", + "git_packbuilder_progress pack_progress", + "git_push_transfer_progress_cb push_transfer_progress", + "git_push_update_reference_cb push_update_reference", + "git_push_negotiation push_negotiation", + "git_transport_cb transport", + "git_remote_ready_cb remote_ready", + "void * payload", + "git_url_resolve_cb resolve_url" + ], + "type": "struct", + "value": "git_remote_callbacks", + "file": "git2/remote.h", + "line": 557, + "lineto": 658, + "block": "unsigned int version\ngit_transport_message_cb sideband_progress\nint (*)(git_remote_completion_t, void *) completion\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\ngit_indexer_progress_cb transfer_progress\nint (*)(const char *, const git_oid *, const git_oid *, void *) update_tips\ngit_packbuilder_progress pack_progress\ngit_push_transfer_progress_cb push_transfer_progress\ngit_push_update_reference_cb push_update_reference\ngit_push_negotiation push_negotiation\ngit_transport_cb transport\ngit_remote_ready_cb remote_ready\nvoid * payload\ngit_url_resolve_cb resolve_url", + "tdef": null, + "description": " The callback settings structure", + "comments": "

Set the callbacks to be called by the remote when informing the user about the progress of the network operations.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " The version " + }, + { + "type": "git_transport_message_cb", + "name": "sideband_progress", + "comments": " Textual progress from the remote. Text send over the\n progress side-band will be passed to this function (this is\n the 'counting objects' output)." + }, + { + "type": "int (*)(git_remote_completion_t, void *)", + "name": "completion", "comments": "" - }, - "git_stash_cb": { - "type": "callback", - "file": "git2/stash.h", - "line": 255, - "lineto": 259, - "args": [ - { - "name": "index", - "type": "size_t", - "comment": "The position within the stash list. 0 points to the\n most recent stashed state." - }, - { - "name": "message", - "type": "const char *", - "comment": "The stash message." - }, - { - "name": "stash_id", - "type": "const git_oid *", - "comment": "The commit oid of the stashed state." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra parameter to callback function." - } - ], - "argline": "size_t index, const char *message, const git_oid *stash_id, void *payload", - "sig": "size_t::const char *::const git_oid *::void *", - "return": { - "type": "int", - "comment": " 0 to continue iterating or non-zero to stop." - }, - "description": "

This is a callback function you can provide to iterate over all the\n stashed states that will be invoked per entry.

\n", + }, + { + "type": "git_credential_acquire_cb", + "name": "credentials", + "comments": " This will be called if the remote host requires\n authentication in order to connect to it.\n\n Returning GIT_PASSTHROUGH will make libgit2 behave as\n though this field isn't set." + }, + { + "type": "git_transport_certificate_check_cb", + "name": "certificate_check", + "comments": " If cert verification fails, this will be called to let the\n user make the final decision of whether to allow the\n connection to proceed. Returns 0 to allow the connection\n or a negative value to indicate an error." + }, + { + "type": "git_indexer_progress_cb", + "name": "transfer_progress", + "comments": " During the download of new data, this will be regularly\n called with the current count of progress done by the\n indexer." + }, + { + "type": "int (*)(const char *, const git_oid *, const git_oid *, void *)", + "name": "update_tips", "comments": "" - }, - "git_status_cb": { - "type": "callback", - "file": "git2/status.h", - "line": 63, - "lineto": 64, - "args": [ - { - "name": "path", - "type": "const char *", - "comment": null - }, - { - "name": "status_flags", - "type": "unsigned int", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const char *path, unsigned int status_flags, void *payload", - "sig": "const char *::unsigned int::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Function pointer to receive status on individual files

\n", - "comments": "

path is the relative path to the file from the root of the repository.

\n\n

status_flags is a combination of git_status_t values that apply.

\n\n

payload is the value you passed to the foreach function as payload.

\n" - }, - "git_submodule_cb": { - "type": "callback", - "file": "git2/submodule.h", - "line": 118, - "lineto": 119, - "args": [ - { - "name": "sm", - "type": "git_submodule *", - "comment": "git_submodule currently being visited" - }, - { - "name": "name", - "type": "const char *", - "comment": "name of the submodule" - }, - { - "name": "payload", - "type": "void *", - "comment": "value you passed to the foreach function as payload" - } - ], - "argline": "git_submodule *sm, const char *name, void *payload", - "sig": "git_submodule *::const char *::void *", - "return": { - "type": "int", - "comment": " 0 on success or error code" - }, - "description": "

Function pointer to receive each submodule

\n", + }, + { + "type": "git_packbuilder_progress", + "name": "pack_progress", + "comments": " Function to call with progress information during pack\n building. Be aware that this is called inline with pack\n building operations, so performance may be affected." + }, + { + "type": "git_push_transfer_progress_cb", + "name": "push_transfer_progress", + "comments": " Function to call with progress information during the\n upload portion of a push. Be aware that this is called\n inline with pack building operations, so performance may be\n affected." + }, + { + "type": "git_push_update_reference_cb", + "name": "push_update_reference", + "comments": " See documentation of git_push_update_reference_cb" + }, + { + "type": "git_push_negotiation", + "name": "push_negotiation", + "comments": " Called once between the negotiation step and the upload. It\n provides information about what updates will be performed." + }, + { + "type": "git_transport_cb", + "name": "transport", + "comments": " Create the transport to use for this operation. Leave NULL\n to auto-detect." + }, + { + "type": "git_remote_ready_cb", + "name": "remote_ready", + "comments": " Callback when the remote is ready to connect." + }, + { + "type": "void *", + "name": "payload", + "comments": " This will be passed to each of the callbacks in this struct\n as the last parameter." + }, + { + "type": "git_url_resolve_cb", + "name": "resolve_url", + "comments": " Resolve URL before connecting to remote.\n The returned URL will be used to connect to the remote instead.\n\n This callback is deprecated; users should use\n git_remote_ready_cb and configure the instance URL instead." + } + ], + "used": { + "returns": [], + "needs": [ + "git_remote_connect", + "git_remote_init_callbacks", + "git_remote_prune", + "git_remote_update_tips" + ] + } + } + ], + [ + "git_remote_completion_t", + { + "decl": [ + "GIT_REMOTE_COMPLETION_DOWNLOAD", + "GIT_REMOTE_COMPLETION_INDEXING", + "GIT_REMOTE_COMPLETION_ERROR" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 463, + "lineto": 467, + "block": "GIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR\nGIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR", + "tdef": "typedef", + "description": " Argument to the completion callback which tells it which operation\n finished.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_COMPLETION_DOWNLOAD", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REMOTE_COMPLETION_INDEXING", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_COMPLETION_ERROR", + "comments": "", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_remote_connect_options", + { + "decl": [ + "unsigned int version", + "git_remote_callbacks callbacks", + "git_proxy_options proxy_opts", + "git_remote_redirect_t follow_redirects", + "git_strarray custom_headers" + ], + "type": "struct", + "value": "git_remote_connect_options", + "file": "git2/remote.h", + "line": 879, + "lineto": 897, + "block": "unsigned int version\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", + "tdef": "typedef", + "description": " Remote creation options structure", + "comments": "

Initialize with GIT_REMOTE_CREATE_OPTIONS_INIT. Alternatively, you can use git_remote_create_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "git_remote_callbacks", + "name": "callbacks", + "comments": " Callbacks to use for this connection " + }, + { + "type": "git_proxy_options", + "name": "proxy_opts", + "comments": " HTTP Proxy settings " + }, + { + "type": "git_remote_redirect_t", + "name": "follow_redirects", + "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." + }, + { + "type": "git_strarray", + "name": "custom_headers", + "comments": " Extra HTTP headers to use in this connection " + } + ], + "used": { + "returns": [], + "needs": ["git_remote_connect_ext", "git_remote_connect_options_init"] + } + } + ], + [ + "git_remote_create_flags", + { + "decl": [ + "GIT_REMOTE_CREATE_SKIP_INSTEADOF", + "GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 71, + "lineto": 77, + "block": "GIT_REMOTE_CREATE_SKIP_INSTEADOF\nGIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC", + "tdef": "typedef", + "description": " Remote creation options flags", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_CREATE_SKIP_INSTEADOF", + "comments": "

Ignore the repository apply.insteadOf configuration

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC", + "comments": "

Don't build a fetchspec from the name if none is set

\n", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_remote_create_options", + { + "decl": [ + "unsigned int version", + "git_repository * repository", + "const char * name", + "const char * fetchspec", + "unsigned int flags" + ], + "type": "struct", + "value": "git_remote_create_options", + "file": "git2/remote.h", + "line": 97, + "lineto": 117, + "block": "unsigned int version\ngit_repository * repository\nconst char * name\nconst char * fetchspec\nunsigned int flags", + "tdef": "typedef", + "description": " Remote creation options structure", + "comments": "

Initialize with GIT_REMOTE_CREATE_OPTIONS_INIT. Alternatively, you can use git_remote_create_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "git_repository *", + "name": "repository", + "comments": " The repository that should own the remote.\n Setting this to NULL results in a detached remote." + }, + { + "type": "const char *", + "name": "name", + "comments": " The remote's name.\n Setting this to NULL results in an in-memory/anonymous remote." + }, + { + "type": "const char *", + "name": "fetchspec", + "comments": " The fetchspec the remote should use. " + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " Additional flags for the remote. See git_remote_create_flags. " + } + ], + "used": { + "returns": [], + "needs": [ + "git_remote_create_options_init", + "git_remote_create_with_opts" + ] + } + } + ], + [ + "git_remote_head", + { + "decl": [ + "int local", + "git_oid oid", + "git_oid loid", + "char * name", + "char * symref_target" + ], + "type": "struct", + "value": "git_remote_head", + "file": "git2/net.h", + "line": 40, + "lineto": 50, + "block": "int local\ngit_oid oid\ngit_oid loid\nchar * name\nchar * symref_target", + "tdef": null, + "description": " Description of a reference advertised by a remote server, given out\n on `ls` calls.", + "comments": "", + "fields": [ + { "type": "int", "name": "local", "comments": "" }, + { "type": "git_oid", "name": "oid", "comments": "" }, + { "type": "git_oid", "name": "loid", "comments": "" }, + { "type": "char *", "name": "name", "comments": "" }, + { + "type": "char *", + "name": "symref_target", + "comments": " If the server send a symref mapping for this ref, this will\n point to the target." + } + ], + "used": { "returns": [], "needs": ["git_headlist_cb", "git_remote_ls"] } + } + ], + [ + "git_remote_redirect_t", + { + "decl": [ + "GIT_REMOTE_REDIRECT_NONE", + "GIT_REMOTE_REDIRECT_INITIAL", + "GIT_REMOTE_REDIRECT_ALL" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 49, + "lineto": 66, + "block": "GIT_REMOTE_REDIRECT_NONE\nGIT_REMOTE_REDIRECT_INITIAL\nGIT_REMOTE_REDIRECT_ALL", + "tdef": "typedef", + "description": " Remote redirection settings; whether redirects to another host\n are permitted. By default, git will follow a redirect on the\n initial request (`/info/refs`), but not subsequent requests.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_REDIRECT_NONE", + "comments": "

Do not follow any off-site redirects at any stage of\n the fetch or push.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_REDIRECT_INITIAL", + "comments": "

Allow off-site redirects only upon the initial request.\n This is the default.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REMOTE_REDIRECT_ALL", + "comments": "

Allow redirects at any stage in the fetch or push.

\n", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_remote_update_flags", + { + "decl": [ + "GIT_REMOTE_UPDATE_FETCHHEAD", + "GIT_REMOTE_UPDATE_REPORT_UNCHANGED" + ], + "type": "enum", + "file": "git2/remote.h", + "line": 82, + "lineto": 88, + "block": "GIT_REMOTE_UPDATE_FETCHHEAD\nGIT_REMOTE_UPDATE_REPORT_UNCHANGED", + "tdef": "typedef", + "description": " How to handle reference updates.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REMOTE_UPDATE_FETCHHEAD", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REMOTE_UPDATE_REPORT_UNCHANGED", + "comments": "", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_repository", + { + "decl": "git_repository", + "type": "struct", + "value": "git_repository", + "file": "git2/types.h", + "line": 118, + "lineto": 118, + "tdef": "typedef", + "description": " Representation of an existing git repository,\n including all its object contents", + "comments": "", + "used": { + "returns": [ + "git_blob_owner", + "git_commit_owner", + "git_index_owner", + "git_object_owner", + "git_patch_owner", + "git_reference_owner", + "git_remote_owner", + "git_revwalk_repository", + "git_submodule_owner", + "git_tag_owner", + "git_tree_owner" + ], + "needs": [ + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_from_ref", + "git_annotated_commit_from_revspec", + "git_annotated_commit_lookup", + "git_apply", + "git_apply_to_tree", + "git_attr_add_macro", + "git_attr_cache_flush", + "git_attr_foreach", + "git_attr_foreach_ext", + "git_attr_get", + "git_attr_get_ext", + "git_attr_get_many", + "git_attr_get_many_ext", + "git_blame_file", + "git_blob_create_from_buffer", + "git_blob_create_from_disk", + "git_blob_create_from_stream", + "git_blob_create_from_workdir", + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_branch_create", + "git_branch_create_from_annotated", + "git_branch_iterator_new", + "git_branch_lookup", + "git_branch_remote_name", + "git_branch_upstream_merge", + "git_branch_upstream_name", + "git_branch_upstream_remote", + "git_checkout_head", + "git_checkout_index", + "git_checkout_tree", + "git_cherrypick", + "git_cherrypick_commit", + "git_clone", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_from_stage", + "git_commit_create_v", + "git_commit_create_with_signature", + "git_commit_extract_signature", + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_config_add_file_ondisk", + "git_describe_workdir", + "git_diff_commit_as_email", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_filter_list_apply_to_file", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_file", + "git_graph_ahead_behind", + "git_graph_descendant_of", + "git_graph_reachable_from_any", + "git_ignore_add_rule", + "git_ignore_clear_internal_rules", + "git_ignore_path_is_ignored", + "git_index_write_tree_to", + "git_mailmap_from_repository", + "git_merge", + "git_merge_analysis", + "git_merge_analysis_for_ref", + "git_merge_base", + "git_merge_base_many", + "git_merge_base_octopus", + "git_merge_bases", + "git_merge_bases_many", + "git_merge_commits", + "git_merge_file_from_index", + "git_merge_trees", + "git_note_commit_create", + "git_note_commit_read", + "git_note_commit_remove", + "git_note_create", + "git_note_default_ref", + "git_note_foreach", + "git_note_iterator_new", + "git_note_read", + "git_note_remove", + "git_object_lookup", + "git_object_lookup_prefix", + "git_packbuilder_new", + "git_pathspec_match_workdir", + "git_rebase_init", + "git_rebase_open", + "git_refdb_new", + "git_refdb_open", + "git_reference_create", + "git_reference_create_matching", + "git_reference_dwim", + "git_reference_ensure_log", + "git_reference_foreach", + "git_reference_foreach_glob", + "git_reference_foreach_name", + "git_reference_has_log", + "git_reference_iterator_glob_new", + "git_reference_iterator_new", + "git_reference_list", + "git_reference_lookup", + "git_reference_name_to_id", + "git_reference_remove", + "git_reference_symbolic_create", + "git_reference_symbolic_create_matching", + "git_reflog_delete", + "git_reflog_read", + "git_reflog_rename", + "git_remote_add_fetch", + "git_remote_add_push", + "git_remote_create", + "git_remote_create_anonymous", + "git_remote_create_cb", + "git_remote_create_with_fetchspec", + "git_remote_delete", + "git_remote_list", + "git_remote_lookup", + "git_remote_rename", + "git_remote_set_autotag", + "git_remote_set_pushurl", + "git_remote_set_url", + "git_repository_commit_parents", + "git_repository_commondir", + "git_repository_config", + "git_repository_config_snapshot", + "git_repository_create_cb", + "git_repository_detach_head", + "git_repository_fetchhead_foreach", + "git_repository_free", + "git_repository_get_namespace", + "git_repository_hashfile", + "git_repository_head", + "git_repository_head_detached", + "git_repository_head_detached_for_worktree", + "git_repository_head_for_worktree", + "git_repository_head_unborn", + "git_repository_ident", + "git_repository_index", + "git_repository_init", + "git_repository_init_ext", + "git_repository_init_options_init", + "git_repository_is_bare", + "git_repository_is_empty", + "git_repository_is_shallow", + "git_repository_is_worktree", + "git_repository_item_path", + "git_repository_mergehead_foreach", + "git_repository_message", + "git_repository_message_remove", + "git_repository_odb", + "git_repository_oid_type", + "git_repository_open", + "git_repository_open_bare", + "git_repository_open_ext", + "git_repository_open_from_worktree", + "git_repository_path", + "git_repository_refdb", + "git_repository_set_head", + "git_repository_set_head_detached", + "git_repository_set_head_detached_from_annotated", + "git_repository_set_ident", + "git_repository_set_namespace", + "git_repository_set_workdir", + "git_repository_state", + "git_repository_state_cleanup", + "git_repository_workdir", + "git_reset", + "git_reset_default", + "git_reset_from_annotated", + "git_revert", + "git_revert_commit", + "git_revparse", + "git_revparse_ext", + "git_revparse_single", + "git_revwalk_new", + "git_signature_default", + "git_stash_apply", + "git_stash_drop", + "git_stash_foreach", + "git_stash_pop", + "git_stash_save", + "git_stash_save_with_opts", + "git_status_file", + "git_status_foreach", + "git_status_foreach_ext", + "git_status_list_new", + "git_status_should_ignore", + "git_submodule_add_setup", + "git_submodule_clone", + "git_submodule_foreach", + "git_submodule_lookup", + "git_submodule_open", + "git_submodule_repo_init", + "git_submodule_resolve_url", + "git_submodule_set_branch", + "git_submodule_set_fetch_recurse_submodules", + "git_submodule_set_ignore", + "git_submodule_set_update", + "git_submodule_set_url", + "git_submodule_status", + "git_tag_annotation_create", + "git_tag_create", + "git_tag_create_from_buffer", + "git_tag_create_lightweight", + "git_tag_delete", + "git_tag_foreach", + "git_tag_list", + "git_tag_list_match", + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_transaction_new", + "git_tree_create_updated", + "git_tree_entry_to_object", + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_treebuilder_new", + "git_worktree_add", + "git_worktree_list", + "git_worktree_lookup", + "git_worktree_open_from_repository" + ] + } + } + ], + [ + "git_repository_init_flag_t", + { + "decl": [ + "GIT_REPOSITORY_INIT_BARE", + "GIT_REPOSITORY_INIT_NO_REINIT", + "GIT_REPOSITORY_INIT_NO_DOTGIT_DIR", + "GIT_REPOSITORY_INIT_MKDIR", + "GIT_REPOSITORY_INIT_MKPATH", + "GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE", + "GIT_REPOSITORY_INIT_RELATIVE_GITLINK" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 236, + "lineto": 282, + "block": "GIT_REPOSITORY_INIT_BARE\nGIT_REPOSITORY_INIT_NO_REINIT\nGIT_REPOSITORY_INIT_NO_DOTGIT_DIR\nGIT_REPOSITORY_INIT_MKDIR\nGIT_REPOSITORY_INIT_MKPATH\nGIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE\nGIT_REPOSITORY_INIT_RELATIVE_GITLINK", + "tdef": "typedef", + "description": " Option flags for `git_repository_init_ext`.", + "comments": "

These flags configure extra behaviors to git_repository_init_ext. In every case, the default behavior is the zero value (i.e. flag is not set). Just OR the flag values together for the flags parameter when initializing a new repo.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_BARE", + "comments": "

Create a bare repository with no working directory.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_NO_REINIT", + "comments": "

Return an GIT_EEXISTS error if the repo_path appears to already be\n an git repository.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_NO_DOTGIT_DIR", + "comments": "

Normally a "/.git/" will be appended to the repo path for\n non-bare repos (if it is not already there), but passing this flag\n prevents that behavior.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_MKDIR", + "comments": "

Make the repo_path (and workdir_path) as needed. Init is always willing\n to create the ".git" directory even without this flag. This flag tells\n init to create the trailing component of the repo and workdir paths\n as needed.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_MKPATH", + "comments": "

Recursively make all components of the repo and workdir paths as\n necessary.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE", + "comments": "

libgit2 normally uses internal templates to initialize a new repo.\n This flags enables external templates, looking the "template_path" from\n the options if set, or the init.templatedir global config if not,\n or falling back on "/usr/share/git-core/templates" if it exists.

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_RELATIVE_GITLINK", + "comments": "

If an alternate workdir is specified, use relative paths for the gitdir\n and core.worktree.

\n", + "value": 64 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_repository_init_mode_t", + { + "decl": [ + "GIT_REPOSITORY_INIT_SHARED_UMASK", + "GIT_REPOSITORY_INIT_SHARED_GROUP", + "GIT_REPOSITORY_INIT_SHARED_ALL" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 291, + "lineto": 307, + "block": "GIT_REPOSITORY_INIT_SHARED_UMASK\nGIT_REPOSITORY_INIT_SHARED_GROUP\nGIT_REPOSITORY_INIT_SHARED_ALL", + "tdef": "typedef", + "description": " Mode options for `git_repository_init_ext`.", + "comments": "

Set the mode field of the git_repository_init_options structure either to the custom mode that you would like, or to one of the defined modes.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_SHARED_UMASK", + "comments": "

Use permissions configured by umask - the default.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_SHARED_GROUP", + "comments": "

Use "--shared=group" behavior, chmod'ing the new repo to be group\n writable and "g+sx" for sticky group assignment.

\n", + "value": 1533 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_INIT_SHARED_ALL", + "comments": "

Use "--shared=all" behavior, adding world readability.

\n", + "value": 1535 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_repository_init_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "uint32_t mode", + "const char * workdir_path", + "const char * description", + "const char * template_path", + "const char * initial_head", + "const char * origin_url" + ], + "type": "struct", + "value": "git_repository_init_options", + "file": "git2/repository.h", + "line": 315, + "lineto": 374, + "block": "unsigned int version\nuint32_t flags\nuint32_t mode\nconst char * workdir_path\nconst char * description\nconst char * template_path\nconst char * initial_head\nconst char * origin_url", + "tdef": "typedef", + "description": " Extended options structure for `git_repository_init_ext`.", + "comments": "

This contains extra options for git_repository_init_ext that enable additional initialization features.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " Combination of GIT_REPOSITORY_INIT flags above." + }, + { + "type": "uint32_t", + "name": "mode", + "comments": " Set to one of the standard GIT_REPOSITORY_INIT_SHARED_... constants\n above, or to a custom value that you would like." + }, + { + "type": "const char *", + "name": "workdir_path", + "comments": " The path to the working dir or NULL for default (i.e. repo_path parent\n on non-bare repos). IF THIS IS RELATIVE PATH, IT WILL BE EVALUATED\n RELATIVE TO THE REPO_PATH. If this is not the \"natural\" working\n directory, a .git gitlink file will be created here linking to the\n repo_path." + }, + { + "type": "const char *", + "name": "description", + "comments": " If set, this will be used to initialize the \"description\" file in the\n repository, instead of using the template content." + }, + { + "type": "const char *", + "name": "template_path", + "comments": " When GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE is set, this contains\n the path to use for the template directory. If this is NULL, the config\n or default directory options will be used instead." + }, + { + "type": "const char *", + "name": "initial_head", + "comments": " The name of the head to point HEAD at. If NULL, then this will be\n treated as \"master\" and the HEAD ref will be set to \"refs/heads/master\".\n If this begins with \"refs/\" it will be used verbatim;\n otherwise \"refs/heads/\" will be prefixed." + }, + { + "type": "const char *", + "name": "origin_url", + "comments": " If this is non-NULL, then after the rest of the repository\n initialization is completed, an \"origin\" remote will be added\n pointing to this URL." + } + ], + "used": { + "returns": [], + "needs": [ + "git_repository_init_ext", + "git_repository_init_options_init" + ] + } + } + ], + [ + "git_repository_item_t", + { + "decl": [ + "GIT_REPOSITORY_ITEM_GITDIR", + "GIT_REPOSITORY_ITEM_WORKDIR", + "GIT_REPOSITORY_ITEM_COMMONDIR", + "GIT_REPOSITORY_ITEM_INDEX", + "GIT_REPOSITORY_ITEM_OBJECTS", + "GIT_REPOSITORY_ITEM_REFS", + "GIT_REPOSITORY_ITEM_PACKED_REFS", + "GIT_REPOSITORY_ITEM_REMOTES", + "GIT_REPOSITORY_ITEM_CONFIG", + "GIT_REPOSITORY_ITEM_INFO", + "GIT_REPOSITORY_ITEM_HOOKS", + "GIT_REPOSITORY_ITEM_LOGS", + "GIT_REPOSITORY_ITEM_MODULES", + "GIT_REPOSITORY_ITEM_WORKTREES", + "GIT_REPOSITORY_ITEM_WORKTREE_CONFIG", + "GIT_REPOSITORY_ITEM__LAST" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 492, + "lineto": 509, + "block": "GIT_REPOSITORY_ITEM_GITDIR\nGIT_REPOSITORY_ITEM_WORKDIR\nGIT_REPOSITORY_ITEM_COMMONDIR\nGIT_REPOSITORY_ITEM_INDEX\nGIT_REPOSITORY_ITEM_OBJECTS\nGIT_REPOSITORY_ITEM_REFS\nGIT_REPOSITORY_ITEM_PACKED_REFS\nGIT_REPOSITORY_ITEM_REMOTES\nGIT_REPOSITORY_ITEM_CONFIG\nGIT_REPOSITORY_ITEM_INFO\nGIT_REPOSITORY_ITEM_HOOKS\nGIT_REPOSITORY_ITEM_LOGS\nGIT_REPOSITORY_ITEM_MODULES\nGIT_REPOSITORY_ITEM_WORKTREES\nGIT_REPOSITORY_ITEM_WORKTREE_CONFIG\nGIT_REPOSITORY_ITEM__LAST", + "tdef": "typedef", + "description": " List of items which belong to the git repository layout", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_GITDIR", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_WORKDIR", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_COMMONDIR", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_INDEX", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_OBJECTS", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_REFS", + "comments": "", + "value": 5 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_PACKED_REFS", + "comments": "", + "value": 6 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_REMOTES", + "comments": "", + "value": 7 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_CONFIG", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_INFO", + "comments": "", + "value": 9 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_HOOKS", + "comments": "", + "value": 10 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_LOGS", + "comments": "", + "value": 11 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_MODULES", + "comments": "", + "value": 12 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_WORKTREES", + "comments": "", + "value": 13 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM_WORKTREE_CONFIG", + "comments": "", + "value": 14 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_ITEM__LAST", + "comments": "", + "value": 15 + } + ], + "used": { "returns": [], "needs": ["git_repository_item_path"] } + } + ], + [ + "git_repository_open_flag_t", + { + "decl": [ + "GIT_REPOSITORY_OPEN_NO_SEARCH", + "GIT_REPOSITORY_OPEN_CROSS_FS", + "GIT_REPOSITORY_OPEN_BARE", + "GIT_REPOSITORY_OPEN_NO_DOTGIT", + "GIT_REPOSITORY_OPEN_FROM_ENV" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 109, + "lineto": 156, + "block": "GIT_REPOSITORY_OPEN_NO_SEARCH\nGIT_REPOSITORY_OPEN_CROSS_FS\nGIT_REPOSITORY_OPEN_BARE\nGIT_REPOSITORY_OPEN_NO_DOTGIT\nGIT_REPOSITORY_OPEN_FROM_ENV", + "tdef": "typedef", + "description": " Option flags for `git_repository_open_ext`.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_NO_SEARCH", + "comments": "

Only open the repository if it can be immediately found in the\n start_path. Do not walk up from the start_path looking at parent\n directories.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_CROSS_FS", + "comments": "

Unless this flag is set, open will not continue searching across\n filesystem boundaries (i.e. when st_dev changes from the stat\n system call). For example, searching in a user's home directory at\n "/home/user/source/" will not return "/.git/" as the found repo if\n "/" is a different filesystem than "/home".

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_BARE", + "comments": "

Open repository as a bare repo regardless of core.bare config, and\n defer loading config file for faster setup.\n Unlike git_repository_open_bare, this can follow gitlinks.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_NO_DOTGIT", + "comments": "

Do not check for a repository by appending /.git to the start_path;\n only open the repository if start_path itself points to the git\n directory.

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_OPEN_FROM_ENV", + "comments": "

Find and open a git repository, respecting the environment variables\n used by the git command-line tools.\n If set, git_repository_open_ext will ignore the other flags and\n the ceiling_dirs argument, and will allow a NULL path to use\n GIT_DIR or search from the current directory.\n The search for a repository will respect $GIT_CEILING_DIRECTORIES and\n $GIT_DISCOVERY_ACROSS_FILESYSTEM. The opened repository will\n respect $GIT_INDEX_FILE, $GIT_NAMESPACE, $GIT_OBJECT_DIRECTORY, and\n $GIT_ALTERNATE_OBJECT_DIRECTORIES.\n In the future, this flag will also cause git_repository_open_ext\n to respect $GIT_WORK_TREE and $GIT_COMMON_DIR; currently,\n git_repository_open_ext with this flag will error out if either\n $GIT_WORK_TREE or $GIT_COMMON_DIR is set.

\n", + "value": 16 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_repository_state_t", + { + "decl": [ + "GIT_REPOSITORY_STATE_NONE", + "GIT_REPOSITORY_STATE_MERGE", + "GIT_REPOSITORY_STATE_REVERT", + "GIT_REPOSITORY_STATE_REVERT_SEQUENCE", + "GIT_REPOSITORY_STATE_CHERRYPICK", + "GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE", + "GIT_REPOSITORY_STATE_BISECT", + "GIT_REPOSITORY_STATE_REBASE", + "GIT_REPOSITORY_STATE_REBASE_INTERACTIVE", + "GIT_REPOSITORY_STATE_REBASE_MERGE", + "GIT_REPOSITORY_STATE_APPLY_MAILBOX", + "GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE" + ], + "type": "enum", + "file": "git2/repository.h", + "line": 893, + "lineto": 906, + "block": "GIT_REPOSITORY_STATE_NONE\nGIT_REPOSITORY_STATE_MERGE\nGIT_REPOSITORY_STATE_REVERT\nGIT_REPOSITORY_STATE_REVERT_SEQUENCE\nGIT_REPOSITORY_STATE_CHERRYPICK\nGIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE\nGIT_REPOSITORY_STATE_BISECT\nGIT_REPOSITORY_STATE_REBASE\nGIT_REPOSITORY_STATE_REBASE_INTERACTIVE\nGIT_REPOSITORY_STATE_REBASE_MERGE\nGIT_REPOSITORY_STATE_APPLY_MAILBOX\nGIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", + "tdef": "typedef", + "description": " Repository state", + "comments": "

These values represent possible states for the repository to be in, based on the current operation which is ongoing.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_NONE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_MERGE", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REVERT", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REVERT_SEQUENCE", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_CHERRYPICK", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE", + "comments": "", + "value": 5 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_BISECT", + "comments": "", + "value": 6 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REBASE", + "comments": "", + "value": 7 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REBASE_INTERACTIVE", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_REBASE_MERGE", + "comments": "", + "value": 9 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_APPLY_MAILBOX", + "comments": "", + "value": 10 + }, + { + "type": "int", + "name": "GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", + "comments": "", + "value": 11 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_reset_t", + { + "decl": ["GIT_RESET_SOFT", "GIT_RESET_MIXED", "GIT_RESET_HARD"], + "type": "enum", + "file": "git2/reset.h", + "line": 26, + "lineto": 30, + "block": "GIT_RESET_SOFT\nGIT_RESET_MIXED\nGIT_RESET_HARD", + "tdef": "typedef", + "description": " Kinds of reset operation", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_RESET_SOFT", + "comments": "

Move the head to the given commit

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_RESET_MIXED", + "comments": "

SOFT plus reset index to the commit

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_RESET_HARD", + "comments": "

MIXED plus changes in working tree discarded

\n", + "value": 3 + } + ], + "used": { + "returns": [], + "needs": ["git_reset", "git_reset_from_annotated"] + } + } + ], + [ + "git_revert_options", + { + "decl": [ + "unsigned int version", + "unsigned int mainline", + "git_merge_options merge_opts", + "git_checkout_options checkout_opts" + ], + "type": "struct", + "value": "git_revert_options", + "file": "git2/revert.h", + "line": 26, + "lineto": 34, + "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", + "tdef": "typedef", + "description": " Options for revert", + "comments": "", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "unsigned int", + "name": "mainline", + "comments": " For merge commits, the \"mainline\" is treated as the parent. " + }, + { + "type": "git_merge_options", + "name": "merge_opts", + "comments": " Options for the merging " + }, + { + "type": "git_checkout_options", + "name": "checkout_opts", + "comments": " Options for the checkout " + } + ], + "used": { + "returns": [], + "needs": ["git_revert", "git_revert_options_init"] + } + } + ], + [ + "git_revspec", + { + "decl": ["git_object * from", "git_object * to", "unsigned int flags"], + "type": "struct", + "value": "git_revspec", + "file": "git2/revparse.h", + "line": 83, + "lineto": 90, + "block": "git_object * from\ngit_object * to\nunsigned int flags", + "tdef": "typedef", + "description": " Git Revision Spec: output of a `git_revparse` operation", + "comments": "", + "fields": [ + { + "type": "git_object *", + "name": "from", + "comments": " The left element of the revspec; must be freed by the user " + }, + { + "type": "git_object *", + "name": "to", + "comments": " The right element of the revspec; must be freed by the user " + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " The intent of the revspec (i.e. `git_revspec_mode_t` flags) " + } + ], + "used": { "returns": [], "needs": ["git_revparse"] } + } + ], + [ + "git_revspec_t", + { + "decl": [ + "GIT_REVSPEC_SINGLE", + "GIT_REVSPEC_RANGE", + "GIT_REVSPEC_MERGE_BASE" + ], + "type": "enum", + "file": "git2/revparse.h", + "line": 71, + "lineto": 78, + "block": "GIT_REVSPEC_SINGLE\nGIT_REVSPEC_RANGE\nGIT_REVSPEC_MERGE_BASE", + "tdef": "typedef", + "description": " Revparse flags. These indicate the intended behavior of the spec passed to\n git_revparse.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_REVSPEC_SINGLE", + "comments": "

The spec targeted a single object.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_REVSPEC_RANGE", + "comments": "

The spec targeted a range of commits.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_REVSPEC_MERGE_BASE", + "comments": "

The spec used the '...' operator, which invokes special semantics.

\n", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_revwalk", + { + "decl": "git_revwalk", + "type": "struct", + "value": "git_revwalk", + "file": "git2/types.h", + "line": 127, + "lineto": 127, + "tdef": "typedef", + "description": " Representation of an in-progress walk through the commits in a repo ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_packbuilder_insert_walk", + "git_revwalk_add_hide_cb", + "git_revwalk_free", + "git_revwalk_hide", + "git_revwalk_hide_glob", + "git_revwalk_hide_head", + "git_revwalk_hide_ref", + "git_revwalk_new", + "git_revwalk_next", + "git_revwalk_push", + "git_revwalk_push_glob", + "git_revwalk_push_head", + "git_revwalk_push_range", + "git_revwalk_push_ref", + "git_revwalk_repository", + "git_revwalk_reset", + "git_revwalk_simplify_first_parent", + "git_revwalk_sorting" + ] + } + } + ], + [ + "git_signature", + { + "decl": ["char * name", "char * email", "git_time when"], + "type": "struct", + "value": "git_signature", + "file": "git2/types.h", + "line": 182, + "lineto": 186, + "block": "char * name\nchar * email\ngit_time when", + "tdef": "typedef", + "description": " An action signature (e.g. for committers, taggers, etc) ", + "comments": "", + "fields": [ + { + "type": "char *", + "name": "name", + "comments": " full name of the author " + }, + { + "type": "char *", + "name": "email", + "comments": " email of the author " + }, + { + "type": "git_time", + "name": "when", + "comments": " time when the action happened " + } + ], + "used": { + "returns": [ + "git_commit_author", + "git_commit_committer", + "git_note_author", + "git_note_committer", + "git_reflog_entry_committer", + "git_tag_tagger" + ], + "needs": [ + "git_commit_amend", + "git_commit_author_with_mailmap", + "git_commit_committer_with_mailmap", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_cb", + "git_commit_create_v", + "git_email_create_from_diff", + "git_mailmap_resolve_signature", + "git_note_commit_create", + "git_note_commit_remove", + "git_note_create", + "git_note_remove", + "git_rebase_commit", + "git_rebase_finish", + "git_reflog_append", + "git_signature_default", + "git_signature_dup", + "git_signature_free", + "git_signature_from_buffer", + "git_signature_new", + "git_signature_now", + "git_stash_save", + "git_tag_annotation_create", + "git_tag_create", + "git_transaction_set_symbolic_target", + "git_transaction_set_target" + ] + } + } + ], + [ + "git_smart_service_t", + { + "decl": [ + "GIT_SERVICE_UPLOADPACK_LS", + "GIT_SERVICE_UPLOADPACK", + "GIT_SERVICE_RECEIVEPACK_LS", + "GIT_SERVICE_RECEIVEPACK" + ], + "type": "enum", + "file": "git2/sys/transport.h", + "line": 313, + "lineto": 318, + "block": "GIT_SERVICE_UPLOADPACK_LS\nGIT_SERVICE_UPLOADPACK\nGIT_SERVICE_RECEIVEPACK_LS\nGIT_SERVICE_RECEIVEPACK", + "tdef": "typedef", + "description": " Actions that the smart transport can ask a subtransport to perform ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_SERVICE_UPLOADPACK_LS", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SERVICE_UPLOADPACK", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SERVICE_RECEIVEPACK_LS", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_SERVICE_RECEIVEPACK", + "comments": "", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_sort_t", + { + "decl": [ + "GIT_SORT_NONE", + "GIT_SORT_TOPOLOGICAL", + "GIT_SORT_TIME", + "GIT_SORT_REVERSE" + ], + "type": "enum", + "file": "git2/revwalk.h", + "line": 26, + "lineto": 53, + "block": "GIT_SORT_NONE\nGIT_SORT_TOPOLOGICAL\nGIT_SORT_TIME\nGIT_SORT_REVERSE", + "tdef": "typedef", + "description": " Flags to specify the sorting which a revwalk should perform.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_SORT_NONE", + "comments": "

Sort the output with the same default method from git: reverse\n chronological order. This is the default sorting for new walkers.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_SORT_TOPOLOGICAL", + "comments": "

Sort the repository contents in topological order (no parents before\n all of its children are shown); this sorting mode can be combined\n with time sorting to produce git's --date-order`.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SORT_TIME", + "comments": "

Sort the repository contents by commit time;\n this sorting mode can be combined with\n topological sorting.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SORT_REVERSE", + "comments": "

Iterate through the repository contents in reverse\n order; this sorting mode can be combined with\n any of the above.

\n", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_stash_apply_flags", + { + "decl": ["GIT_STASH_APPLY_DEFAULT", "GIT_STASH_APPLY_REINSTATE_INDEX"], + "type": "enum", + "file": "git2/stash.h", + "line": 129, + "lineto": 136, + "block": "GIT_STASH_APPLY_DEFAULT\nGIT_STASH_APPLY_REINSTATE_INDEX", + "tdef": "typedef", + "description": " Stash application flags. ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STASH_APPLY_DEFAULT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_REINSTATE_INDEX", + "comments": "", + "value": 1 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_stash_apply_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "git_checkout_options checkout_options", + "git_stash_apply_progress_cb progress_cb", + "void * progress_payload" + ], + "type": "struct", + "value": "git_stash_apply_options", + "file": "git2/stash.h", + "line": 180, + "lineto": 192, + "block": "unsigned int version\nuint32_t flags\ngit_checkout_options checkout_options\ngit_stash_apply_progress_cb progress_cb\nvoid * progress_payload", + "tdef": "typedef", + "description": " Stash application options structure", + "comments": "

Initialize with GIT_STASH_APPLY_OPTIONS_INIT. Alternatively, you can use git_stash_apply_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " See `git_stash_apply_flags`, above. " + }, + { + "type": "git_checkout_options", + "name": "checkout_options", + "comments": " Options to use when writing files to the working directory. " + }, + { + "type": "git_stash_apply_progress_cb", + "name": "progress_cb", + "comments": " Optional callback to notify the consumer of application progress. " + }, + { "type": "void *", "name": "progress_payload", "comments": "" } + ], + "used": { + "returns": [], + "needs": [ + "git_stash_apply", + "git_stash_apply_options_init", + "git_stash_pop" + ] + } + } + ], + [ + "git_stash_apply_progress_t", + { + "decl": [ + "GIT_STASH_APPLY_PROGRESS_NONE", + "GIT_STASH_APPLY_PROGRESS_LOADING_STASH", + "GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX", + "GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED", + "GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED", + "GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED", + "GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED", + "GIT_STASH_APPLY_PROGRESS_DONE" + ], + "type": "enum", + "file": "git2/stash.h", + "line": 139, + "lineto": 162, + "block": "GIT_STASH_APPLY_PROGRESS_NONE\nGIT_STASH_APPLY_PROGRESS_LOADING_STASH\nGIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX\nGIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED\nGIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED\nGIT_STASH_APPLY_PROGRESS_DONE", + "tdef": "typedef", + "description": " Stash apply progression states ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_NONE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_LOADING_STASH", + "comments": "

Loading the stashed data from the object database.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX", + "comments": "

The stored index is being analyzed.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED", + "comments": "

The modified files are being analyzed.

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED", + "comments": "

The untracked and ignored files are being analyzed.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED", + "comments": "

The untracked files are being written to disk.

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED", + "comments": "

The modified files are being written to disk.

\n", + "value": 6 + }, + { + "type": "int", + "name": "GIT_STASH_APPLY_PROGRESS_DONE", + "comments": "

The stash was applied successfully.

\n", + "value": 7 + } + ], + "used": { "returns": [], "needs": ["git_stash_apply_progress_cb"] } + } + ], + [ + "git_stash_flags", + { + "decl": [ + "GIT_STASH_DEFAULT", + "GIT_STASH_KEEP_INDEX", + "GIT_STASH_INCLUDE_UNTRACKED", + "GIT_STASH_INCLUDE_IGNORED", + "GIT_STASH_KEEP_ALL" + ], + "type": "enum", + "file": "git2/stash.h", + "line": 25, + "lineto": 53, + "block": "GIT_STASH_DEFAULT\nGIT_STASH_KEEP_INDEX\nGIT_STASH_INCLUDE_UNTRACKED\nGIT_STASH_INCLUDE_IGNORED\nGIT_STASH_KEEP_ALL", + "tdef": "typedef", + "description": " Stash flags", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STASH_DEFAULT", + "comments": "

No option, default

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STASH_KEEP_INDEX", + "comments": "

All changes already added to the index are left intact in\n the working directory

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STASH_INCLUDE_UNTRACKED", + "comments": "

All untracked files are also stashed and then cleaned up\n from the working directory

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STASH_INCLUDE_IGNORED", + "comments": "

All ignored files are also stashed and then cleaned up from\n the working directory

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STASH_KEEP_ALL", + "comments": "

All changes in the index and working directory are left intact

\n", + "value": 8 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_stash_save_options", + { + "decl": [ + "unsigned int version", + "uint32_t flags", + "const git_signature * stasher", + "const char * message", + "git_strarray paths" + ], + "type": "struct", + "value": "git_stash_save_options", + "file": "git2/stash.h", + "line": 81, + "lineto": 95, + "block": "unsigned int version\nuint32_t flags\nconst git_signature * stasher\nconst char * message\ngit_strarray paths", + "tdef": "typedef", + "description": " Stash save options structure", + "comments": "

Initialize with GIT_STASH_SAVE_OPTIONS_INIT. Alternatively, you can use git_stash_save_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " Flags to control the stashing process. (see GIT_STASH_* above) " + }, + { + "type": "const git_signature *", + "name": "stasher", + "comments": " The identity of the person performing the stashing. " + }, + { + "type": "const char *", + "name": "message", + "comments": " Optional description along with the stashed state. " + }, + { + "type": "git_strarray", + "name": "paths", + "comments": " Optional paths that control which files are stashed. " + } + ], + "used": { + "returns": [], + "needs": ["git_stash_save_options_init", "git_stash_save_with_opts"] + } + } + ], + [ + "git_status_entry", + { + "decl": [ + "git_status_t status", + "git_diff_delta * head_to_index", + "git_diff_delta * index_to_workdir" + ], + "type": "struct", + "value": "git_status_entry", + "file": "git2/status.h", + "line": 295, + "lineto": 299, + "block": "git_status_t status\ngit_diff_delta * head_to_index\ngit_diff_delta * index_to_workdir", + "tdef": "typedef", + "description": " A status entry, providing the differences between the file as it exists\n in HEAD and the index, and providing the differences between the index\n and the working directory.", + "comments": "

The status value provides the status flags for this file.

\n\n

The head_to_index value provides detailed information about the differences between the file in HEAD and the file in the index.

\n\n

The index_to_workdir value provides detailed information about the differences between the file in the index and the file in the working directory.

\n", + "fields": [ + { "type": "git_status_t", "name": "status", "comments": "" }, + { + "type": "git_diff_delta *", + "name": "head_to_index", "comments": "" - }, - "git_tag_foreach_cb": { - "type": "callback", - "file": "git2/tag.h", - "line": 330, - "lineto": 330, - "args": [ - { - "name": "name", - "type": "const char *", - "comment": "The tag name" - }, - { - "name": "oid", - "type": "git_oid *", - "comment": "The tag's OID" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload passed to git_tag_foreach" - } - ], - "argline": "const char *name, git_oid *oid, void *payload", - "sig": "const char *::git_oid *::void *", - "return": { - "type": "int", - "comment": " non-zero to terminate the iteration" - }, - "description": "

Callback used to iterate over tag names

\n", + }, + { + "type": "git_diff_delta *", + "name": "index_to_workdir", "comments": "" - }, - "git_trace_cb": { - "type": "callback", - "file": "git2/trace.h", - "line": 52, - "lineto": 52, - "args": [ - { - "name": "level", - "type": "git_trace_level_t", - "comment": null - }, - { - "name": "msg", - "type": "const char *", - "comment": null - } - ], - "argline": "git_trace_level_t level, const char *msg", - "sig": "git_trace_level_t::const char *", - "return": { - "type": "void", - "comment": null - }, - "description": "

An instance for a tracing function

\n", + } + ], + "used": { "returns": ["git_status_byindex"], "needs": [] } + } + ], + [ + "git_status_list", + { + "decl": "git_status_list", + "type": "struct", + "value": "git_status_list", + "file": "git2/types.h", + "line": 201, + "lineto": 201, + "tdef": "typedef", + "description": " Representation of a status collection ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_status_byindex", + "git_status_list_entrycount", + "git_status_list_free", + "git_status_list_new" + ] + } + } + ], + [ + "git_status_opt_t", + { + "decl": [ + "GIT_STATUS_OPT_INCLUDE_UNTRACKED", + "GIT_STATUS_OPT_INCLUDE_IGNORED", + "GIT_STATUS_OPT_INCLUDE_UNMODIFIED", + "GIT_STATUS_OPT_EXCLUDE_SUBMODULES", + "GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS", + "GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH", + "GIT_STATUS_OPT_RECURSE_IGNORED_DIRS", + "GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX", + "GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR", + "GIT_STATUS_OPT_SORT_CASE_SENSITIVELY", + "GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY", + "GIT_STATUS_OPT_RENAMES_FROM_REWRITES", + "GIT_STATUS_OPT_NO_REFRESH", + "GIT_STATUS_OPT_UPDATE_INDEX", + "GIT_STATUS_OPT_INCLUDE_UNREADABLE", + "GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED" + ], + "type": "enum", + "file": "git2/status.h", + "line": 101, + "lineto": 208, + "block": "GIT_STATUS_OPT_INCLUDE_UNTRACKED\nGIT_STATUS_OPT_INCLUDE_IGNORED\nGIT_STATUS_OPT_INCLUDE_UNMODIFIED\nGIT_STATUS_OPT_EXCLUDE_SUBMODULES\nGIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS\nGIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH\nGIT_STATUS_OPT_RECURSE_IGNORED_DIRS\nGIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX\nGIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR\nGIT_STATUS_OPT_SORT_CASE_SENSITIVELY\nGIT_STATUS_OPT_SORT_CASE_INSENSITIVELY\nGIT_STATUS_OPT_RENAMES_FROM_REWRITES\nGIT_STATUS_OPT_NO_REFRESH\nGIT_STATUS_OPT_UPDATE_INDEX\nGIT_STATUS_OPT_INCLUDE_UNREADABLE\nGIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", + "tdef": "typedef", + "description": " Flags to control status callbacks", + "comments": "

Calling git_status_foreach() is like calling the extended version with: GIT_STATUS_OPT_INCLUDE_IGNORED, GIT_STATUS_OPT_INCLUDE_UNTRACKED, and GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS. Those options are bundled together as GIT_STATUS_OPT_DEFAULTS if you want them as a baseline.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_UNTRACKED", + "comments": "

Says that callbacks should be made on untracked files.\n These will only be made if the workdir files are included in the status\n "show" option.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_IGNORED", + "comments": "

Says that ignored files get callbacks.\n Again, these callbacks will only be made if the workdir files are\n included in the status "show" option.

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_UNMODIFIED", + "comments": "

Indicates that callback should be made even on unmodified files.

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_EXCLUDE_SUBMODULES", + "comments": "

Indicates that submodules should be skipped.\n This only applies if there are no pending typechanges to the submodule\n (either from or to another type).

\n", + "value": 8 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS", + "comments": "

Indicates that all files in untracked directories should be included.\n Normally if an entire directory is new, then just the top-level\n directory is included (with a trailing slash on the entry name).\n This flag says to include all of the individual files in the directory\n instead.

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH", + "comments": "

Indicates that the given path should be treated as a literal path,\n and not as a pathspec pattern.

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RECURSE_IGNORED_DIRS", + "comments": "

Indicates that the contents of ignored directories should be included\n in the status. This is like doing git ls-files -o -i --exclude-standard\n with core git.

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX", + "comments": "

Indicates that rename detection should be processed between the head and\n the index and enables the GIT_STATUS_INDEX_RENAMED as a possible status\n flag.

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR", + "comments": "

Indicates that rename detection should be run between the index and the\n working directory and enabled GIT_STATUS_WT_RENAMED as a possible status\n flag.

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_SORT_CASE_SENSITIVELY", + "comments": "

Overrides the native case sensitivity for the file system and forces\n the output to be in case-sensitive order.

\n", + "value": 512 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY", + "comments": "

Overrides the native case sensitivity for the file system and forces\n the output to be in case-insensitive order.

\n", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_RENAMES_FROM_REWRITES", + "comments": "

Iindicates that rename detection should include rewritten files.

\n", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_NO_REFRESH", + "comments": "

Bypasses the default status behavior of doing a "soft" index reload\n (i.e. reloading the index data if the file on disk has been modified\n outside libgit2).

\n", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_UPDATE_INDEX", + "comments": "

Tells libgit2 to refresh the stat cache in the index for files that are\n unchanged but have out of date stat einformation in the index.\n It will result in less work being done on subsequent calls to get status.\n This is mutually exclusive with the NO_REFRESH option.

\n", + "value": 8192 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_UNREADABLE", + "comments": "

Normally files that cannot be opened or read are ignored as\n these are often transient files; this option will return\n unreadable files as GIT_STATUS_WT_UNREADABLE.

\n", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", + "comments": "

Unreadable files will be detected and given the status\n untracked instead of unreadable.

\n", + "value": 32768 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_status_options", + { + "decl": [ + "unsigned int version", + "git_status_show_t show", + "unsigned int flags", + "git_strarray pathspec", + "git_tree * baseline", + "uint16_t rename_threshold" + ], + "type": "struct", + "value": "git_status_options", + "file": "git2/status.h", + "line": 222, + "lineto": 262, + "block": "unsigned int version\ngit_status_show_t show\nunsigned int flags\ngit_strarray pathspec\ngit_tree * baseline\nuint16_t rename_threshold", + "tdef": "typedef", + "description": " Options to control how `git_status_foreach_ext()` will issue callbacks.", + "comments": "

Initialize with GIT_STATUS_OPTIONS_INIT. Alternatively, you can use git_status_options_init.

\n", + "fields": [ + { + "type": "unsigned int", + "name": "version", + "comments": " The struct version; pass `GIT_STATUS_OPTIONS_VERSION`." + }, + { + "type": "git_status_show_t", + "name": "show", + "comments": " The `show` value is one of the `git_status_show_t` constants that\n control which files to scan and in what order. The default is\n `GIT_STATUS_SHOW_INDEX_AND_WORKDIR`." + }, + { + "type": "unsigned int", + "name": "flags", + "comments": " The `flags` value is an OR'ed combination of the\n `git_status_opt_t` values above. The default is\n `GIT_STATUS_OPT_DEFAULTS`, which matches git's default\n behavior." + }, + { + "type": "git_strarray", + "name": "pathspec", + "comments": " The `pathspec` is an array of path patterns to match (using\n fnmatch-style matching), or just an array of paths to match\n exactly if `GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH` is specified\n in the flags." + }, + { + "type": "git_tree *", + "name": "baseline", + "comments": " The `baseline` is the tree to be used for comparison to the\n working directory and index; defaults to HEAD." + }, + { + "type": "uint16_t", + "name": "rename_threshold", + "comments": " Threshold above which similar files will be considered renames.\n This is equivalent to the -M option. Defaults to 50." + } + ], + "used": { + "returns": [], + "needs": [ + "git_status_foreach_ext", + "git_status_list_new", + "git_status_options_init" + ] + } + } + ], + [ + "git_status_show_t", + { + "decl": [ + "GIT_STATUS_SHOW_INDEX_AND_WORKDIR", + "GIT_STATUS_SHOW_INDEX_ONLY", + "GIT_STATUS_SHOW_WORKDIR_ONLY" + ], + "type": "enum", + "file": "git2/status.h", + "line": 73, + "lineto": 91, + "block": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR\nGIT_STATUS_SHOW_INDEX_ONLY\nGIT_STATUS_SHOW_WORKDIR_ONLY", + "tdef": "typedef", + "description": " Select the files on which to report status.", + "comments": "

With git_status_foreach_ext, this will control which changes get callbacks. With git_status_list_new, these will control which changes are included in the list.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR", + "comments": "

The default. This roughly matches git status --porcelain regarding\n which files are included and in what order.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STATUS_SHOW_INDEX_ONLY", + "comments": "

Only gives status based on HEAD to index comparison, not looking at\n working directory changes.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STATUS_SHOW_WORKDIR_ONLY", + "comments": "

Only gives status based on index to working directory comparison,\n not comparing the index to the HEAD.

\n", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_status_t", + { + "decl": [ + "GIT_STATUS_CURRENT", + "GIT_STATUS_INDEX_NEW", + "GIT_STATUS_INDEX_MODIFIED", + "GIT_STATUS_INDEX_DELETED", + "GIT_STATUS_INDEX_RENAMED", + "GIT_STATUS_INDEX_TYPECHANGE", + "GIT_STATUS_WT_NEW", + "GIT_STATUS_WT_MODIFIED", + "GIT_STATUS_WT_DELETED", + "GIT_STATUS_WT_TYPECHANGE", + "GIT_STATUS_WT_RENAMED", + "GIT_STATUS_WT_UNREADABLE", + "GIT_STATUS_IGNORED", + "GIT_STATUS_CONFLICTED" + ], + "type": "enum", + "file": "git2/status.h", + "line": 34, + "lineto": 52, + "block": "GIT_STATUS_CURRENT\nGIT_STATUS_INDEX_NEW\nGIT_STATUS_INDEX_MODIFIED\nGIT_STATUS_INDEX_DELETED\nGIT_STATUS_INDEX_RENAMED\nGIT_STATUS_INDEX_TYPECHANGE\nGIT_STATUS_WT_NEW\nGIT_STATUS_WT_MODIFIED\nGIT_STATUS_WT_DELETED\nGIT_STATUS_WT_TYPECHANGE\nGIT_STATUS_WT_RENAMED\nGIT_STATUS_WT_UNREADABLE\nGIT_STATUS_IGNORED\nGIT_STATUS_CONFLICTED", + "tdef": "typedef", + "description": " Status flags for a single file.", + "comments": "

A combination of these values will be returned to indicate the status of a file. Status compares the working directory, the index, and the current HEAD of the repository. The GIT_STATUS_INDEX set of flags represents the status of file in the index relative to the HEAD, and the GIT_STATUS_WT set of flags represent the status of the file in the working directory relative to the index.

\n", + "fields": [ + { + "type": "int", + "name": "GIT_STATUS_CURRENT", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_NEW", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_MODIFIED", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_DELETED", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_RENAMED", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_STATUS_INDEX_TYPECHANGE", + "comments": "", + "value": 16 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_NEW", + "comments": "", + "value": 128 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_MODIFIED", + "comments": "", + "value": 256 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_DELETED", + "comments": "", + "value": 512 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_TYPECHANGE", + "comments": "", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_RENAMED", + "comments": "", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_STATUS_WT_UNREADABLE", + "comments": "", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_STATUS_IGNORED", + "comments": "", + "value": 16384 + }, + { + "type": "int", + "name": "GIT_STATUS_CONFLICTED", + "comments": "", + "value": 32768 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_strarray", + { + "decl": ["char ** strings", "size_t count"], + "type": "struct", + "value": "git_strarray", + "file": "git2/strarray.h", + "line": 22, + "lineto": 25, + "block": "char ** strings\nsize_t count", + "tdef": "typedef", + "description": " Array of strings ", + "comments": "", + "fields": [ + { "type": "char **", "name": "strings", "comments": "" }, + { "type": "size_t", "name": "count", "comments": "" } + ], + "used": { + "returns": [], + "needs": [ + "git_index_add_all", + "git_index_remove_all", + "git_index_update_all", + "git_pathspec_new", + "git_reference_list", + "git_remote_connect", + "git_remote_download", + "git_remote_fetch", + "git_remote_get_fetch_refspecs", + "git_remote_get_push_refspecs", + "git_remote_list", + "git_remote_push", + "git_remote_rename", + "git_remote_upload", + "git_reset_default", + "git_strarray_copy", + "git_strarray_dispose", + "git_strarray_free", + "git_tag_list", + "git_tag_list_match", + "git_worktree_list" + ] + } + } + ], + [ + "git_stream_t", + { + "decl": ["GIT_STREAM_STANDARD", "GIT_STREAM_TLS"], + "type": "enum", + "file": "git2/sys/stream.h", + "line": 91, + "lineto": 97, + "block": "GIT_STREAM_STANDARD\nGIT_STREAM_TLS", + "tdef": "typedef", + "description": " The type of stream to register.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_STREAM_STANDARD", + "comments": "

A standard (non-TLS) socket.

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_STREAM_TLS", + "comments": "

A TLS-encrypted socket.

\n", + "value": 2 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_submodule", + { + "decl": "git_submodule", + "type": "struct", + "value": "git_submodule", + "file": "git2/types.h", + "line": 267, + "lineto": 267, + "tdef": "typedef", + "description": " Opaque structure representing a submodule.", + "comments": "", + "used": { + "returns": [ + "git_submodule_fetch_recurse_submodules", + "git_submodule_ignore", + "git_submodule_update_strategy" + ], + "needs": [ + "git_submodule_add_finalize", + "git_submodule_add_setup", + "git_submodule_add_to_index", + "git_submodule_branch", + "git_submodule_cb", + "git_submodule_clone", + "git_submodule_dup", + "git_submodule_fetch_recurse_submodules", + "git_submodule_foreach", + "git_submodule_free", + "git_submodule_head_id", + "git_submodule_ignore", + "git_submodule_index_id", + "git_submodule_init", + "git_submodule_location", + "git_submodule_lookup", + "git_submodule_name", + "git_submodule_open", + "git_submodule_owner", + "git_submodule_path", + "git_submodule_reload", + "git_submodule_repo_init", + "git_submodule_set_fetch_recurse_submodules", + "git_submodule_set_ignore", + "git_submodule_set_update", + "git_submodule_status", + "git_submodule_sync", + "git_submodule_update", + "git_submodule_update_options_init", + "git_submodule_update_strategy", + "git_submodule_url", + "git_submodule_wd_id" + ] + } + } + ], + [ + "git_submodule_ignore_t", + { + "decl": [ + "GIT_SUBMODULE_IGNORE_UNSPECIFIED", + "GIT_SUBMODULE_IGNORE_NONE", + "GIT_SUBMODULE_IGNORE_UNTRACKED", + "GIT_SUBMODULE_IGNORE_DIRTY", + "GIT_SUBMODULE_IGNORE_ALL" + ], + "type": "enum", + "file": "git2/types.h", + "line": 331, + "lineto": 338, + "block": "GIT_SUBMODULE_IGNORE_UNSPECIFIED\nGIT_SUBMODULE_IGNORE_NONE\nGIT_SUBMODULE_IGNORE_UNTRACKED\nGIT_SUBMODULE_IGNORE_DIRTY\nGIT_SUBMODULE_IGNORE_ALL", + "tdef": "typedef", + "description": " Submodule ignore values", + "comments": "

These values represent settings for the submodule.$name.ignore configuration value which says how deeply to look at the working directory when getting submodule status.

\n\n

You can override this value in memory on a per-submodule basis with git_submodule_set_ignore() and can write the changed value to disk with git_submodule_save(). If you have overwritten the value, you can revert to the on disk value by using GIT_SUBMODULE_IGNORE_RESET.

\n\n

The values are:

\n\n
    \n
  • GIT_SUBMODULE_IGNORE_UNSPECIFIED: use the submodule's configuration - GIT_SUBMODULE_IGNORE_NONE: don't ignore any change - i.e. even an untracked file, will mark the submodule as dirty. Ignored files are still ignored, of course. - GIT_SUBMODULE_IGNORE_UNTRACKED: ignore untracked files; only changes to tracked files, or the index or the HEAD commit will matter. - GIT_SUBMODULE_IGNORE_DIRTY: ignore changes in the working directory, only considering changes if the HEAD of submodule has moved from the value in the superproject. - GIT_SUBMODULE_IGNORE_ALL: never check if the submodule is dirty - GIT_SUBMODULE_IGNORE_DEFAULT: not used except as static initializer when we don't want any particular ignore rule to be specified.
  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_UNSPECIFIED", + "comments": "

use the submodule's configuration

\n", + "value": -1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_NONE", + "comments": "

any change or untracked == dirty

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_UNTRACKED", + "comments": "

dirty if tracked files change

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_DIRTY", + "comments": "

only dirty if HEAD moved

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_IGNORE_ALL", + "comments": "

never dirty

\n", + "value": 4 + } + ], + "used": { + "returns": ["git_submodule_ignore"], + "needs": ["git_submodule_set_ignore", "git_submodule_status"] + } + } + ], + [ + "git_submodule_recurse_t", + { + "decl": [ + "GIT_SUBMODULE_RECURSE_NO", + "GIT_SUBMODULE_RECURSE_YES", + "GIT_SUBMODULE_RECURSE_ONDEMAND" + ], + "type": "enum", + "file": "git2/types.h", + "line": 350, + "lineto": 354, + "block": "GIT_SUBMODULE_RECURSE_NO\nGIT_SUBMODULE_RECURSE_YES\nGIT_SUBMODULE_RECURSE_ONDEMAND", + "tdef": "typedef", + "description": " Options for submodule recurse.", + "comments": "

Represent the value of submodule.$name.fetchRecurseSubmodules

\n\n
    \n
  • GIT_SUBMODULE_RECURSE_NO - do no recurse into submodules * GIT_SUBMODULE_RECURSE_YES - recurse into submodules * GIT_SUBMODULE_RECURSE_ONDEMAND - recurse into submodules only when commit not already in local clone
  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_SUBMODULE_RECURSE_NO", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_RECURSE_YES", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_RECURSE_ONDEMAND", + "comments": "", + "value": 2 + } + ], + "used": { + "returns": ["git_submodule_fetch_recurse_submodules"], + "needs": ["git_submodule_set_fetch_recurse_submodules"] + } + } + ], + [ + "git_submodule_status_t", + { + "decl": [ + "GIT_SUBMODULE_STATUS_IN_HEAD", + "GIT_SUBMODULE_STATUS_IN_INDEX", + "GIT_SUBMODULE_STATUS_IN_CONFIG", + "GIT_SUBMODULE_STATUS_IN_WD", + "GIT_SUBMODULE_STATUS_INDEX_ADDED", + "GIT_SUBMODULE_STATUS_INDEX_DELETED", + "GIT_SUBMODULE_STATUS_INDEX_MODIFIED", + "GIT_SUBMODULE_STATUS_WD_UNINITIALIZED", + "GIT_SUBMODULE_STATUS_WD_ADDED", + "GIT_SUBMODULE_STATUS_WD_DELETED", + "GIT_SUBMODULE_STATUS_WD_MODIFIED", + "GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED", + "GIT_SUBMODULE_STATUS_WD_WD_MODIFIED", + "GIT_SUBMODULE_STATUS_WD_UNTRACKED" + ], + "type": "enum", + "file": "git2/submodule.h", + "line": 74, + "lineto": 89, + "block": "GIT_SUBMODULE_STATUS_IN_HEAD\nGIT_SUBMODULE_STATUS_IN_INDEX\nGIT_SUBMODULE_STATUS_IN_CONFIG\nGIT_SUBMODULE_STATUS_IN_WD\nGIT_SUBMODULE_STATUS_INDEX_ADDED\nGIT_SUBMODULE_STATUS_INDEX_DELETED\nGIT_SUBMODULE_STATUS_INDEX_MODIFIED\nGIT_SUBMODULE_STATUS_WD_UNINITIALIZED\nGIT_SUBMODULE_STATUS_WD_ADDED\nGIT_SUBMODULE_STATUS_WD_DELETED\nGIT_SUBMODULE_STATUS_WD_MODIFIED\nGIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED\nGIT_SUBMODULE_STATUS_WD_WD_MODIFIED\nGIT_SUBMODULE_STATUS_WD_UNTRACKED", + "tdef": "typedef", + "description": " Return codes for submodule status.", + "comments": "

A combination of these flags will be returned to describe the status of a submodule. Depending on the "ignore" property of the submodule, some of the flags may never be returned because they indicate changes that are supposed to be ignored.

\n\n

Submodule info is contained in 4 places: the HEAD tree, the index, config files (both .git/config and .gitmodules), and the working directory. Any or all of those places might be missing information about the submodule depending on what state the repo is in. We consider all four places to build the combination of status flags.

\n\n

There are four values that are not really status, but give basic info about what sources of submodule data are available. These will be returned even if ignore is set to "ALL".

\n\n
    \n
  • IN_HEAD - superproject head contains submodule * IN_INDEX - superproject index contains submodule * IN_CONFIG - superproject gitmodules has submodule * IN_WD - superproject workdir has submodule
  • \n
\n\n

The following values will be returned so long as ignore is not "ALL".

\n\n
    \n
  • INDEX_ADDED - in index, not in head * INDEX_DELETED - in head, not in index * INDEX_MODIFIED - index and head don't match * WD_UNINITIALIZED - workdir contains empty directory * WD_ADDED - in workdir, not index * WD_DELETED - in index, not workdir * WD_MODIFIED - index and workdir head don't match
  • \n
\n\n

The following can only be returned if ignore is "NONE" or "UNTRACKED".

\n\n
    \n
  • WD_INDEX_MODIFIED - submodule workdir index is dirty * WD_WD_MODIFIED - submodule workdir has modified files
  • \n
\n\n

Lastly, the following will only be returned for ignore "NONE".

\n\n
    \n
  • WD_UNTRACKED - wd contains untracked files
  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_IN_HEAD", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_IN_INDEX", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_IN_CONFIG", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_IN_WD", + "comments": "", + "value": 8 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_INDEX_ADDED", + "comments": "", + "value": 16 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_INDEX_DELETED", + "comments": "", + "value": 32 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_INDEX_MODIFIED", + "comments": "", + "value": 64 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_UNINITIALIZED", + "comments": "", + "value": 128 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_ADDED", + "comments": "", + "value": 256 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_DELETED", + "comments": "", + "value": 512 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_MODIFIED", + "comments": "", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED", + "comments": "", + "value": 2048 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_WD_MODIFIED", + "comments": "", + "value": 4096 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_STATUS_WD_UNTRACKED", + "comments": "", + "value": 8192 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_submodule_update_options", + { + "decl": [ + "unsigned int version", + "git_checkout_options checkout_opts", + "git_fetch_options fetch_opts", + "int allow_fetch" + ], + "type": "struct", + "value": "git_submodule_update_options", + "file": "git2/submodule.h", + "line": 128, + "lineto": 153, + "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint allow_fetch", + "tdef": "typedef", + "description": " Submodule update options structure", + "comments": "

Initialize with GIT_SUBMODULE_UPDATE_OPTIONS_INIT. Alternatively, you can use git_submodule_update_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "git_checkout_options", + "name": "checkout_opts", + "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`. Generally you will want the use\n GIT_CHECKOUT_SAFE to update files in the working\n directory." + }, + { + "type": "git_fetch_options", + "name": "fetch_opts", + "comments": " Options which control the fetch, including callbacks.\n\n The callbacks to use for reporting fetch progress, and for acquiring\n credentials in the event they are needed." + }, + { + "type": "int", + "name": "allow_fetch", + "comments": " Allow fetching from the submodule's default remote if the target\n commit isn't found. Enabled by default." + } + ], + "used": { + "returns": [], + "needs": [ + "git_submodule_clone", + "git_submodule_update", + "git_submodule_update_options_init" + ] + } + } + ], + [ + "git_submodule_update_t", + { + "decl": [ + "GIT_SUBMODULE_UPDATE_CHECKOUT", + "GIT_SUBMODULE_UPDATE_REBASE", + "GIT_SUBMODULE_UPDATE_MERGE", + "GIT_SUBMODULE_UPDATE_NONE", + "GIT_SUBMODULE_UPDATE_DEFAULT" + ], + "type": "enum", + "file": "git2/types.h", + "line": 295, + "lineto": 302, + "block": "GIT_SUBMODULE_UPDATE_CHECKOUT\nGIT_SUBMODULE_UPDATE_REBASE\nGIT_SUBMODULE_UPDATE_MERGE\nGIT_SUBMODULE_UPDATE_NONE\nGIT_SUBMODULE_UPDATE_DEFAULT", + "tdef": "typedef", + "description": " Submodule update values", + "comments": "

These values represent settings for the submodule.$name.update configuration value which says how to handle git submodule update for this submodule. The value is usually set in the ".gitmodules" file and copied to ".git/config" when the submodule is initialized.

\n\n

You can override this setting on a per-submodule basis with git_submodule_set_update() and write the changed value to disk using git_submodule_save(). If you have overwritten the value, you can revert it by passing GIT_SUBMODULE_UPDATE_RESET to the set function.

\n\n

The values are:

\n\n
    \n
  • GIT_SUBMODULE_UPDATE_CHECKOUT: the default; when a submodule is updated, checkout the new detached HEAD to the submodule directory. - GIT_SUBMODULE_UPDATE_REBASE: update by rebasing the current checked out branch onto the commit from the superproject. - GIT_SUBMODULE_UPDATE_MERGE: update by merging the commit in the superproject into the current checkout out branch of the submodule. - GIT_SUBMODULE_UPDATE_NONE: do not update this submodule even when the commit in the superproject is updated. - GIT_SUBMODULE_UPDATE_DEFAULT: not used except as static initializer when we don't want any particular update rule to be specified.
  • \n
\n", + "fields": [ + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_CHECKOUT", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_REBASE", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_MERGE", + "comments": "", + "value": 3 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_NONE", + "comments": "", + "value": 4 + }, + { + "type": "int", + "name": "GIT_SUBMODULE_UPDATE_DEFAULT", + "comments": "", + "value": 0 + } + ], + "used": { + "returns": ["git_submodule_update_strategy"], + "needs": ["git_submodule_set_update"] + } + } + ], + [ + "git_tag", + { + "decl": "git_tag", + "type": "struct", + "value": "git_tag", + "file": "git2/types.h", + "line": 130, + "lineto": 130, + "tdef": "typedef", + "description": " Parsed representation of a tag object. ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_tag_dup", + "git_tag_foreach", + "git_tag_free", + "git_tag_id", + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_tag_message", + "git_tag_name", + "git_tag_owner", + "git_tag_peel", + "git_tag_tagger", + "git_tag_target", + "git_tag_target_id", + "git_tag_target_type" + ] + } + } + ], + [ + "git_time", + { + "decl": ["git_time_t time", "int offset", "char sign"], + "type": "struct", + "value": "git_time", + "file": "git2/types.h", + "line": 175, + "lineto": 179, + "block": "git_time_t time\nint offset\nchar sign", + "tdef": "typedef", + "description": " Time in a signature ", + "comments": "", + "fields": [ + { + "type": "git_time_t", + "name": "time", + "comments": " time in seconds from epoch " + }, + { + "type": "int", + "name": "offset", + "comments": " timezone offset, in minutes " + }, + { + "type": "char", + "name": "sign", + "comments": " indicator for questionable '-0000' offsets in signature " + } + ], + "used": { + "returns": ["git_commit_time"], + "needs": ["git_signature_new"] + } + } + ], + [ + "git_trace_level_t", + { + "decl": [ + "GIT_TRACE_NONE", + "GIT_TRACE_FATAL", + "GIT_TRACE_ERROR", + "GIT_TRACE_WARN", + "GIT_TRACE_INFO", + "GIT_TRACE_DEBUG", + "GIT_TRACE_TRACE" + ], + "type": "enum", + "file": "git2/trace.h", + "line": 26, + "lineto": 47, + "block": "GIT_TRACE_NONE\nGIT_TRACE_FATAL\nGIT_TRACE_ERROR\nGIT_TRACE_WARN\nGIT_TRACE_INFO\nGIT_TRACE_DEBUG\nGIT_TRACE_TRACE", + "tdef": "typedef", + "description": " Available tracing levels. When tracing is set to a particular level,\n callers will be provided tracing at the given level and all lower levels.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_TRACE_NONE", + "comments": "

No tracing will be performed.

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_TRACE_FATAL", + "comments": "

Severe errors that may impact the program's execution

\n", + "value": 1 + }, + { + "type": "int", + "name": "GIT_TRACE_ERROR", + "comments": "

Errors that do not impact the program's execution

\n", + "value": 2 + }, + { + "type": "int", + "name": "GIT_TRACE_WARN", + "comments": "

Warnings that suggest abnormal data

\n", + "value": 3 + }, + { + "type": "int", + "name": "GIT_TRACE_INFO", + "comments": "

Informational messages about program execution

\n", + "value": 4 + }, + { + "type": "int", + "name": "GIT_TRACE_DEBUG", + "comments": "

Detailed data that allows for debugging

\n", + "value": 5 + }, + { + "type": "int", + "name": "GIT_TRACE_TRACE", + "comments": "

Exceptionally detailed debugging data

\n", + "value": 6 + } + ], + "used": { "returns": [], "needs": ["git_trace_cb", "git_trace_set"] } + } + ], + [ + "git_transaction", + { + "decl": "git_transaction", + "type": "struct", + "value": "git_transaction", + "file": "git2/types.h", + "line": 195, + "lineto": 195, + "tdef": "typedef", + "description": " Transactional interface to references ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_config_lock", + "git_transaction_commit", + "git_transaction_free", + "git_transaction_lock_ref", + "git_transaction_new", + "git_transaction_remove", + "git_transaction_set_reflog", + "git_transaction_set_symbolic_target", + "git_transaction_set_target" + ] + } + } + ], + [ + "git_transport", + { + "decl": "git_transport", + "type": "struct", + "value": "git_transport", + "file": "git2/types.h", + "line": 247, + "lineto": 247, + "tdef": "typedef", + "description": " Interface which represents a transport to communicate with a\n remote.", + "comments": "", + "used": { "returns": [], "needs": ["git_transport_cb"] } + } + ], + [ + "git_tree", + { + "decl": "git_tree", + "type": "struct", + "value": "git_tree", + "file": "git2/types.h", + "line": 142, + "lineto": 142, + "tdef": "typedef", + "description": " Representation of a tree object. ", + "comments": "", + "used": { + "returns": [ + "git_tree_entry_byid", + "git_tree_entry_byindex", + "git_tree_entry_byname", + "git_treebuilder_get" + ], + "needs": [ + "git_apply_to_tree", + "git_commit_amend", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_cb", + "git_commit_create_v", + "git_commit_tree", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index", + "git_index_read_tree", + "git_merge_trees", + "git_pathspec_match_tree", + "git_tree_create_updated", + "git_tree_dup", + "git_tree_entry_byid", + "git_tree_entry_byindex", + "git_tree_entry_byname", + "git_tree_entry_bypath", + "git_tree_entry_cmp", + "git_tree_entry_dup", + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw", + "git_tree_entry_free", + "git_tree_entry_id", + "git_tree_entry_name", + "git_tree_entry_to_object", + "git_tree_entry_type", + "git_tree_entrycount", + "git_tree_free", + "git_tree_id", + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_tree_owner", + "git_tree_walk", + "git_treebuilder_clear", + "git_treebuilder_entrycount", + "git_treebuilder_filter", + "git_treebuilder_filter_cb", + "git_treebuilder_free", + "git_treebuilder_get", + "git_treebuilder_insert", + "git_treebuilder_new", + "git_treebuilder_remove", + "git_treebuilder_write", + "git_treebuilder_write_with_buffer", + "git_treewalk_cb" + ] + } + } + ], + [ + "git_tree_entry", + { + "decl": "git_tree_entry", + "type": "struct", + "value": "git_tree_entry", + "file": "git2/types.h", + "line": 139, + "lineto": 139, + "tdef": "typedef", + "description": " Representation of each one of the entries in a tree object. ", + "comments": "", + "used": { + "returns": [ + "git_tree_entry_byid", + "git_tree_entry_byindex", + "git_tree_entry_byname", + "git_treebuilder_get" + ], + "needs": [ + "git_tree_entry_bypath", + "git_tree_entry_cmp", + "git_tree_entry_dup", + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw", + "git_tree_entry_free", + "git_tree_entry_id", + "git_tree_entry_name", + "git_tree_entry_to_object", + "git_tree_entry_type", + "git_treebuilder_filter_cb", + "git_treebuilder_insert", + "git_treewalk_cb" + ] + } + } + ], + [ + "git_tree_update", + { + "decl": [ + "git_tree_update_t action", + "git_oid id", + "git_filemode_t filemode", + "const char * path" + ], + "type": "struct", + "value": "git_tree_update", + "file": "git2/tree.h", + "line": 438, + "lineto": 447, + "block": "git_tree_update_t action\ngit_oid id\ngit_filemode_t filemode\nconst char * path", + "tdef": "typedef", + "description": " An action to perform during the update of a tree", + "comments": "", + "fields": [ + { + "type": "git_tree_update_t", + "name": "action", + "comments": " Update action. If it's an removal, only the path is looked at " + }, + { "type": "git_oid", "name": "id", "comments": " The entry's id " }, + { + "type": "git_filemode_t", + "name": "filemode", + "comments": " The filemode/kind of object " + }, + { + "type": "const char *", + "name": "path", + "comments": " The full path from the root tree " + } + ], + "used": { "returns": [], "needs": ["git_tree_create_updated"] } + } + ], + [ + "git_tree_update_t", + { + "decl": ["GIT_TREE_UPDATE_UPSERT", "GIT_TREE_UPDATE_REMOVE"], + "type": "enum", + "file": "git2/tree.h", + "line": 428, + "lineto": 433, + "block": "GIT_TREE_UPDATE_UPSERT\nGIT_TREE_UPDATE_REMOVE", + "tdef": "typedef", + "description": " The kind of update to perform", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_TREE_UPDATE_UPSERT", + "comments": "

Update or insert an entry at the specified path

\n", + "value": 0 + }, + { + "type": "int", + "name": "GIT_TREE_UPDATE_REMOVE", + "comments": "

Remove an entry from the specified path

\n", + "value": 1 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_treebuilder", + { + "decl": "git_treebuilder", + "type": "struct", + "value": "git_treebuilder", + "file": "git2/types.h", + "line": 145, + "lineto": 145, + "tdef": "typedef", + "description": " Constructor for in-memory trees ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_treebuilder_clear", + "git_treebuilder_entrycount", + "git_treebuilder_filter", + "git_treebuilder_free", + "git_treebuilder_get", + "git_treebuilder_insert", + "git_treebuilder_new", + "git_treebuilder_remove", + "git_treebuilder_write", + "git_treebuilder_write_with_buffer" + ] + } + } + ], + [ + "git_treewalk_mode", + { + "decl": ["GIT_TREEWALK_PRE", "GIT_TREEWALK_POST"], + "type": "enum", + "file": "git2/tree.h", + "line": 387, + "lineto": 390, + "block": "GIT_TREEWALK_PRE\nGIT_TREEWALK_POST", + "tdef": "typedef", + "description": " Tree traversal modes ", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_TREEWALK_PRE", + "comments": "", + "value": 0 + }, + { + "type": "int", + "name": "GIT_TREEWALK_POST", + "comments": "", + "value": 1 + } + ], + "used": { "returns": [], "needs": ["git_tree_walk"] } + } + ], + [ + "git_worktree", + { + "decl": "git_worktree", + "type": "struct", + "value": "git_worktree", + "file": "git2/types.h", + "line": 121, + "lineto": 121, + "tdef": "typedef", + "description": " Representation of a working tree ", + "comments": "", + "used": { + "returns": [], + "needs": [ + "git_repository_open_from_worktree", + "git_worktree_add", + "git_worktree_add_options_init", + "git_worktree_free", + "git_worktree_is_locked", + "git_worktree_is_prunable", + "git_worktree_lock", + "git_worktree_lookup", + "git_worktree_name", + "git_worktree_open_from_repository", + "git_worktree_path", + "git_worktree_prune", + "git_worktree_prune_options_init", + "git_worktree_unlock", + "git_worktree_validate" + ] + } + } + ], + [ + "git_worktree_add_options", + { + "decl": [ + "unsigned int version", + "int lock", + "int checkout_existing", + "git_reference * ref", + "git_checkout_options checkout_options" + ], + "type": "struct", + "value": "git_worktree_add_options", + "file": "git2/worktree.h", + "line": 86, + "lineto": 97, + "block": "unsigned int version\nint lock\nint checkout_existing\ngit_reference * ref\ngit_checkout_options checkout_options", + "tdef": "typedef", + "description": " Worktree add options structure", + "comments": "

Initialize with GIT_WORKTREE_ADD_OPTIONS_INIT. Alternatively, you can use git_worktree_add_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "int", + "name": "lock", + "comments": " lock newly created worktree " + }, + { + "type": "int", + "name": "checkout_existing", + "comments": " allow checkout of existing branch matching worktree name " + }, + { + "type": "git_reference *", + "name": "ref", + "comments": " reference to use for the new worktree HEAD " + }, + { + "type": "git_checkout_options", + "name": "checkout_options", + "comments": " Options for the checkout." + } + ], + "used": { + "returns": [], + "needs": ["git_worktree_add", "git_worktree_add_options_init"] + } + } + ], + [ + "git_worktree_prune_options", + { + "decl": ["unsigned int version", "uint32_t flags"], + "type": "struct", + "value": "git_worktree_prune_options", + "file": "git2/worktree.h", + "line": 207, + "lineto": 212, + "block": "unsigned int version\nuint32_t flags", + "tdef": "typedef", + "description": " Worktree prune options structure", + "comments": "

Initialize with GIT_WORKTREE_PRUNE_OPTIONS_INIT. Alternatively, you can use git_worktree_prune_options_init.

\n", + "fields": [ + { "type": "unsigned int", "name": "version", "comments": "" }, + { + "type": "uint32_t", + "name": "flags", + "comments": " A combination of `git_worktree_prune_t` " + } + ], + "used": { + "returns": [], + "needs": [ + "git_worktree_is_prunable", + "git_worktree_prune", + "git_worktree_prune_options_init" + ] + } + } + ], + [ + "git_worktree_prune_t", + { + "decl": [ + "GIT_WORKTREE_PRUNE_VALID", + "GIT_WORKTREE_PRUNE_LOCKED", + "GIT_WORKTREE_PRUNE_WORKING_TREE" + ], + "type": "enum", + "file": "git2/worktree.h", + "line": 191, + "lineto": 198, + "block": "GIT_WORKTREE_PRUNE_VALID\nGIT_WORKTREE_PRUNE_LOCKED\nGIT_WORKTREE_PRUNE_WORKING_TREE", + "tdef": "typedef", + "description": " Flags which can be passed to git_worktree_prune to alter its\n behavior.", + "comments": "", + "fields": [ + { + "type": "int", + "name": "GIT_WORKTREE_PRUNE_VALID", + "comments": "", + "value": 1 + }, + { + "type": "int", + "name": "GIT_WORKTREE_PRUNE_LOCKED", + "comments": "", + "value": 2 + }, + { + "type": "int", + "name": "GIT_WORKTREE_PRUNE_WORKING_TREE", + "comments": "", + "value": 4 + } + ], + "used": { "returns": [], "needs": [] } + } + ], + [ + "git_writestream", + { + "decl": [ + "int (*)(git_writestream *, const char *, size_t) write", + "int (*)(git_writestream *) close", + "void (*)(git_writestream *) free" + ], + "type": "struct", + "value": "git_writestream", + "file": "git2/types.h", + "line": 359, + "lineto": 363, + "tdef": null, + "description": " A type to write in a streaming fashion, for example, for filters. ", + "comments": "", + "fields": [ + { + "type": "int (*)(git_writestream *, const char *, size_t)", + "name": "write", "comments": "" - }, - "git_transport_message_cb": { - "type": "callback", - "file": "git2/transport.h", - "line": 34, - "lineto": 34, - "args": [ - { - "name": "str", - "type": "const char *", - "comment": "The message from the transport" - }, - { - "name": "len", - "type": "int", - "comment": "The length of the message" - }, - { - "name": "payload", - "type": "void *", - "comment": "Payload provided by the caller" - } - ], - "argline": "const char *str, int len, void *payload", - "sig": "const char *::int::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for messages received by the transport.

\n", - "comments": "

Return a negative value to cancel the network operation.

\n" - }, - "git_transport_cb": { - "type": "callback", - "file": "git2/transport.h", - "line": 37, - "lineto": 37, - "args": [ - { - "name": "out", - "type": "git_transport **", - "comment": null - }, - { - "name": "owner", - "type": "git_remote *", - "comment": null - }, - { - "name": "param", - "type": "void *", - "comment": null - } - ], - "argline": "git_transport **out, git_remote *owner, void *param", - "sig": "git_transport **::git_remote *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Signature of a function which creates a transport

\n", + }, + { + "type": "int (*)(git_writestream *)", + "name": "close", "comments": "" - }, - "git_treebuilder_filter_cb": { - "type": "callback", - "file": "git2/tree.h", - "line": 349, - "lineto": 350, - "args": [ - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const git_tree_entry *entry, void *payload", - "sig": "const git_tree_entry *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for git_treebuilder_filter

\n", - "comments": "

The return value is treated as a boolean, with zero indicating that the entry should be left alone and any non-zero value meaning that the entry should be removed from the treebuilder list (i.e. filtered out).

\n" - }, - "git_treewalk_cb": { - "type": "callback", - "file": "git2/tree.h", - "line": 383, - "lineto": 384, - "args": [ - { - "name": "root", - "type": "const char *", - "comment": null - }, - { - "name": "entry", - "type": "const git_tree_entry *", - "comment": null - }, - { - "name": "payload", - "type": "void *", - "comment": null - } - ], - "argline": "const char *root, const git_tree_entry *entry, void *payload", - "sig": "const char *::const git_tree_entry *::void *", - "return": { - "type": "int", - "comment": null - }, - "description": "

Callback for the tree traversal method

\n", + }, + { + "type": "void (*)(git_writestream *)", + "name": "free", "comments": "" + } + ], + "block": "int (*)(git_writestream *, const char *, size_t) write\nint (*)(git_writestream *) close\nvoid (*)(git_writestream *) free", + "used": { + "returns": [], + "needs": [ + "git_blob_create_from_stream", + "git_blob_create_from_stream_commit", + "git_filter_list_stream_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_data", + "git_filter_list_stream_file" + ] } - }, - "globals": {}, - "types": [ - [ - "git_annotated_commit", - { - "decl": "git_annotated_commit", - "type": "struct", - "value": "git_annotated_commit", - "file": "git2/types.h", - "line": 198, - "lineto": 198, - "tdef": "typedef", - "description": " Annotated commits, the input to merge and rebase. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_annotated_commit_free", - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_from_ref", - "git_annotated_commit_from_revspec", - "git_annotated_commit_id", - "git_annotated_commit_lookup", - "git_annotated_commit_ref", - "git_branch_create_from_annotated", - "git_merge", - "git_merge_analysis", - "git_merge_analysis_for_ref", - "git_rebase_init", - "git_repository_set_head_detached_from_annotated", - "git_reset_from_annotated" - ] - } - } - ], - [ - "git_apply_flags_t", - { - "decl": [ - "GIT_APPLY_CHECK" - ], - "type": "enum", - "file": "git2/apply.h", - "line": 61, - "lineto": 67, - "block": "GIT_APPLY_CHECK", - "tdef": "typedef", - "description": " Flags controlling the behavior of git_apply ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_APPLY_CHECK", - "comments": "

Don't actually make changes, just test that the patch applies.\n This is the equivalent of git apply --check.

\n", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_apply_location_t", - { - "decl": [ - "GIT_APPLY_LOCATION_WORKDIR", - "GIT_APPLY_LOCATION_INDEX", - "GIT_APPLY_LOCATION_BOTH" - ], - "type": "enum", - "file": "git2/apply.h", - "line": 127, - "lineto": 145, - "block": "GIT_APPLY_LOCATION_WORKDIR\nGIT_APPLY_LOCATION_INDEX\nGIT_APPLY_LOCATION_BOTH", - "tdef": "typedef", - "description": " Possible application locations for git_apply ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_APPLY_LOCATION_WORKDIR", - "comments": "

Apply the patch to the workdir, leaving the index untouched.\n This is the equivalent of git apply with no location argument.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_APPLY_LOCATION_INDEX", - "comments": "

Apply the patch to the index, leaving the working directory\n untouched. This is the equivalent of git apply --cached.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_APPLY_LOCATION_BOTH", - "comments": "

Apply the patch to both the working directory and the index.\n This is the equivalent of git apply --index.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [ - "git_apply" - ] - } - } - ], - [ - "git_apply_options", - { - "decl": [ - "unsigned int version", - "git_apply_delta_cb delta_cb", - "git_apply_hunk_cb hunk_cb", - "void * payload", - "unsigned int flags" - ], - "type": "struct", - "value": "git_apply_options", - "file": "git2/apply.h", - "line": 77, - "lineto": 91, - "block": "unsigned int version\ngit_apply_delta_cb delta_cb\ngit_apply_hunk_cb hunk_cb\nvoid * payload\nunsigned int flags", - "tdef": "typedef", - "description": " Apply options structure", - "comments": "

Initialize with GIT_APPLY_OPTIONS_INIT. Alternatively, you can use git_apply_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " The version " - }, - { - "type": "git_apply_delta_cb", - "name": "delta_cb", - "comments": " When applying a patch, callback that will be made per delta (file). " - }, - { - "type": "git_apply_hunk_cb", - "name": "hunk_cb", - "comments": " When applying a patch, callback that will be made per hunk. " - }, - { - "type": "void *", - "name": "payload", - "comments": " Payload passed to both delta_cb \n&\n hunk_cb. " - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " Bitmask of git_apply_flags_t " - } - ], - "used": { - "returns": [], - "needs": [ - "git_apply", - "git_apply_options_init", - "git_apply_to_tree" - ] - } - } - ], - [ - "git_attr_options", - { - "decl": [ - "unsigned int version", - "unsigned int flags", - "git_oid * commit_id", - "git_oid attr_commit_id" - ], - "type": "struct", - "value": "git_attr_options", - "file": "git2/attr.h", - "line": 144, - "lineto": 161, - "block": "unsigned int version\nunsigned int flags\ngit_oid * commit_id\ngit_oid attr_commit_id", - "tdef": "typedef", - "description": " An options structure for querying attributes.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " A combination of GIT_ATTR_CHECK flags " - }, - { - "type": "git_oid *", - "name": "commit_id", - "comments": "" - }, - { - "type": "git_oid", - "name": "attr_commit_id", - "comments": " The commit to load attributes from, when\n `GIT_ATTR_CHECK_INCLUDE_COMMIT` is specified." - } - ], - "used": { - "returns": [], - "needs": [ - "git_attr_foreach_ext", - "git_attr_get_ext", - "git_attr_get_many_ext" - ] - } - } - ], - [ - "git_attr_value_t", - { - "decl": [ - "GIT_ATTR_VALUE_UNSPECIFIED", - "GIT_ATTR_VALUE_TRUE", - "GIT_ATTR_VALUE_FALSE", - "GIT_ATTR_VALUE_STRING" - ], - "type": "enum", - "file": "git2/attr.h", - "line": 82, - "lineto": 87, - "block": "GIT_ATTR_VALUE_UNSPECIFIED\nGIT_ATTR_VALUE_TRUE\nGIT_ATTR_VALUE_FALSE\nGIT_ATTR_VALUE_STRING", - "tdef": "typedef", - "description": " Possible states for an attribute", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_ATTR_VALUE_UNSPECIFIED", - "comments": "

The attribute has been left unspecified

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_ATTR_VALUE_TRUE", - "comments": "

The attribute has been set

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_ATTR_VALUE_FALSE", - "comments": "

The attribute has been unset

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_ATTR_VALUE_STRING", - "comments": "

This attribute has a value

\n", - "value": 3 - } - ], - "used": { - "returns": [ - "git_attr_value" - ], - "needs": [] - } - } - ], - [ - "git_blame", - { - "decl": "git_blame", - "type": "struct", - "value": "git_blame", - "file": "git2/blame.h", - "line": 202, - "lineto": 202, - "tdef": "typedef", - "description": " Opaque structure to hold blame results ", - "comments": "", - "used": { - "returns": [ - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline" - ], - "needs": [ - "git_blame_buffer", - "git_blame_file", - "git_blame_free", - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline", - "git_blame_get_hunk_count", - "git_blame_init_options", - "git_blame_options_init" - ] - } - } - ], - [ - "git_blame_flag_t", - { - "decl": [ - "GIT_BLAME_NORMAL", - "GIT_BLAME_TRACK_COPIES_SAME_FILE", - "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES", - "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES", - "GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES", - "GIT_BLAME_FIRST_PARENT", - "GIT_BLAME_USE_MAILMAP", - "GIT_BLAME_IGNORE_WHITESPACE" - ], - "type": "enum", - "file": "git2/blame.h", - "line": 26, - "lineto": 77, - "block": "GIT_BLAME_NORMAL\nGIT_BLAME_TRACK_COPIES_SAME_FILE\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES\nGIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES\nGIT_BLAME_FIRST_PARENT\nGIT_BLAME_USE_MAILMAP\nGIT_BLAME_IGNORE_WHITESPACE", - "tdef": "typedef", - "description": " Flags for indicating option behavior for git_blame APIs.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_BLAME_NORMAL", - "comments": "

Normal blame, the default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_BLAME_TRACK_COPIES_SAME_FILE", - "comments": "

Track lines that have moved within a file (like git blame -M).

\n\n

This is not yet implemented and reserved for future use.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES", - "comments": "

Track lines that have moved across files in the same commit\n (like git blame -C).

\n\n

This is not yet implemented and reserved for future use.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES", - "comments": "

Track lines that have been copied from another file that exists\n in the same commit (like git blame -CC). Implies SAME_FILE.

\n\n

This is not yet implemented and reserved for future use.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES", - "comments": "

Track lines that have been copied from another file that exists in\n any commit (like git blame -CCC). Implies SAME_COMMIT_COPIES.

\n\n

This is not yet implemented and reserved for future use.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_BLAME_FIRST_PARENT", - "comments": "

Restrict the search of commits to those reachable following only\n the first parents.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_BLAME_USE_MAILMAP", - "comments": "

Use mailmap file to map author and committer names and email\n addresses to canonical real names and email addresses. The\n mailmap will be read from the working directory, or HEAD in a\n bare repository.

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_BLAME_IGNORE_WHITESPACE", - "comments": "

Ignore whitespace differences

\n", - "value": 64 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_blame_hunk", - { - "decl": [ - "size_t lines_in_hunk", - "git_oid final_commit_id", - "size_t final_start_line_number", - "git_signature * final_signature", - "git_oid orig_commit_id", - "const char * orig_path", - "size_t orig_start_line_number", - "git_signature * orig_signature", - "char boundary" - ], - "type": "struct", - "value": "git_blame_hunk", - "file": "git2/blame.h", - "line": 145, - "lineto": 198, - "block": "size_t lines_in_hunk\ngit_oid final_commit_id\nsize_t final_start_line_number\ngit_signature * final_signature\ngit_oid orig_commit_id\nconst char * orig_path\nsize_t orig_start_line_number\ngit_signature * orig_signature\nchar boundary", - "tdef": "typedef", - "description": " Structure that represents a blame hunk.", - "comments": "", - "fields": [ - { - "type": "size_t", - "name": "lines_in_hunk", - "comments": " The number of lines in this hunk." - }, - { - "type": "git_oid", - "name": "final_commit_id", - "comments": " The OID of the commit where this line was last changed." - }, - { - "type": "size_t", - "name": "final_start_line_number", - "comments": " The 1-based line number where this hunk begins, in the final version\n of the file." - }, - { - "type": "git_signature *", - "name": "final_signature", - "comments": " The author of `final_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." - }, - { - "type": "git_oid", - "name": "orig_commit_id", - "comments": " The OID of the commit where this hunk was found.\n This will usually be the same as `final_commit_id`, except when\n `GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES` has been specified." - }, - { - "type": "const char *", - "name": "orig_path", - "comments": " The path to the file where this hunk originated, as of the commit\n specified by `orig_commit_id`." - }, - { - "type": "size_t", - "name": "orig_start_line_number", - "comments": " The 1-based line number where this hunk begins in the file named by\n `orig_path` in the commit specified by `orig_commit_id`." - }, - { - "type": "git_signature *", - "name": "orig_signature", - "comments": " The author of `orig_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." - }, - { - "type": "char", - "name": "boundary", - "comments": " The 1 iff the hunk has been tracked to a boundary commit (the root,\n or the commit specified in git_blame_options.oldest_commit)" - } - ], - "used": { - "returns": [ - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline" - ], - "needs": [] - } - } - ], - [ - "git_blame_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "uint16_t min_match_characters", - "git_oid newest_commit", - "git_oid oldest_commit", - "size_t min_line", - "size_t max_line" - ], - "type": "struct", - "value": "git_blame_options", - "file": "git2/blame.h", - "line": 86, - "lineto": 123, - "block": "unsigned int version\nuint32_t flags\nuint16_t min_match_characters\ngit_oid newest_commit\ngit_oid oldest_commit\nsize_t min_line\nsize_t max_line", - "tdef": "typedef", - "description": " Blame options structure", - "comments": "

Initialize with GIT_BLAME_OPTIONS_INIT. Alternatively, you can use git_blame_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of `git_blame_flag_t` " - }, - { - "type": "uint16_t", - "name": "min_match_characters", - "comments": " The lower bound on the number of alphanumeric characters that\n must be detected as moving/copying within a file for it to\n associate those lines with the parent commit. The default value\n is 20.\n\n This value only takes effect if any of the `GIT_BLAME_TRACK_COPIES_*`\n flags are specified." - }, - { - "type": "git_oid", - "name": "newest_commit", - "comments": " The id of the newest commit to consider. The default is HEAD. " - }, - { - "type": "git_oid", - "name": "oldest_commit", - "comments": " The id of the oldest commit to consider.\n The default is the first commit encountered with a NULL parent." - }, - { - "type": "size_t", - "name": "min_line", - "comments": " The first line in the file to blame.\n The default is 1 (line numbers start with 1)." - }, - { - "type": "size_t", - "name": "max_line", - "comments": " The last line in the file to blame.\n The default is the last line of the file." - } - ], - "used": { - "returns": [], - "needs": [ - "git_blame_file", - "git_blame_init_options", - "git_blame_options_init" - ] - } - } - ], - [ - "git_blob", - { - "decl": "git_blob", - "type": "struct", - "value": "git_blob", - "file": "git2/types.h", - "line": 133, - "lineto": 133, - "tdef": "typedef", - "description": " In-memory representation of a blob object. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_blob_dup", - "git_blob_filter", - "git_blob_filter_options_init", - "git_blob_filtered_content", - "git_blob_free", - "git_blob_id", - "git_blob_is_binary", - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_blob_owner", - "git_blob_rawcontent", - "git_blob_rawsize", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_filter_list_apply_to_blob", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_blob", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs" - ] - } - } - ], - [ - "git_blob_filter_flag_t", - { - "decl": [ - "GIT_BLOB_FILTER_CHECK_FOR_BINARY", - "GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES", - "GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD", - "GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT" - ], - "type": "enum", - "file": "git2/blob.h", - "line": 102, - "lineto": 123, - "block": "GIT_BLOB_FILTER_CHECK_FOR_BINARY\nGIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", - "tdef": "typedef", - "description": " Flags to control the functionality of `git_blob_filter`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_BLOB_FILTER_CHECK_FOR_BINARY", - "comments": "

When set, filters will not be applied to binary files.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES", - "comments": "

When set, filters will not load configuration from the\n system-wide gitattributes in /etc (or system equivalent).

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD", - "comments": "

When set, filters will be loaded from a .gitattributes file\n in the HEAD commit.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", - "comments": "

When set, filters will be loaded from a .gitattributes file\n in the specified commit.

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_blob_filter_options", - { - "decl": [ - "int version", - "uint32_t flags", - "git_oid * commit_id", - "git_oid attr_commit_id" - ], - "type": "struct", - "value": "git_blob_filter_options", - "file": "git2/blob.h", - "line": 132, - "lineto": 149, - "block": "int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", - "tdef": "typedef", - "description": " The options used when applying filter options to a file.", - "comments": "

Initialize with GIT_BLOB_FILTER_OPTIONS_INIT. Alternatively, you can use git_blob_filter_options_init.

\n", - "fields": [ - { - "type": "int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " Flags to control the filtering process, see `git_blob_filter_flag_t` above " - }, - { - "type": "git_oid *", - "name": "commit_id", - "comments": "" - }, - { - "type": "git_oid", - "name": "attr_commit_id", - "comments": " The commit to load attributes from, when\n `GIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT` is specified." - } - ], - "used": { - "returns": [], - "needs": [ - "git_blob_filter", - "git_blob_filter_options_init" - ] - } - } - ], - [ - "git_branch_iterator", - { - "decl": "git_branch_iterator", - "type": "struct", - "value": "git_branch_iterator", - "file": "git2/branch.h", - "line": 90, - "lineto": 90, - "tdef": "typedef", - "description": " Iterator type for branches ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_branch_iterator_free", - "git_branch_iterator_new", - "git_branch_next" - ] - } - } - ], - [ - "git_branch_t", - { - "decl": [ - "GIT_BRANCH_LOCAL", - "GIT_BRANCH_REMOTE", - "GIT_BRANCH_ALL" - ], - "type": "enum", - "file": "git2/types.h", - "line": 215, - "lineto": 219, - "block": "GIT_BRANCH_LOCAL\nGIT_BRANCH_REMOTE\nGIT_BRANCH_ALL", - "tdef": "typedef", - "description": " Basic type of any Git branch. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_BRANCH_LOCAL", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_BRANCH_REMOTE", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_BRANCH_ALL", - "comments": "", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [ - "git_branch_iterator_new", - "git_branch_lookup", - "git_branch_next" - ] - } - } - ], - [ - "git_buf", - { - "decl": [ - "char * ptr", - "size_t reserved", - "size_t size" - ], - "type": "struct", - "value": "git_buf", - "file": "git2/buffer.h", - "line": 33, - "lineto": 52, - "block": "char * ptr\nsize_t reserved\nsize_t size", - "tdef": "typedef", - "description": " A data buffer for exporting data from libgit2", - "comments": "

Sometimes libgit2 wants to return an allocated data buffer to the caller and have the caller take responsibility for freeing that memory. To make ownership clear in these cases, libgit2 uses git_buf to return this data. Callers should use git_buf_dispose() to release the memory when they are done.

\n\n

A git_buf contains a pointer to a NUL-terminated C string, and the length of the string (not including the NUL terminator).

\n", - "fields": [ - { - "type": "char *", - "name": "ptr", - "comments": " The buffer contents. `ptr` points to the start of the buffer\n being returned. The buffer's length (in bytes) is specified\n by the `size` member of the structure, and contains a NUL\n terminator at position `(size + 1)`." - }, - { - "type": "size_t", - "name": "reserved", - "comments": " This field is reserved and unused." - }, - { - "type": "size_t", - "name": "size", - "comments": " The length (in bytes) of the buffer pointed to by `ptr`,\n not including a NUL terminator." - } - ], - "used": { - "returns": [], - "needs": [ - "git_blob_filter", - "git_blob_filtered_content", - "git_branch_remote_name", - "git_branch_upstream_merge", - "git_branch_upstream_name", - "git_branch_upstream_remote", - "git_buf_contains_nul", - "git_buf_dispose", - "git_buf_free", - "git_buf_grow", - "git_buf_is_binary", - "git_buf_set", - "git_commit_create_buffer", - "git_commit_extract_signature", - "git_commit_header_field", - "git_commit_signing_cb", - "git_config_find_global", - "git_config_find_programdata", - "git_config_find_system", - "git_config_find_xdg", - "git_config_get_path", - "git_config_get_string_buf", - "git_config_parse_path", - "git_describe_format", - "git_diff_commit_as_email", - "git_diff_format_email", - "git_diff_stats_to_buf", - "git_diff_to_buf", - "git_filter_list_apply_to_blob", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_data", - "git_filter_list_apply_to_file", - "git_filter_list_stream_data", - "git_message_prettify", - "git_note_default_ref", - "git_object_short_id", - "git_packbuilder_write_buf", - "git_patch_to_buf", - "git_refspec_rtransform", - "git_refspec_transform", - "git_remote_default_branch", - "git_repository_discover", - "git_repository_item_path", - "git_repository_message", - "git_submodule_resolve_url", - "git_treebuilder_write_with_buffer", - "git_url_resolve_cb", - "git_worktree_is_locked" - ] - } - } - ], - [ - "git_cert", - { - "decl": "git_cert", - "type": "struct", - "value": "git_cert", - "file": "git2/types.h", - "line": 262, - "lineto": 262, - "block": "git_cert_t cert_type", - "tdef": "typedef", - "description": " Parent type for `git_cert_hostkey` and `git_cert_x509`.", - "comments": "", - "fields": [ - { - "type": "git_cert_t", - "name": "cert_type", - "comments": " Type of certificate. A `GIT_CERT_` value." - } - ], - "used": { - "returns": [], - "needs": [ - "git_transport_certificate_check_cb" - ] - } - } - ], - [ - "git_cert_hostkey", - { - "decl": [ - "git_cert parent", - "git_cert_ssh_t type", - "unsigned char [16] hash_md5", - "unsigned char [20] hash_sha1", - "unsigned char [32] hash_sha256", - "git_cert_ssh_raw_type_t raw_type", - "const char * hostkey", - "size_t hostkey_len" - ], - "type": "struct", - "value": "git_cert_hostkey", - "file": "git2/cert.h", - "line": 108, - "lineto": 151, - "block": "git_cert parent\ngit_cert_ssh_t type\nunsigned char [16] hash_md5\nunsigned char [20] hash_sha1\nunsigned char [32] hash_sha256\ngit_cert_ssh_raw_type_t raw_type\nconst char * hostkey\nsize_t hostkey_len", - "tdef": "typedef", - "description": " Hostkey information taken from libssh2", - "comments": "", - "fields": [ - { - "type": "git_cert", - "name": "parent", - "comments": " The parent cert " - }, - { - "type": "git_cert_ssh_t", - "name": "type", - "comments": " A bitmask containing the available fields." - }, - { - "type": "unsigned char [16]", - "name": "hash_md5", - "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_MD5` set, this will\n have the MD5 hash of the hostkey." - }, - { - "type": "unsigned char [20]", - "name": "hash_sha1", - "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_SHA1` set, this will\n have the SHA-1 hash of the hostkey." - }, - { - "type": "unsigned char [32]", - "name": "hash_sha256", - "comments": " Hostkey hash. If `type` has `GIT_CERT_SSH_SHA256` set, this will\n have the SHA-256 hash of the hostkey." - }, - { - "type": "git_cert_ssh_raw_type_t", - "name": "raw_type", - "comments": " Raw hostkey type. If `type` has `GIT_CERT_SSH_RAW` set, this will\n have the type of the raw hostkey." - }, - { - "type": "const char *", - "name": "hostkey", - "comments": " Pointer to the raw hostkey. If `type` has `GIT_CERT_SSH_RAW` set,\n this will have the raw contents of the hostkey." - }, - { - "type": "size_t", - "name": "hostkey_len", - "comments": " Raw hostkey length. If `type` has `GIT_CERT_SSH_RAW` set, this will\n have the length of the raw contents of the hostkey." - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_cert_ssh_t", - { - "decl": [ - "GIT_CERT_SSH_MD5", - "GIT_CERT_SSH_SHA1", - "GIT_CERT_SSH_SHA256", - "GIT_CERT_SSH_RAW" - ], - "type": "enum", - "file": "git2/cert.h", - "line": 77, - "lineto": 86, - "block": "GIT_CERT_SSH_MD5\nGIT_CERT_SSH_SHA1\nGIT_CERT_SSH_SHA256\nGIT_CERT_SSH_RAW", - "tdef": "typedef", - "description": " Type of SSH host fingerprint", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_CERT_SSH_MD5", - "comments": "

MD5 is available

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CERT_SSH_SHA1", - "comments": "

SHA-1 is available

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CERT_SSH_SHA256", - "comments": "

SHA-256 is available

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CERT_SSH_RAW", - "comments": "

Raw hostkey is available

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_cert_t", - { - "decl": [ - "GIT_CERT_NONE", - "GIT_CERT_X509", - "GIT_CERT_HOSTKEY_LIBSSH2", - "GIT_CERT_STRARRAY" - ], - "type": "enum", - "file": "git2/cert.h", - "line": 25, - "lineto": 48, - "block": "GIT_CERT_NONE\nGIT_CERT_X509\nGIT_CERT_HOSTKEY_LIBSSH2\nGIT_CERT_STRARRAY\nGIT_CERT_NONE\nGIT_CERT_X509\nGIT_CERT_HOSTKEY_LIBSSH2\nGIT_CERT_STRARRAY", - "tdef": "typedef", - "description": " Type of host certificate structure that is passed to the check callback", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_CERT_NONE", - "comments": "

No information about the certificate is available. This may\n happen when using curl.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CERT_X509", - "comments": "

The data argument to the callback will be a pointer to\n the DER-encoded data.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CERT_HOSTKEY_LIBSSH2", - "comments": "

The data argument to the callback will be a pointer to a\n git_cert_hostkey structure.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CERT_STRARRAY", - "comments": "

The data argument to the callback will be a pointer to a\n git_strarray with name:content strings containing\n information about the certificate. This is used when using\n curl.

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_cert_x509", - { - "decl": [ - "git_cert parent", - "void * data", - "size_t len" - ], - "type": "struct", - "value": "git_cert_x509", - "file": "git2/cert.h", - "line": 156, - "lineto": 168, - "block": "git_cert parent\nvoid * data\nsize_t len", - "tdef": "typedef", - "description": " X.509 certificate information", - "comments": "", - "fields": [ - { - "type": "git_cert", - "name": "parent", - "comments": " The parent cert " - }, - { - "type": "void *", - "name": "data", - "comments": " Pointer to the X.509 certificate data" - }, - { - "type": "size_t", - "name": "len", - "comments": " Length of the memory block pointed to by `data`." - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_checkout_notify_t", - { - "decl": [ - "GIT_CHECKOUT_NOTIFY_NONE", - "GIT_CHECKOUT_NOTIFY_CONFLICT", - "GIT_CHECKOUT_NOTIFY_DIRTY", - "GIT_CHECKOUT_NOTIFY_UPDATED", - "GIT_CHECKOUT_NOTIFY_UNTRACKED", - "GIT_CHECKOUT_NOTIFY_IGNORED", - "GIT_CHECKOUT_NOTIFY_ALL" - ], - "type": "enum", - "file": "git2/checkout.h", - "line": 214, - "lineto": 245, - "block": "GIT_CHECKOUT_NOTIFY_NONE\nGIT_CHECKOUT_NOTIFY_CONFLICT\nGIT_CHECKOUT_NOTIFY_DIRTY\nGIT_CHECKOUT_NOTIFY_UPDATED\nGIT_CHECKOUT_NOTIFY_UNTRACKED\nGIT_CHECKOUT_NOTIFY_IGNORED\nGIT_CHECKOUT_NOTIFY_ALL", - "tdef": "typedef", - "description": " Checkout notification flags", - "comments": "

Checkout will invoke an options notification callback (notify_cb) for certain cases - you pick which ones via notify_flags:

\n\n

Returning a non-zero value from this callback will cancel the checkout. The non-zero return value will be propagated back and returned by the git_checkout_... call.

\n\n

Notification callbacks are made prior to modifying any files on disk, so canceling on any notification will still happen prior to any files being modified.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_NONE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_CONFLICT", - "comments": "

Invokes checkout on conflicting paths.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_DIRTY", - "comments": "

Notifies about "dirty" files, i.e. those that do not need an update\n but no longer match the baseline. Core git displays these files when\n checkout runs, but won't stop the checkout.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_UPDATED", - "comments": "

Sends notification for any file changed.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_UNTRACKED", - "comments": "

Notifies about untracked files.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_IGNORED", - "comments": "

Notifies about ignored files.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NOTIFY_ALL", - "comments": "

Notifies about ignored files.

\n", - "value": 65535 - } - ], - "used": { - "returns": [], - "needs": [ - "git_checkout_notify_cb" - ] - } - } - ], - [ - "git_checkout_options", - { - "decl": [ - "unsigned int version", - "unsigned int checkout_strategy", - "int disable_filters", - "unsigned int dir_mode", - "unsigned int file_mode", - "int file_open_flags", - "unsigned int notify_flags", - "git_checkout_notify_cb notify_cb", - "void * notify_payload", - "git_checkout_progress_cb progress_cb", - "void * progress_payload", - "git_strarray paths", - "git_tree * baseline", - "git_index * baseline_index", - "const char * target_directory", - "const char * ancestor_label", - "const char * our_label", - "const char * their_label", - "git_checkout_perfdata_cb perfdata_cb", - "void * perfdata_payload" - ], - "type": "struct", - "value": "git_checkout_options", - "file": "git2/checkout.h", - "line": 282, - "lineto": 345, - "block": "unsigned int version\nunsigned int checkout_strategy\nint disable_filters\nunsigned int dir_mode\nunsigned int file_mode\nint file_open_flags\nunsigned int notify_flags\ngit_checkout_notify_cb notify_cb\nvoid * notify_payload\ngit_checkout_progress_cb progress_cb\nvoid * progress_payload\ngit_strarray paths\ngit_tree * baseline\ngit_index * baseline_index\nconst char * target_directory\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_checkout_perfdata_cb perfdata_cb\nvoid * perfdata_payload", - "tdef": "typedef", - "description": " Checkout options structure", - "comments": "

Initialize with GIT_CHECKOUT_OPTIONS_INIT. Alternatively, you can use git_checkout_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " The version " - }, - { - "type": "unsigned int", - "name": "checkout_strategy", - "comments": " default will be a safe checkout " - }, - { - "type": "int", - "name": "disable_filters", - "comments": " don't apply filters like CRLF conversion " - }, - { - "type": "unsigned int", - "name": "dir_mode", - "comments": " default is 0755 " - }, - { - "type": "unsigned int", - "name": "file_mode", - "comments": " default is 0644 or 0755 as dictated by blob " - }, - { - "type": "int", - "name": "file_open_flags", - "comments": " default is O_CREAT | O_TRUNC | O_WRONLY " - }, - { - "type": "unsigned int", - "name": "notify_flags", - "comments": " see `git_checkout_notify_t` above " - }, - { - "type": "git_checkout_notify_cb", - "name": "notify_cb", - "comments": " Optional callback to get notifications on specific file states.\n " - }, - { - "type": "void *", - "name": "notify_payload", - "comments": " Payload passed to notify_cb " - }, - { - "type": "git_checkout_progress_cb", - "name": "progress_cb", - "comments": " Optional callback to notify the consumer of checkout progress. " - }, - { - "type": "void *", - "name": "progress_payload", - "comments": " Payload passed to progress_cb " - }, - { - "type": "git_strarray", - "name": "paths", - "comments": " A list of wildmatch patterns or paths.\n\n By default, all paths are processed. If you pass an array of wildmatch\n patterns, those will be used to filter which paths should be taken into\n account.\n\n Use GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH to treat as a simple list." - }, - { - "type": "git_tree *", - "name": "baseline", - "comments": " The expected content of the working directory; defaults to HEAD.\n\n If the working directory does not match this baseline information,\n that will produce a checkout conflict." - }, - { - "type": "git_index *", - "name": "baseline_index", - "comments": " Like `baseline` above, though expressed as an index. This\n option overrides `baseline`." - }, - { - "type": "const char *", - "name": "target_directory", - "comments": " alternative checkout path to workdir " - }, - { - "type": "const char *", - "name": "ancestor_label", - "comments": " the name of the common ancestor side of conflicts " - }, - { - "type": "const char *", - "name": "our_label", - "comments": " the name of the \"our\" side of conflicts " - }, - { - "type": "const char *", - "name": "their_label", - "comments": " the name of the \"their\" side of conflicts " - }, - { - "type": "git_checkout_perfdata_cb", - "name": "perfdata_cb", - "comments": " Optional callback to notify the consumer of performance data. " - }, - { - "type": "void *", - "name": "perfdata_payload", - "comments": " Payload passed to perfdata_cb " - } - ], - "used": { - "returns": [], - "needs": [ - "git_checkout_head", - "git_checkout_index", - "git_checkout_options_init", - "git_checkout_tree", - "git_merge", - "git_reset", - "git_reset_from_annotated" - ] - } - } - ], - [ - "git_checkout_perfdata", - { - "decl": [ - "size_t mkdir_calls", - "size_t stat_calls", - "size_t chmod_calls" - ], - "type": "struct", - "value": "git_checkout_perfdata", - "file": "git2/checkout.h", - "line": 248, - "lineto": 252, - "block": "size_t mkdir_calls\nsize_t stat_calls\nsize_t chmod_calls", - "tdef": "typedef", - "description": " Checkout performance-reporting structure ", - "comments": "", - "fields": [ - { - "type": "size_t", - "name": "mkdir_calls", - "comments": "" - }, - { - "type": "size_t", - "name": "stat_calls", - "comments": "" - }, - { - "type": "size_t", - "name": "chmod_calls", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_checkout_perfdata_cb" - ] - } - } - ], - [ - "git_checkout_strategy_t", - { - "decl": [ - "GIT_CHECKOUT_NONE", - "GIT_CHECKOUT_SAFE", - "GIT_CHECKOUT_FORCE", - "GIT_CHECKOUT_RECREATE_MISSING", - "GIT_CHECKOUT_ALLOW_CONFLICTS", - "GIT_CHECKOUT_REMOVE_UNTRACKED", - "GIT_CHECKOUT_REMOVE_IGNORED", - "GIT_CHECKOUT_UPDATE_ONLY", - "GIT_CHECKOUT_DONT_UPDATE_INDEX", - "GIT_CHECKOUT_NO_REFRESH", - "GIT_CHECKOUT_SKIP_UNMERGED", - "GIT_CHECKOUT_USE_OURS", - "GIT_CHECKOUT_USE_THEIRS", - "GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH", - "GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES", - "GIT_CHECKOUT_DONT_OVERWRITE_IGNORED", - "GIT_CHECKOUT_CONFLICT_STYLE_MERGE", - "GIT_CHECKOUT_CONFLICT_STYLE_DIFF3", - "GIT_CHECKOUT_DONT_REMOVE_EXISTING", - "GIT_CHECKOUT_DONT_WRITE_INDEX", - "GIT_CHECKOUT_DRY_RUN", - "GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3", - "GIT_CHECKOUT_UPDATE_SUBMODULES", - "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED" - ], - "type": "enum", - "file": "git2/checkout.h", - "line": 106, - "lineto": 198, - "block": "GIT_CHECKOUT_NONE\nGIT_CHECKOUT_SAFE\nGIT_CHECKOUT_FORCE\nGIT_CHECKOUT_RECREATE_MISSING\nGIT_CHECKOUT_ALLOW_CONFLICTS\nGIT_CHECKOUT_REMOVE_UNTRACKED\nGIT_CHECKOUT_REMOVE_IGNORED\nGIT_CHECKOUT_UPDATE_ONLY\nGIT_CHECKOUT_DONT_UPDATE_INDEX\nGIT_CHECKOUT_NO_REFRESH\nGIT_CHECKOUT_SKIP_UNMERGED\nGIT_CHECKOUT_USE_OURS\nGIT_CHECKOUT_USE_THEIRS\nGIT_CHECKOUT_DISABLE_PATHSPEC_MATCH\nGIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES\nGIT_CHECKOUT_DONT_OVERWRITE_IGNORED\nGIT_CHECKOUT_CONFLICT_STYLE_MERGE\nGIT_CHECKOUT_CONFLICT_STYLE_DIFF3\nGIT_CHECKOUT_DONT_REMOVE_EXISTING\nGIT_CHECKOUT_DONT_WRITE_INDEX\nGIT_CHECKOUT_DRY_RUN\nGIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3\nGIT_CHECKOUT_UPDATE_SUBMODULES\nGIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", - "tdef": "typedef", - "description": " Checkout behavior flags", - "comments": "

In libgit2, checkout is used to update the working directory and index to match a target tree. Unlike git checkout, it does not move the HEAD commit for you - use git_repository_set_head or the like to do that.

\n\n

Checkout looks at (up to) four things: the "target" tree you want to check out, the "baseline" tree of what was checked out previously, the working directory for actual files, and the index for staged changes.

\n\n

You give checkout one of three strategies for update:

\n\n
    \n
  • GIT_CHECKOUT_NONE is a dry-run strategy that checks for conflicts, etc., but doesn't make any actual changes.

  • \n
  • GIT_CHECKOUT_FORCE is at the opposite extreme, taking any action to make the working directory match the target (including potentially discarding modified files).

  • \n
  • GIT_CHECKOUT_SAFE is between these two options, it will only make modifications that will not lose changes.

    \n\n
                     |  target == baseline   |  target != baseline  |    ---------------------|-----------------------|----------------------|     workdir == baseline |       no action       |  create, update, or  |                         |                       |     delete file      |    ---------------------|-----------------------|----------------------|     workdir exists and  |       no action       |   conflict (notify   |       is != baseline    | notify dirty MODIFIED | and cancel checkout) |    ---------------------|-----------------------|----------------------|      workdir missing,   | notify dirty DELETED  |     create file      |      baseline present   |                       |                      |    ---------------------|-----------------------|----------------------|\n
  • \n
\n\n

To emulate git checkout, use GIT_CHECKOUT_SAFE with a checkout notification callback (see below) that displays information about dirty files. The default behavior will cancel checkout on conflicts.

\n\n

To emulate git checkout-index, use GIT_CHECKOUT_SAFE with a notification callback that cancels the operation if a dirty-but-existing file is found in the working directory. This core git command isn't quite "force" but is sensitive about some types of changes.

\n\n

To emulate git checkout -f, use GIT_CHECKOUT_FORCE.

\n\n

There are some additional flags to modify the behavior of checkout:

\n\n
    \n
  • GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates even if there are conflicts (instead of cancelling the checkout).

  • \n
  • GIT_CHECKOUT_REMOVE_UNTRACKED means remove untracked files (i.e. not in target, baseline, or index, and not ignored) from the working dir.

  • \n
  • GIT_CHECKOUT_REMOVE_IGNORED means remove ignored files (that are also untracked) from the working directory as well.

  • \n
  • GIT_CHECKOUT_UPDATE_ONLY means to only update the content of files that already exist. Files will not be created nor deleted. This just skips applying adds, deletes, and typechanges.

  • \n
  • GIT_CHECKOUT_DONT_UPDATE_INDEX prevents checkout from writing the updated files' information to the index.

  • \n
  • Normally, checkout will reload the index and git attributes from disk before any operations. GIT_CHECKOUT_NO_REFRESH prevents this reload.

  • \n
  • Unmerged index entries are conflicts. GIT_CHECKOUT_SKIP_UNMERGED skips files with unmerged index entries instead. GIT_CHECKOUT_USE_OURS and GIT_CHECKOUT_USE_THEIRS to proceed with the checkout using either the stage 2 ("ours") or stage 3 ("theirs") version of files in the index.

  • \n
  • GIT_CHECKOUT_DONT_OVERWRITE_IGNORED prevents ignored files from being overwritten. Normally, files that are ignored in the working directory are not considered "precious" and may be overwritten if the checkout target contains that file.

  • \n
  • GIT_CHECKOUT_DONT_REMOVE_EXISTING prevents checkout from removing files or folders that fold to the same name on case insensitive filesystems. This can cause files to retain their existing names and write through existing symbolic links.

  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_CHECKOUT_NONE", - "comments": "

default is a dry run, no actual updates

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_SAFE", - "comments": "

Allow safe updates that cannot overwrite uncommitted data.\n If the uncommitted changes don't conflict with the checked out files,\n the checkout will still proceed, leaving the changes intact.

\n\n

Mutually exclusive with GIT_CHECKOUT_FORCE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_FORCE", - "comments": "

Allow all updates to force working directory to look like index.

\n\n

Mutually exclusive with GIT_CHECKOUT_SAFE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_RECREATE_MISSING", - "comments": "

Allow checkout to recreate missing files

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_ALLOW_CONFLICTS", - "comments": "

Allow checkout to make safe updates even if conflicts are found

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_REMOVE_UNTRACKED", - "comments": "

Remove untracked files not in index (that are not ignored)

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_REMOVE_IGNORED", - "comments": "

Remove ignored files not in index

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_UPDATE_ONLY", - "comments": "

Only update existing files, don't create new ones

\n", - "value": 128 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DONT_UPDATE_INDEX", - "comments": "

Normally checkout updates index entries as it goes; this stops that.\n Implies GIT_CHECKOUT_DONT_WRITE_INDEX.

\n", - "value": 256 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_NO_REFRESH", - "comments": "

Don't refresh index/config/etc before doing checkout

\n", - "value": 512 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_SKIP_UNMERGED", - "comments": "

Allow checkout to skip unmerged files

\n", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_USE_OURS", - "comments": "

For unmerged files, checkout stage 2 from index

\n", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_USE_THEIRS", - "comments": "

For unmerged files, checkout stage 3 from index

\n", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH", - "comments": "

Treat pathspec as simple list of exact match file paths

\n", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES", - "comments": "

Ignore directories in use, they will be left empty

\n", - "value": 262144 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DONT_OVERWRITE_IGNORED", - "comments": "

Don't overwrite ignored files that exist in the checkout target

\n", - "value": 524288 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_CONFLICT_STYLE_MERGE", - "comments": "

Write normal merge files for conflicts

\n", - "value": 1048576 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_CONFLICT_STYLE_DIFF3", - "comments": "

Include common ancestor data in diff3 format files for conflicts

\n", - "value": 2097152 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DONT_REMOVE_EXISTING", - "comments": "

Don't overwrite existing files or folders

\n", - "value": 4194304 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DONT_WRITE_INDEX", - "comments": "

Normally checkout writes the index upon completion; this prevents that.

\n", - "value": 8388608 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_DRY_RUN", - "comments": "

Show what would be done by a checkout. Stop after sending\n notifications; don't update the working directory or index.

\n", - "value": 16777216 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3", - "comments": "

Include common ancestor data in zdiff3 format for conflicts

\n", - "value": 33554432 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_UPDATE_SUBMODULES", - "comments": "

Recursively checkout submodules with same options (NOT IMPLEMENTED)

\n", - "value": 65536 - }, - { - "type": "int", - "name": "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", - "comments": "

Recursively checkout submodules if HEAD moved in super repo (NOT IMPLEMENTED)

\n", - "value": 131072 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_cherrypick_options", - { - "decl": [ - "unsigned int version", - "unsigned int mainline", - "git_merge_options merge_opts", - "git_checkout_options checkout_opts" - ], - "type": "struct", - "value": "git_cherrypick_options", - "file": "git2/cherrypick.h", - "line": 26, - "lineto": 34, - "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", - "tdef": "typedef", - "description": " Cherry-pick options", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "mainline", - "comments": " For merge commits, the \"mainline\" is treated as the parent. " - }, - { - "type": "git_merge_options", - "name": "merge_opts", - "comments": " Options for the merging " - }, - { - "type": "git_checkout_options", - "name": "checkout_opts", - "comments": " Options for the checkout " - } - ], - "used": { - "returns": [], - "needs": [ - "git_cherrypick", - "git_cherrypick_options_init" - ] - } - } - ], - [ - "git_clone_local_t", - { - "decl": [ - "GIT_CLONE_LOCAL_AUTO", - "GIT_CLONE_LOCAL", - "GIT_CLONE_NO_LOCAL", - "GIT_CLONE_LOCAL_NO_LINKS" - ], - "type": "enum", - "file": "git2/clone.h", - "line": 33, - "lineto": 53, - "block": "GIT_CLONE_LOCAL_AUTO\nGIT_CLONE_LOCAL\nGIT_CLONE_NO_LOCAL\nGIT_CLONE_LOCAL_NO_LINKS", - "tdef": "typedef", - "description": " Options for bypassing the git-aware transport on clone. Bypassing\n it means that instead of a fetch, libgit2 will copy the object\n database directory instead of figuring out what it needs, which is\n faster. If possible, it will hardlink the files to save space.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_CLONE_LOCAL_AUTO", - "comments": "

Auto-detect (default), libgit2 will bypass the git-aware\n transport for local paths, but use a normal fetch for\n file:// urls.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CLONE_LOCAL", - "comments": "

Bypass the git-aware transport even for a file:// url.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CLONE_NO_LOCAL", - "comments": "

Do no bypass the git-aware transport

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CLONE_LOCAL_NO_LINKS", - "comments": "

Bypass the git-aware transport, but do not try to use\n hardlinks.

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_clone_options", - { - "decl": [ - "unsigned int version", - "git_checkout_options checkout_opts", - "git_fetch_options fetch_opts", - "int bare", - "git_clone_local_t local", - "const char * checkout_branch", - "git_repository_create_cb repository_cb", - "void * repository_cb_payload", - "git_remote_create_cb remote_cb", - "void * remote_cb_payload" - ], - "type": "struct", - "value": "git_clone_options", - "file": "git2/clone.h", - "line": 103, - "lineto": 164, - "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint bare\ngit_clone_local_t local\nconst char * checkout_branch\ngit_repository_create_cb repository_cb\nvoid * repository_cb_payload\ngit_remote_create_cb remote_cb\nvoid * remote_cb_payload", - "tdef": "typedef", - "description": " Clone options structure", - "comments": "

Initialize with GIT_CLONE_OPTIONS_INIT. Alternatively, you can use git_clone_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_checkout_options", - "name": "checkout_opts", - "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`." - }, - { - "type": "git_fetch_options", - "name": "fetch_opts", - "comments": " Options which control the fetch, including callbacks.\n\n The callbacks are used for reporting fetch progress, and for acquiring\n credentials in the event they are needed." - }, - { - "type": "int", - "name": "bare", - "comments": " Set to zero (false) to create a standard repo, or non-zero\n for a bare repo" - }, - { - "type": "git_clone_local_t", - "name": "local", - "comments": " Whether to use a fetch or copy the object database." - }, - { - "type": "const char *", - "name": "checkout_branch", - "comments": " The name of the branch to checkout. NULL means use the\n remote's default branch." - }, - { - "type": "git_repository_create_cb", - "name": "repository_cb", - "comments": " A callback used to create the new repository into which to\n clone. If NULL, the 'bare' field will be used to determine\n whether to create a bare repository." - }, - { - "type": "void *", - "name": "repository_cb_payload", - "comments": " An opaque payload to pass to the git_repository creation callback.\n This parameter is ignored unless repository_cb is non-NULL." - }, - { - "type": "git_remote_create_cb", - "name": "remote_cb", - "comments": " A callback used to create the git_remote, prior to its being\n used to perform the clone operation. See the documentation for\n git_remote_create_cb for details. This parameter may be NULL,\n indicating that git_clone should provide default behavior." - }, - { - "type": "void *", - "name": "remote_cb_payload", - "comments": " An opaque payload to pass to the git_remote creation callback.\n This parameter is ignored unless remote_cb is non-NULL." - } - ], - "used": { - "returns": [], - "needs": [ - "git_clone", - "git_clone_options_init" - ] - } - } - ], - [ - "git_commit", - { - "decl": "git_commit", - "type": "struct", - "value": "git_commit", - "file": "git2/types.h", - "line": 136, - "lineto": 136, - "tdef": "typedef", - "description": " Parsed representation of a commit object. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_branch_create", - "git_cherrypick", - "git_cherrypick_commit", - "git_commit_amend", - "git_commit_author", - "git_commit_author_with_mailmap", - "git_commit_body", - "git_commit_committer", - "git_commit_committer_with_mailmap", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_cb", - "git_commit_dup", - "git_commit_free", - "git_commit_header_field", - "git_commit_id", - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_commit_message", - "git_commit_message_encoding", - "git_commit_message_raw", - "git_commit_nth_gen_ancestor", - "git_commit_owner", - "git_commit_parent", - "git_commit_parent_id", - "git_commit_parentcount", - "git_commit_raw_header", - "git_commit_summary", - "git_commit_time", - "git_commit_time_offset", - "git_commit_tree", - "git_commit_tree_id", - "git_diff_commit_as_email", - "git_merge_commits", - "git_note_commit_create", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_commit_remove", - "git_odb_set_commit_graph", - "git_revert", - "git_revert_commit" - ] - } - } - ], - [ - "git_commit_graph", - { - "decl": "git_commit_graph", - "type": "struct", - "value": "git_commit_graph", - "file": "git2/types.h", - "line": 109, - "lineto": 109, - "tdef": "typedef", - "description": " A git commit-graph ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_odb_set_commit_graph" - ] - } - } - ], - [ - "git_commit_graph_split_strategy_t", - { - "decl": [ - "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE" - ], - "type": "enum", - "file": "git2/sys/commit_graph.h", - "line": 102, - "lineto": 108, - "block": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", - "tdef": "typedef", - "description": " The strategy to use when adding a new set of commits to a pre-existing\n commit-graph chain.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", - "comments": "

Do not split commit-graph files. The other split strategy-related option\n fields are ignored.

\n", - "value": 0 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_commit_graph_writer", - { - "decl": "git_commit_graph_writer", - "type": "struct", - "value": "git_commit_graph_writer", - "file": "git2/types.h", - "line": 112, - "lineto": 112, - "tdef": "typedef", - "description": " a writer for commit-graph files. ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_config", - { - "decl": "git_config", - "type": "struct", - "value": "git_config", - "file": "git2/types.h", - "line": 157, - "lineto": 157, - "tdef": "typedef", - "description": " Memory representation of a set of config files ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_config_add_file_ondisk", - "git_config_backend_foreach_match", - "git_config_delete_entry", - "git_config_delete_multivar", - "git_config_entry_free", - "git_config_foreach", - "git_config_foreach_cb", - "git_config_foreach_match", - "git_config_free", - "git_config_get_bool", - "git_config_get_entry", - "git_config_get_int32", - "git_config_get_int64", - "git_config_get_mapped", - "git_config_get_multivar_foreach", - "git_config_get_path", - "git_config_get_string", - "git_config_get_string_buf", - "git_config_iterator_free", - "git_config_iterator_glob_new", - "git_config_iterator_new", - "git_config_lock", - "git_config_lookup_map_value", - "git_config_multivar_iterator_new", - "git_config_new", - "git_config_next", - "git_config_open_default", - "git_config_open_global", - "git_config_open_level", - "git_config_open_ondisk", - "git_config_set_bool", - "git_config_set_int32", - "git_config_set_int64", - "git_config_set_multivar", - "git_config_set_string", - "git_config_snapshot", - "git_repository_config", - "git_repository_config_snapshot" - ] - } - } - ], - [ - "git_config_backend", - { - "decl": "git_config_backend", - "type": "struct", - "value": "git_config_backend", - "file": "git2/types.h", - "line": 160, - "lineto": 160, - "tdef": "typedef", - "description": " Interface to access a configuration file ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_config_backend_foreach_match" - ] - } - } - ], - [ - "git_config_entry", - { - "decl": [ - "const char * name", - "const char * value", - "unsigned int include_depth", - "git_config_level_t level", - "void (*)(struct git_config_entry *) free", - "void * payload" - ], - "type": "struct", - "value": "git_config_entry", - "file": "git2/config.h", - "line": 64, - "lineto": 71, - "block": "const char * name\nconst char * value\nunsigned int include_depth\ngit_config_level_t level\nvoid (*)(struct git_config_entry *) free\nvoid * payload", - "tdef": "typedef", - "description": " An entry in a configuration file", - "comments": "", - "fields": [ - { - "type": "const char *", - "name": "name", - "comments": " Name of the entry (normalised) " - }, - { - "type": "const char *", - "name": "value", - "comments": " String value of the entry " - }, - { - "type": "unsigned int", - "name": "include_depth", - "comments": " Depth of includes where this variable was found " - }, - { - "type": "git_config_level_t", - "name": "level", - "comments": " Which config file this was found in " - }, - { - "type": "void (*)(struct git_config_entry *)", - "name": "free", - "comments": "" - }, - { - "type": "void *", - "name": "payload", - "comments": " Opaque value for the free function. Do not read or write " - } - ], - "used": { - "returns": [], - "needs": [ - "git_config_entry_free", - "git_config_foreach_cb", - "git_config_get_entry", - "git_config_next" - ] - } - } - ], - [ - "git_config_iterator", - { - "decl": "git_config_iterator", - "type": "struct", - "value": "git_config_iterator", - "file": "git2/config.h", - "line": 92, - "lineto": 92, - "tdef": "typedef", - "description": " An opaque structure for a configuration iterator", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_config_iterator_free", - "git_config_iterator_glob_new", - "git_config_iterator_new", - "git_config_multivar_iterator_new", - "git_config_next" - ] - } - } - ], - [ - "git_config_level_t", - { - "decl": [ - "GIT_CONFIG_LEVEL_PROGRAMDATA", - "GIT_CONFIG_LEVEL_SYSTEM", - "GIT_CONFIG_LEVEL_XDG", - "GIT_CONFIG_LEVEL_GLOBAL", - "GIT_CONFIG_LEVEL_LOCAL", - "GIT_CONFIG_LEVEL_APP", - "GIT_CONFIG_HIGHEST_LEVEL" - ], - "type": "enum", - "file": "git2/config.h", - "line": 31, - "lineto": 59, - "block": "GIT_CONFIG_LEVEL_PROGRAMDATA\nGIT_CONFIG_LEVEL_SYSTEM\nGIT_CONFIG_LEVEL_XDG\nGIT_CONFIG_LEVEL_GLOBAL\nGIT_CONFIG_LEVEL_LOCAL\nGIT_CONFIG_LEVEL_APP\nGIT_CONFIG_HIGHEST_LEVEL", - "tdef": "typedef", - "description": " Priority level of a config file.\n These priority levels correspond to the natural escalation logic\n (from higher to lower) when searching for config entries in git.git.", - "comments": "

git_config_open_default() and git_repository_config() honor those priority levels as well.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_PROGRAMDATA", - "comments": "

System-wide on Windows, for compatibility with portable git

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_SYSTEM", - "comments": "

System-wide configuration file; /etc/gitconfig on Linux systems

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_XDG", - "comments": "

XDG compatible configuration file; typically ~/.config/git/config

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_GLOBAL", - "comments": "

User-specific configuration file (also called Global configuration\n file); typically ~/.gitconfig

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_LOCAL", - "comments": "

Repository specific configuration file; $WORK_DIR/.git/config on\n non-bare repos

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_CONFIG_LEVEL_APP", - "comments": "

Application specific configuration file; freely defined by applications

\n", - "value": 6 - }, - { - "type": "int", - "name": "GIT_CONFIG_HIGHEST_LEVEL", - "comments": "

Represents the highest level available config file (i.e. the most\n specific config file available that actually is loaded)

\n", - "value": -1 - } - ], - "used": { - "returns": [], - "needs": [ - "git_config_add_file_ondisk", - "git_config_open_level" - ] - } - } - ], - [ - "git_configmap", - { - "decl": [ - "git_configmap_t type", - "const char * str_match", - "int map_value" - ], - "type": "struct", - "value": "git_configmap", - "file": "git2/config.h", - "line": 107, - "lineto": 111, - "block": "git_configmap_t type\nconst char * str_match\nint map_value", - "tdef": "typedef", - "description": " Mapping from config variables to values.", - "comments": "", - "fields": [ - { - "type": "git_configmap_t", - "name": "type", - "comments": "" - }, - { - "type": "const char *", - "name": "str_match", - "comments": "" - }, - { - "type": "int", - "name": "map_value", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_config_get_mapped", - "git_config_lookup_map_value" - ] - } - } - ], - [ - "git_configmap_t", - { - "decl": [ - "GIT_CONFIGMAP_FALSE", - "GIT_CONFIGMAP_TRUE", - "GIT_CONFIGMAP_INT32", - "GIT_CONFIGMAP_STRING" - ], - "type": "enum", - "file": "git2/config.h", - "line": 97, - "lineto": 102, - "block": "GIT_CONFIGMAP_FALSE\nGIT_CONFIGMAP_TRUE\nGIT_CONFIGMAP_INT32\nGIT_CONFIGMAP_STRING", - "tdef": "typedef", - "description": " Config var type", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_CONFIGMAP_FALSE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_CONFIGMAP_TRUE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CONFIGMAP_INT32", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CONFIGMAP_STRING", - "comments": "", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential", - { - "decl": "git_credential", - "type": "struct", - "value": "git_credential", - "file": "git2/credential.h", - "line": 84, - "lineto": 84, - "tdef": "typedef", - "description": " The base structure for all credential types", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_credential_acquire_cb", - "git_credential_default_new", - "git_credential_free", - "git_credential_get_username", - "git_credential_has_username", - "git_credential_ssh_custom_new", - "git_credential_ssh_interactive_new", - "git_credential_ssh_key_from_agent", - "git_credential_ssh_key_memory_new", - "git_credential_ssh_key_new", - "git_credential_username_new", - "git_credential_userpass", - "git_credential_userpass_plaintext_new" - ] - } - } - ], - [ - "git_credential_default", - { - "decl": "git_credential_default", - "type": "struct", - "value": "git_credential_default", - "file": "git2/credential.h", - "line": 92, - "lineto": 92, - "tdef": "typedef", - "description": " A key for NTLM/Kerberos \"default\" credentials ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_ssh_custom", - { - "decl": "git_credential_ssh_custom", - "type": "struct", - "value": "git_credential_ssh_custom", - "file": "git2/credential.h", - "line": 107, - "lineto": 107, - "tdef": "typedef", - "description": " A key with a custom signature function", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_ssh_interactive", - { - "decl": "git_credential_ssh_interactive", - "type": "struct", - "value": "git_credential_ssh_interactive", - "file": "git2/credential.h", - "line": 102, - "lineto": 102, - "tdef": "typedef", - "description": " Keyboard-interactive based ssh authentication", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_credential_ssh_interactive_new" - ] - } - } - ], - [ - "git_credential_ssh_key", - { - "decl": "git_credential_ssh_key", - "type": "struct", - "value": "git_credential_ssh_key", - "file": "git2/credential.h", - "line": 97, - "lineto": 97, - "tdef": "typedef", - "description": " A ssh key from disk", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_t", - { - "decl": [ - "GIT_CREDENTIAL_USERPASS_PLAINTEXT", - "GIT_CREDENTIAL_SSH_KEY", - "GIT_CREDENTIAL_SSH_CUSTOM", - "GIT_CREDENTIAL_DEFAULT", - "GIT_CREDENTIAL_SSH_INTERACTIVE", - "GIT_CREDENTIAL_USERNAME", - "GIT_CREDENTIAL_SSH_MEMORY" - ], - "type": "enum", - "file": "git2/credential.h", - "line": 27, - "lineto": 79, - "block": "GIT_CREDENTIAL_USERPASS_PLAINTEXT\nGIT_CREDENTIAL_SSH_KEY\nGIT_CREDENTIAL_SSH_CUSTOM\nGIT_CREDENTIAL_DEFAULT\nGIT_CREDENTIAL_SSH_INTERACTIVE\nGIT_CREDENTIAL_USERNAME\nGIT_CREDENTIAL_SSH_MEMORY", - "tdef": "typedef", - "description": " Supported credential types", - "comments": "

This represents the various types of authentication methods supported by the library.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_CREDENTIAL_USERPASS_PLAINTEXT", - "comments": "

A vanilla user/password request

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_SSH_KEY", - "comments": "

An SSH key-based authentication request

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_SSH_CUSTOM", - "comments": "

An SSH key-based authentication request, with a custom signature

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_DEFAULT", - "comments": "

An NTLM/Negotiate-based authentication request.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_SSH_INTERACTIVE", - "comments": "

An SSH interactive authentication request

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_USERNAME", - "comments": "

Username-only authentication request

\n\n

Used as a pre-authentication step if the underlying transport\n (eg. SSH, with no username in its URL) does not know which username\n to use.

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_CREDENTIAL_SSH_MEMORY", - "comments": "

An SSH key-based authentication request

\n\n

Allows credentials to be read from memory instead of files.\n Note that because of differences in crypto backend support, it might\n not be functional.

\n", - "value": 64 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_username", - { - "decl": "git_credential_username", - "type": "struct", - "value": "git_credential_username", - "file": "git2/credential.h", - "line": 89, - "lineto": 89, - "tdef": "typedef", - "description": " Username-only credential information ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_credential_userpass_payload", - { - "decl": [ - "const char * username", - "const char * password" - ], - "type": "struct", - "value": "git_credential_userpass_payload", - "file": "git2/credential_helpers.h", - "line": 24, - "lineto": 27, - "block": "const char * username\nconst char * password", - "tdef": "typedef", - "description": " Payload for git_credential_userpass_plaintext.", - "comments": "", - "fields": [ - { - "type": "const char *", - "name": "username", - "comments": "" - }, - { - "type": "const char *", - "name": "password", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_delta_t", - { - "decl": [ - "GIT_DELTA_UNMODIFIED", - "GIT_DELTA_ADDED", - "GIT_DELTA_DELETED", - "GIT_DELTA_MODIFIED", - "GIT_DELTA_RENAMED", - "GIT_DELTA_COPIED", - "GIT_DELTA_IGNORED", - "GIT_DELTA_UNTRACKED", - "GIT_DELTA_TYPECHANGE", - "GIT_DELTA_UNREADABLE", - "GIT_DELTA_CONFLICTED" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 224, - "lineto": 236, - "block": "GIT_DELTA_UNMODIFIED\nGIT_DELTA_ADDED\nGIT_DELTA_DELETED\nGIT_DELTA_MODIFIED\nGIT_DELTA_RENAMED\nGIT_DELTA_COPIED\nGIT_DELTA_IGNORED\nGIT_DELTA_UNTRACKED\nGIT_DELTA_TYPECHANGE\nGIT_DELTA_UNREADABLE\nGIT_DELTA_CONFLICTED", - "tdef": "typedef", - "description": " What type of change is described by a git_diff_delta?", - "comments": "

GIT_DELTA_RENAMED and GIT_DELTA_COPIED will only show up if you run git_diff_find_similar() on the diff object.

\n\n

GIT_DELTA_TYPECHANGE only shows up given GIT_DIFF_INCLUDE_TYPECHANGE in the option flags (otherwise type changes will be split into ADDED / DELETED pairs).

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DELTA_UNMODIFIED", - "comments": "

no changes

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DELTA_ADDED", - "comments": "

entry does not exist in old version

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DELTA_DELETED", - "comments": "

entry does not exist in new version

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DELTA_MODIFIED", - "comments": "

entry content changed between old and new

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_DELTA_RENAMED", - "comments": "

entry was renamed between old and new

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DELTA_COPIED", - "comments": "

entry was copied from another old entry

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_DELTA_IGNORED", - "comments": "

entry is ignored item in workdir

\n", - "value": 6 - }, - { - "type": "int", - "name": "GIT_DELTA_UNTRACKED", - "comments": "

entry is untracked item in workdir

\n", - "value": 7 - }, - { - "type": "int", - "name": "GIT_DELTA_TYPECHANGE", - "comments": "

type of entry changed between old and new

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_DELTA_UNREADABLE", - "comments": "

entry is unreadable

\n", - "value": 9 - }, - { - "type": "int", - "name": "GIT_DELTA_CONFLICTED", - "comments": "

entry in the index is conflicted

\n", - "value": 10 - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_num_deltas_of_type", - "git_diff_status_char" - ] - } - } - ], - [ - "git_describe_format_options", - { - "decl": [ - "unsigned int version", - "unsigned int abbreviated_size", - "int always_use_long_format", - "const char * dirty_suffix" - ], - "type": "struct", - "value": "git_describe_format_options", - "file": "git2/describe.h", - "line": 91, - "lineto": 111, - "block": "unsigned int version\nunsigned int abbreviated_size\nint always_use_long_format\nconst char * dirty_suffix", - "tdef": "typedef", - "description": " Describe format options structure", - "comments": "

Initialize with GIT_DESCRIBE_FORMAT_OPTIONS_INIT. Alternatively, you can use git_describe_format_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "abbreviated_size", - "comments": " Size of the abbreviated commit id to use. This value is the\n lower bound for the length of the abbreviated string. The\n default is 7." - }, - { - "type": "int", - "name": "always_use_long_format", - "comments": " Set to use the long format even when a shorter name could be used." - }, - { - "type": "const char *", - "name": "dirty_suffix", - "comments": " If the workdir is dirty and this is set, this string will\n be appended to the description string." - } - ], - "used": { - "returns": [], - "needs": [ - "git_describe_format", - "git_describe_format_options_init" - ] - } - } - ], - [ - "git_describe_options", - { - "decl": [ - "unsigned int version", - "unsigned int max_candidates_tags", - "unsigned int describe_strategy", - "const char * pattern", - "int only_follow_first_parent", - "int show_commit_oid_as_fallback" - ], - "type": "struct", - "value": "git_describe_options", - "file": "git2/describe.h", - "line": 43, - "lineto": 61, - "block": "unsigned int version\nunsigned int max_candidates_tags\nunsigned int describe_strategy\nconst char * pattern\nint only_follow_first_parent\nint show_commit_oid_as_fallback", - "tdef": "typedef", - "description": " Describe options structure", - "comments": "

Initialize with GIT_DESCRIBE_OPTIONS_INIT. Alternatively, you can use git_describe_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "max_candidates_tags", - "comments": " default: 10 " - }, - { - "type": "unsigned int", - "name": "describe_strategy", - "comments": " default: GIT_DESCRIBE_DEFAULT " - }, - { - "type": "const char *", - "name": "pattern", - "comments": "" - }, - { - "type": "int", - "name": "only_follow_first_parent", - "comments": " When calculating the distance from the matching tag or\n reference, only walk down the first-parent ancestry." - }, - { - "type": "int", - "name": "show_commit_oid_as_fallback", - "comments": " If no matching tag or reference is found, the describe\n operation would normally fail. If this option is set, it\n will instead fall back to showing the full id of the\n commit." - } - ], - "used": { - "returns": [], - "needs": [ - "git_describe_commit", - "git_describe_options_init", - "git_describe_workdir" - ] - } - } - ], - [ - "git_describe_result", - { - "decl": "git_describe_result", - "type": "struct", - "value": "git_describe_result", - "file": "git2/describe.h", - "line": 134, - "lineto": 134, - "tdef": "typedef", - "description": " A struct that stores the result of a describe operation.", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_describe_commit", - "git_describe_format", - "git_describe_result_free", - "git_describe_workdir" - ] - } - } - ], - [ - "git_describe_strategy_t", - { - "decl": [ - "GIT_DESCRIBE_DEFAULT", - "GIT_DESCRIBE_TAGS", - "GIT_DESCRIBE_ALL" - ], - "type": "enum", - "file": "git2/describe.h", - "line": 30, - "lineto": 34, - "block": "GIT_DESCRIBE_DEFAULT\nGIT_DESCRIBE_TAGS\nGIT_DESCRIBE_ALL", - "tdef": "typedef", - "description": " Reference lookup strategy", - "comments": "

These behave like the --tags and --all options to git-describe, namely they say to look for any reference in either refs/tags/ or refs/ respectively.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DESCRIBE_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DESCRIBE_TAGS", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DESCRIBE_ALL", - "comments": "", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff", - { - "decl": "git_diff", - "type": "struct", - "value": "git_diff", - "file": "git2/diff.h", - "line": 196, - "lineto": 196, - "tdef": "typedef", - "description": " The diff object that contains all individual file deltas.", - "comments": "

A diff represents the cumulative list of differences between two snapshots of a repository (possibly filtered by a set of file name patterns).

\n\n

Calculating diffs is generally done in two phases: building a list of diffs then traversing it. This makes is easier to share logic across the various types of diffs (tree vs tree, workdir vs index, etc.), and also allows you to insert optional diff post-processing phases, such as rename detection, in between the steps. When you are done with a diff object, it must be freed.

\n\n

This is an opaque structure which will be allocated by one of the diff generator functions below (such as git_diff_tree_to_tree). You are responsible for releasing the object memory when done, using the git_diff_free() function.

\n", - "used": { - "returns": [ - "git_diff_get_delta", - "git_patch_get_delta", - "git_pathspec_match_list_diff_entry" - ], - "needs": [ - "git_apply", - "git_apply_delta_cb", - "git_apply_hunk_cb", - "git_apply_to_tree", - "git_checkout_notify_cb", - "git_diff_binary_cb", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_commit_as_email", - "git_diff_file_cb", - "git_diff_find_options_init", - "git_diff_find_similar", - "git_diff_foreach", - "git_diff_format_email", - "git_diff_format_email_options_init", - "git_diff_free", - "git_diff_from_buffer", - "git_diff_get_delta", - "git_diff_get_stats", - "git_diff_hunk_cb", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_is_sorted_icase", - "git_diff_line_cb", - "git_diff_merge", - "git_diff_notify_cb", - "git_diff_num_deltas", - "git_diff_num_deltas_of_type", - "git_diff_options_init", - "git_diff_patchid", - "git_diff_patchid_options_init", - "git_diff_print", - "git_diff_progress_cb", - "git_diff_stats_deletions", - "git_diff_stats_files_changed", - "git_diff_stats_free", - "git_diff_stats_insertions", - "git_diff_stats_to_buf", - "git_diff_to_buf", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs", - "git_patch_from_buffers", - "git_patch_from_diff", - "git_patch_get_hunk", - "git_patch_get_line_in_hunk", - "git_patch_print", - "git_pathspec_match_diff" - ] - } - } - ], - [ - "git_diff_binary", - { - "decl": [ - "unsigned int contains_data", - "git_diff_binary_file old_file", - "git_diff_binary_file new_file" - ], - "type": "struct", - "value": "git_diff_binary", - "file": "git2/diff.h", - "line": 544, - "lineto": 556, - "block": "unsigned int contains_data\ngit_diff_binary_file old_file\ngit_diff_binary_file new_file", - "tdef": "typedef", - "description": " Structure describing the binary contents of a diff.", - "comments": "

A binary file / delta is a file (or pair) for which no text diffs should be generated. A diff can contain delta entries that are binary, but no diff content will be output for those files. There is a base heuristic for binary detection and you can further tune the behavior with git attributes or diff flags and option settings.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "contains_data", - "comments": " Whether there is data in this binary structure or not.\n\n If this is `1`, then this was produced and included binary content.\n If this is `0` then this was generated knowing only that a binary\n file changed but without providing the data, probably from a patch\n that said `Binary files a/file.txt and b/file.txt differ`." - }, - { - "type": "git_diff_binary_file", - "name": "old_file", - "comments": " The contents of the old file. " - }, - { - "type": "git_diff_binary_file", - "name": "new_file", - "comments": " The contents of the new file. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_binary_cb", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_foreach" - ] - } - } - ], - [ - "git_diff_binary_file", - { - "decl": [ - "git_diff_binary_t type", - "const char * data", - "size_t datalen", - "size_t inflatedlen" - ], - "type": "struct", - "value": "git_diff_binary_file", - "file": "git2/diff.h", - "line": 521, - "lineto": 533, - "block": "git_diff_binary_t type\nconst char * data\nsize_t datalen\nsize_t inflatedlen", - "tdef": "typedef", - "description": " The contents of one of the files in a binary diff. ", - "comments": "", - "fields": [ - { - "type": "git_diff_binary_t", - "name": "type", - "comments": " The type of binary data for this file. " - }, - { - "type": "const char *", - "name": "data", - "comments": " The binary data, deflated. " - }, - { - "type": "size_t", - "name": "datalen", - "comments": " The length of the binary data. " - }, - { - "type": "size_t", - "name": "inflatedlen", - "comments": " The length of the binary data after inflation. " - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_binary_t", - { - "decl": [ - "GIT_DIFF_BINARY_NONE", - "GIT_DIFF_BINARY_LITERAL", - "GIT_DIFF_BINARY_DELTA" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 509, - "lineto": 518, - "block": "GIT_DIFF_BINARY_NONE\nGIT_DIFF_BINARY_LITERAL\nGIT_DIFF_BINARY_DELTA", - "tdef": "typedef", - "description": " When producing a binary diff, the binary data returned will be\n either the deflated full (\"literal\") contents of the file, or\n the deflated binary delta between the two sides (whichever is\n smaller).", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_BINARY_NONE", - "comments": "

There is no binary delta.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_BINARY_LITERAL", - "comments": "

The binary data is the literal contents of the file.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_BINARY_DELTA", - "comments": "

The binary data is the delta from one side to the other.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_delta", - { - "decl": [ - "git_delta_t status", - "uint32_t flags", - "uint16_t similarity", - "uint16_t nfiles", - "git_diff_file old_file", - "git_diff_file new_file" - ], - "type": "struct", - "value": "git_diff_delta", - "file": "git2/diff.h", - "line": 324, - "lineto": 331, - "block": "git_delta_t status\nuint32_t flags\nuint16_t similarity\nuint16_t nfiles\ngit_diff_file old_file\ngit_diff_file new_file", - "tdef": "typedef", - "description": " Description of changes to one entry.", - "comments": "

A delta is a file pair with an old and new revision. The old version may be absent if the file was just created and the new version may be absent if the file was deleted. A diff is mostly just a list of deltas.

\n\n

When iterating over a diff, this will be passed to most callbacks and you can use the contents to understand exactly what has changed.

\n\n

The old_file represents the "from" side of the diff and the new_file represents to "to" side of the diff. What those means depend on the function that was used to generate the diff and will be documented below. You can also use the GIT_DIFF_REVERSE flag to flip it around.

\n\n

Although the two sides of the delta are named "old_file" and "new_file", they actually may correspond to entries that represent a file, a symbolic link, a submodule commit id, or even a tree (if you are tracking type changes or ignored/untracked directories).

\n\n

Under some circumstances, in the name of efficiency, not all fields will be filled in, but we generally try to fill in as much as possible. One example is that the "flags" field may not have either the BINARY or the NOT_BINARY flag set to avoid examining file contents if you do not pass in hunk and/or line callbacks to the diff foreach iteration function. It will just use the git attributes for those files.

\n\n

The similarity score is zero unless you call git_diff_find_similar() which does a similarity analysis of files in the diff. Use that function to do rename and copy detection, and to split heavily modified files in add/delete pairs. After that call, deltas with a status of GIT_DELTA_RENAMED or GIT_DELTA_COPIED will have a similarity score between 0 and 100 indicating how similar the old and new sides are.

\n\n

If you ask git_diff_find_similar to find heavily modified files to break, but to not actually break the records, then GIT_DELTA_MODIFIED records may have a non-zero similarity score if the self-similarity is below the split threshold. To display this value like core Git, invert the score (a la printf("M%03d", 100 - delta->similarity)).

\n", - "fields": [ - { - "type": "git_delta_t", - "name": "status", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " git_diff_flag_t values " - }, - { - "type": "uint16_t", - "name": "similarity", - "comments": " for RENAMED and COPIED, value 0-100 " - }, - { - "type": "uint16_t", - "name": "nfiles", - "comments": " number of files in this delta " - }, - { - "type": "git_diff_file", - "name": "old_file", - "comments": "" - }, - { - "type": "git_diff_file", - "name": "new_file", - "comments": "" - } - ], - "used": { - "returns": [ - "git_diff_get_delta", - "git_patch_get_delta", - "git_pathspec_match_list_diff_entry" - ], - "needs": [ - "git_apply_delta_cb", - "git_diff_binary_cb", - "git_diff_file_cb", - "git_diff_hunk_cb", - "git_diff_line_cb", - "git_diff_notify_cb" - ] - } - } - ], - [ - "git_diff_file", - { - "decl": [ - "git_oid id", - "const char * path", - "git_object_size_t size", - "uint32_t flags", - "uint16_t mode", - "uint16_t id_abbrev" - ], - "type": "struct", - "value": "git_diff_file", - "file": "git2/diff.h", - "line": 245, - "lineto": 282, - "block": "git_oid id\nconst char * path\ngit_object_size_t size\nuint32_t flags\nuint16_t mode\nuint16_t id_abbrev", - "tdef": "typedef", - "description": " Description of one side of a delta.", - "comments": "

Although this is called a "file", it could represent a file, a symbolic link, a submodule commit id, or even a tree (although that only if you are tracking type changes or ignored/untracked directories).

\n", - "fields": [ - { - "type": "git_oid", - "name": "id", - "comments": " The `git_oid` of the item. If the entry represents an\n absent side of a diff (e.g. the `old_file` of a `GIT_DELTA_ADDED` delta),\n then the oid will be zeroes." - }, - { - "type": "const char *", - "name": "path", - "comments": " The NUL-terminated path to the entry relative to the working\n directory of the repository." - }, - { - "type": "git_object_size_t", - "name": "size", - "comments": " The size of the entry in bytes." - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of the `git_diff_flag_t` types" - }, - { - "type": "uint16_t", - "name": "mode", - "comments": " Roughly, the stat() `st_mode` value for the item. This will\n be restricted to one of the `git_filemode_t` values." - }, - { - "type": "uint16_t", - "name": "id_abbrev", - "comments": " Represents the known length of the `id` field, when\n converted to a hex string. It is generally `GIT_OID_SHA1_HEXSIZE`, unless this\n delta was created from reading a patch file, in which case it may be\n abbreviated to something reasonable, like 7 characters." - } - ], - "used": { - "returns": [], - "needs": [ - "git_checkout_notify_cb", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_foreach" - ] - } - } - ], - [ - "git_diff_find_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "uint16_t rename_threshold", - "uint16_t rename_from_rewrite_threshold", - "uint16_t copy_threshold", - "uint16_t break_rewrite_threshold", - "size_t rename_limit", - "git_diff_similarity_metric * metric" - ], - "type": "struct", - "value": "git_diff_find_options", - "file": "git2/diff.h", - "line": 749, - "lineto": 803, - "block": "unsigned int version\nuint32_t flags\nuint16_t rename_threshold\nuint16_t rename_from_rewrite_threshold\nuint16_t copy_threshold\nuint16_t break_rewrite_threshold\nsize_t rename_limit\ngit_diff_similarity_metric * metric", - "tdef": "typedef", - "description": " Control behavior of rename and copy detection", - "comments": "

These options mostly mimic parameters that can be passed to git-diff.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " Combination of git_diff_find_t values (default GIT_DIFF_FIND_BY_CONFIG).\n NOTE: if you don't explicitly set this, `diff.renames` could be set\n to false, resulting in `git_diff_find_similar` doing nothing." - }, - { - "type": "uint16_t", - "name": "rename_threshold", - "comments": " Threshold above which similar files will be considered renames.\n This is equivalent to the -M option. Defaults to 50." - }, - { - "type": "uint16_t", - "name": "rename_from_rewrite_threshold", - "comments": " Threshold below which similar files will be eligible to be a rename source.\n This is equivalent to the first part of the -B option. Defaults to 50." - }, - { - "type": "uint16_t", - "name": "copy_threshold", - "comments": " Threshold above which similar files will be considered copies.\n This is equivalent to the -C option. Defaults to 50." - }, - { - "type": "uint16_t", - "name": "break_rewrite_threshold", - "comments": " Threshold below which similar files will be split into a delete/add pair.\n This is equivalent to the last part of the -B option. Defaults to 60." - }, - { - "type": "size_t", - "name": "rename_limit", - "comments": " Maximum number of matches to consider for a particular file.\n\n This is a little different from the `-l` option from Git because we\n will still process up to this many matches before abandoning the search.\n Defaults to 1000." - }, - { - "type": "git_diff_similarity_metric *", - "name": "metric", - "comments": " The `metric` option allows you to plug in a custom similarity metric.\n\n Set it to NULL to use the default internal metric.\n\n The default metric is based on sampling hashes of ranges of data in\n the file, which is a pretty good similarity approximation that should\n work fairly well for both text and binary data while still being\n pretty fast with a fixed memory overhead." - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_find_options_init", - "git_diff_find_similar" - ] - } - } - ], - [ - "git_diff_find_t", - { - "decl": [ - "GIT_DIFF_FIND_BY_CONFIG", - "GIT_DIFF_FIND_RENAMES", - "GIT_DIFF_FIND_RENAMES_FROM_REWRITES", - "GIT_DIFF_FIND_COPIES", - "GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED", - "GIT_DIFF_FIND_REWRITES", - "GIT_DIFF_BREAK_REWRITES", - "GIT_DIFF_FIND_AND_BREAK_REWRITES", - "GIT_DIFF_FIND_FOR_UNTRACKED", - "GIT_DIFF_FIND_ALL", - "GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE", - "GIT_DIFF_FIND_IGNORE_WHITESPACE", - "GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE", - "GIT_DIFF_FIND_EXACT_MATCH_ONLY", - "GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY", - "GIT_DIFF_FIND_REMOVE_UNMODIFIED" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 658, - "lineto": 727, - "block": "GIT_DIFF_FIND_BY_CONFIG\nGIT_DIFF_FIND_RENAMES\nGIT_DIFF_FIND_RENAMES_FROM_REWRITES\nGIT_DIFF_FIND_COPIES\nGIT_DIFF_FIND_COPIES_FROM_UNMODIFIED\nGIT_DIFF_FIND_REWRITES\nGIT_DIFF_BREAK_REWRITES\nGIT_DIFF_FIND_AND_BREAK_REWRITES\nGIT_DIFF_FIND_FOR_UNTRACKED\nGIT_DIFF_FIND_ALL\nGIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE\nGIT_DIFF_FIND_IGNORE_WHITESPACE\nGIT_DIFF_FIND_DONT_IGNORE_WHITESPACE\nGIT_DIFF_FIND_EXACT_MATCH_ONLY\nGIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY\nGIT_DIFF_FIND_REMOVE_UNMODIFIED", - "tdef": "typedef", - "description": " Flags to control the behavior of diff rename/copy detection.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_FIND_BY_CONFIG", - "comments": "

Obey diff.renames. Overridden by any other GIT_DIFF_FIND_... flag.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_RENAMES", - "comments": "

Look for renames? (--find-renames)

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_RENAMES_FROM_REWRITES", - "comments": "

Consider old side of MODIFIED for renames? (--break-rewrites=N)

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_COPIES", - "comments": "

Look for copies? (a la --find-copies).

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED", - "comments": "

Consider UNMODIFIED as copy sources? (--find-copies-harder).

\n\n

For this to work correctly, use GIT_DIFF_INCLUDE_UNMODIFIED when\n the initial git_diff is being generated.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_REWRITES", - "comments": "

Mark significant rewrites for split (--break-rewrites=/M)

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_DIFF_BREAK_REWRITES", - "comments": "

Actually split large rewrites into delete/add pairs

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_AND_BREAK_REWRITES", - "comments": "

Mark rewrites for split and break into delete/add pairs

\n", - "value": 48 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_FOR_UNTRACKED", - "comments": "

Find renames/copies for UNTRACKED items in working directory.

\n\n

For this to work correctly, use GIT_DIFF_INCLUDE_UNTRACKED when the\n initial git_diff is being generated (and obviously the diff must\n be against the working directory for this to make sense).

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_ALL", - "comments": "

Turn on all finding features.

\n", - "value": 255 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE", - "comments": "

Measure similarity ignoring leading whitespace (default)

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_IGNORE_WHITESPACE", - "comments": "

Measure similarity ignoring all whitespace

\n", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE", - "comments": "

Measure similarity including all data

\n", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_EXACT_MATCH_ONLY", - "comments": "

Measure similarity only by comparing SHAs (fast and cheap)

\n", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY", - "comments": "

Do not break rewrites unless they contribute to a rename.

\n\n

Normally, GIT_DIFF_FIND_AND_BREAK_REWRITES will measure the self-\n similarity of modified files and split the ones that have changed a\n lot into a DELETE / ADD pair. Then the sides of that pair will be\n considered candidates for rename and copy detection.

\n\n

If you add this flag in and the split pair is not used for an\n actual rename or copy, then the modified record will be restored to\n a regular MODIFIED record instead of being split.

\n", - "value": 32768 - }, - { - "type": "int", - "name": "GIT_DIFF_FIND_REMOVE_UNMODIFIED", - "comments": "

Remove any UNMODIFIED deltas after find_similar is done.

\n\n

Using GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED to emulate the\n --find-copies-harder behavior requires building a diff with the\n GIT_DIFF_INCLUDE_UNMODIFIED flag. If you do not want UNMODIFIED\n records in the final result, pass this flag to have them removed.

\n", - "value": 65536 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_flag_t", - { - "decl": [ - "GIT_DIFF_FLAG_BINARY", - "GIT_DIFF_FLAG_NOT_BINARY", - "GIT_DIFF_FLAG_VALID_ID", - "GIT_DIFF_FLAG_EXISTS", - "GIT_DIFF_FLAG_VALID_SIZE" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 206, - "lineto": 212, - "block": "GIT_DIFF_FLAG_BINARY\nGIT_DIFF_FLAG_NOT_BINARY\nGIT_DIFF_FLAG_VALID_ID\nGIT_DIFF_FLAG_EXISTS\nGIT_DIFF_FLAG_VALID_SIZE", - "tdef": "typedef", - "description": " Flags for the delta object and the file objects on each side.", - "comments": "

These flags are used for both the flags value of the git_diff_delta and the flags for the git_diff_file objects representing the old and new sides of the delta. Values outside of this public range should be considered reserved for internal or future use.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_FLAG_BINARY", - "comments": "

file(s) treated as binary data

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_FLAG_NOT_BINARY", - "comments": "

file(s) treated as text data

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_FLAG_VALID_ID", - "comments": "

id value is known correct

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_FLAG_EXISTS", - "comments": "

file exists at this side of the delta

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_DIFF_FLAG_VALID_SIZE", - "comments": "

file size value is known correct

\n", - "value": 16 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_format_email_flags_t", - { - "decl": [ - "GIT_DIFF_FORMAT_EMAIL_NONE", - "GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER" - ], - "type": "enum", - "file": "git2/deprecated.h", - "line": 311, - "lineto": 318, - "block": "GIT_DIFF_FORMAT_EMAIL_NONE\nGIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", - "tdef": "typedef", - "description": " Formatting options for diff e-mail generation", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_FORMAT_EMAIL_NONE", - "comments": "

Normal patch, the default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", - "comments": "

Don't insert "[PATCH]" in the subject header

\n", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_format_email_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "size_t patch_no", - "size_t total_patches", - "const git_oid * id", - "const char * summary", - "const char * body", - "const git_signature * author" - ], - "type": "struct", - "value": "git_diff_format_email_options", - "file": "git2/deprecated.h", - "line": 323, - "lineto": 346, - "block": "unsigned int version\nuint32_t flags\nsize_t patch_no\nsize_t total_patches\nconst git_oid * id\nconst char * summary\nconst char * body\nconst git_signature * author", - "tdef": "typedef", - "description": " Options for controlling the formatting of the generated e-mail.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " see `git_diff_format_email_flags_t` above " - }, - { - "type": "size_t", - "name": "patch_no", - "comments": " This patch number " - }, - { - "type": "size_t", - "name": "total_patches", - "comments": " Total number of patches in this series " - }, - { - "type": "const git_oid *", - "name": "id", - "comments": " id to use for the commit " - }, - { - "type": "const char *", - "name": "summary", - "comments": " Summary of the change " - }, - { - "type": "const char *", - "name": "body", - "comments": " Commit message's body " - }, - { - "type": "const git_signature *", - "name": "author", - "comments": " Author of the change " - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_format_email", - "git_diff_format_email_options_init" - ] - } - } - ], - [ - "git_diff_format_t", - { - "decl": [ - "GIT_DIFF_FORMAT_PATCH", - "GIT_DIFF_FORMAT_PATCH_HEADER", - "GIT_DIFF_FORMAT_RAW", - "GIT_DIFF_FORMAT_NAME_ONLY", - "GIT_DIFF_FORMAT_NAME_STATUS", - "GIT_DIFF_FORMAT_PATCH_ID" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 1128, - "lineto": 1135, - "block": "GIT_DIFF_FORMAT_PATCH\nGIT_DIFF_FORMAT_PATCH_HEADER\nGIT_DIFF_FORMAT_RAW\nGIT_DIFF_FORMAT_NAME_ONLY\nGIT_DIFF_FORMAT_NAME_STATUS\nGIT_DIFF_FORMAT_PATCH_ID", - "tdef": "typedef", - "description": " Possible output formats for diff data", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_FORMAT_PATCH", - "comments": "

full git diff

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_PATCH_HEADER", - "comments": "

just the file headers of patch

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_RAW", - "comments": "

like git diff --raw

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_NAME_ONLY", - "comments": "

like git diff --name-only

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_NAME_STATUS", - "comments": "

like git diff --name-status

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_DIFF_FORMAT_PATCH_ID", - "comments": "

git diff as used by git patch-id

\n", - "value": 6 - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_print", - "git_diff_to_buf" - ] - } - } - ], - [ - "git_diff_hunk", - { - "decl": [ - "int old_start", - "int old_lines", - "int new_start", - "int new_lines", - "size_t header_len", - "char [128] header" - ], - "type": "struct", - "value": "git_diff_hunk", - "file": "git2/diff.h", - "line": 576, - "lineto": 583, - "block": "int old_start\nint old_lines\nint new_start\nint new_lines\nsize_t header_len\nchar [128] header", - "tdef": "typedef", - "description": " Structure describing a hunk of a diff.", - "comments": "

A hunk is a span of modified lines in a delta along with some stable surrounding context. You can configure the amount of context and other properties of how hunks are generated. Each hunk also comes with a header that described where it starts and ends in both the old and new versions in the delta.

\n", - "fields": [ - { - "type": "int", - "name": "old_start", - "comments": " Starting line number in old_file " - }, - { - "type": "int", - "name": "old_lines", - "comments": " Number of lines in old_file " - }, - { - "type": "int", - "name": "new_start", - "comments": " Starting line number in new_file " - }, - { - "type": "int", - "name": "new_lines", - "comments": " Number of lines in new_file " - }, - { - "type": "size_t", - "name": "header_len", - "comments": " Number of bytes in header text " - }, - { - "type": "char [128]", - "name": "header", - "comments": " Header text, NUL-byte terminated " - } - ], - "used": { - "returns": [], - "needs": [ - "git_apply_hunk_cb", - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_foreach", - "git_diff_hunk_cb", - "git_diff_line_cb", - "git_patch_get_hunk" - ] - } - } - ], - [ - "git_diff_line", - { - "decl": [ - "char origin", - "int old_lineno", - "int new_lineno", - "int num_lines", - "size_t content_len", - "git_off_t content_offset", - "const char * content" - ], - "type": "struct", - "value": "git_diff_line", - "file": "git2/diff.h", - "line": 631, - "lineto": 639, - "block": "char origin\nint old_lineno\nint new_lineno\nint num_lines\nsize_t content_len\ngit_off_t content_offset\nconst char * content", - "tdef": "typedef", - "description": " Structure describing a line (or data span) of a diff.", - "comments": "

A line is a range of characters inside a hunk. It could be a context line (i.e. in both old and new versions), an added line (i.e. only in the new version), or a removed line (i.e. only in the old version). Unfortunately, we don't know anything about the encoding of data in the file being diffed, so we cannot tell you much about the line content. Line data will not be NUL-byte terminated, however, because it will be just a span of bytes inside the larger file.

\n", - "fields": [ - { - "type": "char", - "name": "origin", - "comments": " A git_diff_line_t value " - }, - { - "type": "int", - "name": "old_lineno", - "comments": " Line number in old file or -1 for added line " - }, - { - "type": "int", - "name": "new_lineno", - "comments": " Line number in new file or -1 for deleted line " - }, - { - "type": "int", - "name": "num_lines", - "comments": " Number of newline characters in content " - }, - { - "type": "size_t", - "name": "content_len", - "comments": " Number of bytes of data " - }, - { - "type": "git_off_t", - "name": "content_offset", - "comments": " Offset in the original file to the content " - }, - { - "type": "const char *", - "name": "content", - "comments": " Pointer to diff text, not NUL-byte terminated " - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_foreach", - "git_diff_line_cb", - "git_diff_print", - "git_patch_get_line_in_hunk", - "git_patch_print" - ] - } - } - ], - [ - "git_diff_line_t", - { - "decl": [ - "GIT_DIFF_LINE_CONTEXT", - "GIT_DIFF_LINE_ADDITION", - "GIT_DIFF_LINE_DELETION", - "GIT_DIFF_LINE_CONTEXT_EOFNL", - "GIT_DIFF_LINE_ADD_EOFNL", - "GIT_DIFF_LINE_DEL_EOFNL", - "GIT_DIFF_LINE_FILE_HDR", - "GIT_DIFF_LINE_HUNK_HDR", - "GIT_DIFF_LINE_BINARY" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 602, - "lineto": 618, - "block": "GIT_DIFF_LINE_CONTEXT\nGIT_DIFF_LINE_ADDITION\nGIT_DIFF_LINE_DELETION\nGIT_DIFF_LINE_CONTEXT_EOFNL\nGIT_DIFF_LINE_ADD_EOFNL\nGIT_DIFF_LINE_DEL_EOFNL\nGIT_DIFF_LINE_FILE_HDR\nGIT_DIFF_LINE_HUNK_HDR\nGIT_DIFF_LINE_BINARY", - "tdef": "typedef", - "description": " Line origin constants.", - "comments": "

These values describe where a line came from and will be passed to the git_diff_line_cb when iterating over a diff. There are some special origin constants at the end that are used for the text output callbacks to demarcate lines that are actually part of the file or hunk headers.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_LINE_CONTEXT", - "comments": "", - "value": 32 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_ADDITION", - "comments": "", - "value": 43 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_DELETION", - "comments": "", - "value": 45 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_CONTEXT_EOFNL", - "comments": "

Both files have no LF at end

\n", - "value": 61 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_ADD_EOFNL", - "comments": "

Old has no LF at end, new does

\n", - "value": 62 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_DEL_EOFNL", - "comments": "

Old has LF at end, new does not

\n", - "value": 60 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_FILE_HDR", - "comments": "", - "value": 70 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_HUNK_HDR", - "comments": "", - "value": 72 - }, - { - "type": "int", - "name": "GIT_DIFF_LINE_BINARY", - "comments": "

For "Binary files x and y differ"

\n", - "value": 66 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_option_t", - { - "decl": [ - "GIT_DIFF_NORMAL", - "GIT_DIFF_REVERSE", - "GIT_DIFF_INCLUDE_IGNORED", - "GIT_DIFF_RECURSE_IGNORED_DIRS", - "GIT_DIFF_INCLUDE_UNTRACKED", - "GIT_DIFF_RECURSE_UNTRACKED_DIRS", - "GIT_DIFF_INCLUDE_UNMODIFIED", - "GIT_DIFF_INCLUDE_TYPECHANGE", - "GIT_DIFF_INCLUDE_TYPECHANGE_TREES", - "GIT_DIFF_IGNORE_FILEMODE", - "GIT_DIFF_IGNORE_SUBMODULES", - "GIT_DIFF_IGNORE_CASE", - "GIT_DIFF_INCLUDE_CASECHANGE", - "GIT_DIFF_DISABLE_PATHSPEC_MATCH", - "GIT_DIFF_SKIP_BINARY_CHECK", - "GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS", - "GIT_DIFF_UPDATE_INDEX", - "GIT_DIFF_INCLUDE_UNREADABLE", - "GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED", - "GIT_DIFF_INDENT_HEURISTIC", - "GIT_DIFF_IGNORE_BLANK_LINES", - "GIT_DIFF_FORCE_TEXT", - "GIT_DIFF_FORCE_BINARY", - "GIT_DIFF_IGNORE_WHITESPACE", - "GIT_DIFF_IGNORE_WHITESPACE_CHANGE", - "GIT_DIFF_IGNORE_WHITESPACE_EOL", - "GIT_DIFF_SHOW_UNTRACKED_CONTENT", - "GIT_DIFF_SHOW_UNMODIFIED", - "GIT_DIFF_PATIENCE", - "GIT_DIFF_MINIMAL", - "GIT_DIFF_SHOW_BINARY" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 28, - "lineto": 174, - "block": "GIT_DIFF_NORMAL\nGIT_DIFF_REVERSE\nGIT_DIFF_INCLUDE_IGNORED\nGIT_DIFF_RECURSE_IGNORED_DIRS\nGIT_DIFF_INCLUDE_UNTRACKED\nGIT_DIFF_RECURSE_UNTRACKED_DIRS\nGIT_DIFF_INCLUDE_UNMODIFIED\nGIT_DIFF_INCLUDE_TYPECHANGE\nGIT_DIFF_INCLUDE_TYPECHANGE_TREES\nGIT_DIFF_IGNORE_FILEMODE\nGIT_DIFF_IGNORE_SUBMODULES\nGIT_DIFF_IGNORE_CASE\nGIT_DIFF_INCLUDE_CASECHANGE\nGIT_DIFF_DISABLE_PATHSPEC_MATCH\nGIT_DIFF_SKIP_BINARY_CHECK\nGIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS\nGIT_DIFF_UPDATE_INDEX\nGIT_DIFF_INCLUDE_UNREADABLE\nGIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED\nGIT_DIFF_INDENT_HEURISTIC\nGIT_DIFF_IGNORE_BLANK_LINES\nGIT_DIFF_FORCE_TEXT\nGIT_DIFF_FORCE_BINARY\nGIT_DIFF_IGNORE_WHITESPACE\nGIT_DIFF_IGNORE_WHITESPACE_CHANGE\nGIT_DIFF_IGNORE_WHITESPACE_EOL\nGIT_DIFF_SHOW_UNTRACKED_CONTENT\nGIT_DIFF_SHOW_UNMODIFIED\nGIT_DIFF_PATIENCE\nGIT_DIFF_MINIMAL\nGIT_DIFF_SHOW_BINARY", - "tdef": "typedef", - "description": " Flags for diff options. A combination of these flags can be passed\n in via the `flags` value in the `git_diff_options`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_NORMAL", - "comments": "

Normal diff, the default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_REVERSE", - "comments": "

Reverse the sides of the diff

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_IGNORED", - "comments": "

Include ignored files in the diff

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_RECURSE_IGNORED_DIRS", - "comments": "

Even with GIT_DIFF_INCLUDE_IGNORED, an entire ignored directory\n will be marked with only a single entry in the diff; this flag\n adds all files under the directory as IGNORED entries, too.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_UNTRACKED", - "comments": "

Include untracked files in the diff

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_DIFF_RECURSE_UNTRACKED_DIRS", - "comments": "

Even with GIT_DIFF_INCLUDE_UNTRACKED, an entire untracked\n directory will be marked with only a single entry in the diff\n (a la what core Git does in git status); this flag adds all\n files under untracked directories as UNTRACKED entries, too.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_UNMODIFIED", - "comments": "

Include unmodified files in the diff

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_TYPECHANGE", - "comments": "

Normally, a type change between files will be converted into a\n DELETED record for the old and an ADDED record for the new; this\n options enabled the generation of TYPECHANGE delta records.

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_TYPECHANGE_TREES", - "comments": "

Even with GIT_DIFF_INCLUDE_TYPECHANGE, blob->tree changes still\n generally show as a DELETED blob. This flag tries to correctly\n label blob->tree transitions as TYPECHANGE records with new_file's\n mode set to tree. Note: the tree SHA will not be available.

\n", - "value": 128 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_FILEMODE", - "comments": "

Ignore file mode changes

\n", - "value": 256 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_SUBMODULES", - "comments": "

Treat all submodules as unmodified

\n", - "value": 512 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_CASE", - "comments": "

Use case insensitive filename comparisons

\n", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_CASECHANGE", - "comments": "

May be combined with GIT_DIFF_IGNORE_CASE to specify that a file\n that has changed case will be returned as an add/delete pair.

\n", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_DIFF_DISABLE_PATHSPEC_MATCH", - "comments": "

If the pathspec is set in the diff options, this flags indicates\n that the paths will be treated as literal paths instead of\n fnmatch patterns. Each path in the list must either be a full\n path to a file or a directory. (A trailing slash indicates that\n the path will only match a directory). If a directory is\n specified, all children will be included.

\n", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_DIFF_SKIP_BINARY_CHECK", - "comments": "

Disable updating of the binary flag in delta records. This is\n useful when iterating over a diff if you don't need hunk and data\n callbacks and want to avoid having to load file completely.

\n", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS", - "comments": "

When diff finds an untracked directory, to match the behavior of\n core Git, it scans the contents for IGNORED and UNTRACKED files.\n If all contents are IGNORED, then the directory is IGNORED; if\n any contents are not IGNORED, then the directory is UNTRACKED.\n This is extra work that may not matter in many cases. This flag\n turns off that scan and immediately labels an untracked directory\n as UNTRACKED (changing the behavior to not match core Git).

\n", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_DIFF_UPDATE_INDEX", - "comments": "

When diff finds a file in the working directory with stat\n information different from the index, but the OID ends up being the\n same, write the correct stat information into the index. Note:\n without this flag, diff will always leave the index untouched.

\n", - "value": 32768 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_UNREADABLE", - "comments": "

Include unreadable files in the diff

\n", - "value": 65536 - }, - { - "type": "int", - "name": "GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED", - "comments": "

Include unreadable files in the diff

\n", - "value": 131072 - }, - { - "type": "int", - "name": "GIT_DIFF_INDENT_HEURISTIC", - "comments": "

Use a heuristic that takes indentation and whitespace into account\n which generally can produce better diffs when dealing with ambiguous\n diff hunks.

\n", - "value": 262144 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_BLANK_LINES", - "comments": "

Ignore blank lines

\n", - "value": 524288 - }, - { - "type": "int", - "name": "GIT_DIFF_FORCE_TEXT", - "comments": "

Treat all files as text, disabling binary attributes \n&\n detection

\n", - "value": 1048576 - }, - { - "type": "int", - "name": "GIT_DIFF_FORCE_BINARY", - "comments": "

Treat all files as binary, disabling text diffs

\n", - "value": 2097152 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_WHITESPACE", - "comments": "

Ignore all whitespace

\n", - "value": 4194304 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_WHITESPACE_CHANGE", - "comments": "

Ignore changes in amount of whitespace

\n", - "value": 8388608 - }, - { - "type": "int", - "name": "GIT_DIFF_IGNORE_WHITESPACE_EOL", - "comments": "

Ignore whitespace at end of line

\n", - "value": 16777216 - }, - { - "type": "int", - "name": "GIT_DIFF_SHOW_UNTRACKED_CONTENT", - "comments": "

When generating patch text, include the content of untracked\n files. This automatically turns on GIT_DIFF_INCLUDE_UNTRACKED but\n it does not turn on GIT_DIFF_RECURSE_UNTRACKED_DIRS. Add that\n flag if you want the content of every single UNTRACKED file.

\n", - "value": 33554432 - }, - { - "type": "int", - "name": "GIT_DIFF_SHOW_UNMODIFIED", - "comments": "

When generating output, include the names of unmodified files if\n they are included in the git_diff. Normally these are skipped in\n the formats that list files (e.g. name-only, name-status, raw).\n Even with this, these will not be included in patch format.

\n", - "value": 67108864 - }, - { - "type": "int", - "name": "GIT_DIFF_PATIENCE", - "comments": "

Use the "patience diff" algorithm

\n", - "value": 268435456 - }, - { - "type": "int", - "name": "GIT_DIFF_MINIMAL", - "comments": "

Take extra time to find minimal diff

\n", - "value": 536870912 - }, - { - "type": "int", - "name": "GIT_DIFF_SHOW_BINARY", - "comments": "

Include the necessary deflate / delta information so that git-apply\n can apply given diff information to binary files.

\n", - "value": 1073741824 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "git_submodule_ignore_t ignore_submodules", - "git_strarray pathspec", - "git_diff_notify_cb notify_cb", - "git_diff_progress_cb progress_cb", - "void * payload", - "uint32_t context_lines", - "uint32_t interhunk_lines", - "git_oid_t oid_type", - "uint16_t id_abbrev", - "git_off_t max_size", - "const char * old_prefix", - "const char * new_prefix" - ], - "type": "struct", - "value": "git_diff_options", - "file": "git2/diff.h", - "line": 376, - "lineto": 464, - "block": "unsigned int version\nuint32_t flags\ngit_submodule_ignore_t ignore_submodules\ngit_strarray pathspec\ngit_diff_notify_cb notify_cb\ngit_diff_progress_cb progress_cb\nvoid * payload\nuint32_t context_lines\nuint32_t interhunk_lines\ngit_oid_t oid_type\nuint16_t id_abbrev\ngit_off_t max_size\nconst char * old_prefix\nconst char * new_prefix", - "tdef": "typedef", - "description": " Structure describing options about how the diff should be executed.", - "comments": "

Setting all values of the structure to zero will yield the default values. Similarly, passing NULL for the options structure will give the defaults. The default values are marked below.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " version for the struct " - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of `git_diff_option_t` values above.\n Defaults to GIT_DIFF_NORMAL" - }, - { - "type": "git_submodule_ignore_t", - "name": "ignore_submodules", - "comments": " Overrides the submodule ignore setting for all submodules in the diff. " - }, - { - "type": "git_strarray", - "name": "pathspec", - "comments": " An array of paths / fnmatch patterns to constrain diff.\n All paths are included by default." - }, - { - "type": "git_diff_notify_cb", - "name": "notify_cb", - "comments": " An optional callback function, notifying the consumer of changes to\n the diff as new deltas are added." - }, - { - "type": "git_diff_progress_cb", - "name": "progress_cb", - "comments": " An optional callback function, notifying the consumer of which files\n are being examined as the diff is generated." - }, - { - "type": "void *", - "name": "payload", - "comments": " The payload to pass to the callback functions. " - }, - { - "type": "uint32_t", - "name": "context_lines", - "comments": " The number of unchanged lines that define the boundary of a hunk\n (and to display before and after). Defaults to 3." - }, - { - "type": "uint32_t", - "name": "interhunk_lines", - "comments": " The maximum number of unchanged lines between hunk boundaries before\n the hunks will be merged into one. Defaults to 0." - }, - { - "type": "git_oid_t", - "name": "oid_type", - "comments": " The object ID type to emit in diffs; this is used by functions\n that operate without a repository - namely `git_diff_buffers`,\n or `git_diff_blobs` and `git_diff_blob_to_buffer` when one blob\n is `NULL`.\n\n This may be omitted (set to `0`). If a repository is available,\n the object ID format of the repository will be used. If no\n repository is available then the default is `GIT_OID_SHA`.\n\n If this is specified and a repository is available, then the\n specified `oid_type` must match the repository's object ID\n format." - }, - { - "type": "uint16_t", - "name": "id_abbrev", - "comments": " The abbreviation length to use when formatting object ids.\n Defaults to the value of 'core.abbrev' from the config, or 7 if unset." - }, - { - "type": "git_off_t", - "name": "max_size", - "comments": " A size (in bytes) above which a blob will be marked as binary\n automatically; pass a negative value to disable.\n Defaults to 512MB." - }, - { - "type": "const char *", - "name": "old_prefix", - "comments": " The virtual \"directory\" prefix for old file names in hunk headers.\n Default is \"a\"." - }, - { - "type": "const char *", - "name": "new_prefix", - "comments": " The virtual \"directory\" prefix for new file names in hunk headers.\n Defaults to \"b\"." - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_commit_as_email", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_options_init", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs", - "git_patch_from_buffers" - ] - } - } - ], - [ - "git_diff_parse_options", - { - "decl": [ - "unsigned int version", - "git_oid_t oid_type" - ], - "type": "struct", - "value": "git_diff_parse_options", - "file": "git2/diff.h", - "line": 1294, - "lineto": 1297, - "block": "unsigned int version\ngit_oid_t oid_type", - "tdef": "typedef", - "description": " Options for parsing a diff / patch file.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_oid_t", - "name": "oid_type", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_patchid_options", - { - "decl": [ - "unsigned int version" - ], - "type": "struct", - "value": "git_diff_patchid_options", - "file": "git2/diff.h", - "line": 1431, - "lineto": 1433, - "block": "unsigned int version", - "tdef": "typedef", - "description": " Patch ID options structure", - "comments": "

Initialize with GIT_PATCHID_OPTIONS_INIT. Alternatively, you can use git_diff_patchid_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_patchid", - "git_diff_patchid_options_init" - ] - } - } - ], - [ - "git_diff_similarity_metric", - { - "decl": [ - "int (*)(void **, const git_diff_file *, const char *, void *) file_signature", - "int (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature", - "void (*)(void *, void *) free_signature", - "int (*)(int *, void *, void *, void *) similarity", - "void * payload" - ], - "type": "struct", - "value": "git_diff_similarity_metric", - "file": "git2/diff.h", - "line": 732, - "lineto": 742, - "block": "int (*)(void **, const git_diff_file *, const char *, void *) file_signature\nint (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature\nvoid (*)(void *, void *) free_signature\nint (*)(int *, void *, void *, void *) similarity\nvoid * payload", - "tdef": "typedef", - "description": " Pluggable similarity metric", - "comments": "", - "fields": [ - { - "type": "int (*)(void **, const git_diff_file *, const char *, void *)", - "name": "file_signature", - "comments": "" - }, - { - "type": "int (*)(void **, const git_diff_file *, const char *, size_t, void *)", - "name": "buffer_signature", - "comments": "" - }, - { - "type": "void (*)(void *, void *)", - "name": "free_signature", - "comments": "" - }, - { - "type": "int (*)(int *, void *, void *, void *)", - "name": "similarity", - "comments": "" - }, - { - "type": "void *", - "name": "payload", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_diff_stats", - { - "decl": "git_diff_stats", - "type": "struct", - "value": "git_diff_stats", - "file": "git2/diff.h", - "line": 1341, - "lineto": 1341, - "tdef": "typedef", - "description": " This is an opaque structure which is allocated by `git_diff_get_stats`.\n You are responsible for releasing the object memory when done, using the\n `git_diff_stats_free()` function.", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_diff_get_stats", - "git_diff_stats_deletions", - "git_diff_stats_files_changed", - "git_diff_stats_free", - "git_diff_stats_insertions", - "git_diff_stats_to_buf" - ] - } - } - ], - [ - "git_diff_stats_format_t", - { - "decl": [ - "GIT_DIFF_STATS_NONE", - "GIT_DIFF_STATS_FULL", - "GIT_DIFF_STATS_SHORT", - "GIT_DIFF_STATS_NUMBER", - "GIT_DIFF_STATS_INCLUDE_SUMMARY" - ], - "type": "enum", - "file": "git2/diff.h", - "line": 1346, - "lineto": 1361, - "block": "GIT_DIFF_STATS_NONE\nGIT_DIFF_STATS_FULL\nGIT_DIFF_STATS_SHORT\nGIT_DIFF_STATS_NUMBER\nGIT_DIFF_STATS_INCLUDE_SUMMARY", - "tdef": "typedef", - "description": " Formatting options for diff stats", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_DIFF_STATS_NONE", - "comments": "

No stats

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIFF_STATS_FULL", - "comments": "

Full statistics, equivalent of --stat

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_DIFF_STATS_SHORT", - "comments": "

Short statistics, equivalent of --shortstat

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_DIFF_STATS_NUMBER", - "comments": "

Number statistics, equivalent of --numstat

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_DIFF_STATS_INCLUDE_SUMMARY", - "comments": "

Extended header information such as creations, renames and mode changes, equivalent of --summary

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [ - "git_diff_stats_to_buf" - ] - } - } - ], - [ - "git_direction", - { - "decl": [ - "GIT_DIRECTION_FETCH", - "GIT_DIRECTION_PUSH" - ], - "type": "enum", - "file": "git2/net.h", - "line": 31, - "lineto": 34, - "block": "GIT_DIRECTION_FETCH\nGIT_DIRECTION_PUSH", - "tdef": "typedef", - "description": " Direction of the connection.", - "comments": "

We need this because we need to know whether we should call git-upload-pack or git-receive-pack on the remote end when get_refs gets called.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_DIRECTION_FETCH", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_DIRECTION_PUSH", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [ - "git_refspec_direction" - ], - "needs": [ - "git_remote_connect", - "git_remote_connect_ext" - ] - } - } - ], - [ - "git_email_create_flags_t", - { - "decl": [ - "GIT_EMAIL_CREATE_DEFAULT", - "GIT_EMAIL_CREATE_OMIT_NUMBERS", - "GIT_EMAIL_CREATE_ALWAYS_NUMBER", - "GIT_EMAIL_CREATE_NO_RENAMES" - ], - "type": "enum", - "file": "git2/email.h", - "line": 23, - "lineto": 38, - "block": "GIT_EMAIL_CREATE_DEFAULT\nGIT_EMAIL_CREATE_OMIT_NUMBERS\nGIT_EMAIL_CREATE_ALWAYS_NUMBER\nGIT_EMAIL_CREATE_NO_RENAMES", - "tdef": "typedef", - "description": " Formatting options for diff e-mail generation", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_EMAIL_CREATE_DEFAULT", - "comments": "

Normal patch, the default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_EMAIL_CREATE_OMIT_NUMBERS", - "comments": "

Do not include patch numbers in the subject prefix.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_EMAIL_CREATE_ALWAYS_NUMBER", - "comments": "

Include numbers in the subject prefix even when the\n patch is for a single commit (1/1).

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_EMAIL_CREATE_NO_RENAMES", - "comments": "

Do not perform rename or similarity detection.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_error", - { - "decl": [ - "char * message", - "int klass" - ], - "type": "struct", - "value": "git_error", - "file": "git2/errors.h", - "line": 71, - "lineto": 74, - "block": "char * message\nint klass", - "tdef": "typedef", - "description": " Structure to store extra details of the last error that occurred.", - "comments": "

This is kept on a per-thread basis if GIT_THREADS was defined when the library was build, otherwise one is kept globally for the library

\n", - "fields": [ - { - "type": "char *", - "name": "message", - "comments": "" - }, - { - "type": "int", - "name": "klass", - "comments": "" - } - ], - "used": { - "returns": [ - "git_error_last", - "giterr_last" - ], - "needs": [] - } - } - ], - [ - "git_error_code", - { - "decl": [ - "GIT_OK", - "GIT_ERROR", - "GIT_ENOTFOUND", - "GIT_EEXISTS", - "GIT_EAMBIGUOUS", - "GIT_EBUFS", - "GIT_EUSER", - "GIT_EBAREREPO", - "GIT_EUNBORNBRANCH", - "GIT_EUNMERGED", - "GIT_ENONFASTFORWARD", - "GIT_EINVALIDSPEC", - "GIT_ECONFLICT", - "GIT_ELOCKED", - "GIT_EMODIFIED", - "GIT_EAUTH", - "GIT_ECERTIFICATE", - "GIT_EAPPLIED", - "GIT_EPEEL", - "GIT_EEOF", - "GIT_EINVALID", - "GIT_EUNCOMMITTED", - "GIT_EDIRECTORY", - "GIT_EMERGECONFLICT", - "GIT_PASSTHROUGH", - "GIT_ITEROVER", - "GIT_RETRY", - "GIT_EMISMATCH", - "GIT_EINDEXDIRTY", - "GIT_EAPPLYFAIL", - "GIT_EOWNER", - "GIT_TIMEOUT" - ], - "type": "enum", - "file": "git2/errors.h", - "line": 21, - "lineto": 63, - "block": "GIT_OK\nGIT_ERROR\nGIT_ENOTFOUND\nGIT_EEXISTS\nGIT_EAMBIGUOUS\nGIT_EBUFS\nGIT_EUSER\nGIT_EBAREREPO\nGIT_EUNBORNBRANCH\nGIT_EUNMERGED\nGIT_ENONFASTFORWARD\nGIT_EINVALIDSPEC\nGIT_ECONFLICT\nGIT_ELOCKED\nGIT_EMODIFIED\nGIT_EAUTH\nGIT_ECERTIFICATE\nGIT_EAPPLIED\nGIT_EPEEL\nGIT_EEOF\nGIT_EINVALID\nGIT_EUNCOMMITTED\nGIT_EDIRECTORY\nGIT_EMERGECONFLICT\nGIT_PASSTHROUGH\nGIT_ITEROVER\nGIT_RETRY\nGIT_EMISMATCH\nGIT_EINDEXDIRTY\nGIT_EAPPLYFAIL\nGIT_EOWNER\nGIT_TIMEOUT", - "tdef": "typedef", - "description": " Generic return codes ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_OK", - "comments": "

No error

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_ERROR", - "comments": "

Generic error

\n", - "value": -1 - }, - { - "type": "int", - "name": "GIT_ENOTFOUND", - "comments": "

Requested object could not be found

\n", - "value": -3 - }, - { - "type": "int", - "name": "GIT_EEXISTS", - "comments": "

Object exists preventing operation

\n", - "value": -4 - }, - { - "type": "int", - "name": "GIT_EAMBIGUOUS", - "comments": "

More than one object matches

\n", - "value": -5 - }, - { - "type": "int", - "name": "GIT_EBUFS", - "comments": "

Output buffer too short to hold data

\n", - "value": -6 - }, - { - "type": "int", - "name": "GIT_EUSER", - "comments": "

GIT_EUSER is a special error that is never generated by libgit2\n code. You can return it from a callback (e.g to stop an iteration)\n to know that it was generated by the callback and not by libgit2.

\n", - "value": -7 - }, - { - "type": "int", - "name": "GIT_EBAREREPO", - "comments": "

Operation not allowed on bare repository

\n", - "value": -8 - }, - { - "type": "int", - "name": "GIT_EUNBORNBRANCH", - "comments": "

HEAD refers to branch with no commits

\n", - "value": -9 - }, - { - "type": "int", - "name": "GIT_EUNMERGED", - "comments": "

Merge in progress prevented operation

\n", - "value": -10 - }, - { - "type": "int", - "name": "GIT_ENONFASTFORWARD", - "comments": "

Reference was not fast-forwardable

\n", - "value": -11 - }, - { - "type": "int", - "name": "GIT_EINVALIDSPEC", - "comments": "

Name/ref spec was not in a valid format

\n", - "value": -12 - }, - { - "type": "int", - "name": "GIT_ECONFLICT", - "comments": "

Checkout conflicts prevented operation

\n", - "value": -13 - }, - { - "type": "int", - "name": "GIT_ELOCKED", - "comments": "

Lock file prevented operation

\n", - "value": -14 - }, - { - "type": "int", - "name": "GIT_EMODIFIED", - "comments": "

Reference value does not match expected

\n", - "value": -15 - }, - { - "type": "int", - "name": "GIT_EAUTH", - "comments": "

Authentication error

\n", - "value": -16 - }, - { - "type": "int", - "name": "GIT_ECERTIFICATE", - "comments": "

Server certificate is invalid

\n", - "value": -17 - }, - { - "type": "int", - "name": "GIT_EAPPLIED", - "comments": "

Patch/merge has already been applied

\n", - "value": -18 - }, - { - "type": "int", - "name": "GIT_EPEEL", - "comments": "

The requested peel operation is not possible

\n", - "value": -19 - }, - { - "type": "int", - "name": "GIT_EEOF", - "comments": "

Unexpected EOF

\n", - "value": -20 - }, - { - "type": "int", - "name": "GIT_EINVALID", - "comments": "

Invalid operation or input

\n", - "value": -21 - }, - { - "type": "int", - "name": "GIT_EUNCOMMITTED", - "comments": "

Uncommitted changes in index prevented operation

\n", - "value": -22 - }, - { - "type": "int", - "name": "GIT_EDIRECTORY", - "comments": "

The operation is not valid for a directory

\n", - "value": -23 - }, - { - "type": "int", - "name": "GIT_EMERGECONFLICT", - "comments": "

A merge conflict exists and cannot continue

\n", - "value": -24 - }, - { - "type": "int", - "name": "GIT_PASSTHROUGH", - "comments": "

A user-configured callback refused to act

\n", - "value": -30 - }, - { - "type": "int", - "name": "GIT_ITEROVER", - "comments": "

Signals end of iteration with iterator

\n", - "value": -31 - }, - { - "type": "int", - "name": "GIT_RETRY", - "comments": "

Internal only

\n", - "value": -32 - }, - { - "type": "int", - "name": "GIT_EMISMATCH", - "comments": "

Hashsum mismatch in object

\n", - "value": -33 - }, - { - "type": "int", - "name": "GIT_EINDEXDIRTY", - "comments": "

Unsaved changes in the index would be overwritten

\n", - "value": -34 - }, - { - "type": "int", - "name": "GIT_EAPPLYFAIL", - "comments": "

Patch application failed

\n", - "value": -35 - }, - { - "type": "int", - "name": "GIT_EOWNER", - "comments": "

The object is not owned by the current user

\n", - "value": -36 - }, - { - "type": "int", - "name": "GIT_TIMEOUT", - "comments": "

The operation timed out

\n", - "value": -37 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_error_t", - { - "decl": [ - "GIT_ERROR_NONE", - "GIT_ERROR_NOMEMORY", - "GIT_ERROR_OS", - "GIT_ERROR_INVALID", - "GIT_ERROR_REFERENCE", - "GIT_ERROR_ZLIB", - "GIT_ERROR_REPOSITORY", - "GIT_ERROR_CONFIG", - "GIT_ERROR_REGEX", - "GIT_ERROR_ODB", - "GIT_ERROR_INDEX", - "GIT_ERROR_OBJECT", - "GIT_ERROR_NET", - "GIT_ERROR_TAG", - "GIT_ERROR_TREE", - "GIT_ERROR_INDEXER", - "GIT_ERROR_SSL", - "GIT_ERROR_SUBMODULE", - "GIT_ERROR_THREAD", - "GIT_ERROR_STASH", - "GIT_ERROR_CHECKOUT", - "GIT_ERROR_FETCHHEAD", - "GIT_ERROR_MERGE", - "GIT_ERROR_SSH", - "GIT_ERROR_FILTER", - "GIT_ERROR_REVERT", - "GIT_ERROR_CALLBACK", - "GIT_ERROR_CHERRYPICK", - "GIT_ERROR_DESCRIBE", - "GIT_ERROR_REBASE", - "GIT_ERROR_FILESYSTEM", - "GIT_ERROR_PATCH", - "GIT_ERROR_WORKTREE", - "GIT_ERROR_SHA", - "GIT_ERROR_HTTP", - "GIT_ERROR_INTERNAL", - "GIT_ERROR_GRAFTS" - ], - "type": "enum", - "file": "git2/errors.h", - "line": 77, - "lineto": 115, - "block": "GIT_ERROR_NONE\nGIT_ERROR_NOMEMORY\nGIT_ERROR_OS\nGIT_ERROR_INVALID\nGIT_ERROR_REFERENCE\nGIT_ERROR_ZLIB\nGIT_ERROR_REPOSITORY\nGIT_ERROR_CONFIG\nGIT_ERROR_REGEX\nGIT_ERROR_ODB\nGIT_ERROR_INDEX\nGIT_ERROR_OBJECT\nGIT_ERROR_NET\nGIT_ERROR_TAG\nGIT_ERROR_TREE\nGIT_ERROR_INDEXER\nGIT_ERROR_SSL\nGIT_ERROR_SUBMODULE\nGIT_ERROR_THREAD\nGIT_ERROR_STASH\nGIT_ERROR_CHECKOUT\nGIT_ERROR_FETCHHEAD\nGIT_ERROR_MERGE\nGIT_ERROR_SSH\nGIT_ERROR_FILTER\nGIT_ERROR_REVERT\nGIT_ERROR_CALLBACK\nGIT_ERROR_CHERRYPICK\nGIT_ERROR_DESCRIBE\nGIT_ERROR_REBASE\nGIT_ERROR_FILESYSTEM\nGIT_ERROR_PATCH\nGIT_ERROR_WORKTREE\nGIT_ERROR_SHA\nGIT_ERROR_HTTP\nGIT_ERROR_INTERNAL\nGIT_ERROR_GRAFTS", - "tdef": "typedef", - "description": " Error classes ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_ERROR_NONE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_ERROR_NOMEMORY", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_ERROR_OS", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_ERROR_INVALID", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_ERROR_REFERENCE", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_ERROR_ZLIB", - "comments": "", - "value": 5 - }, - { - "type": "int", - "name": "GIT_ERROR_REPOSITORY", - "comments": "", - "value": 6 - }, - { - "type": "int", - "name": "GIT_ERROR_CONFIG", - "comments": "", - "value": 7 - }, - { - "type": "int", - "name": "GIT_ERROR_REGEX", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_ERROR_ODB", - "comments": "", - "value": 9 - }, - { - "type": "int", - "name": "GIT_ERROR_INDEX", - "comments": "", - "value": 10 - }, - { - "type": "int", - "name": "GIT_ERROR_OBJECT", - "comments": "", - "value": 11 - }, - { - "type": "int", - "name": "GIT_ERROR_NET", - "comments": "", - "value": 12 - }, - { - "type": "int", - "name": "GIT_ERROR_TAG", - "comments": "", - "value": 13 - }, - { - "type": "int", - "name": "GIT_ERROR_TREE", - "comments": "", - "value": 14 - }, - { - "type": "int", - "name": "GIT_ERROR_INDEXER", - "comments": "", - "value": 15 - }, - { - "type": "int", - "name": "GIT_ERROR_SSL", - "comments": "", - "value": 16 - }, - { - "type": "int", - "name": "GIT_ERROR_SUBMODULE", - "comments": "", - "value": 17 - }, - { - "type": "int", - "name": "GIT_ERROR_THREAD", - "comments": "", - "value": 18 - }, - { - "type": "int", - "name": "GIT_ERROR_STASH", - "comments": "", - "value": 19 - }, - { - "type": "int", - "name": "GIT_ERROR_CHECKOUT", - "comments": "", - "value": 20 - }, - { - "type": "int", - "name": "GIT_ERROR_FETCHHEAD", - "comments": "", - "value": 21 - }, - { - "type": "int", - "name": "GIT_ERROR_MERGE", - "comments": "", - "value": 22 - }, - { - "type": "int", - "name": "GIT_ERROR_SSH", - "comments": "", - "value": 23 - }, - { - "type": "int", - "name": "GIT_ERROR_FILTER", - "comments": "", - "value": 24 - }, - { - "type": "int", - "name": "GIT_ERROR_REVERT", - "comments": "", - "value": 25 - }, - { - "type": "int", - "name": "GIT_ERROR_CALLBACK", - "comments": "", - "value": 26 - }, - { - "type": "int", - "name": "GIT_ERROR_CHERRYPICK", - "comments": "", - "value": 27 - }, - { - "type": "int", - "name": "GIT_ERROR_DESCRIBE", - "comments": "", - "value": 28 - }, - { - "type": "int", - "name": "GIT_ERROR_REBASE", - "comments": "", - "value": 29 - }, - { - "type": "int", - "name": "GIT_ERROR_FILESYSTEM", - "comments": "", - "value": 30 - }, - { - "type": "int", - "name": "GIT_ERROR_PATCH", - "comments": "", - "value": 31 - }, - { - "type": "int", - "name": "GIT_ERROR_WORKTREE", - "comments": "", - "value": 32 - }, - { - "type": "int", - "name": "GIT_ERROR_SHA", - "comments": "", - "value": 33 - }, - { - "type": "int", - "name": "GIT_ERROR_HTTP", - "comments": "", - "value": 34 - }, - { - "type": "int", - "name": "GIT_ERROR_INTERNAL", - "comments": "", - "value": 35 - }, - { - "type": "int", - "name": "GIT_ERROR_GRAFTS", - "comments": "", - "value": 36 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_feature_t", - { - "decl": [ - "GIT_FEATURE_THREADS", - "GIT_FEATURE_HTTPS", - "GIT_FEATURE_SSH", - "GIT_FEATURE_NSEC" - ], - "type": "enum", - "file": "git2/common.h", - "line": 134, - "lineto": 157, - "block": "GIT_FEATURE_THREADS\nGIT_FEATURE_HTTPS\nGIT_FEATURE_SSH\nGIT_FEATURE_NSEC", - "tdef": "typedef", - "description": " Combinations of these values describe the features with which libgit2\n was compiled", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FEATURE_THREADS", - "comments": "

If set, libgit2 was built thread-aware and can be safely used from multiple\n threads.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_FEATURE_HTTPS", - "comments": "

If set, libgit2 was built with and linked against a TLS implementation.\n Custom TLS streams may still be added by the user to support HTTPS\n regardless of this.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_FEATURE_SSH", - "comments": "

If set, libgit2 was built with and linked against libssh2. A custom\n transport may still be added by the user to support libssh2 regardless of\n this.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_FEATURE_NSEC", - "comments": "

If set, libgit2 was built with support for sub-second resolution in file\n modification times.

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_fetch_depth_t", - { - "decl": [ - "GIT_FETCH_DEPTH_FULL", - "GIT_FETCH_DEPTH_UNSHALLOW" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 706, - "lineto": 712, - "block": "GIT_FETCH_DEPTH_FULL\nGIT_FETCH_DEPTH_UNSHALLOW", - "tdef": "typedef", - "description": " Constants for fetch depth (shallowness of fetch). ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FETCH_DEPTH_FULL", - "comments": "

The fetch is "full" (not shallow). This is the default.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FETCH_DEPTH_UNSHALLOW", - "comments": "

The fetch should "unshallow" and fetch missing data.

\n", - "value": 2147483647 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_fetch_options", - { - "decl": [ - "int version", - "git_remote_callbacks callbacks", - "git_fetch_prune_t prune", - "int update_fetchhead", - "git_remote_autotag_option_t download_tags", - "git_proxy_options proxy_opts", - "int depth", - "git_remote_redirect_t follow_redirects", - "git_strarray custom_headers" - ], - "type": "struct", - "value": "git_fetch_options", - "file": "git2/remote.h", - "line": 722, - "lineto": 775, - "block": "int version\ngit_remote_callbacks callbacks\ngit_fetch_prune_t prune\nint update_fetchhead\ngit_remote_autotag_option_t download_tags\ngit_proxy_options proxy_opts\nint depth\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", - "tdef": "typedef", - "description": " Fetch options structure.", - "comments": "

Zero out for defaults. Initialize with GIT_FETCH_OPTIONS_INIT macro to correctly set the version field. E.g.

\n\n
    git_fetch_options opts = GIT_FETCH_OPTIONS_INIT;\n
\n", - "fields": [ - { - "type": "int", - "name": "version", - "comments": "" - }, - { - "type": "git_remote_callbacks", - "name": "callbacks", - "comments": " Callbacks to use for this fetch operation" - }, - { - "type": "git_fetch_prune_t", - "name": "prune", - "comments": " Whether to perform a prune after the fetch" - }, - { - "type": "int", - "name": "update_fetchhead", - "comments": " Whether to write the results to FETCH_HEAD. Defaults to\n on. Leave this default in order to behave like git." - }, - { - "type": "git_remote_autotag_option_t", - "name": "download_tags", - "comments": " Determines how to behave regarding tags on the remote, such\n as auto-downloading tags for objects we're downloading or\n downloading all of them.\n\n The default is to auto-follow tags." - }, - { - "type": "git_proxy_options", - "name": "proxy_opts", - "comments": " Proxy options to use, by default no proxy is used." - }, - { - "type": "int", - "name": "depth", - "comments": " Depth of the fetch to perform, or `GIT_FETCH_DEPTH_FULL`\n (or `0`) for full history, or `GIT_FETCH_DEPTH_UNSHALLOW`\n to \"unshallow\" a shallow repository.\n\n The default is full (`GIT_FETCH_DEPTH_FULL` or `0`)." - }, - { - "type": "git_remote_redirect_t", - "name": "follow_redirects", - "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." - }, - { - "type": "git_strarray", - "name": "custom_headers", - "comments": " Extra headers for this fetch operation" - } - ], - "used": { - "returns": [], - "needs": [ - "git_fetch_options_init", - "git_remote_download", - "git_remote_fetch" - ] - } - } - ], - [ - "git_fetch_prune_t", - { - "decl": [ - "GIT_FETCH_PRUNE_UNSPECIFIED", - "GIT_FETCH_PRUNE", - "GIT_FETCH_NO_PRUNE" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 665, - "lineto": 678, - "block": "GIT_FETCH_PRUNE_UNSPECIFIED\nGIT_FETCH_PRUNE\nGIT_FETCH_NO_PRUNE", - "tdef": "typedef", - "description": " Acceptable prune settings when fetching ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FETCH_PRUNE_UNSPECIFIED", - "comments": "

Use the setting from the configuration

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FETCH_PRUNE", - "comments": "

Force pruning on

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_FETCH_NO_PRUNE", - "comments": "

Force pruning off

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_filemode_t", - { - "decl": [ - "GIT_FILEMODE_UNREADABLE", - "GIT_FILEMODE_TREE", - "GIT_FILEMODE_BLOB", - "GIT_FILEMODE_BLOB_EXECUTABLE", - "GIT_FILEMODE_LINK", - "GIT_FILEMODE_COMMIT" - ], - "type": "enum", - "file": "git2/types.h", - "line": 222, - "lineto": 229, - "block": "GIT_FILEMODE_UNREADABLE\nGIT_FILEMODE_TREE\nGIT_FILEMODE_BLOB\nGIT_FILEMODE_BLOB_EXECUTABLE\nGIT_FILEMODE_LINK\nGIT_FILEMODE_COMMIT", - "tdef": "typedef", - "description": " Valid modes for index and tree entries. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FILEMODE_UNREADABLE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FILEMODE_TREE", - "comments": "", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_FILEMODE_BLOB", - "comments": "", - "value": 33188 - }, - { - "type": "int", - "name": "GIT_FILEMODE_BLOB_EXECUTABLE", - "comments": "", - "value": 33261 - }, - { - "type": "int", - "name": "GIT_FILEMODE_LINK", - "comments": "", - "value": 40960 - }, - { - "type": "int", - "name": "GIT_FILEMODE_COMMIT", - "comments": "", - "value": 57344 - } - ], - "used": { - "returns": [ - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw" - ], - "needs": [ - "git_treebuilder_insert" - ] - } - } - ], - [ - "git_filter", - { - "decl": "git_filter", - "type": "struct", - "value": "git_filter", - "file": "git2/filter.h", - "line": 100, - "lineto": 100, - "tdef": "typedef", - "description": " A filter that can transform file data", - "comments": "

This represents a filter that can be used to transform or even replace file data. Libgit2 includes one built in filter and it is possible to write your own (see git2/sys/filter.h for information on that).

\n\n

The two builtin filters are:

\n\n
    \n
  • "crlf" which uses the complex rules with the "text", "eol", and "crlf" file attributes to decide how to convert between LF and CRLF line endings * "ident" which replaces "$Id$" in a blob with "$Id: $" upon checkout and replaced "$Id: $" with "$Id$" on checkin.
  • \n
\n", - "used": { - "returns": [], - "needs": [ - "git_filter_list_apply_to_blob", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_data", - "git_filter_list_apply_to_file", - "git_filter_list_contains", - "git_filter_list_free", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_data", - "git_filter_list_stream_file" - ] - } - } - ], - [ - "git_filter_flag_t", - { - "decl": [ - "GIT_FILTER_DEFAULT", - "GIT_FILTER_ALLOW_UNSAFE", - "GIT_FILTER_NO_SYSTEM_ATTRIBUTES", - "GIT_FILTER_ATTRIBUTES_FROM_HEAD", - "GIT_FILTER_ATTRIBUTES_FROM_COMMIT" - ], - "type": "enum", - "file": "git2/filter.h", - "line": 41, - "lineto": 58, - "block": "GIT_FILTER_DEFAULT\nGIT_FILTER_ALLOW_UNSAFE\nGIT_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_FILTER_ATTRIBUTES_FROM_COMMIT", - "tdef": "typedef", - "description": " Filter option flags.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FILTER_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FILTER_ALLOW_UNSAFE", - "comments": "

Don't error for safecrlf violations, allow them to continue.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_FILTER_NO_SYSTEM_ATTRIBUTES", - "comments": "

Don't load /etc/gitattributes (or the system equivalent)

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_FILTER_ATTRIBUTES_FROM_HEAD", - "comments": "

Load attributes from .gitattributes in the root of HEAD

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_FILTER_ATTRIBUTES_FROM_COMMIT", - "comments": "

Load attributes from .gitattributes in a given commit.\n This can only be specified in a git_filter_options.

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_filter_list", - { - "decl": "git_filter_list", - "type": "struct", - "value": "git_filter_list", - "file": "git2/filter.h", - "line": 112, - "lineto": 112, - "tdef": "typedef", - "description": " List of filters to be applied", - "comments": "

This represents a list of filters to be applied to a file / blob. You can build the list with one call, apply it with another, and dispose it with a third. In typical usage, there are not many occasions where a git_filter_list is needed directly since the library will generally handle conversions for you, but it can be convenient to be able to build and apply the list sometimes.

\n", - "used": { - "returns": [], - "needs": [ - "git_filter_list_apply_to_blob", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_data", - "git_filter_list_apply_to_file", - "git_filter_list_contains", - "git_filter_list_free", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_data", - "git_filter_list_stream_file" - ] - } - } - ], - [ - "git_filter_mode_t", - { - "decl": [ - "GIT_FILTER_TO_WORKTREE", - "GIT_FILTER_SMUDGE", - "GIT_FILTER_TO_ODB", - "GIT_FILTER_CLEAN" - ], - "type": "enum", - "file": "git2/filter.h", - "line": 31, - "lineto": 36, - "block": "GIT_FILTER_TO_WORKTREE\nGIT_FILTER_SMUDGE\nGIT_FILTER_TO_ODB\nGIT_FILTER_CLEAN", - "tdef": "typedef", - "description": " Filters are applied in one of two directions: smudging - which is\n exporting a file from the Git object database to the working directory,\n and cleaning - which is importing a file from the working directory to\n the Git object database. These values control which direction of\n change is being applied.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_FILTER_TO_WORKTREE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FILTER_SMUDGE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_FILTER_TO_ODB", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_FILTER_CLEAN", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [ - "git_filter_list_load", - "git_filter_list_load_ext" - ] - } - } - ], - [ - "git_filter_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "git_oid * commit_id", - "git_oid attr_commit_id" - ], - "type": "struct", - "value": "git_filter_options", - "file": "git2/filter.h", - "line": 63, - "lineto": 80, - "block": "unsigned int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", - "tdef": "typedef", - "description": " Filtering options", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " See `git_filter_flag_t` above " - }, - { - "type": "git_oid *", - "name": "commit_id", - "comments": "" - }, - { - "type": "git_oid", - "name": "attr_commit_id", - "comments": " The commit to load attributes from, when\n `GIT_FILTER_ATTRIBUTES_FROM_COMMIT` is specified." - } - ], - "used": { - "returns": [], - "needs": [ - "git_filter_list_load_ext" - ] - } - } - ], - [ - "git_filter_source", - { - "decl": "git_filter_source", - "type": "struct", - "value": "git_filter_source", - "file": "git2/sys/filter.h", - "line": 95, - "lineto": 95, - "tdef": "typedef", - "description": " A filter source represents a file/blob to be processed", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_hashsig_option_t", - { - "decl": [ - "GIT_HASHSIG_NORMAL", - "GIT_HASHSIG_IGNORE_WHITESPACE", - "GIT_HASHSIG_SMART_WHITESPACE", - "GIT_HASHSIG_ALLOW_SMALL_FILES" - ], - "type": "enum", - "file": "git2/sys/hashsig.h", - "line": 25, - "lineto": 45, - "block": "GIT_HASHSIG_NORMAL\nGIT_HASHSIG_IGNORE_WHITESPACE\nGIT_HASHSIG_SMART_WHITESPACE\nGIT_HASHSIG_ALLOW_SMALL_FILES", - "tdef": "typedef", - "description": " Options for hashsig computation", - "comments": "

The options GIT_HASHSIG_NORMAL, GIT_HASHSIG_IGNORE_WHITESPACE, GIT_HASHSIG_SMART_WHITESPACE are exclusive and should not be combined.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_HASHSIG_NORMAL", - "comments": "

Use all data

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_HASHSIG_IGNORE_WHITESPACE", - "comments": "

Ignore whitespace

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_HASHSIG_SMART_WHITESPACE", - "comments": "

Ignore

\n\n

and all space after

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_HASHSIG_ALLOW_SMALL_FILES", - "comments": "

Allow hashing of small files

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index", - { - "decl": "git_index", - "type": "struct", - "value": "git_index", - "file": "git2/types.h", - "line": 148, - "lineto": 148, - "tdef": "typedef", - "description": " Memory representation of an index file. ", - "comments": "", - "used": { - "returns": [ - "git_index_get_byindex", - "git_index_get_bypath", - "git_remote_stats" - ], - "needs": [ - "git_apply_to_tree", - "git_checkout_index", - "git_cherrypick_commit", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_tree_to_index", - "git_index_add", - "git_index_add_all", - "git_index_add_bypath", - "git_index_add_from_buffer", - "git_index_caps", - "git_index_checksum", - "git_index_clear", - "git_index_conflict_add", - "git_index_conflict_cleanup", - "git_index_conflict_get", - "git_index_conflict_iterator_free", - "git_index_conflict_iterator_new", - "git_index_conflict_next", - "git_index_conflict_remove", - "git_index_entry_is_conflict", - "git_index_entry_stage", - "git_index_entrycount", - "git_index_find", - "git_index_find_prefix", - "git_index_free", - "git_index_get_byindex", - "git_index_get_bypath", - "git_index_has_conflicts", - "git_index_iterator_free", - "git_index_iterator_new", - "git_index_iterator_next", - "git_index_owner", - "git_index_path", - "git_index_read", - "git_index_read_tree", - "git_index_remove", - "git_index_remove_all", - "git_index_remove_bypath", - "git_index_remove_directory", - "git_index_set_caps", - "git_index_set_version", - "git_index_update_all", - "git_index_version", - "git_index_write", - "git_index_write_tree", - "git_index_write_tree_to", - "git_indexer_append", - "git_indexer_commit", - "git_indexer_free", - "git_indexer_hash", - "git_indexer_name", - "git_indexer_new", - "git_indexer_options_init", - "git_indexer_progress_cb", - "git_merge_commits", - "git_merge_file_from_index", - "git_merge_trees", - "git_odb_write_pack", - "git_packbuilder_write", - "git_pathspec_match_index", - "git_rebase_inmemory_index", - "git_repository_index", - "git_revert_commit" - ] - } - } - ], - [ - "git_index_add_option_t", - { - "decl": [ - "GIT_INDEX_ADD_DEFAULT", - "GIT_INDEX_ADD_FORCE", - "GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH", - "GIT_INDEX_ADD_CHECK_PATHSPEC" - ], - "type": "enum", - "file": "git2/index.h", - "line": 139, - "lineto": 144, - "block": "GIT_INDEX_ADD_DEFAULT\nGIT_INDEX_ADD_FORCE\nGIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH\nGIT_INDEX_ADD_CHECK_PATHSPEC", - "tdef": "typedef", - "description": " Flags for APIs that add files matching pathspec ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_ADD_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_INDEX_ADD_FORCE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_INDEX_ADD_CHECK_PATHSPEC", - "comments": "", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_capability_t", - { - "decl": [ - "GIT_INDEX_CAPABILITY_IGNORE_CASE", - "GIT_INDEX_CAPABILITY_NO_FILEMODE", - "GIT_INDEX_CAPABILITY_NO_SYMLINKS", - "GIT_INDEX_CAPABILITY_FROM_OWNER" - ], - "type": "enum", - "file": "git2/index.h", - "line": 126, - "lineto": 131, - "block": "GIT_INDEX_CAPABILITY_IGNORE_CASE\nGIT_INDEX_CAPABILITY_NO_FILEMODE\nGIT_INDEX_CAPABILITY_NO_SYMLINKS\nGIT_INDEX_CAPABILITY_FROM_OWNER", - "tdef": "typedef", - "description": " Capabilities of system that affect index actions. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_CAPABILITY_IGNORE_CASE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_INDEX_CAPABILITY_NO_FILEMODE", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_INDEX_CAPABILITY_NO_SYMLINKS", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_INDEX_CAPABILITY_FROM_OWNER", - "comments": "", - "value": -1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_conflict_iterator", - { - "decl": "git_index_conflict_iterator", - "type": "struct", - "value": "git_index_conflict_iterator", - "file": "git2/types.h", - "line": 154, - "lineto": 154, - "tdef": "typedef", - "description": " An iterator for conflicts in the index. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_index_conflict_iterator_free", - "git_index_conflict_iterator_new", - "git_index_conflict_next" - ] - } - } - ], - [ - "git_index_entry", - { - "decl": [ - "git_index_time ctime", - "git_index_time mtime", - "uint32_t dev", - "uint32_t ino", - "uint32_t mode", - "uint32_t uid", - "uint32_t gid", - "uint32_t file_size", - "git_oid id", - "uint16_t flags", - "uint16_t flags_extended", - "const char * path" - ], - "type": "struct", - "value": "git_index_entry", - "file": "git2/index.h", - "line": 53, - "lineto": 70, - "block": "git_index_time ctime\ngit_index_time mtime\nuint32_t dev\nuint32_t ino\nuint32_t mode\nuint32_t uid\nuint32_t gid\nuint32_t file_size\ngit_oid id\nuint16_t flags\nuint16_t flags_extended\nconst char * path", - "tdef": "typedef", - "description": " In-memory representation of a file entry in the index.", - "comments": "

This is a public structure that represents a file entry in the index. The meaning of the fields corresponds to core Git's documentation (in "Documentation/technical/index-format.txt").

\n\n

The flags field consists of a number of bit fields which can be accessed via the first set of GIT_INDEX_ENTRY_... bitmasks below. These flags are all read from and persisted to disk.

\n\n

The flags_extended field also has a number of bit fields which can be accessed via the later GIT_INDEX_ENTRY_... bitmasks below. Some of these flags are read from and written to disk, but some are set aside for in-memory only reference.

\n\n

Note that the time and size fields are truncated to 32 bits. This is enough to detect changes, which is enough for the index to function as a cache, but it should not be taken as an authoritative source for that data.

\n", - "fields": [ - { - "type": "git_index_time", - "name": "ctime", - "comments": "" - }, - { - "type": "git_index_time", - "name": "mtime", - "comments": "" - }, - { - "type": "uint32_t", - "name": "dev", - "comments": "" - }, - { - "type": "uint32_t", - "name": "ino", - "comments": "" - }, - { - "type": "uint32_t", - "name": "mode", - "comments": "" - }, - { - "type": "uint32_t", - "name": "uid", - "comments": "" - }, - { - "type": "uint32_t", - "name": "gid", - "comments": "" - }, - { - "type": "uint32_t", - "name": "file_size", - "comments": "" - }, - { - "type": "git_oid", - "name": "id", - "comments": "" - }, - { - "type": "uint16_t", - "name": "flags", - "comments": "" - }, - { - "type": "uint16_t", - "name": "flags_extended", - "comments": "" - }, - { - "type": "const char *", - "name": "path", - "comments": "" - } - ], - "used": { - "returns": [ - "git_index_get_byindex", - "git_index_get_bypath" - ], - "needs": [ - "git_index_add", - "git_index_add_from_buffer", - "git_index_conflict_add", - "git_index_conflict_get", - "git_index_conflict_next", - "git_index_entry_is_conflict", - "git_index_entry_stage", - "git_index_iterator_next", - "git_merge_file_from_index" - ] - } - } - ], - [ - "git_index_entry_extended_flag_t", - { - "decl": [ - "GIT_INDEX_ENTRY_INTENT_TO_ADD", - "GIT_INDEX_ENTRY_SKIP_WORKTREE", - "GIT_INDEX_ENTRY_EXTENDED_FLAGS", - "GIT_INDEX_ENTRY_UPTODATE" - ], - "type": "enum", - "file": "git2/index.h", - "line": 116, - "lineto": 123, - "block": "GIT_INDEX_ENTRY_INTENT_TO_ADD\nGIT_INDEX_ENTRY_SKIP_WORKTREE\nGIT_INDEX_ENTRY_EXTENDED_FLAGS\nGIT_INDEX_ENTRY_UPTODATE", - "tdef": "typedef", - "description": " Bitmasks for on-disk fields of `git_index_entry`'s `flags_extended`", - "comments": "

In memory, the flags_extended fields are divided into two parts: the fields that are read from and written to disk, and other fields that in-memory only and used by libgit2. Only the flags in GIT_INDEX_ENTRY_EXTENDED_FLAGS will get saved on-disk.

\n\n

Thee first three bitmasks match the three fields in the git_index_entry flags_extended value that belong on disk. You can use them to interpret the data in the flags_extended.

\n\n

The rest of the bitmasks match the other fields in the git_index_entry flags_extended value that are only used in-memory by libgit2. You can use them to interpret the data in the flags_extended.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_ENTRY_INTENT_TO_ADD", - "comments": "", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_INDEX_ENTRY_SKIP_WORKTREE", - "comments": "", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_INDEX_ENTRY_EXTENDED_FLAGS", - "comments": "", - "value": 24576 - }, - { - "type": "int", - "name": "GIT_INDEX_ENTRY_UPTODATE", - "comments": "", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_entry_flag_t", - { - "decl": [ - "GIT_INDEX_ENTRY_EXTENDED", - "GIT_INDEX_ENTRY_VALID" - ], - "type": "enum", - "file": "git2/index.h", - "line": 87, - "lineto": 90, - "block": "GIT_INDEX_ENTRY_EXTENDED\nGIT_INDEX_ENTRY_VALID", - "tdef": "typedef", - "description": " Flags for index entries", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_ENTRY_EXTENDED", - "comments": "", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_INDEX_ENTRY_VALID", - "comments": "", - "value": 32768 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_iterator", - { - "decl": "git_index_iterator", - "type": "struct", - "value": "git_index_iterator", - "file": "git2/types.h", - "line": 151, - "lineto": 151, - "tdef": "typedef", - "description": " An iterator for entries in the index. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_index_iterator_free", - "git_index_iterator_new", - "git_index_iterator_next" - ] - } - } - ], - [ - "git_index_stage_t", - { - "decl": [ - "GIT_INDEX_STAGE_ANY", - "GIT_INDEX_STAGE_NORMAL", - "GIT_INDEX_STAGE_ANCESTOR", - "GIT_INDEX_STAGE_OURS", - "GIT_INDEX_STAGE_THEIRS" - ], - "type": "enum", - "file": "git2/index.h", - "line": 147, - "lineto": 167, - "block": "GIT_INDEX_STAGE_ANY\nGIT_INDEX_STAGE_NORMAL\nGIT_INDEX_STAGE_ANCESTOR\nGIT_INDEX_STAGE_OURS\nGIT_INDEX_STAGE_THEIRS", - "tdef": "typedef", - "description": " Git index stage states ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_INDEX_STAGE_ANY", - "comments": "

Match any index stage.

\n\n

Some index APIs take a stage to match; pass this value to match\n any entry matching the path regardless of stage.

\n", - "value": -1 - }, - { - "type": "int", - "name": "GIT_INDEX_STAGE_NORMAL", - "comments": "

A normal staged file in the index.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_INDEX_STAGE_ANCESTOR", - "comments": "

The ancestor side of a conflict.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_INDEX_STAGE_OURS", - "comments": "

The "ours" side of a conflict.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_INDEX_STAGE_THEIRS", - "comments": "

The "theirs" side of a conflict.

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_index_time", - { - "decl": [ - "int32_t seconds", - "uint32_t nanoseconds" - ], - "type": "struct", - "value": "git_index_time", - "file": "git2/index.h", - "line": 26, - "lineto": 30, - "block": "int32_t seconds\nuint32_t nanoseconds", - "tdef": "typedef", - "description": " Time structure used in a git index entry ", - "comments": "", - "fields": [ - { - "type": "int32_t", - "name": "seconds", - "comments": "" - }, - { - "type": "uint32_t", - "name": "nanoseconds", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_indexer", - { - "decl": "git_indexer", - "type": "struct", - "value": "git_indexer", - "file": "git2/indexer.h", - "line": 17, - "lineto": 17, - "tdef": "typedef", - "description": " A git indexer object ", - "comments": "", - "used": { - "returns": [ - "git_remote_stats" - ], - "needs": [ - "git_indexer_append", - "git_indexer_commit", - "git_indexer_free", - "git_indexer_hash", - "git_indexer_name", - "git_indexer_new", - "git_indexer_options_init", - "git_indexer_progress_cb", - "git_odb_write_pack", - "git_packbuilder_write" - ] - } - } - ], - [ - "git_indexer_options", - { - "decl": [ - "unsigned int version", - "git_indexer_progress_cb progress_cb", - "void * progress_cb_payload", - "unsigned char verify" - ], - "type": "struct", - "value": "git_indexer_options", - "file": "git2/indexer.h", - "line": 62, - "lineto": 86, - "block": "unsigned int version\ngit_indexer_progress_cb progress_cb\nvoid * progress_cb_payload\nunsigned char verify", - "tdef": "typedef", - "description": " Options for indexer configuration", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_indexer_progress_cb", - "name": "progress_cb", - "comments": " progress_cb function to call with progress information " - }, - { - "type": "void *", - "name": "progress_cb_payload", - "comments": " progress_cb_payload payload for the progress callback " - }, - { - "type": "unsigned char", - "name": "verify", - "comments": " Do connectivity checks for the received pack " - } - ], - "used": { - "returns": [], - "needs": [ - "git_indexer_new", - "git_indexer_options_init" - ] - } - } - ], - [ - "git_indexer_progress", - { - "decl": [ - "unsigned int total_objects", - "unsigned int indexed_objects", - "unsigned int received_objects", - "unsigned int local_objects", - "unsigned int total_deltas", - "unsigned int indexed_deltas", - "size_t received_bytes" - ], - "type": "struct", - "value": "git_indexer_progress", - "file": "git2/indexer.h", - "line": 24, - "lineto": 48, - "block": "unsigned int total_objects\nunsigned int indexed_objects\nunsigned int received_objects\nunsigned int local_objects\nunsigned int total_deltas\nunsigned int indexed_deltas\nsize_t received_bytes", - "tdef": "typedef", - "description": " This structure is used to provide callers information about the\n progress of indexing a packfile, either directly or part of a\n fetch or clone that downloads a packfile.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "total_objects", - "comments": " number of objects in the packfile being indexed " - }, - { - "type": "unsigned int", - "name": "indexed_objects", - "comments": " received objects that have been hashed " - }, - { - "type": "unsigned int", - "name": "received_objects", - "comments": " received_objects: objects which have been downloaded " - }, - { - "type": "unsigned int", - "name": "local_objects", - "comments": " locally-available objects that have been injected in order\n to fix a thin pack" - }, - { - "type": "unsigned int", - "name": "total_deltas", - "comments": " number of deltas in the packfile being indexed " - }, - { - "type": "unsigned int", - "name": "indexed_deltas", - "comments": " received deltas that have been indexed " - }, - { - "type": "size_t", - "name": "received_bytes", - "comments": " size of the packfile received up to now " - } - ], - "used": { - "returns": [ - "git_remote_stats" - ], - "needs": [ - "git_indexer_append", - "git_indexer_commit", - "git_indexer_progress_cb", - "git_odb_write_pack", - "git_packbuilder_write" - ] - } - } - ], - [ - "git_libgit2_opt_t", - { - "decl": [ - "GIT_OPT_GET_MWINDOW_SIZE", - "GIT_OPT_SET_MWINDOW_SIZE", - "GIT_OPT_GET_MWINDOW_MAPPED_LIMIT", - "GIT_OPT_SET_MWINDOW_MAPPED_LIMIT", - "GIT_OPT_GET_SEARCH_PATH", - "GIT_OPT_SET_SEARCH_PATH", - "GIT_OPT_SET_CACHE_OBJECT_LIMIT", - "GIT_OPT_SET_CACHE_MAX_SIZE", - "GIT_OPT_ENABLE_CACHING", - "GIT_OPT_GET_CACHED_MEMORY", - "GIT_OPT_GET_TEMPLATE_PATH", - "GIT_OPT_SET_TEMPLATE_PATH", - "GIT_OPT_SET_SSL_CERT_LOCATIONS", - "GIT_OPT_SET_USER_AGENT", - "GIT_OPT_ENABLE_STRICT_OBJECT_CREATION", - "GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION", - "GIT_OPT_SET_SSL_CIPHERS", - "GIT_OPT_GET_USER_AGENT", - "GIT_OPT_ENABLE_OFS_DELTA", - "GIT_OPT_ENABLE_FSYNC_GITDIR", - "GIT_OPT_GET_WINDOWS_SHAREMODE", - "GIT_OPT_SET_WINDOWS_SHAREMODE", - "GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION", - "GIT_OPT_SET_ALLOCATOR", - "GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY", - "GIT_OPT_GET_PACK_MAX_OBJECTS", - "GIT_OPT_SET_PACK_MAX_OBJECTS", - "GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS", - "GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE", - "GIT_OPT_GET_MWINDOW_FILE_LIMIT", - "GIT_OPT_SET_MWINDOW_FILE_LIMIT", - "GIT_OPT_SET_ODB_PACKED_PRIORITY", - "GIT_OPT_SET_ODB_LOOSE_PRIORITY", - "GIT_OPT_GET_EXTENSIONS", - "GIT_OPT_SET_EXTENSIONS", - "GIT_OPT_GET_OWNER_VALIDATION", - "GIT_OPT_SET_OWNER_VALIDATION", - "GIT_OPT_GET_HOMEDIR", - "GIT_OPT_SET_HOMEDIR", - "GIT_OPT_SET_SERVER_CONNECT_TIMEOUT", - "GIT_OPT_GET_SERVER_CONNECT_TIMEOUT", - "GIT_OPT_SET_SERVER_TIMEOUT", - "GIT_OPT_GET_SERVER_TIMEOUT" - ], - "type": "enum", - "file": "git2/common.h", - "line": 188, - "lineto": 232, - "block": "GIT_OPT_GET_MWINDOW_SIZE\nGIT_OPT_SET_MWINDOW_SIZE\nGIT_OPT_GET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_SET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_GET_SEARCH_PATH\nGIT_OPT_SET_SEARCH_PATH\nGIT_OPT_SET_CACHE_OBJECT_LIMIT\nGIT_OPT_SET_CACHE_MAX_SIZE\nGIT_OPT_ENABLE_CACHING\nGIT_OPT_GET_CACHED_MEMORY\nGIT_OPT_GET_TEMPLATE_PATH\nGIT_OPT_SET_TEMPLATE_PATH\nGIT_OPT_SET_SSL_CERT_LOCATIONS\nGIT_OPT_SET_USER_AGENT\nGIT_OPT_ENABLE_STRICT_OBJECT_CREATION\nGIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION\nGIT_OPT_SET_SSL_CIPHERS\nGIT_OPT_GET_USER_AGENT\nGIT_OPT_ENABLE_OFS_DELTA\nGIT_OPT_ENABLE_FSYNC_GITDIR\nGIT_OPT_GET_WINDOWS_SHAREMODE\nGIT_OPT_SET_WINDOWS_SHAREMODE\nGIT_OPT_ENABLE_STRICT_HASH_VERIFICATION\nGIT_OPT_SET_ALLOCATOR\nGIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY\nGIT_OPT_GET_PACK_MAX_OBJECTS\nGIT_OPT_SET_PACK_MAX_OBJECTS\nGIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS\nGIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE\nGIT_OPT_GET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_ODB_PACKED_PRIORITY\nGIT_OPT_SET_ODB_LOOSE_PRIORITY\nGIT_OPT_GET_EXTENSIONS\nGIT_OPT_SET_EXTENSIONS\nGIT_OPT_GET_OWNER_VALIDATION\nGIT_OPT_SET_OWNER_VALIDATION\nGIT_OPT_GET_HOMEDIR\nGIT_OPT_SET_HOMEDIR\nGIT_OPT_SET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_GET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_SET_SERVER_TIMEOUT\nGIT_OPT_GET_SERVER_TIMEOUT", - "tdef": "typedef", - "description": " Global library options", - "comments": "

These are used to select which global option to set or get and are used in git_libgit2_opts().

\n", - "fields": [ - { - "type": "int", - "name": "GIT_OPT_GET_MWINDOW_SIZE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_OPT_SET_MWINDOW_SIZE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_OPT_GET_MWINDOW_MAPPED_LIMIT", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_OPT_SET_MWINDOW_MAPPED_LIMIT", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_OPT_GET_SEARCH_PATH", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_OPT_SET_SEARCH_PATH", - "comments": "", - "value": 5 - }, - { - "type": "int", - "name": "GIT_OPT_SET_CACHE_OBJECT_LIMIT", - "comments": "", - "value": 6 - }, - { - "type": "int", - "name": "GIT_OPT_SET_CACHE_MAX_SIZE", - "comments": "", - "value": 7 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_CACHING", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_OPT_GET_CACHED_MEMORY", - "comments": "", - "value": 9 - }, - { - "type": "int", - "name": "GIT_OPT_GET_TEMPLATE_PATH", - "comments": "", - "value": 10 - }, - { - "type": "int", - "name": "GIT_OPT_SET_TEMPLATE_PATH", - "comments": "", - "value": 11 - }, - { - "type": "int", - "name": "GIT_OPT_SET_SSL_CERT_LOCATIONS", - "comments": "", - "value": 12 - }, - { - "type": "int", - "name": "GIT_OPT_SET_USER_AGENT", - "comments": "", - "value": 13 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_STRICT_OBJECT_CREATION", - "comments": "", - "value": 14 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION", - "comments": "", - "value": 15 - }, - { - "type": "int", - "name": "GIT_OPT_SET_SSL_CIPHERS", - "comments": "", - "value": 16 - }, - { - "type": "int", - "name": "GIT_OPT_GET_USER_AGENT", - "comments": "", - "value": 17 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_OFS_DELTA", - "comments": "", - "value": 18 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_FSYNC_GITDIR", - "comments": "", - "value": 19 - }, - { - "type": "int", - "name": "GIT_OPT_GET_WINDOWS_SHAREMODE", - "comments": "", - "value": 20 - }, - { - "type": "int", - "name": "GIT_OPT_SET_WINDOWS_SHAREMODE", - "comments": "", - "value": 21 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION", - "comments": "", - "value": 22 - }, - { - "type": "int", - "name": "GIT_OPT_SET_ALLOCATOR", - "comments": "", - "value": 23 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY", - "comments": "", - "value": 24 - }, - { - "type": "int", - "name": "GIT_OPT_GET_PACK_MAX_OBJECTS", - "comments": "", - "value": 25 - }, - { - "type": "int", - "name": "GIT_OPT_SET_PACK_MAX_OBJECTS", - "comments": "", - "value": 26 - }, - { - "type": "int", - "name": "GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS", - "comments": "", - "value": 27 - }, - { - "type": "int", - "name": "GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE", - "comments": "", - "value": 28 - }, - { - "type": "int", - "name": "GIT_OPT_GET_MWINDOW_FILE_LIMIT", - "comments": "", - "value": 29 - }, - { - "type": "int", - "name": "GIT_OPT_SET_MWINDOW_FILE_LIMIT", - "comments": "", - "value": 30 - }, - { - "type": "int", - "name": "GIT_OPT_SET_ODB_PACKED_PRIORITY", - "comments": "", - "value": 31 - }, - { - "type": "int", - "name": "GIT_OPT_SET_ODB_LOOSE_PRIORITY", - "comments": "", - "value": 32 - }, - { - "type": "int", - "name": "GIT_OPT_GET_EXTENSIONS", - "comments": "", - "value": 33 - }, - { - "type": "int", - "name": "GIT_OPT_SET_EXTENSIONS", - "comments": "", - "value": 34 - }, - { - "type": "int", - "name": "GIT_OPT_GET_OWNER_VALIDATION", - "comments": "", - "value": 35 - }, - { - "type": "int", - "name": "GIT_OPT_SET_OWNER_VALIDATION", - "comments": "", - "value": 36 - }, - { - "type": "int", - "name": "GIT_OPT_GET_HOMEDIR", - "comments": "", - "value": 37 - }, - { - "type": "int", - "name": "GIT_OPT_SET_HOMEDIR", - "comments": "", - "value": 38 - }, - { - "type": "int", - "name": "GIT_OPT_SET_SERVER_CONNECT_TIMEOUT", - "comments": "", - "value": 39 - }, - { - "type": "int", - "name": "GIT_OPT_GET_SERVER_CONNECT_TIMEOUT", - "comments": "", - "value": 40 - }, - { - "type": "int", - "name": "GIT_OPT_SET_SERVER_TIMEOUT", - "comments": "", - "value": 41 - }, - { - "type": "int", - "name": "GIT_OPT_GET_SERVER_TIMEOUT", - "comments": "", - "value": 42 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_mailmap", - { - "decl": "git_mailmap", - "type": "struct", - "value": "git_mailmap", - "file": "git2/types.h", - "line": 366, - "lineto": 366, - "tdef": "typedef", - "description": " Representation of .mailmap file state. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_commit_author_with_mailmap", - "git_commit_committer_with_mailmap", - "git_mailmap_add_entry", - "git_mailmap_free", - "git_mailmap_from_buffer", - "git_mailmap_from_repository", - "git_mailmap_new", - "git_mailmap_resolve", - "git_mailmap_resolve_signature" - ] - } - } - ], - [ - "git_merge_analysis_t", - { - "decl": [ - "GIT_MERGE_ANALYSIS_NONE", - "GIT_MERGE_ANALYSIS_NORMAL", - "GIT_MERGE_ANALYSIS_UP_TO_DATE", - "GIT_MERGE_ANALYSIS_FASTFORWARD", - "GIT_MERGE_ANALYSIS_UNBORN" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 334, - "lineto": 363, - "block": "GIT_MERGE_ANALYSIS_NONE\nGIT_MERGE_ANALYSIS_NORMAL\nGIT_MERGE_ANALYSIS_UP_TO_DATE\nGIT_MERGE_ANALYSIS_FASTFORWARD\nGIT_MERGE_ANALYSIS_UNBORN", - "tdef": "typedef", - "description": " The results of `git_merge_analysis` indicate the merge opportunities.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_NONE", - "comments": "

No merge is possible. (Unused.)

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_NORMAL", - "comments": "

A "normal" merge; both HEAD and the given merge input have diverged\n from their common ancestor. The divergent commits must be merged.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_UP_TO_DATE", - "comments": "

All given merge inputs are reachable from HEAD, meaning the\n repository is up-to-date and no merge needs to be performed.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_FASTFORWARD", - "comments": "

The given merge input is a fast-forward from HEAD and no merge\n needs to be performed. Instead, the client can check out the\n given merge input.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_MERGE_ANALYSIS_UNBORN", - "comments": "

The HEAD of the current repository is "unborn" and does not point to\n a valid commit. No merge can be performed, but the caller may wish\n to simply set HEAD to the target commit(s).

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_analysis", - "git_merge_analysis_for_ref" - ] - } - } - ], - [ - "git_merge_driver_source", - { - "decl": "git_merge_driver_source", - "type": "struct", - "value": "git_merge_driver_source", - "file": "git2/sys/merge.h", - "line": 41, - "lineto": 41, - "tdef": "typedef", - "description": " A merge driver source represents the file to be merged", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_merge_file_favor_t", - { - "decl": [ - "GIT_MERGE_FILE_FAVOR_NORMAL", - "GIT_MERGE_FILE_FAVOR_OURS", - "GIT_MERGE_FILE_FAVOR_THEIRS", - "GIT_MERGE_FILE_FAVOR_UNION" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 109, - "lineto": 139, - "block": "GIT_MERGE_FILE_FAVOR_NORMAL\nGIT_MERGE_FILE_FAVOR_OURS\nGIT_MERGE_FILE_FAVOR_THEIRS\nGIT_MERGE_FILE_FAVOR_UNION", - "tdef": "typedef", - "description": " Merge file favor options for `git_merge_options` instruct the file-level\n merging functionality how to deal with conflicting regions of the files.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_FILE_FAVOR_NORMAL", - "comments": "

When a region of a file is changed in both branches, a conflict\n will be recorded in the index so that git_checkout can produce\n a merge file with conflict markers in the working directory.\n This is the default.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_FAVOR_OURS", - "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain the "ours" side of any conflicting\n region. The index will not record a conflict.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_FAVOR_THEIRS", - "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain the "theirs" side of any conflicting\n region. The index will not record a conflict.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_FAVOR_UNION", - "comments": "

When a region of a file is changed in both branches, the file\n created in the index will contain each unique line from each side,\n which has the result of combining both files. The index will not\n record a conflict.

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_merge_file_flag_t", - { - "decl": [ - "GIT_MERGE_FILE_DEFAULT", - "GIT_MERGE_FILE_STYLE_MERGE", - "GIT_MERGE_FILE_STYLE_DIFF3", - "GIT_MERGE_FILE_SIMPLIFY_ALNUM", - "GIT_MERGE_FILE_IGNORE_WHITESPACE", - "GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE", - "GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL", - "GIT_MERGE_FILE_DIFF_PATIENCE", - "GIT_MERGE_FILE_DIFF_MINIMAL", - "GIT_MERGE_FILE_STYLE_ZDIFF3", - "GIT_MERGE_FILE_ACCEPT_CONFLICTS" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 144, - "lineto": 181, - "block": "GIT_MERGE_FILE_DEFAULT\nGIT_MERGE_FILE_STYLE_MERGE\nGIT_MERGE_FILE_STYLE_DIFF3\nGIT_MERGE_FILE_SIMPLIFY_ALNUM\nGIT_MERGE_FILE_IGNORE_WHITESPACE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_EOL\nGIT_MERGE_FILE_DIFF_PATIENCE\nGIT_MERGE_FILE_DIFF_MINIMAL\nGIT_MERGE_FILE_STYLE_ZDIFF3\nGIT_MERGE_FILE_ACCEPT_CONFLICTS", - "tdef": "typedef", - "description": " File merging flags", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_FILE_DEFAULT", - "comments": "

Defaults

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_STYLE_MERGE", - "comments": "

Create standard conflicted merge files

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_STYLE_DIFF3", - "comments": "

Create diff3-style files

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_SIMPLIFY_ALNUM", - "comments": "

Condense non-alphanumeric regions for simplified diff file

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE", - "comments": "

Ignore all whitespace

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE", - "comments": "

Ignore changes in amount of whitespace

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_IGNORE_WHITESPACE_EOL", - "comments": "

Ignore whitespace at end of line

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_DIFF_PATIENCE", - "comments": "

Use the "patience diff" algorithm

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_DIFF_MINIMAL", - "comments": "

Take extra time to find minimal diff

\n", - "value": 128 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_STYLE_ZDIFF3", - "comments": "

Create zdiff3 ("zealous diff3")-style files

\n", - "value": 256 - }, - { - "type": "int", - "name": "GIT_MERGE_FILE_ACCEPT_CONFLICTS", - "comments": "

Do not produce file conflicts when common regions have\n changed; keep the conflict markers in the file and accept\n that as the merge result.

\n", - "value": 512 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_merge_file_input", - { - "decl": [ - "unsigned int version", - "const char * ptr", - "size_t size", - "const char * path", - "unsigned int mode" - ], - "type": "struct", - "value": "git_merge_file_input", - "file": "git2/merge.h", - "line": 32, - "lineto": 46, - "block": "unsigned int version\nconst char * ptr\nsize_t size\nconst char * path\nunsigned int mode", - "tdef": "typedef", - "description": " The file inputs to `git_merge_file`. Callers should populate the\n `git_merge_file_input` structure with descriptions of the files in\n each side of the conflict for use in producing the merge file.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "const char *", - "name": "ptr", - "comments": " Pointer to the contents of the file. " - }, - { - "type": "size_t", - "name": "size", - "comments": " Size of the contents pointed to in `ptr`. " - }, - { - "type": "const char *", - "name": "path", - "comments": " File name of the conflicted file, or `NULL` to not merge the path. " - }, - { - "type": "unsigned int", - "name": "mode", - "comments": " File mode of the conflicted file, or `0` to not merge the mode. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_file", - "git_merge_file_input_init" - ] - } - } - ], - [ - "git_merge_file_options", - { - "decl": [ - "unsigned int version", - "const char * ancestor_label", - "const char * our_label", - "const char * their_label", - "git_merge_file_favor_t favor", - "uint32_t flags", - "unsigned short marker_size" - ], - "type": "struct", - "value": "git_merge_file_options", - "file": "git2/merge.h", - "line": 188, - "lineto": 218, - "block": "unsigned int version\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_merge_file_favor_t favor\nuint32_t flags\nunsigned short marker_size", - "tdef": "typedef", - "description": " Options for merging a file", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "const char *", - "name": "ancestor_label", - "comments": " Label for the ancestor file side of the conflict which will be prepended\n to labels in diff3-format merge files." - }, - { - "type": "const char *", - "name": "our_label", - "comments": " Label for our file side of the conflict which will be prepended\n to labels in merge files." - }, - { - "type": "const char *", - "name": "their_label", - "comments": " Label for their file side of the conflict which will be prepended\n to labels in merge files." - }, - { - "type": "git_merge_file_favor_t", - "name": "favor", - "comments": " The file to favor in region conflicts. " - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " see `git_merge_file_flag_t` above " - }, - { - "type": "unsigned short", - "name": "marker_size", - "comments": " The size of conflict markers (eg, \"\n<\n<\n<\n<\n<\n<\n<\n\"). Default is\n GIT_MERGE_CONFLICT_MARKER_SIZE. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_file", - "git_merge_file_from_index", - "git_merge_file_options_init" - ] - } - } - ], - [ - "git_merge_file_result", - { - "decl": [ - "unsigned int automergeable", - "const char * path", - "unsigned int mode", - "const char * ptr", - "size_t len" - ], - "type": "struct", - "value": "git_merge_file_result", - "file": "git2/merge.h", - "line": 238, - "lineto": 259, - "block": "unsigned int automergeable\nconst char * path\nunsigned int mode\nconst char * ptr\nsize_t len", - "tdef": "typedef", - "description": " Information about file-level merging", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "automergeable", - "comments": " True if the output was automerged, false if the output contains\n conflict markers." - }, - { - "type": "const char *", - "name": "path", - "comments": " The path that the resultant merge file should use, or NULL if a\n filename conflict would occur." - }, - { - "type": "unsigned int", - "name": "mode", - "comments": " The mode that the resultant merge file should use. " - }, - { - "type": "const char *", - "name": "ptr", - "comments": " The contents of the merge. " - }, - { - "type": "size_t", - "name": "len", - "comments": " The length of the merge contents. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_file", - "git_merge_file_from_index", - "git_merge_file_result_free" - ] - } - } - ], - [ - "git_merge_flag_t", - { - "decl": [ - "GIT_MERGE_FIND_RENAMES", - "GIT_MERGE_FAIL_ON_CONFLICT", - "GIT_MERGE_SKIP_REUC", - "GIT_MERGE_NO_RECURSIVE", - "GIT_MERGE_VIRTUAL_BASE" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 68, - "lineto": 103, - "block": "GIT_MERGE_FIND_RENAMES\nGIT_MERGE_FAIL_ON_CONFLICT\nGIT_MERGE_SKIP_REUC\nGIT_MERGE_NO_RECURSIVE\nGIT_MERGE_VIRTUAL_BASE", - "tdef": "typedef", - "description": " Flags for `git_merge` options. A combination of these flags can be\n passed in via the `flags` value in the `git_merge_options`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_FIND_RENAMES", - "comments": "

Detect renames that occur between the common ancestor and the "ours"\n side or the common ancestor and the "theirs" side. This will enable\n the ability to merge between a modified and renamed file.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_FAIL_ON_CONFLICT", - "comments": "

If a conflict occurs, exit immediately instead of attempting to\n continue resolving conflicts. The merge operation will fail with\n GIT_EMERGECONFLICT and no index will be returned.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_MERGE_SKIP_REUC", - "comments": "

Do not write the REUC extension on the generated index

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_MERGE_NO_RECURSIVE", - "comments": "

If the commits being merged have multiple merge bases, do not build\n a recursive merge base (by merging the multiple merge bases),\n instead simply use the first base. This flag provides a similar\n merge base to git-merge-resolve.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_MERGE_VIRTUAL_BASE", - "comments": "

Treat this merge as if it is to produce the virtual base\n of a recursive merge. This will ensure that there are\n no conflicts, any conflicting regions will keep conflict\n markers in the merge result.

\n", - "value": 16 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_merge_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "unsigned int rename_threshold", - "unsigned int target_limit", - "git_diff_similarity_metric * metric", - "unsigned int recursion_limit", - "const char * default_driver", - "git_merge_file_favor_t file_favor", - "uint32_t file_flags" - ], - "type": "struct", - "value": "git_merge_options", - "file": "git2/merge.h", - "line": 264, - "lineto": 313, - "block": "unsigned int version\nuint32_t flags\nunsigned int rename_threshold\nunsigned int target_limit\ngit_diff_similarity_metric * metric\nunsigned int recursion_limit\nconst char * default_driver\ngit_merge_file_favor_t file_favor\nuint32_t file_flags", - "tdef": "typedef", - "description": " Merging options", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " See `git_merge_flag_t` above " - }, - { - "type": "unsigned int", - "name": "rename_threshold", - "comments": " Similarity to consider a file renamed (default 50). If\n `GIT_MERGE_FIND_RENAMES` is enabled, added files will be compared\n with deleted files to determine their similarity. Files that are\n more similar than the rename threshold (percentage-wise) will be\n treated as a rename." - }, - { - "type": "unsigned int", - "name": "target_limit", - "comments": " Maximum similarity sources to examine for renames (default 200).\n If the number of rename candidates (add / delete pairs) is greater\n than this value, inexact rename detection is aborted.\n\n This setting overrides the `merge.renameLimit` configuration value." - }, - { - "type": "git_diff_similarity_metric *", - "name": "metric", - "comments": " Pluggable similarity metric; pass NULL to use internal metric " - }, - { - "type": "unsigned int", - "name": "recursion_limit", - "comments": " Maximum number of times to merge common ancestors to build a\n virtual merge base when faced with criss-cross merges. When this\n limit is reached, the next ancestor will simply be used instead of\n attempting to merge it. The default is unlimited." - }, - { - "type": "const char *", - "name": "default_driver", - "comments": " Default merge driver to be used when both sides of a merge have\n changed. The default is the `text` driver." - }, - { - "type": "git_merge_file_favor_t", - "name": "file_favor", - "comments": " Flags for handling conflicting content, to be used with the standard\n (`text`) merge driver." - }, - { - "type": "uint32_t", - "name": "file_flags", - "comments": " see `git_merge_file_flag_t` above " - } - ], - "used": { - "returns": [], - "needs": [ - "git_cherrypick_commit", - "git_merge", - "git_merge_commits", - "git_merge_options_init", - "git_merge_trees", - "git_revert_commit" - ] - } - } - ], - [ - "git_merge_preference_t", - { - "decl": [ - "GIT_MERGE_PREFERENCE_NONE", - "GIT_MERGE_PREFERENCE_NO_FASTFORWARD", - "GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY" - ], - "type": "enum", - "file": "git2/merge.h", - "line": 368, - "lineto": 386, - "block": "GIT_MERGE_PREFERENCE_NONE\nGIT_MERGE_PREFERENCE_NO_FASTFORWARD\nGIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", - "tdef": "typedef", - "description": " The user's stated preference for merges.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_MERGE_PREFERENCE_NONE", - "comments": "

No configuration was found that suggests a preferred behavior for\n merge.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_MERGE_PREFERENCE_NO_FASTFORWARD", - "comments": "

There is a merge.ff=false configuration setting, suggesting that\n the user does not want to allow a fast-forward merge.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", - "comments": "

There is a merge.ff=only configuration setting, suggesting that\n the user only wants fast-forward merges.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_analysis", - "git_merge_analysis_for_ref" - ] - } - } - ], - [ - "git_message_trailer", - { - "decl": [ - "const char * key", - "const char * value" - ], - "type": "struct", - "value": "git_message_trailer", - "file": "git2/message.h", - "line": 43, - "lineto": 46, - "block": "const char * key\nconst char * value", - "tdef": "typedef", - "description": " Represents a single git message trailer.", - "comments": "", - "fields": [ - { - "type": "const char *", - "name": "key", - "comments": "" - }, - { - "type": "const char *", - "name": "value", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_message_trailer_array_free", - "git_message_trailers" - ] - } - } - ], - [ - "git_message_trailer_array", - { - "decl": [ - "git_message_trailer * trailers", - "size_t count", - "char * _trailer_block" - ], - "type": "struct", - "value": "git_message_trailer_array", - "file": "git2/message.h", - "line": 54, - "lineto": 60, - "block": "git_message_trailer * trailers\nsize_t count\nchar * _trailer_block", - "tdef": "typedef", - "description": " Represents an array of git message trailers.", - "comments": "

Struct members under the private comment are private, subject to change and should not be used by callers.

\n", - "fields": [ - { - "type": "git_message_trailer *", - "name": "trailers", - "comments": "" - }, - { - "type": "size_t", - "name": "count", - "comments": "" - }, - { - "type": "char *", - "name": "_trailer_block", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_message_trailer_array_free", - "git_message_trailers" - ] - } - } - ], - [ - "git_midx_writer", - { - "decl": "git_midx_writer", - "type": "struct", - "value": "git_midx_writer", - "file": "git2/types.h", - "line": 100, - "lineto": 100, - "tdef": "typedef", - "description": " a writer for multi-pack-index files. ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_note", - { - "decl": "git_note", - "type": "struct", - "value": "git_note", - "file": "git2/types.h", - "line": 169, - "lineto": 169, - "tdef": "typedef", - "description": " Representation of a git note ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_note_author", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_committer", - "git_note_foreach", - "git_note_free", - "git_note_id", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_message", - "git_note_next", - "git_note_read" - ] - } - } - ], - [ - "git_note_iterator", - { - "decl": "git_note_iterator", - "type": "struct", - "value": "git_note_iterator", - "file": "git2/notes.h", - "line": 35, - "lineto": 35, - "tdef": "typedef", - "description": " note iterator", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_note_commit_iterator_new", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_next" - ] - } - } - ], - [ - "git_object", - { - "decl": "git_object", - "type": "struct", - "value": "git_object", - "file": "git2/types.h", - "line": 124, - "lineto": 124, - "tdef": "typedef", - "description": " Representation of a generic object in a repository ", - "comments": "", - "used": { - "returns": [ - "git_blob_rawsize", - "git_object_string2type", - "git_object_type", - "git_odb_object_type", - "git_tag_target_type", - "git_tree_entry_type" - ], - "needs": [ - "git_checkout_tree", - "git_describe_commit", - "git_object__size", - "git_object_dup", - "git_object_free", - "git_object_id", - "git_object_lookup", - "git_object_lookup_bypath", - "git_object_lookup_prefix", - "git_object_owner", - "git_object_peel", - "git_object_rawcontent_is_valid", - "git_object_short_id", - "git_object_type", - "git_object_type2string", - "git_object_typeisloose", - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_read_header", - "git_odb_write", - "git_reference_peel", - "git_repository_hashfile", - "git_reset", - "git_reset_default", - "git_revparse_ext", - "git_revparse_single", - "git_tag_annotation_create", - "git_tag_create", - "git_tag_create_lightweight", - "git_tag_peel", - "git_tag_target", - "git_tree_entry_to_object" - ] - } - } - ], - [ - "git_object_t", - { - "decl": [ - "GIT_OBJECT_ANY", - "GIT_OBJECT_INVALID", - "GIT_OBJECT_COMMIT", - "GIT_OBJECT_TREE", - "GIT_OBJECT_BLOB", - "GIT_OBJECT_TAG", - "GIT_OBJECT_OFS_DELTA", - "GIT_OBJECT_REF_DELTA" - ], - "type": "enum", - "file": "git2/types.h", - "line": 73, - "lineto": 82, - "block": "GIT_OBJECT_ANY\nGIT_OBJECT_INVALID\nGIT_OBJECT_COMMIT\nGIT_OBJECT_TREE\nGIT_OBJECT_BLOB\nGIT_OBJECT_TAG\nGIT_OBJECT_OFS_DELTA\nGIT_OBJECT_REF_DELTA", - "tdef": "typedef", - "description": " Basic type (loose or packed) of any Git object. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_OBJECT_ANY", - "comments": "

Object can be any of the following

\n", - "value": -2 - }, - { - "type": "int", - "name": "GIT_OBJECT_INVALID", - "comments": "

Object is invalid.

\n", - "value": -1 - }, - { - "type": "int", - "name": "GIT_OBJECT_COMMIT", - "comments": "

A commit object.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_OBJECT_TREE", - "comments": "

A tree (directory listing) object.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_OBJECT_BLOB", - "comments": "

A file revision object.

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_OBJECT_TAG", - "comments": "

An annotated tag object.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_OBJECT_OFS_DELTA", - "comments": "

A delta, base is given by an offset.

\n", - "value": 6 - }, - { - "type": "int", - "name": "GIT_OBJECT_REF_DELTA", - "comments": "

A delta, base is given by object id.

\n", - "value": 7 - } - ], - "used": { - "returns": [ - "git_object_string2type", - "git_object_type", - "git_odb_object_type", - "git_tag_target_type", - "git_tree_entry_type" - ], - "needs": [ - "git_object__size", - "git_object_lookup", - "git_object_lookup_bypath", - "git_object_lookup_prefix", - "git_object_peel", - "git_object_rawcontent_is_valid", - "git_object_type2string", - "git_object_typeisloose", - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_read_header", - "git_odb_write", - "git_reference_peel", - "git_repository_hashfile" - ] - } - } - ], - [ - "git_odb", - { - "decl": "git_odb", - "type": "struct", - "value": "git_odb", - "file": "git2/types.h", - "line": 85, - "lineto": 85, - "tdef": "typedef", - "description": " An open object database handle. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_indexer_new", - "git_odb_add_alternate", - "git_odb_add_backend", - "git_odb_add_disk_alternate", - "git_odb_exists", - "git_odb_exists_ext", - "git_odb_exists_prefix", - "git_odb_expand_ids", - "git_odb_foreach", - "git_odb_free", - "git_odb_get_backend", - "git_odb_num_backends", - "git_odb_object_data", - "git_odb_object_dup", - "git_odb_object_free", - "git_odb_object_id", - "git_odb_object_size", - "git_odb_object_type", - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_read", - "git_odb_read_header", - "git_odb_read_prefix", - "git_odb_refresh", - "git_odb_set_commit_graph", - "git_odb_stream_finalize_write", - "git_odb_stream_free", - "git_odb_stream_read", - "git_odb_stream_write", - "git_odb_write", - "git_odb_write_multi_pack_index", - "git_odb_write_pack", - "git_repository_odb" - ] - } - } - ], - [ - "git_odb_backend", - { - "decl": "git_odb_backend", - "type": "struct", - "value": "git_odb_backend", - "file": "git2/types.h", - "line": 88, - "lineto": 88, - "tdef": "typedef", - "description": " A custom backend in an ODB ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_odb_add_alternate", - "git_odb_add_backend", - "git_odb_get_backend" - ] - } - } - ], - [ - "git_odb_backend_loose_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "int compression_level", - "unsigned int dir_mode", - "unsigned int file_mode", - "git_oid_t oid_type" - ], - "type": "struct", - "value": "git_odb_backend_loose_options", - "file": "git2/odb_backend.h", - "line": 93, - "lineto": 119, - "block": "unsigned int version\nuint32_t flags\nint compression_level\nunsigned int dir_mode\nunsigned int file_mode\ngit_oid_t oid_type", - "tdef": "typedef", - "description": " Options for configuring a loose object backend. ", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " version for the struct " - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of the `git_odb_backend_loose_flag_t` types. " - }, - { - "type": "int", - "name": "compression_level", - "comments": " zlib compression level to use (0-9), where 1 is the fastest\n at the expense of larger files, and 9 produces the best\n compression at the expense of speed. 0 indicates that no\n compression should be performed. -1 is the default (currently\n optimizing for speed)." - }, - { - "type": "unsigned int", - "name": "dir_mode", - "comments": " Permissions to use creating a directory or 0 for defaults " - }, - { - "type": "unsigned int", - "name": "file_mode", - "comments": " Permissions to use creating a file or 0 for defaults " - }, - { - "type": "git_oid_t", - "name": "oid_type", - "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_odb_backend_pack_options", - { - "decl": [ - "unsigned int version", - "git_oid_t oid_type" - ], - "type": "struct", - "value": "git_odb_backend_pack_options", - "file": "git2/odb_backend.h", - "line": 28, - "lineto": 36, - "block": "unsigned int version\ngit_oid_t oid_type", - "tdef": "typedef", - "description": " Options for configuring a packfile object backend. ", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " version for the struct " - }, - { - "type": "git_oid_t", - "name": "oid_type", - "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_odb_expand_id", - { - "decl": [ - "git_oid id", - "unsigned short length", - "git_object_t type" - ], - "type": "struct", - "value": "git_odb_expand_id", - "file": "git2/odb.h", - "line": 230, - "lineto": 245, - "block": "git_oid id\nunsigned short length\ngit_object_t type", - "tdef": "typedef", - "description": " The information about object IDs to query in `git_odb_expand_ids`,\n which will be populated upon return.", - "comments": "", - "fields": [ - { - "type": "git_oid", - "name": "id", - "comments": " The object ID to expand " - }, - { - "type": "unsigned short", - "name": "length", - "comments": " The length of the object ID (in nibbles, or packets of 4 bits; the\n number of hex characters)" - }, - { - "type": "git_object_t", - "name": "type", - "comments": " The (optional) type of the object to search for; leave as `0` or set\n to `GIT_OBJECT_ANY` to query for any object matching the ID." - } - ], - "used": { - "returns": [], - "needs": [ - "git_odb_expand_ids" - ] - } - } - ], - [ - "git_odb_lookup_flags_t", - { - "decl": [ - "GIT_ODB_LOOKUP_NO_REFRESH" - ], - "type": "enum", - "file": "git2/odb.h", - "line": 26, - "lineto": 34, - "block": "GIT_ODB_LOOKUP_NO_REFRESH", - "tdef": "typedef", - "description": " Flags controlling the behavior of ODB lookup operations ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_ODB_LOOKUP_NO_REFRESH", - "comments": "

Don't call git_odb_refresh if the lookup fails. Useful when doing\n a batch of lookup operations for objects that may legitimately not\n exist. When using this flag, you may wish to manually call\n git_odb_refresh before processing a batch of objects.

\n", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_odb_object", - { - "decl": "git_odb_object", - "type": "struct", - "value": "git_odb_object", - "file": "git2/types.h", - "line": 91, - "lineto": 91, - "tdef": "typedef", - "description": " An object read from the ODB ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_odb_object_data", - "git_odb_object_dup", - "git_odb_object_free", - "git_odb_object_id", - "git_odb_object_size", - "git_odb_object_type", - "git_odb_read", - "git_odb_read_prefix" - ] - } - } - ], - [ - "git_odb_options", - { - "decl": [ - "unsigned int version", - "git_oid_t oid_type" - ], - "type": "struct", - "value": "git_odb_options", - "file": "git2/odb.h", - "line": 42, - "lineto": 50, - "block": "unsigned int version\ngit_oid_t oid_type", - "tdef": "typedef", - "description": " Options for configuring a loose object backend. ", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " version for the struct " - }, - { - "type": "git_oid_t", - "name": "oid_type", - "comments": " Type of object IDs to use for this object database, or\n 0 for default (currently SHA1)." - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_odb_stream", - { - "decl": "git_odb_stream", - "type": "struct", - "value": "git_odb_stream", - "file": "git2/types.h", - "line": 94, - "lineto": 94, - "block": "git_odb_backend * backend\nunsigned int mode\nvoid * hash_ctx\ngit_object_size_t declared_size\ngit_object_size_t received_bytes\nint (*)(git_odb_stream *, char *, size_t) read\nint (*)(git_odb_stream *, const char *, size_t) write\nint (*)(git_odb_stream *, const git_oid *) finalize_write\nvoid (*)(git_odb_stream *) free", - "tdef": "typedef", - "description": " A stream to read/write from the ODB ", - "comments": "", - "fields": [ - { - "type": "git_odb_backend *", - "name": "backend", - "comments": "" - }, - { - "type": "unsigned int", - "name": "mode", - "comments": "" - }, - { - "type": "void *", - "name": "hash_ctx", - "comments": "" - }, - { - "type": "git_object_size_t", - "name": "declared_size", - "comments": "" - }, - { - "type": "git_object_size_t", - "name": "received_bytes", - "comments": "" - }, - { - "type": "int (*)(git_odb_stream *, char *, size_t)", - "name": "read", - "comments": "" - }, - { - "type": "int (*)(git_odb_stream *, const char *, size_t)", - "name": "write", - "comments": "" - }, - { - "type": "int (*)(git_odb_stream *, const git_oid *)", - "name": "finalize_write", - "comments": "" - }, - { - "type": "void (*)(git_odb_stream *)", - "name": "free", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_stream_finalize_write", - "git_odb_stream_free", - "git_odb_stream_read", - "git_odb_stream_write" - ] - } - } - ], - [ - "git_odb_stream_t", - { - "decl": [ - "GIT_STREAM_RDONLY", - "GIT_STREAM_WRONLY", - "GIT_STREAM_RW" - ], - "type": "enum", - "file": "git2/odb_backend.h", - "line": 155, - "lineto": 159, - "block": "GIT_STREAM_RDONLY\nGIT_STREAM_WRONLY\nGIT_STREAM_RW", - "tdef": "typedef", - "description": " Streaming mode ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STREAM_RDONLY", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STREAM_WRONLY", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STREAM_RW", - "comments": "", - "value": 6 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_odb_writepack", - { - "decl": "git_odb_writepack", - "type": "struct", - "value": "git_odb_writepack", - "file": "git2/types.h", - "line": 97, - "lineto": 97, - "block": "git_odb_backend * backend\nint (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *) append\nint (*)(git_odb_writepack *, git_indexer_progress *) commit\nvoid (*)(git_odb_writepack *) free", - "tdef": "typedef", - "description": " A stream to write a packfile to the ODB ", - "comments": "", - "fields": [ - { - "type": "git_odb_backend *", - "name": "backend", - "comments": "" - }, - { - "type": "int (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *)", - "name": "append", - "comments": "" - }, - { - "type": "int (*)(git_odb_writepack *, git_indexer_progress *)", - "name": "commit", - "comments": "" - }, - { - "type": "void (*)(git_odb_writepack *)", - "name": "free", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_odb_write_pack" - ] - } - } - ], - [ - "git_oid", - { - "decl": [ - "unsigned char [20] id" - ], - "type": "struct", - "value": "git_oid", - "file": "git2/oid.h", - "line": 99, - "lineto": 108, - "block": "unsigned char [20] id", - "tdef": "typedef", - "description": " Unique identity of any object (commit, tree, blob, tag). ", - "comments": "", - "fields": [ - { - "type": "unsigned char [20]", - "name": "id", - "comments": " raw binary formatted id " - } - ], - "used": { - "returns": [ - "git_annotated_commit_id", - "git_blob_id", - "git_commit_id", - "git_commit_parent_id", - "git_commit_tree_id", - "git_index_checksum", - "git_indexer_hash", - "git_note_id", - "git_object_id", - "git_odb_object_id", - "git_oid_shorten_new", - "git_packbuilder_hash", - "git_rebase_onto_id", - "git_rebase_orig_head_id", - "git_reference_target", - "git_reference_target_peel", - "git_reflog_entry_id_new", - "git_reflog_entry_id_old", - "git_repository_oid_type", - "git_submodule_head_id", - "git_submodule_index_id", - "git_submodule_wd_id", - "git_tag_id", - "git_tag_target_id", - "git_tree_entry_id", - "git_tree_id" - ], - "needs": [ - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_lookup", - "git_blob_create_from_buffer", - "git_blob_create_from_disk", - "git_blob_create_from_stream_commit", - "git_blob_create_from_workdir", - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_commit_amend", - "git_commit_create", - "git_commit_create_cb", - "git_commit_create_v", - "git_commit_create_with_signature", - "git_commit_extract_signature", - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_diff_patchid", - "git_graph_ahead_behind", - "git_graph_descendant_of", - "git_graph_reachable_from_any", - "git_index_write_tree", - "git_index_write_tree_to", - "git_merge_base", - "git_merge_base_many", - "git_merge_base_octopus", - "git_merge_bases", - "git_merge_bases_many", - "git_note_commit_create", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_create", - "git_note_foreach_cb", - "git_note_next", - "git_note_read", - "git_note_remove", - "git_object_lookup", - "git_object_lookup_prefix", - "git_odb_exists", - "git_odb_exists_ext", - "git_odb_exists_prefix", - "git_odb_foreach_cb", - "git_odb_open_rstream", - "git_odb_read", - "git_odb_read_header", - "git_odb_read_prefix", - "git_odb_stream_finalize_write", - "git_odb_write", - "git_oid_cmp", - "git_oid_cpy", - "git_oid_equal", - "git_oid_fmt", - "git_oid_is_zero", - "git_oid_ncmp", - "git_oid_nfmt", - "git_oid_pathfmt", - "git_oid_shorten_add", - "git_oid_shorten_free", - "git_oid_strcmp", - "git_oid_streq", - "git_oid_tostr", - "git_oid_tostr_s", - "git_oidarray_dispose", - "git_oidarray_free", - "git_packbuilder_insert", - "git_packbuilder_insert_commit", - "git_packbuilder_insert_recur", - "git_packbuilder_insert_tree", - "git_rebase_commit", - "git_reference_create", - "git_reference_create_matching", - "git_reference_name_to_id", - "git_reference_set_target", - "git_reflog_append", - "git_repository_fetchhead_foreach_cb", - "git_repository_hashfile", - "git_repository_mergehead_foreach_cb", - "git_repository_set_head_detached", - "git_revwalk_hide", - "git_revwalk_hide_cb", - "git_revwalk_next", - "git_revwalk_push", - "git_stash_cb", - "git_stash_save", - "git_stash_save_with_opts", - "git_tag_annotation_create", - "git_tag_create", - "git_tag_create_from_buffer", - "git_tag_create_lightweight", - "git_tag_foreach_cb", - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_transaction_set_target", - "git_tree_create_updated", - "git_tree_entry_byid", - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_treebuilder_insert", - "git_treebuilder_write", - "git_treebuilder_write_with_buffer" - ] - } - } - ], - [ - "git_oid_shorten", - { - "decl": "git_oid_shorten", - "type": "struct", - "value": "git_oid_shorten", - "file": "git2/oid.h", - "line": 320, - "lineto": 320, - "tdef": "typedef", - "description": " OID Shortener object", - "comments": "", - "used": { - "returns": [ - "git_oid_shorten_new" - ], - "needs": [ - "git_oid_shorten_add", - "git_oid_shorten_free" - ] - } - } - ], - [ - "git_oid_t", - { - "decl": [ - "GIT_OID_SHA1" - ], - "type": "enum", - "file": "git2/oid.h", - "line": 24, - "lineto": 33, - "block": "GIT_OID_SHA1", - "tdef": "typedef", - "description": " The type of object id. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_OID_SHA1", - "comments": "

SHA1

\n", - "value": 1 - } - ], - "used": { - "returns": [ - "git_repository_oid_type" - ], - "needs": [] - } - } - ], - [ - "git_oidarray", - { - "decl": [ - "git_oid * ids", - "size_t count" - ], - "type": "struct", - "value": "git_oidarray", - "file": "git2/oidarray.h", - "line": 16, - "lineto": 19, - "block": "git_oid * ids\nsize_t count", - "tdef": "typedef", - "description": " Array of object ids ", - "comments": "", - "fields": [ - { - "type": "git_oid *", - "name": "ids", - "comments": "" - }, - { - "type": "size_t", - "name": "count", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_merge_bases", - "git_merge_bases_many", - "git_oidarray_dispose", - "git_oidarray_free" - ] - } - } - ], - [ - "git_packbuilder", - { - "decl": "git_packbuilder", - "type": "struct", - "value": "git_packbuilder", - "file": "git2/types.h", - "line": 172, - "lineto": 172, - "tdef": "typedef", - "description": " Representation of a git packbuilder ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_packbuilder_foreach", - "git_packbuilder_free", - "git_packbuilder_hash", - "git_packbuilder_insert", - "git_packbuilder_insert_commit", - "git_packbuilder_insert_recur", - "git_packbuilder_insert_tree", - "git_packbuilder_insert_walk", - "git_packbuilder_name", - "git_packbuilder_new", - "git_packbuilder_object_count", - "git_packbuilder_set_callbacks", - "git_packbuilder_set_threads", - "git_packbuilder_write", - "git_packbuilder_write_buf", - "git_packbuilder_written" - ] - } - } - ], - [ - "git_packbuilder_stage_t", - { - "decl": [ - "GIT_PACKBUILDER_ADDING_OBJECTS", - "GIT_PACKBUILDER_DELTAFICATION" - ], - "type": "enum", - "file": "git2/pack.h", - "line": 52, - "lineto": 55, - "block": "GIT_PACKBUILDER_ADDING_OBJECTS\nGIT_PACKBUILDER_DELTAFICATION", - "tdef": "typedef", - "description": " Stages that are reported by the packbuilder progress callback.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_PACKBUILDER_ADDING_OBJECTS", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_PACKBUILDER_DELTAFICATION", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_patch", - { - "decl": "git_patch", - "type": "struct", - "value": "git_patch", - "file": "git2/patch.h", - "line": 29, - "lineto": 29, - "tdef": "typedef", - "description": " The diff patch is used to store all the text diffs for a delta.", - "comments": "

You can easily loop over the content of patches and get information about them.

\n", - "used": { - "returns": [], - "needs": [ - "git_patch_free", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs", - "git_patch_from_buffers", - "git_patch_from_diff", - "git_patch_get_delta", - "git_patch_get_hunk", - "git_patch_get_line_in_hunk", - "git_patch_line_stats", - "git_patch_num_hunks", - "git_patch_num_lines_in_hunk", - "git_patch_owner", - "git_patch_print", - "git_patch_size", - "git_patch_to_buf" - ] - } - } - ], - [ - "git_path_fs", - { - "decl": [ - "GIT_PATH_FS_GENERIC", - "GIT_PATH_FS_NTFS", - "GIT_PATH_FS_HFS" - ], - "type": "enum", - "file": "git2/sys/path.h", - "line": 34, - "lineto": 41, - "block": "GIT_PATH_FS_GENERIC\nGIT_PATH_FS_NTFS\nGIT_PATH_FS_HFS", - "tdef": "typedef", - "description": " The kinds of checks to perform according to which filesystem we are trying to\n protect.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_PATH_FS_GENERIC", - "comments": "

Do both NTFS- and HFS-specific checks

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_PATH_FS_NTFS", - "comments": "

Do NTFS-specific checks only

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_PATH_FS_HFS", - "comments": "

Do HFS-specific checks only

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_pathspec", - { - "decl": "git_pathspec", - "type": "struct", - "value": "git_pathspec", - "file": "git2/pathspec.h", - "line": 20, - "lineto": 20, - "tdef": "typedef", - "description": " Compiled pathspec", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_pathspec_free", - "git_pathspec_match_diff", - "git_pathspec_match_index", - "git_pathspec_match_list_diff_entry", - "git_pathspec_match_list_entry", - "git_pathspec_match_list_entrycount", - "git_pathspec_match_list_failed_entry", - "git_pathspec_match_list_failed_entrycount", - "git_pathspec_match_list_free", - "git_pathspec_match_tree", - "git_pathspec_match_workdir", - "git_pathspec_matches_path", - "git_pathspec_new" - ] - } - } - ], - [ - "git_pathspec_flag_t", - { - "decl": [ - "GIT_PATHSPEC_DEFAULT", - "GIT_PATHSPEC_IGNORE_CASE", - "GIT_PATHSPEC_USE_CASE", - "GIT_PATHSPEC_NO_GLOB", - "GIT_PATHSPEC_NO_MATCH_ERROR", - "GIT_PATHSPEC_FIND_FAILURES", - "GIT_PATHSPEC_FAILURES_ONLY" - ], - "type": "enum", - "file": "git2/pathspec.h", - "line": 30, - "lineto": 73, - "block": "GIT_PATHSPEC_DEFAULT\nGIT_PATHSPEC_IGNORE_CASE\nGIT_PATHSPEC_USE_CASE\nGIT_PATHSPEC_NO_GLOB\nGIT_PATHSPEC_NO_MATCH_ERROR\nGIT_PATHSPEC_FIND_FAILURES\nGIT_PATHSPEC_FAILURES_ONLY", - "tdef": "typedef", - "description": " Options controlling how pathspec match should be executed", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_PATHSPEC_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_IGNORE_CASE", - "comments": "

GIT_PATHSPEC_IGNORE_CASE forces match to ignore case; otherwise\n match will use native case sensitivity of platform filesystem

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_USE_CASE", - "comments": "

GIT_PATHSPEC_USE_CASE forces case sensitive match; otherwise\n match will use native case sensitivity of platform filesystem

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_NO_GLOB", - "comments": "

GIT_PATHSPEC_NO_GLOB disables glob patterns and just uses simple\n string comparison for matching

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_NO_MATCH_ERROR", - "comments": "

GIT_PATHSPEC_NO_MATCH_ERROR means the match functions return error\n code GIT_ENOTFOUND if no matches are found; otherwise no matches is\n still success (return 0) but git_pathspec_match_list_entrycount\n will indicate 0 matches.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_FIND_FAILURES", - "comments": "

GIT_PATHSPEC_FIND_FAILURES means that the git_pathspec_match_list\n should track which patterns matched which files so that at the end of\n the match we can identify patterns that did not match any files.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_PATHSPEC_FAILURES_ONLY", - "comments": "

GIT_PATHSPEC_FAILURES_ONLY means that the git_pathspec_match_list\n does not need to keep the actual matching filenames. Use this to\n just test if there were any matches at all or in combination with\n GIT_PATHSPEC_FIND_FAILURES to validate a pathspec.

\n", - "value": 32 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_pathspec_match_list", - { - "decl": "git_pathspec_match_list", - "type": "struct", - "value": "git_pathspec_match_list", - "file": "git2/pathspec.h", - "line": 25, - "lineto": 25, - "tdef": "typedef", - "description": " List of filenames matching a pathspec", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_pathspec_match_diff", - "git_pathspec_match_index", - "git_pathspec_match_list_diff_entry", - "git_pathspec_match_list_entry", - "git_pathspec_match_list_entrycount", - "git_pathspec_match_list_failed_entry", - "git_pathspec_match_list_failed_entrycount", - "git_pathspec_match_list_free", - "git_pathspec_match_tree", - "git_pathspec_match_workdir" - ] - } - } - ], - [ - "git_proxy_options", - { - "decl": [ - "unsigned int version", - "git_proxy_t type", - "const char * url", - "git_credential_acquire_cb credentials", - "git_transport_certificate_check_cb certificate_check", - "void * payload" - ], - "type": "struct", - "value": "git_proxy_options", - "file": "git2/proxy.h", - "line": 44, - "lineto": 79, - "block": "unsigned int version\ngit_proxy_t type\nconst char * url\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\nvoid * payload", - "tdef": "typedef", - "description": " Options for connecting through a proxy", - "comments": "

Note that not all types may be supported, depending on the platform and compilation options.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_proxy_t", - "name": "type", - "comments": " The type of proxy to use, by URL, auto-detect." - }, - { - "type": "const char *", - "name": "url", - "comments": " The URL of the proxy." - }, - { - "type": "git_credential_acquire_cb", - "name": "credentials", - "comments": " This will be called if the remote host requires\n authentication in order to connect to it.\n\n Returning GIT_PASSTHROUGH will make libgit2 behave as\n though this field isn't set." - }, - { - "type": "git_transport_certificate_check_cb", - "name": "certificate_check", - "comments": " If cert verification fails, this will be called to let the\n user make the final decision of whether to allow the\n connection to proceed. Returns 0 to allow the connection\n or a negative value to indicate an error." - }, - { - "type": "void *", - "name": "payload", - "comments": " Payload to be provided to the credentials and certificate\n check callbacks." - } - ], - "used": { - "returns": [], - "needs": [ - "git_proxy_options_init", - "git_remote_connect" - ] - } - } - ], - [ - "git_proxy_t", - { - "decl": [ - "GIT_PROXY_NONE", - "GIT_PROXY_AUTO", - "GIT_PROXY_SPECIFIED" - ], - "type": "enum", - "file": "git2/proxy.h", - "line": 20, - "lineto": 36, - "block": "GIT_PROXY_NONE\nGIT_PROXY_AUTO\nGIT_PROXY_SPECIFIED", - "tdef": "typedef", - "description": " The type of proxy to use.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_PROXY_NONE", - "comments": "

Do not attempt to connect through a proxy

\n\n

If built against libcurl, it itself may attempt to connect\n to a proxy if the environment variables specify it.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_PROXY_AUTO", - "comments": "

Try to auto-detect the proxy from the git configuration.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_PROXY_SPECIFIED", - "comments": "

Connect via the URL given in the options

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_push", - { - "decl": "git_push", - "type": "struct", - "value": "git_push", - "file": "git2/types.h", - "line": 253, - "lineto": 253, - "tdef": "typedef", - "description": " Preparation for a push operation. Can be used to configure what to\n push and the level of parallelism of the packfile builder.", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_push_negotiation", - "git_push_options_init", - "git_remote_push", - "git_remote_upload" - ] - } - } - ], - [ - "git_push_options", - { - "decl": [ - "unsigned int version", - "unsigned int pb_parallelism", - "git_remote_callbacks callbacks", - "git_proxy_options proxy_opts", - "git_remote_redirect_t follow_redirects", - "git_strarray custom_headers" - ], - "type": "struct", - "value": "git_push_options", - "file": "git2/remote.h", - "line": 799, - "lineto": 833, - "block": "unsigned int version\nunsigned int pb_parallelism\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", - "tdef": "typedef", - "description": " Controls the behavior of a git_push object.", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "pb_parallelism", - "comments": " If the transport being used to push to the remote requires the creation\n of a pack file, this controls the number of worker threads used by\n the packbuilder when creating that pack file to be sent to the remote.\n\n If set to 0, the packbuilder will auto-detect the number of threads\n to create. The default value is 1." - }, - { - "type": "git_remote_callbacks", - "name": "callbacks", - "comments": " Callbacks to use for this push operation" - }, - { - "type": "git_proxy_options", - "name": "proxy_opts", - "comments": " Proxy options to use, by default no proxy is used." - }, - { - "type": "git_remote_redirect_t", - "name": "follow_redirects", - "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." - }, - { - "type": "git_strarray", - "name": "custom_headers", - "comments": " Extra headers for this push operation" - } - ], - "used": { - "returns": [], - "needs": [ - "git_push_options_init", - "git_remote_push", - "git_remote_upload" - ] - } - } - ], - [ - "git_push_update", - { - "decl": [ - "char * src_refname", - "char * dst_refname", - "git_oid src", - "git_oid dst" - ], - "type": "struct", - "value": "git_push_update", - "file": "git2/remote.h", - "line": 468, - "lineto": 485, - "block": "char * src_refname\nchar * dst_refname\ngit_oid src\ngit_oid dst", - "tdef": "typedef", - "description": " Represents an update which will be performed on the remote during push", - "comments": "", - "fields": [ - { - "type": "char *", - "name": "src_refname", - "comments": " The source name of the reference" - }, - { - "type": "char *", - "name": "dst_refname", - "comments": " The name of the reference to update on the server" - }, - { - "type": "git_oid", - "name": "src", - "comments": " The current target of the reference" - }, - { - "type": "git_oid", - "name": "dst", - "comments": " The new target for the reference" - } - ], - "used": { - "returns": [], - "needs": [ - "git_push_negotiation" - ] - } - } - ], - [ - "git_rebase", - { - "decl": "git_rebase", - "type": "struct", - "value": "git_rebase", - "file": "git2/types.h", - "line": 204, - "lineto": 204, - "tdef": "typedef", - "description": " Representation of a rebase ", - "comments": "", - "used": { - "returns": [ - "git_rebase_operation_byindex" - ], - "needs": [ - "git_rebase_abort", - "git_rebase_commit", - "git_rebase_finish", - "git_rebase_free", - "git_rebase_init", - "git_rebase_inmemory_index", - "git_rebase_next", - "git_rebase_onto_id", - "git_rebase_onto_name", - "git_rebase_open", - "git_rebase_operation_byindex", - "git_rebase_operation_current", - "git_rebase_operation_entrycount", - "git_rebase_options_init", - "git_rebase_orig_head_id", - "git_rebase_orig_head_name" - ] - } - } - ], - [ - "git_rebase_operation", - { - "decl": [ - "git_rebase_operation_t type", - "const git_oid id", - "const char * exec" - ], - "type": "struct", - "value": "git_rebase_operation", - "file": "git2/rebase.h", - "line": 172, - "lineto": 187, - "block": "git_rebase_operation_t type\nconst git_oid id\nconst char * exec", - "tdef": "typedef", - "description": " A rebase operation", - "comments": "

Describes a single instruction/operation to be performed during the rebase.

\n", - "fields": [ - { - "type": "git_rebase_operation_t", - "name": "type", - "comments": " The type of rebase operation. " - }, - { - "type": "const git_oid", - "name": "id", - "comments": " The commit ID being cherry-picked. This will be populated for\n all operations except those of type `GIT_REBASE_OPERATION_EXEC`." - }, - { - "type": "const char *", - "name": "exec", - "comments": " The executable the user has requested be run. This will only\n be populated for operations of type `GIT_REBASE_OPERATION_EXEC`." - } - ], - "used": { - "returns": [ - "git_rebase_operation_byindex" - ], - "needs": [ - "git_rebase_next" - ] - } - } - ], - [ - "git_rebase_operation_t", - { - "decl": [ - "GIT_REBASE_OPERATION_PICK", - "GIT_REBASE_OPERATION_REWORD", - "GIT_REBASE_OPERATION_EDIT", - "GIT_REBASE_OPERATION_SQUASH", - "GIT_REBASE_OPERATION_FIXUP", - "GIT_REBASE_OPERATION_EXEC" - ], - "type": "enum", - "file": "git2/rebase.h", - "line": 120, - "lineto": 156, - "block": "GIT_REBASE_OPERATION_PICK\nGIT_REBASE_OPERATION_REWORD\nGIT_REBASE_OPERATION_EDIT\nGIT_REBASE_OPERATION_SQUASH\nGIT_REBASE_OPERATION_FIXUP\nGIT_REBASE_OPERATION_EXEC", - "tdef": "typedef", - "description": " Type of rebase operation in-progress after calling `git_rebase_next`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REBASE_OPERATION_PICK", - "comments": "

The given commit is to be cherry-picked. The client should commit\n the changes and continue if there are no conflicts.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_REWORD", - "comments": "

The given commit is to be cherry-picked, but the client should prompt\n the user to provide an updated commit message.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_EDIT", - "comments": "

The given commit is to be cherry-picked, but the client should stop\n to allow the user to edit the changes before committing them.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_SQUASH", - "comments": "

The given commit is to be squashed into the previous commit. The\n commit message will be merged with the previous message.

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_FIXUP", - "comments": "

The given commit is to be squashed into the previous commit. The\n commit message from this commit will be discarded.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REBASE_OPERATION_EXEC", - "comments": "

No commit will be cherry-picked. The client should run the given\n command and (if successful) continue.

\n", - "value": 5 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_rebase_options", - { - "decl": [ - "unsigned int version", - "int quiet", - "int inmemory", - "const char * rewrite_notes_ref", - "git_merge_options merge_options", - "git_checkout_options checkout_options", - "git_commit_create_cb commit_create_cb", - "int (*)(git_buf *, git_buf *, const char *, void *) signing_cb", - "void * payload" - ], - "type": "struct", - "value": "git_rebase_options", - "file": "git2/rebase.h", - "line": 32, - "lineto": 115, - "block": "unsigned int version\nint quiet\nint inmemory\nconst char * rewrite_notes_ref\ngit_merge_options merge_options\ngit_checkout_options checkout_options\ngit_commit_create_cb commit_create_cb\nint (*)(git_buf *, git_buf *, const char *, void *) signing_cb\nvoid * payload", - "tdef": "typedef", - "description": " Rebase options", - "comments": "

Use to tell the rebase machinery how to operate.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "int", - "name": "quiet", - "comments": " Used by `git_rebase_init`, this will instruct other clients working\n on this rebase that you want a quiet rebase experience, which they\n may choose to provide in an application-specific manner. This has no\n effect upon libgit2 directly, but is provided for interoperability\n between Git tools." - }, - { - "type": "int", - "name": "inmemory", - "comments": " Used by `git_rebase_init`, this will begin an in-memory rebase,\n which will allow callers to step through the rebase operations and\n commit the rebased changes, but will not rewind HEAD or update the\n repository to be in a rebasing state. This will not interfere with\n the working directory (if there is one)." - }, - { - "type": "const char *", - "name": "rewrite_notes_ref", - "comments": " Used by `git_rebase_finish`, this is the name of the notes reference\n used to rewrite notes for rebased commits when finishing the rebase;\n if NULL, the contents of the configuration option `notes.rewriteRef`\n is examined, unless the configuration option `notes.rewrite.rebase`\n is set to false. If `notes.rewriteRef` is also NULL, notes will\n not be rewritten." - }, - { - "type": "git_merge_options", - "name": "merge_options", - "comments": " Options to control how trees are merged during `git_rebase_next`." - }, - { - "type": "git_checkout_options", - "name": "checkout_options", - "comments": " Options to control how files are written during `git_rebase_init`,\n `git_rebase_next` and `git_rebase_abort`. Note that a minimum\n strategy of `GIT_CHECKOUT_SAFE` is defaulted in `init` and `next`,\n and a minimum strategy of `GIT_CHECKOUT_FORCE` is defaulted in\n `abort` to match git semantics." - }, - { - "type": "git_commit_create_cb", - "name": "commit_create_cb", - "comments": " Optional callback that allows users to override commit\n creation in `git_rebase_commit`. If specified, users can\n create their own commit and provide the commit ID, which\n may be useful for signing commits or otherwise customizing\n the commit creation.\n\n If this callback returns `GIT_PASSTHROUGH`, then\n `git_rebase_commit` will continue to create the commit." - }, - { - "type": "int (*)(git_buf *, git_buf *, const char *, void *)", - "name": "signing_cb", - "comments": " If provided, this will be called with the commit content, allowing\n a signature to be added to the rebase commit. Can be skipped with\n GIT_PASSTHROUGH. If GIT_PASSTHROUGH is returned, a commit will be made\n without a signature.\n\n This field is only used when performing git_rebase_commit.\n\n This callback is not invoked if a `git_commit_create_cb` is\n specified.\n\n This callback is deprecated; users should provide a\n creation callback as `commit_create_cb` that produces a\n commit buffer, signs it, and commits it." - }, - { - "type": "void *", - "name": "payload", - "comments": " This will be passed to each of the callbacks in this struct\n as the last parameter." - } - ], - "used": { - "returns": [], - "needs": [ - "git_rebase_init", - "git_rebase_open", - "git_rebase_options_init" - ] - } - } - ], - [ - "git_refdb", - { - "decl": "git_refdb", - "type": "struct", - "value": "git_refdb", - "file": "git2/types.h", - "line": 103, - "lineto": 103, - "tdef": "typedef", - "description": " An open refs database handle. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_refdb_compress", - "git_refdb_free", - "git_refdb_new", - "git_refdb_open", - "git_repository_refdb" - ] - } - } - ], - [ - "git_refdb_backend", - { - "decl": "git_refdb_backend", - "type": "struct", - "value": "git_refdb_backend", - "file": "git2/types.h", - "line": 106, - "lineto": 106, - "tdef": "typedef", - "description": " A custom backend for refs ", - "comments": "", - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_reference", - { - "decl": "git_reference", - "type": "struct", - "value": "git_reference", - "file": "git2/types.h", - "line": 189, - "lineto": 189, - "tdef": "typedef", - "description": " In-memory representation of a reference. ", - "comments": "", - "used": { - "returns": [ - "git_reference_type" - ], - "needs": [ - "git_annotated_commit_from_ref", - "git_branch_create", - "git_branch_create_from_annotated", - "git_branch_delete", - "git_branch_is_checked_out", - "git_branch_is_head", - "git_branch_lookup", - "git_branch_move", - "git_branch_name", - "git_branch_next", - "git_branch_set_upstream", - "git_branch_upstream", - "git_merge_analysis_for_ref", - "git_reference_cmp", - "git_reference_create", - "git_reference_create_matching", - "git_reference_delete", - "git_reference_dup", - "git_reference_dwim", - "git_reference_foreach", - "git_reference_foreach_cb", - "git_reference_foreach_glob", - "git_reference_foreach_name", - "git_reference_free", - "git_reference_is_branch", - "git_reference_is_note", - "git_reference_is_remote", - "git_reference_is_tag", - "git_reference_iterator_free", - "git_reference_iterator_glob_new", - "git_reference_iterator_new", - "git_reference_lookup", - "git_reference_name", - "git_reference_next", - "git_reference_next_name", - "git_reference_owner", - "git_reference_peel", - "git_reference_rename", - "git_reference_resolve", - "git_reference_set_target", - "git_reference_shorthand", - "git_reference_symbolic_create", - "git_reference_symbolic_create_matching", - "git_reference_symbolic_set_target", - "git_reference_symbolic_target", - "git_reference_target", - "git_reference_target_peel", - "git_reference_type", - "git_repository_head", - "git_repository_head_for_worktree", - "git_revparse_ext" - ] - } - } - ], - [ - "git_reference_format_t", - { - "decl": [ - "GIT_REFERENCE_FORMAT_NORMAL", - "GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL", - "GIT_REFERENCE_FORMAT_REFSPEC_PATTERN", - "GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND" - ], - "type": "enum", - "file": "git2/refs.h", - "line": 661, - "lineto": 690, - "block": "GIT_REFERENCE_FORMAT_NORMAL\nGIT_REFERENCE_FORMAT_ALLOW_ONELEVEL\nGIT_REFERENCE_FORMAT_REFSPEC_PATTERN\nGIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", - "tdef": "typedef", - "description": " Normalization options for reference lookup", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REFERENCE_FORMAT_NORMAL", - "comments": "

No particular normalization.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REFERENCE_FORMAT_ALLOW_ONELEVEL", - "comments": "

Control whether one-level refnames are accepted\n (i.e., refnames that do not contain multiple /-separated\n components). Those are expected to be written only using\n uppercase letters and underscore (FETCH_HEAD, ...)

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REFERENCE_FORMAT_REFSPEC_PATTERN", - "comments": "

Interpret the provided name as a reference pattern for a\n refspec (as used with remote repositories). If this option\n is enabled, the name is allowed to contain a single * (\n<star

\n\n
\n

)\n in place of a one full pathname component\n (e.g., foo/\n<star\n/bar but not foo/bar\n<star\n).

\n
\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", - "comments": "

Interpret the name as part of a refspec in shorthand form\n so the ONELEVEL naming rules aren't enforced and 'master'\n becomes a valid name.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_reference_iterator", - { - "decl": "git_reference_iterator", - "type": "struct", - "value": "git_reference_iterator", - "file": "git2/types.h", - "line": 192, - "lineto": 192, - "tdef": "typedef", - "description": " Iterator for references ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_reference_iterator_free", - "git_reference_iterator_glob_new", - "git_reference_iterator_new", - "git_reference_next", - "git_reference_next_name" - ] - } - } - ], - [ - "git_reference_t", - { - "decl": [ - "GIT_REFERENCE_INVALID", - "GIT_REFERENCE_DIRECT", - "GIT_REFERENCE_SYMBOLIC", - "GIT_REFERENCE_ALL" - ], - "type": "enum", - "file": "git2/types.h", - "line": 207, - "lineto": 212, - "block": "GIT_REFERENCE_INVALID\nGIT_REFERENCE_DIRECT\nGIT_REFERENCE_SYMBOLIC\nGIT_REFERENCE_ALL", - "tdef": "typedef", - "description": " Basic type of any Git reference. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REFERENCE_INVALID", - "comments": "

Invalid reference

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REFERENCE_DIRECT", - "comments": "

A reference that points at an object id

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REFERENCE_SYMBOLIC", - "comments": "

A reference that points at another reference

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REFERENCE_ALL", - "comments": "", - "value": 3 - } - ], - "used": { - "returns": [ - "git_reference_type" - ], - "needs": [] - } - } - ], - [ - "git_reflog", - { - "decl": "git_reflog", - "type": "struct", - "value": "git_reflog", - "file": "git2/types.h", - "line": 166, - "lineto": 166, - "tdef": "typedef", - "description": " Representation of a reference log ", - "comments": "", - "used": { - "returns": [ - "git_reflog_entry_byindex" - ], - "needs": [ - "git_reflog_append", - "git_reflog_drop", - "git_reflog_entry_byindex", - "git_reflog_entry_committer", - "git_reflog_entry_id_new", - "git_reflog_entry_id_old", - "git_reflog_entry_message", - "git_reflog_entrycount", - "git_reflog_free", - "git_reflog_read", - "git_reflog_write", - "git_transaction_set_reflog" - ] - } - } - ], - [ - "git_reflog_entry", - { - "decl": "git_reflog_entry", - "type": "struct", - "value": "git_reflog_entry", - "file": "git2/types.h", - "line": 163, - "lineto": 163, - "tdef": "typedef", - "description": " Representation of a reference log entry ", - "comments": "", - "used": { - "returns": [ - "git_reflog_entry_byindex" - ], - "needs": [ - "git_reflog_entry_committer", - "git_reflog_entry_id_new", - "git_reflog_entry_id_old", - "git_reflog_entry_message" - ] - } - } - ], - [ - "git_refspec", - { - "decl": "git_refspec", - "type": "struct", - "value": "git_refspec", - "file": "git2/types.h", - "line": 235, - "lineto": 235, - "tdef": "typedef", - "description": " A refspec specifies the mapping between remote and local reference\n names when fetch or pushing.", - "comments": "", - "used": { - "returns": [ - "git_remote_get_refspec" - ], - "needs": [ - "git_refspec_direction", - "git_refspec_dst", - "git_refspec_dst_matches", - "git_refspec_force", - "git_refspec_free", - "git_refspec_parse", - "git_refspec_rtransform", - "git_refspec_src", - "git_refspec_src_matches", - "git_refspec_string", - "git_refspec_transform" - ] - } - } - ], - [ - "git_remote", - { - "decl": "git_remote", - "type": "struct", - "value": "git_remote", - "file": "git2/types.h", - "line": 241, - "lineto": 241, - "tdef": "typedef", - "description": " Git's idea of a remote repository. A remote can be anonymous (in\n which case it does not have backing configuration entries).", - "comments": "", - "used": { - "returns": [ - "git_remote_autotag" - ], - "needs": [ - "git_headlist_cb", - "git_remote_autotag", - "git_remote_connect", - "git_remote_connect_ext", - "git_remote_connect_options_init", - "git_remote_connected", - "git_remote_create", - "git_remote_create_anonymous", - "git_remote_create_cb", - "git_remote_create_detached", - "git_remote_create_options_init", - "git_remote_create_with_fetchspec", - "git_remote_create_with_opts", - "git_remote_default_branch", - "git_remote_disconnect", - "git_remote_download", - "git_remote_dup", - "git_remote_fetch", - "git_remote_free", - "git_remote_get_fetch_refspecs", - "git_remote_get_push_refspecs", - "git_remote_get_refspec", - "git_remote_init_callbacks", - "git_remote_lookup", - "git_remote_ls", - "git_remote_name", - "git_remote_owner", - "git_remote_prune", - "git_remote_prune_refs", - "git_remote_push", - "git_remote_pushurl", - "git_remote_ready_cb", - "git_remote_refspec_count", - "git_remote_set_autotag", - "git_remote_set_instance_pushurl", - "git_remote_set_instance_url", - "git_remote_stats", - "git_remote_stop", - "git_remote_update_tips", - "git_remote_upload", - "git_remote_url", - "git_transport_cb" - ] - } - } - ], - [ - "git_remote_autotag_option_t", - { - "decl": [ - "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED", - "GIT_REMOTE_DOWNLOAD_TAGS_AUTO", - "GIT_REMOTE_DOWNLOAD_TAGS_NONE", - "GIT_REMOTE_DOWNLOAD_TAGS_ALL" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 685, - "lineto": 703, - "block": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED\nGIT_REMOTE_DOWNLOAD_TAGS_AUTO\nGIT_REMOTE_DOWNLOAD_TAGS_NONE\nGIT_REMOTE_DOWNLOAD_TAGS_ALL", - "tdef": "typedef", - "description": " Automatic tag following option", - "comments": "

Lets us select the --tags option to use.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED", - "comments": "

Use the setting from the configuration.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REMOTE_DOWNLOAD_TAGS_AUTO", - "comments": "

Ask the server for tags pointing to objects we're already\n downloading.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REMOTE_DOWNLOAD_TAGS_NONE", - "comments": "

Don't ask for any tags beyond the refspecs.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REMOTE_DOWNLOAD_TAGS_ALL", - "comments": "

Ask for the all the tags.

\n", - "value": 3 - } - ], - "used": { - "returns": [ - "git_remote_autotag" - ], - "needs": [ - "git_remote_set_autotag", - "git_remote_update_tips" - ] - } - } - ], - [ - "git_remote_callbacks", - { - "decl": [ - "unsigned int version", - "git_transport_message_cb sideband_progress", - "int (*)(git_remote_completion_t, void *) completion", - "git_credential_acquire_cb credentials", - "git_transport_certificate_check_cb certificate_check", - "git_indexer_progress_cb transfer_progress", - "int (*)(const char *, const git_oid *, const git_oid *, void *) update_tips", - "git_packbuilder_progress pack_progress", - "git_push_transfer_progress_cb push_transfer_progress", - "git_push_update_reference_cb push_update_reference", - "git_push_negotiation push_negotiation", - "git_transport_cb transport", - "git_remote_ready_cb remote_ready", - "void * payload", - "git_url_resolve_cb resolve_url" - ], - "type": "struct", - "value": "git_remote_callbacks", - "file": "git2/remote.h", - "line": 546, - "lineto": 647, - "block": "unsigned int version\ngit_transport_message_cb sideband_progress\nint (*)(git_remote_completion_t, void *) completion\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\ngit_indexer_progress_cb transfer_progress\nint (*)(const char *, const git_oid *, const git_oid *, void *) update_tips\ngit_packbuilder_progress pack_progress\ngit_push_transfer_progress_cb push_transfer_progress\ngit_push_update_reference_cb push_update_reference\ngit_push_negotiation push_negotiation\ngit_transport_cb transport\ngit_remote_ready_cb remote_ready\nvoid * payload\ngit_url_resolve_cb resolve_url", - "tdef": null, - "description": " The callback settings structure", - "comments": "

Set the callbacks to be called by the remote when informing the user about the progress of the network operations.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " The version " - }, - { - "type": "git_transport_message_cb", - "name": "sideband_progress", - "comments": " Textual progress from the remote. Text send over the\n progress side-band will be passed to this function (this is\n the 'counting objects' output)." - }, - { - "type": "int (*)(git_remote_completion_t, void *)", - "name": "completion", - "comments": "" - }, - { - "type": "git_credential_acquire_cb", - "name": "credentials", - "comments": " This will be called if the remote host requires\n authentication in order to connect to it.\n\n Returning GIT_PASSTHROUGH will make libgit2 behave as\n though this field isn't set." - }, - { - "type": "git_transport_certificate_check_cb", - "name": "certificate_check", - "comments": " If cert verification fails, this will be called to let the\n user make the final decision of whether to allow the\n connection to proceed. Returns 0 to allow the connection\n or a negative value to indicate an error." - }, - { - "type": "git_indexer_progress_cb", - "name": "transfer_progress", - "comments": " During the download of new data, this will be regularly\n called with the current count of progress done by the\n indexer." - }, - { - "type": "int (*)(const char *, const git_oid *, const git_oid *, void *)", - "name": "update_tips", - "comments": "" - }, - { - "type": "git_packbuilder_progress", - "name": "pack_progress", - "comments": " Function to call with progress information during pack\n building. Be aware that this is called inline with pack\n building operations, so performance may be affected." - }, - { - "type": "git_push_transfer_progress_cb", - "name": "push_transfer_progress", - "comments": " Function to call with progress information during the\n upload portion of a push. Be aware that this is called\n inline with pack building operations, so performance may be\n affected." - }, - { - "type": "git_push_update_reference_cb", - "name": "push_update_reference", - "comments": " See documentation of git_push_update_reference_cb" - }, - { - "type": "git_push_negotiation", - "name": "push_negotiation", - "comments": " Called once between the negotiation step and the upload. It\n provides information about what updates will be performed." - }, - { - "type": "git_transport_cb", - "name": "transport", - "comments": " Create the transport to use for this operation. Leave NULL\n to auto-detect." - }, - { - "type": "git_remote_ready_cb", - "name": "remote_ready", - "comments": " Callback when the remote is ready to connect." - }, - { - "type": "void *", - "name": "payload", - "comments": " This will be passed to each of the callbacks in this struct\n as the last parameter." - }, - { - "type": "git_url_resolve_cb", - "name": "resolve_url", - "comments": " Resolve URL before connecting to remote.\n The returned URL will be used to connect to the remote instead.\n\n This callback is deprecated; users should use\n git_remote_ready_cb and configure the instance URL instead." - } - ], - "used": { - "returns": [], - "needs": [ - "git_remote_connect", - "git_remote_init_callbacks", - "git_remote_prune", - "git_remote_update_tips" - ] - } - } - ], - [ - "git_remote_completion_t", - { - "decl": [ - "GIT_REMOTE_COMPLETION_DOWNLOAD", - "GIT_REMOTE_COMPLETION_INDEXING", - "GIT_REMOTE_COMPLETION_ERROR" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 452, - "lineto": 456, - "block": "GIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR\nGIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR", - "tdef": "typedef", - "description": " Argument to the completion callback which tells it which operation\n finished.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REMOTE_COMPLETION_DOWNLOAD", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REMOTE_COMPLETION_INDEXING", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REMOTE_COMPLETION_ERROR", - "comments": "", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_remote_connect_options", - { - "decl": [ - "unsigned int version", - "git_remote_callbacks callbacks", - "git_proxy_options proxy_opts", - "git_remote_redirect_t follow_redirects", - "git_strarray custom_headers" - ], - "type": "struct", - "value": "git_remote_connect_options", - "file": "git2/remote.h", - "line": 859, - "lineto": 877, - "block": "unsigned int version\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", - "tdef": "typedef", - "description": " Remote creation options structure", - "comments": "

Initialize with GIT_REMOTE_CREATE_OPTIONS_INIT. Alternatively, you can use git_remote_create_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_remote_callbacks", - "name": "callbacks", - "comments": " Callbacks to use for this connection " - }, - { - "type": "git_proxy_options", - "name": "proxy_opts", - "comments": " HTTP Proxy settings " - }, - { - "type": "git_remote_redirect_t", - "name": "follow_redirects", - "comments": " Whether to allow off-site redirects. If this is not\n specified, the `http.followRedirects` configuration setting\n will be consulted." - }, - { - "type": "git_strarray", - "name": "custom_headers", - "comments": " Extra HTTP headers to use in this connection " - } - ], - "used": { - "returns": [], - "needs": [ - "git_remote_connect_ext", - "git_remote_connect_options_init" - ] - } - } - ], - [ - "git_remote_create_flags", - { - "decl": [ - "GIT_REMOTE_CREATE_SKIP_INSTEADOF", - "GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 71, - "lineto": 77, - "block": "GIT_REMOTE_CREATE_SKIP_INSTEADOF\nGIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC", - "tdef": "typedef", - "description": " Remote creation options flags", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REMOTE_CREATE_SKIP_INSTEADOF", - "comments": "

Ignore the repository apply.insteadOf configuration

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REMOTE_CREATE_SKIP_DEFAULT_FETCHSPEC", - "comments": "

Don't build a fetchspec from the name if none is set

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_remote_create_options", - { - "decl": [ - "unsigned int version", - "git_repository * repository", - "const char * name", - "const char * fetchspec", - "unsigned int flags" - ], - "type": "struct", - "value": "git_remote_create_options", - "file": "git2/remote.h", - "line": 86, - "lineto": 106, - "block": "unsigned int version\ngit_repository * repository\nconst char * name\nconst char * fetchspec\nunsigned int flags", - "tdef": "typedef", - "description": " Remote creation options structure", - "comments": "

Initialize with GIT_REMOTE_CREATE_OPTIONS_INIT. Alternatively, you can use git_remote_create_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_repository *", - "name": "repository", - "comments": " The repository that should own the remote.\n Setting this to NULL results in a detached remote." - }, - { - "type": "const char *", - "name": "name", - "comments": " The remote's name.\n Setting this to NULL results in an in-memory/anonymous remote." - }, - { - "type": "const char *", - "name": "fetchspec", - "comments": " The fetchspec the remote should use. " - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " Additional flags for the remote. See git_remote_create_flags. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_remote_create_options_init", - "git_remote_create_with_opts" - ] - } - } - ], - [ - "git_remote_head", - { - "decl": [ - "int local", - "git_oid oid", - "git_oid loid", - "char * name", - "char * symref_target" - ], - "type": "struct", - "value": "git_remote_head", - "file": "git2/net.h", - "line": 40, - "lineto": 50, - "block": "int local\ngit_oid oid\ngit_oid loid\nchar * name\nchar * symref_target", - "tdef": null, - "description": " Description of a reference advertised by a remote server, given out\n on `ls` calls.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "local", - "comments": "" - }, - { - "type": "git_oid", - "name": "oid", - "comments": "" - }, - { - "type": "git_oid", - "name": "loid", - "comments": "" - }, - { - "type": "char *", - "name": "name", - "comments": "" - }, - { - "type": "char *", - "name": "symref_target", - "comments": " If the server send a symref mapping for this ref, this will\n point to the target." - } - ], - "used": { - "returns": [], - "needs": [ - "git_headlist_cb", - "git_remote_ls" - ] - } - } - ], - [ - "git_remote_redirect_t", - { - "decl": [ - "GIT_REMOTE_REDIRECT_NONE", - "GIT_REMOTE_REDIRECT_INITIAL", - "GIT_REMOTE_REDIRECT_ALL" - ], - "type": "enum", - "file": "git2/remote.h", - "line": 49, - "lineto": 66, - "block": "GIT_REMOTE_REDIRECT_NONE\nGIT_REMOTE_REDIRECT_INITIAL\nGIT_REMOTE_REDIRECT_ALL", - "tdef": "typedef", - "description": " Remote redirection settings; whether redirects to another host\n are permitted. By default, git will follow a redirect on the\n initial request (`/info/refs`), but not subsequent requests.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REMOTE_REDIRECT_NONE", - "comments": "

Do not follow any off-site redirects at any stage of\n the fetch or push.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REMOTE_REDIRECT_INITIAL", - "comments": "

Allow off-site redirects only upon the initial request.\n This is the default.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REMOTE_REDIRECT_ALL", - "comments": "

Allow redirects at any stage in the fetch or push.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_repository", - { - "decl": "git_repository", - "type": "struct", - "value": "git_repository", - "file": "git2/types.h", - "line": 118, - "lineto": 118, - "tdef": "typedef", - "description": " Representation of an existing git repository,\n including all its object contents", - "comments": "", - "used": { - "returns": [ - "git_blob_owner", - "git_commit_owner", - "git_index_owner", - "git_object_owner", - "git_patch_owner", - "git_reference_owner", - "git_remote_owner", - "git_revwalk_repository", - "git_submodule_owner", - "git_tag_owner", - "git_tree_owner" - ], - "needs": [ - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_from_ref", - "git_annotated_commit_from_revspec", - "git_annotated_commit_lookup", - "git_apply", - "git_apply_to_tree", - "git_attr_add_macro", - "git_attr_cache_flush", - "git_attr_foreach", - "git_attr_foreach_ext", - "git_attr_get", - "git_attr_get_ext", - "git_attr_get_many", - "git_attr_get_many_ext", - "git_blame_file", - "git_blob_create_from_buffer", - "git_blob_create_from_disk", - "git_blob_create_from_stream", - "git_blob_create_from_workdir", - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_branch_create", - "git_branch_create_from_annotated", - "git_branch_iterator_new", - "git_branch_lookup", - "git_branch_remote_name", - "git_branch_upstream_merge", - "git_branch_upstream_name", - "git_branch_upstream_remote", - "git_checkout_head", - "git_checkout_index", - "git_checkout_tree", - "git_cherrypick", - "git_cherrypick_commit", - "git_clone", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_v", - "git_commit_create_with_signature", - "git_commit_extract_signature", - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_config_add_file_ondisk", - "git_describe_workdir", - "git_diff_commit_as_email", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_filter_list_apply_to_file", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_file", - "git_graph_ahead_behind", - "git_graph_descendant_of", - "git_graph_reachable_from_any", - "git_ignore_add_rule", - "git_ignore_clear_internal_rules", - "git_ignore_path_is_ignored", - "git_index_write_tree_to", - "git_mailmap_from_repository", - "git_merge", - "git_merge_analysis", - "git_merge_analysis_for_ref", - "git_merge_base", - "git_merge_base_many", - "git_merge_base_octopus", - "git_merge_bases", - "git_merge_bases_many", - "git_merge_commits", - "git_merge_file_from_index", - "git_merge_trees", - "git_note_commit_create", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_create", - "git_note_default_ref", - "git_note_foreach", - "git_note_iterator_new", - "git_note_read", - "git_note_remove", - "git_object_lookup", - "git_object_lookup_prefix", - "git_packbuilder_new", - "git_pathspec_match_workdir", - "git_rebase_init", - "git_rebase_open", - "git_refdb_new", - "git_refdb_open", - "git_reference_create", - "git_reference_create_matching", - "git_reference_dwim", - "git_reference_ensure_log", - "git_reference_foreach", - "git_reference_foreach_glob", - "git_reference_foreach_name", - "git_reference_has_log", - "git_reference_iterator_glob_new", - "git_reference_iterator_new", - "git_reference_list", - "git_reference_lookup", - "git_reference_name_to_id", - "git_reference_remove", - "git_reference_symbolic_create", - "git_reference_symbolic_create_matching", - "git_reflog_delete", - "git_reflog_read", - "git_reflog_rename", - "git_remote_add_fetch", - "git_remote_add_push", - "git_remote_create", - "git_remote_create_anonymous", - "git_remote_create_cb", - "git_remote_create_with_fetchspec", - "git_remote_delete", - "git_remote_list", - "git_remote_lookup", - "git_remote_rename", - "git_remote_set_autotag", - "git_remote_set_pushurl", - "git_remote_set_url", - "git_repository_commondir", - "git_repository_config", - "git_repository_config_snapshot", - "git_repository_create_cb", - "git_repository_detach_head", - "git_repository_fetchhead_foreach", - "git_repository_free", - "git_repository_get_namespace", - "git_repository_hashfile", - "git_repository_head", - "git_repository_head_detached", - "git_repository_head_detached_for_worktree", - "git_repository_head_for_worktree", - "git_repository_head_unborn", - "git_repository_ident", - "git_repository_index", - "git_repository_init", - "git_repository_init_ext", - "git_repository_init_options_init", - "git_repository_is_bare", - "git_repository_is_empty", - "git_repository_is_shallow", - "git_repository_is_worktree", - "git_repository_item_path", - "git_repository_mergehead_foreach", - "git_repository_message", - "git_repository_message_remove", - "git_repository_odb", - "git_repository_oid_type", - "git_repository_open", - "git_repository_open_bare", - "git_repository_open_ext", - "git_repository_open_from_worktree", - "git_repository_path", - "git_repository_refdb", - "git_repository_set_head", - "git_repository_set_head_detached", - "git_repository_set_head_detached_from_annotated", - "git_repository_set_ident", - "git_repository_set_namespace", - "git_repository_set_workdir", - "git_repository_state", - "git_repository_state_cleanup", - "git_repository_workdir", - "git_reset", - "git_reset_default", - "git_reset_from_annotated", - "git_revert", - "git_revert_commit", - "git_revparse", - "git_revparse_ext", - "git_revparse_single", - "git_revwalk_new", - "git_signature_default", - "git_stash_apply", - "git_stash_drop", - "git_stash_foreach", - "git_stash_pop", - "git_stash_save", - "git_stash_save_with_opts", - "git_status_file", - "git_status_foreach", - "git_status_foreach_ext", - "git_status_list_new", - "git_status_should_ignore", - "git_submodule_add_setup", - "git_submodule_clone", - "git_submodule_foreach", - "git_submodule_lookup", - "git_submodule_open", - "git_submodule_repo_init", - "git_submodule_resolve_url", - "git_submodule_set_branch", - "git_submodule_set_fetch_recurse_submodules", - "git_submodule_set_ignore", - "git_submodule_set_update", - "git_submodule_set_url", - "git_submodule_status", - "git_tag_annotation_create", - "git_tag_create", - "git_tag_create_from_buffer", - "git_tag_create_lightweight", - "git_tag_delete", - "git_tag_foreach", - "git_tag_list", - "git_tag_list_match", - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_transaction_new", - "git_tree_create_updated", - "git_tree_entry_to_object", - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_treebuilder_new", - "git_worktree_add", - "git_worktree_list", - "git_worktree_lookup", - "git_worktree_open_from_repository" - ] - } - } - ], - [ - "git_repository_init_flag_t", - { - "decl": [ - "GIT_REPOSITORY_INIT_BARE", - "GIT_REPOSITORY_INIT_NO_REINIT", - "GIT_REPOSITORY_INIT_NO_DOTGIT_DIR", - "GIT_REPOSITORY_INIT_MKDIR", - "GIT_REPOSITORY_INIT_MKPATH", - "GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE", - "GIT_REPOSITORY_INIT_RELATIVE_GITLINK" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 235, - "lineto": 281, - "block": "GIT_REPOSITORY_INIT_BARE\nGIT_REPOSITORY_INIT_NO_REINIT\nGIT_REPOSITORY_INIT_NO_DOTGIT_DIR\nGIT_REPOSITORY_INIT_MKDIR\nGIT_REPOSITORY_INIT_MKPATH\nGIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE\nGIT_REPOSITORY_INIT_RELATIVE_GITLINK", - "tdef": "typedef", - "description": " Option flags for `git_repository_init_ext`.", - "comments": "

These flags configure extra behaviors to git_repository_init_ext. In every case, the default behavior is the zero value (i.e. flag is not set). Just OR the flag values together for the flags parameter when initializing a new repo.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_BARE", - "comments": "

Create a bare repository with no working directory.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_NO_REINIT", - "comments": "

Return an GIT_EEXISTS error if the repo_path appears to already be\n an git repository.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_NO_DOTGIT_DIR", - "comments": "

Normally a "/.git/" will be appended to the repo path for\n non-bare repos (if it is not already there), but passing this flag\n prevents that behavior.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_MKDIR", - "comments": "

Make the repo_path (and workdir_path) as needed. Init is always willing\n to create the ".git" directory even without this flag. This flag tells\n init to create the trailing component of the repo and workdir paths\n as needed.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_MKPATH", - "comments": "

Recursively make all components of the repo and workdir paths as\n necessary.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE", - "comments": "

libgit2 normally uses internal templates to initialize a new repo.\n This flags enables external templates, looking the "template_path" from\n the options if set, or the init.templatedir global config if not,\n or falling back on "/usr/share/git-core/templates" if it exists.

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_RELATIVE_GITLINK", - "comments": "

If an alternate workdir is specified, use relative paths for the gitdir\n and core.worktree.

\n", - "value": 64 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_repository_init_mode_t", - { - "decl": [ - "GIT_REPOSITORY_INIT_SHARED_UMASK", - "GIT_REPOSITORY_INIT_SHARED_GROUP", - "GIT_REPOSITORY_INIT_SHARED_ALL" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 290, - "lineto": 306, - "block": "GIT_REPOSITORY_INIT_SHARED_UMASK\nGIT_REPOSITORY_INIT_SHARED_GROUP\nGIT_REPOSITORY_INIT_SHARED_ALL", - "tdef": "typedef", - "description": " Mode options for `git_repository_init_ext`.", - "comments": "

Set the mode field of the git_repository_init_options structure either to the custom mode that you would like, or to one of the defined modes.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_SHARED_UMASK", - "comments": "

Use permissions configured by umask - the default.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_SHARED_GROUP", - "comments": "

Use "--shared=group" behavior, chmod'ing the new repo to be group\n writable and "g+sx" for sticky group assignment.

\n", - "value": 1533 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_INIT_SHARED_ALL", - "comments": "

Use "--shared=all" behavior, adding world readability.

\n", - "value": 1535 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_repository_init_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "uint32_t mode", - "const char * workdir_path", - "const char * description", - "const char * template_path", - "const char * initial_head", - "const char * origin_url" - ], - "type": "struct", - "value": "git_repository_init_options", - "file": "git2/repository.h", - "line": 314, - "lineto": 373, - "block": "unsigned int version\nuint32_t flags\nuint32_t mode\nconst char * workdir_path\nconst char * description\nconst char * template_path\nconst char * initial_head\nconst char * origin_url", - "tdef": "typedef", - "description": " Extended options structure for `git_repository_init_ext`.", - "comments": "

This contains extra options for git_repository_init_ext that enable additional initialization features.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " Combination of GIT_REPOSITORY_INIT flags above." - }, - { - "type": "uint32_t", - "name": "mode", - "comments": " Set to one of the standard GIT_REPOSITORY_INIT_SHARED_... constants\n above, or to a custom value that you would like." - }, - { - "type": "const char *", - "name": "workdir_path", - "comments": " The path to the working dir or NULL for default (i.e. repo_path parent\n on non-bare repos). IF THIS IS RELATIVE PATH, IT WILL BE EVALUATED\n RELATIVE TO THE REPO_PATH. If this is not the \"natural\" working\n directory, a .git gitlink file will be created here linking to the\n repo_path." - }, - { - "type": "const char *", - "name": "description", - "comments": " If set, this will be used to initialize the \"description\" file in the\n repository, instead of using the template content." - }, - { - "type": "const char *", - "name": "template_path", - "comments": " When GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE is set, this contains\n the path to use for the template directory. If this is NULL, the config\n or default directory options will be used instead." - }, - { - "type": "const char *", - "name": "initial_head", - "comments": " The name of the head to point HEAD at. If NULL, then this will be\n treated as \"master\" and the HEAD ref will be set to \"refs/heads/master\".\n If this begins with \"refs/\" it will be used verbatim;\n otherwise \"refs/heads/\" will be prefixed." - }, - { - "type": "const char *", - "name": "origin_url", - "comments": " If this is non-NULL, then after the rest of the repository\n initialization is completed, an \"origin\" remote will be added\n pointing to this URL." - } - ], - "used": { - "returns": [], - "needs": [ - "git_repository_init_ext", - "git_repository_init_options_init" - ] - } - } - ], - [ - "git_repository_item_t", - { - "decl": [ - "GIT_REPOSITORY_ITEM_GITDIR", - "GIT_REPOSITORY_ITEM_WORKDIR", - "GIT_REPOSITORY_ITEM_COMMONDIR", - "GIT_REPOSITORY_ITEM_INDEX", - "GIT_REPOSITORY_ITEM_OBJECTS", - "GIT_REPOSITORY_ITEM_REFS", - "GIT_REPOSITORY_ITEM_PACKED_REFS", - "GIT_REPOSITORY_ITEM_REMOTES", - "GIT_REPOSITORY_ITEM_CONFIG", - "GIT_REPOSITORY_ITEM_INFO", - "GIT_REPOSITORY_ITEM_HOOKS", - "GIT_REPOSITORY_ITEM_LOGS", - "GIT_REPOSITORY_ITEM_MODULES", - "GIT_REPOSITORY_ITEM_WORKTREES", - "GIT_REPOSITORY_ITEM__LAST" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 491, - "lineto": 507, - "block": "GIT_REPOSITORY_ITEM_GITDIR\nGIT_REPOSITORY_ITEM_WORKDIR\nGIT_REPOSITORY_ITEM_COMMONDIR\nGIT_REPOSITORY_ITEM_INDEX\nGIT_REPOSITORY_ITEM_OBJECTS\nGIT_REPOSITORY_ITEM_REFS\nGIT_REPOSITORY_ITEM_PACKED_REFS\nGIT_REPOSITORY_ITEM_REMOTES\nGIT_REPOSITORY_ITEM_CONFIG\nGIT_REPOSITORY_ITEM_INFO\nGIT_REPOSITORY_ITEM_HOOKS\nGIT_REPOSITORY_ITEM_LOGS\nGIT_REPOSITORY_ITEM_MODULES\nGIT_REPOSITORY_ITEM_WORKTREES\nGIT_REPOSITORY_ITEM__LAST", - "tdef": "typedef", - "description": " List of items which belong to the git repository layout", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_GITDIR", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_WORKDIR", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_COMMONDIR", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_INDEX", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_OBJECTS", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_REFS", - "comments": "", - "value": 5 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_PACKED_REFS", - "comments": "", - "value": 6 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_REMOTES", - "comments": "", - "value": 7 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_CONFIG", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_INFO", - "comments": "", - "value": 9 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_HOOKS", - "comments": "", - "value": 10 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_LOGS", - "comments": "", - "value": 11 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_MODULES", - "comments": "", - "value": 12 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM_WORKTREES", - "comments": "", - "value": 13 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_ITEM__LAST", - "comments": "", - "value": 14 - } - ], - "used": { - "returns": [], - "needs": [ - "git_repository_item_path" - ] - } - } - ], - [ - "git_repository_open_flag_t", - { - "decl": [ - "GIT_REPOSITORY_OPEN_NO_SEARCH", - "GIT_REPOSITORY_OPEN_CROSS_FS", - "GIT_REPOSITORY_OPEN_BARE", - "GIT_REPOSITORY_OPEN_NO_DOTGIT", - "GIT_REPOSITORY_OPEN_FROM_ENV" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 108, - "lineto": 155, - "block": "GIT_REPOSITORY_OPEN_NO_SEARCH\nGIT_REPOSITORY_OPEN_CROSS_FS\nGIT_REPOSITORY_OPEN_BARE\nGIT_REPOSITORY_OPEN_NO_DOTGIT\nGIT_REPOSITORY_OPEN_FROM_ENV", - "tdef": "typedef", - "description": " Option flags for `git_repository_open_ext`.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_NO_SEARCH", - "comments": "

Only open the repository if it can be immediately found in the\n start_path. Do not walk up from the start_path looking at parent\n directories.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_CROSS_FS", - "comments": "

Unless this flag is set, open will not continue searching across\n filesystem boundaries (i.e. when st_dev changes from the stat\n system call). For example, searching in a user's home directory at\n "/home/user/source/" will not return "/.git/" as the found repo if\n "/" is a different filesystem than "/home".

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_BARE", - "comments": "

Open repository as a bare repo regardless of core.bare config, and\n defer loading config file for faster setup.\n Unlike git_repository_open_bare, this can follow gitlinks.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_NO_DOTGIT", - "comments": "

Do not check for a repository by appending /.git to the start_path;\n only open the repository if start_path itself points to the git\n directory.

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_OPEN_FROM_ENV", - "comments": "

Find and open a git repository, respecting the environment variables\n used by the git command-line tools.\n If set, git_repository_open_ext will ignore the other flags and\n the ceiling_dirs argument, and will allow a NULL path to use\n GIT_DIR or search from the current directory.\n The search for a repository will respect $GIT_CEILING_DIRECTORIES and\n $GIT_DISCOVERY_ACROSS_FILESYSTEM. The opened repository will\n respect $GIT_INDEX_FILE, $GIT_NAMESPACE, $GIT_OBJECT_DIRECTORY, and\n $GIT_ALTERNATE_OBJECT_DIRECTORIES.\n In the future, this flag will also cause git_repository_open_ext\n to respect $GIT_WORK_TREE and $GIT_COMMON_DIR; currently,\n git_repository_open_ext with this flag will error out if either\n $GIT_WORK_TREE or $GIT_COMMON_DIR is set.

\n", - "value": 16 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_repository_state_t", - { - "decl": [ - "GIT_REPOSITORY_STATE_NONE", - "GIT_REPOSITORY_STATE_MERGE", - "GIT_REPOSITORY_STATE_REVERT", - "GIT_REPOSITORY_STATE_REVERT_SEQUENCE", - "GIT_REPOSITORY_STATE_CHERRYPICK", - "GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE", - "GIT_REPOSITORY_STATE_BISECT", - "GIT_REPOSITORY_STATE_REBASE", - "GIT_REPOSITORY_STATE_REBASE_INTERACTIVE", - "GIT_REPOSITORY_STATE_REBASE_MERGE", - "GIT_REPOSITORY_STATE_APPLY_MAILBOX", - "GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE" - ], - "type": "enum", - "file": "git2/repository.h", - "line": 891, - "lineto": 904, - "block": "GIT_REPOSITORY_STATE_NONE\nGIT_REPOSITORY_STATE_MERGE\nGIT_REPOSITORY_STATE_REVERT\nGIT_REPOSITORY_STATE_REVERT_SEQUENCE\nGIT_REPOSITORY_STATE_CHERRYPICK\nGIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE\nGIT_REPOSITORY_STATE_BISECT\nGIT_REPOSITORY_STATE_REBASE\nGIT_REPOSITORY_STATE_REBASE_INTERACTIVE\nGIT_REPOSITORY_STATE_REBASE_MERGE\nGIT_REPOSITORY_STATE_APPLY_MAILBOX\nGIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", - "tdef": "typedef", - "description": " Repository state", - "comments": "

These values represent possible states for the repository to be in, based on the current operation which is ongoing.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_NONE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_MERGE", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REVERT", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REVERT_SEQUENCE", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_CHERRYPICK", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE", - "comments": "", - "value": 5 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_BISECT", - "comments": "", - "value": 6 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REBASE", - "comments": "", - "value": 7 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REBASE_INTERACTIVE", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_REBASE_MERGE", - "comments": "", - "value": 9 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_APPLY_MAILBOX", - "comments": "", - "value": 10 - }, - { - "type": "int", - "name": "GIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", - "comments": "", - "value": 11 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_reset_t", - { - "decl": [ - "GIT_RESET_SOFT", - "GIT_RESET_MIXED", - "GIT_RESET_HARD" - ], - "type": "enum", - "file": "git2/reset.h", - "line": 26, - "lineto": 30, - "block": "GIT_RESET_SOFT\nGIT_RESET_MIXED\nGIT_RESET_HARD", - "tdef": "typedef", - "description": " Kinds of reset operation", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_RESET_SOFT", - "comments": "

Move the head to the given commit

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_RESET_MIXED", - "comments": "

SOFT plus reset index to the commit

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_RESET_HARD", - "comments": "

MIXED plus changes in working tree discarded

\n", - "value": 3 - } - ], - "used": { - "returns": [], - "needs": [ - "git_reset", - "git_reset_from_annotated" - ] - } - } - ], - [ - "git_revert_options", - { - "decl": [ - "unsigned int version", - "unsigned int mainline", - "git_merge_options merge_opts", - "git_checkout_options checkout_opts" - ], - "type": "struct", - "value": "git_revert_options", - "file": "git2/revert.h", - "line": 26, - "lineto": 34, - "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", - "tdef": "typedef", - "description": " Options for revert", - "comments": "", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "unsigned int", - "name": "mainline", - "comments": " For merge commits, the \"mainline\" is treated as the parent. " - }, - { - "type": "git_merge_options", - "name": "merge_opts", - "comments": " Options for the merging " - }, - { - "type": "git_checkout_options", - "name": "checkout_opts", - "comments": " Options for the checkout " - } - ], - "used": { - "returns": [], - "needs": [ - "git_revert", - "git_revert_options_init" - ] - } - } - ], - [ - "git_revspec", - { - "decl": [ - "git_object * from", - "git_object * to", - "unsigned int flags" - ], - "type": "struct", - "value": "git_revspec", - "file": "git2/revparse.h", - "line": 83, - "lineto": 90, - "block": "git_object * from\ngit_object * to\nunsigned int flags", - "tdef": "typedef", - "description": " Git Revision Spec: output of a `git_revparse` operation", - "comments": "", - "fields": [ - { - "type": "git_object *", - "name": "from", - "comments": " The left element of the revspec; must be freed by the user " - }, - { - "type": "git_object *", - "name": "to", - "comments": " The right element of the revspec; must be freed by the user " - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " The intent of the revspec (i.e. `git_revspec_mode_t` flags) " - } - ], - "used": { - "returns": [], - "needs": [ - "git_revparse" - ] - } - } - ], - [ - "git_revspec_t", - { - "decl": [ - "GIT_REVSPEC_SINGLE", - "GIT_REVSPEC_RANGE", - "GIT_REVSPEC_MERGE_BASE" - ], - "type": "enum", - "file": "git2/revparse.h", - "line": 71, - "lineto": 78, - "block": "GIT_REVSPEC_SINGLE\nGIT_REVSPEC_RANGE\nGIT_REVSPEC_MERGE_BASE", - "tdef": "typedef", - "description": " Revparse flags. These indicate the intended behavior of the spec passed to\n git_revparse.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_REVSPEC_SINGLE", - "comments": "

The spec targeted a single object.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_REVSPEC_RANGE", - "comments": "

The spec targeted a range of commits.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_REVSPEC_MERGE_BASE", - "comments": "

The spec used the '...' operator, which invokes special semantics.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_revwalk", - { - "decl": "git_revwalk", - "type": "struct", - "value": "git_revwalk", - "file": "git2/types.h", - "line": 127, - "lineto": 127, - "tdef": "typedef", - "description": " Representation of an in-progress walk through the commits in a repo ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_packbuilder_insert_walk", - "git_revwalk_add_hide_cb", - "git_revwalk_free", - "git_revwalk_hide", - "git_revwalk_hide_glob", - "git_revwalk_hide_head", - "git_revwalk_hide_ref", - "git_revwalk_new", - "git_revwalk_next", - "git_revwalk_push", - "git_revwalk_push_glob", - "git_revwalk_push_head", - "git_revwalk_push_range", - "git_revwalk_push_ref", - "git_revwalk_repository", - "git_revwalk_reset", - "git_revwalk_simplify_first_parent", - "git_revwalk_sorting" - ] - } - } - ], - [ - "git_signature", - { - "decl": [ - "char * name", - "char * email", - "git_time when" - ], - "type": "struct", - "value": "git_signature", - "file": "git2/types.h", - "line": 182, - "lineto": 186, - "block": "char * name\nchar * email\ngit_time when", - "tdef": "typedef", - "description": " An action signature (e.g. for committers, taggers, etc) ", - "comments": "", - "fields": [ - { - "type": "char *", - "name": "name", - "comments": " full name of the author " - }, - { - "type": "char *", - "name": "email", - "comments": " email of the author " - }, - { - "type": "git_time", - "name": "when", - "comments": " time when the action happened " - } - ], - "used": { - "returns": [ - "git_commit_author", - "git_commit_committer", - "git_note_author", - "git_note_committer", - "git_reflog_entry_committer", - "git_tag_tagger" - ], - "needs": [ - "git_commit_amend", - "git_commit_author_with_mailmap", - "git_commit_committer_with_mailmap", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_cb", - "git_commit_create_v", - "git_mailmap_resolve_signature", - "git_note_commit_create", - "git_note_commit_remove", - "git_note_create", - "git_note_remove", - "git_rebase_commit", - "git_rebase_finish", - "git_reflog_append", - "git_signature_default", - "git_signature_dup", - "git_signature_free", - "git_signature_from_buffer", - "git_signature_new", - "git_signature_now", - "git_stash_save", - "git_tag_annotation_create", - "git_tag_create", - "git_transaction_set_symbolic_target", - "git_transaction_set_target" - ] - } - } - ], - [ - "git_smart_service_t", - { - "decl": [ - "GIT_SERVICE_UPLOADPACK_LS", - "GIT_SERVICE_UPLOADPACK", - "GIT_SERVICE_RECEIVEPACK_LS", - "GIT_SERVICE_RECEIVEPACK" - ], - "type": "enum", - "file": "git2/sys/transport.h", - "line": 313, - "lineto": 318, - "block": "GIT_SERVICE_UPLOADPACK_LS\nGIT_SERVICE_UPLOADPACK\nGIT_SERVICE_RECEIVEPACK_LS\nGIT_SERVICE_RECEIVEPACK", - "tdef": "typedef", - "description": " Actions that the smart transport can ask a subtransport to perform ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_SERVICE_UPLOADPACK_LS", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SERVICE_UPLOADPACK", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SERVICE_RECEIVEPACK_LS", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_SERVICE_RECEIVEPACK", - "comments": "", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_sort_t", - { - "decl": [ - "GIT_SORT_NONE", - "GIT_SORT_TOPOLOGICAL", - "GIT_SORT_TIME", - "GIT_SORT_REVERSE" - ], - "type": "enum", - "file": "git2/revwalk.h", - "line": 26, - "lineto": 53, - "block": "GIT_SORT_NONE\nGIT_SORT_TOPOLOGICAL\nGIT_SORT_TIME\nGIT_SORT_REVERSE", - "tdef": "typedef", - "description": " Flags to specify the sorting which a revwalk should perform.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_SORT_NONE", - "comments": "

Sort the output with the same default method from git: reverse\n chronological order. This is the default sorting for new walkers.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_SORT_TOPOLOGICAL", - "comments": "

Sort the repository contents in topological order (no parents before\n all of its children are shown); this sorting mode can be combined\n with time sorting to produce git's --date-order`.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SORT_TIME", - "comments": "

Sort the repository contents by commit time;\n this sorting mode can be combined with\n topological sorting.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SORT_REVERSE", - "comments": "

Iterate through the repository contents in reverse\n order; this sorting mode can be combined with\n any of the above.

\n", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_stash_apply_flags", - { - "decl": [ - "GIT_STASH_APPLY_DEFAULT", - "GIT_STASH_APPLY_REINSTATE_INDEX" - ], - "type": "enum", - "file": "git2/stash.h", - "line": 129, - "lineto": 136, - "block": "GIT_STASH_APPLY_DEFAULT\nGIT_STASH_APPLY_REINSTATE_INDEX", - "tdef": "typedef", - "description": " Stash application flags. ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STASH_APPLY_DEFAULT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_REINSTATE_INDEX", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_stash_apply_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "git_checkout_options checkout_options", - "git_stash_apply_progress_cb progress_cb", - "void * progress_payload" - ], - "type": "struct", - "value": "git_stash_apply_options", - "file": "git2/stash.h", - "line": 180, - "lineto": 192, - "block": "unsigned int version\nuint32_t flags\ngit_checkout_options checkout_options\ngit_stash_apply_progress_cb progress_cb\nvoid * progress_payload", - "tdef": "typedef", - "description": " Stash application options structure", - "comments": "

Initialize with GIT_STASH_APPLY_OPTIONS_INIT. Alternatively, you can use git_stash_apply_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " See `git_stash_apply_flags`, above. " - }, - { - "type": "git_checkout_options", - "name": "checkout_options", - "comments": " Options to use when writing files to the working directory. " - }, - { - "type": "git_stash_apply_progress_cb", - "name": "progress_cb", - "comments": " Optional callback to notify the consumer of application progress. " - }, - { - "type": "void *", - "name": "progress_payload", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_stash_apply", - "git_stash_apply_options_init", - "git_stash_pop" - ] - } - } - ], - [ - "git_stash_apply_progress_t", - { - "decl": [ - "GIT_STASH_APPLY_PROGRESS_NONE", - "GIT_STASH_APPLY_PROGRESS_LOADING_STASH", - "GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX", - "GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED", - "GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED", - "GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED", - "GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED", - "GIT_STASH_APPLY_PROGRESS_DONE" - ], - "type": "enum", - "file": "git2/stash.h", - "line": 139, - "lineto": 162, - "block": "GIT_STASH_APPLY_PROGRESS_NONE\nGIT_STASH_APPLY_PROGRESS_LOADING_STASH\nGIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX\nGIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED\nGIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED\nGIT_STASH_APPLY_PROGRESS_DONE", - "tdef": "typedef", - "description": " Stash apply progression states ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_NONE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_LOADING_STASH", - "comments": "

Loading the stashed data from the object database.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX", - "comments": "

The stored index is being analyzed.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED", - "comments": "

The modified files are being analyzed.

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED", - "comments": "

The untracked and ignored files are being analyzed.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED", - "comments": "

The untracked files are being written to disk.

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED", - "comments": "

The modified files are being written to disk.

\n", - "value": 6 - }, - { - "type": "int", - "name": "GIT_STASH_APPLY_PROGRESS_DONE", - "comments": "

The stash was applied successfully.

\n", - "value": 7 - } - ], - "used": { - "returns": [], - "needs": [ - "git_stash_apply_progress_cb" - ] - } - } - ], - [ - "git_stash_flags", - { - "decl": [ - "GIT_STASH_DEFAULT", - "GIT_STASH_KEEP_INDEX", - "GIT_STASH_INCLUDE_UNTRACKED", - "GIT_STASH_INCLUDE_IGNORED", - "GIT_STASH_KEEP_ALL" - ], - "type": "enum", - "file": "git2/stash.h", - "line": 25, - "lineto": 53, - "block": "GIT_STASH_DEFAULT\nGIT_STASH_KEEP_INDEX\nGIT_STASH_INCLUDE_UNTRACKED\nGIT_STASH_INCLUDE_IGNORED\nGIT_STASH_KEEP_ALL", - "tdef": "typedef", - "description": " Stash flags", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STASH_DEFAULT", - "comments": "

No option, default

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STASH_KEEP_INDEX", - "comments": "

All changes already added to the index are left intact in\n the working directory

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STASH_INCLUDE_UNTRACKED", - "comments": "

All untracked files are also stashed and then cleaned up\n from the working directory

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STASH_INCLUDE_IGNORED", - "comments": "

All ignored files are also stashed and then cleaned up from\n the working directory

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STASH_KEEP_ALL", - "comments": "

All changes in the index and working directory are left intact

\n", - "value": 8 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_stash_save_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags", - "const git_signature * stasher", - "const char * message", - "git_strarray paths" - ], - "type": "struct", - "value": "git_stash_save_options", - "file": "git2/stash.h", - "line": 81, - "lineto": 95, - "block": "unsigned int version\nuint32_t flags\nconst git_signature * stasher\nconst char * message\ngit_strarray paths", - "tdef": "typedef", - "description": " Stash save options structure", - "comments": "

Initialize with GIT_STASH_SAVE_OPTIONS_INIT. Alternatively, you can use git_stash_save_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " Flags to control the stashing process. (see GIT_STASH_* above) " - }, - { - "type": "const git_signature *", - "name": "stasher", - "comments": " The identity of the person performing the stashing. " - }, - { - "type": "const char *", - "name": "message", - "comments": " Optional description along with the stashed state. " - }, - { - "type": "git_strarray", - "name": "paths", - "comments": " Optional paths that control which files are stashed. " - } - ], - "used": { - "returns": [], - "needs": [ - "git_stash_save_options_init", - "git_stash_save_with_opts" - ] - } - } - ], - [ - "git_status_entry", - { - "decl": [ - "git_status_t status", - "git_diff_delta * head_to_index", - "git_diff_delta * index_to_workdir" - ], - "type": "struct", - "value": "git_status_entry", - "file": "git2/status.h", - "line": 295, - "lineto": 299, - "block": "git_status_t status\ngit_diff_delta * head_to_index\ngit_diff_delta * index_to_workdir", - "tdef": "typedef", - "description": " A status entry, providing the differences between the file as it exists\n in HEAD and the index, and providing the differences between the index\n and the working directory.", - "comments": "

The status value provides the status flags for this file.

\n\n

The head_to_index value provides detailed information about the differences between the file in HEAD and the file in the index.

\n\n

The index_to_workdir value provides detailed information about the differences between the file in the index and the file in the working directory.

\n", - "fields": [ - { - "type": "git_status_t", - "name": "status", - "comments": "" - }, - { - "type": "git_diff_delta *", - "name": "head_to_index", - "comments": "" - }, - { - "type": "git_diff_delta *", - "name": "index_to_workdir", - "comments": "" - } - ], - "used": { - "returns": [ - "git_status_byindex" - ], - "needs": [] - } - } - ], - [ - "git_status_list", - { - "decl": "git_status_list", - "type": "struct", - "value": "git_status_list", - "file": "git2/types.h", - "line": 201, - "lineto": 201, - "tdef": "typedef", - "description": " Representation of a status collection ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_status_byindex", - "git_status_list_entrycount", - "git_status_list_free", - "git_status_list_new" - ] - } - } - ], - [ - "git_status_opt_t", - { - "decl": [ - "GIT_STATUS_OPT_INCLUDE_UNTRACKED", - "GIT_STATUS_OPT_INCLUDE_IGNORED", - "GIT_STATUS_OPT_INCLUDE_UNMODIFIED", - "GIT_STATUS_OPT_EXCLUDE_SUBMODULES", - "GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS", - "GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH", - "GIT_STATUS_OPT_RECURSE_IGNORED_DIRS", - "GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX", - "GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR", - "GIT_STATUS_OPT_SORT_CASE_SENSITIVELY", - "GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY", - "GIT_STATUS_OPT_RENAMES_FROM_REWRITES", - "GIT_STATUS_OPT_NO_REFRESH", - "GIT_STATUS_OPT_UPDATE_INDEX", - "GIT_STATUS_OPT_INCLUDE_UNREADABLE", - "GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED" - ], - "type": "enum", - "file": "git2/status.h", - "line": 101, - "lineto": 208, - "block": "GIT_STATUS_OPT_INCLUDE_UNTRACKED\nGIT_STATUS_OPT_INCLUDE_IGNORED\nGIT_STATUS_OPT_INCLUDE_UNMODIFIED\nGIT_STATUS_OPT_EXCLUDE_SUBMODULES\nGIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS\nGIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH\nGIT_STATUS_OPT_RECURSE_IGNORED_DIRS\nGIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX\nGIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR\nGIT_STATUS_OPT_SORT_CASE_SENSITIVELY\nGIT_STATUS_OPT_SORT_CASE_INSENSITIVELY\nGIT_STATUS_OPT_RENAMES_FROM_REWRITES\nGIT_STATUS_OPT_NO_REFRESH\nGIT_STATUS_OPT_UPDATE_INDEX\nGIT_STATUS_OPT_INCLUDE_UNREADABLE\nGIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", - "tdef": "typedef", - "description": " Flags to control status callbacks", - "comments": "

Calling git_status_foreach() is like calling the extended version with: GIT_STATUS_OPT_INCLUDE_IGNORED, GIT_STATUS_OPT_INCLUDE_UNTRACKED, and GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS. Those options are bundled together as GIT_STATUS_OPT_DEFAULTS if you want them as a baseline.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_UNTRACKED", - "comments": "

Says that callbacks should be made on untracked files.\n These will only be made if the workdir files are included in the status\n "show" option.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_IGNORED", - "comments": "

Says that ignored files get callbacks.\n Again, these callbacks will only be made if the workdir files are\n included in the status "show" option.

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_UNMODIFIED", - "comments": "

Indicates that callback should be made even on unmodified files.

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_EXCLUDE_SUBMODULES", - "comments": "

Indicates that submodules should be skipped.\n This only applies if there are no pending typechanges to the submodule\n (either from or to another type).

\n", - "value": 8 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS", - "comments": "

Indicates that all files in untracked directories should be included.\n Normally if an entire directory is new, then just the top-level\n directory is included (with a trailing slash on the entry name).\n This flag says to include all of the individual files in the directory\n instead.

\n", - "value": 16 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH", - "comments": "

Indicates that the given path should be treated as a literal path,\n and not as a pathspec pattern.

\n", - "value": 32 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RECURSE_IGNORED_DIRS", - "comments": "

Indicates that the contents of ignored directories should be included\n in the status. This is like doing git ls-files -o -i --exclude-standard\n with core git.

\n", - "value": 64 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX", - "comments": "

Indicates that rename detection should be processed between the head and\n the index and enables the GIT_STATUS_INDEX_RENAMED as a possible status\n flag.

\n", - "value": 128 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR", - "comments": "

Indicates that rename detection should be run between the index and the\n working directory and enabled GIT_STATUS_WT_RENAMED as a possible status\n flag.

\n", - "value": 256 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_SORT_CASE_SENSITIVELY", - "comments": "

Overrides the native case sensitivity for the file system and forces\n the output to be in case-sensitive order.

\n", - "value": 512 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY", - "comments": "

Overrides the native case sensitivity for the file system and forces\n the output to be in case-insensitive order.

\n", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_RENAMES_FROM_REWRITES", - "comments": "

Iindicates that rename detection should include rewritten files.

\n", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_NO_REFRESH", - "comments": "

Bypasses the default status behavior of doing a "soft" index reload\n (i.e. reloading the index data if the file on disk has been modified\n outside libgit2).

\n", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_UPDATE_INDEX", - "comments": "

Tells libgit2 to refresh the stat cache in the index for files that are\n unchanged but have out of date stat einformation in the index.\n It will result in less work being done on subsequent calls to get status.\n This is mutually exclusive with the NO_REFRESH option.

\n", - "value": 8192 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_UNREADABLE", - "comments": "

Normally files that cannot be opened or read are ignored as\n these are often transient files; this option will return\n unreadable files as GIT_STATUS_WT_UNREADABLE.

\n", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", - "comments": "

Unreadable files will be detected and given the status\n untracked instead of unreadable.

\n", - "value": 32768 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_status_options", - { - "decl": [ - "unsigned int version", - "git_status_show_t show", - "unsigned int flags", - "git_strarray pathspec", - "git_tree * baseline", - "uint16_t rename_threshold" - ], - "type": "struct", - "value": "git_status_options", - "file": "git2/status.h", - "line": 222, - "lineto": 262, - "block": "unsigned int version\ngit_status_show_t show\nunsigned int flags\ngit_strarray pathspec\ngit_tree * baseline\nuint16_t rename_threshold", - "tdef": "typedef", - "description": " Options to control how `git_status_foreach_ext()` will issue callbacks.", - "comments": "

Initialize with GIT_STATUS_OPTIONS_INIT. Alternatively, you can use git_status_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": " The struct version; pass `GIT_STATUS_OPTIONS_VERSION`." - }, - { - "type": "git_status_show_t", - "name": "show", - "comments": " The `show` value is one of the `git_status_show_t` constants that\n control which files to scan and in what order. The default is\n `GIT_STATUS_SHOW_INDEX_AND_WORKDIR`." - }, - { - "type": "unsigned int", - "name": "flags", - "comments": " The `flags` value is an OR'ed combination of the\n `git_status_opt_t` values above. The default is\n `GIT_STATUS_OPT_DEFAULTS`, which matches git's default\n behavior." - }, - { - "type": "git_strarray", - "name": "pathspec", - "comments": " The `pathspec` is an array of path patterns to match (using\n fnmatch-style matching), or just an array of paths to match\n exactly if `GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH` is specified\n in the flags." - }, - { - "type": "git_tree *", - "name": "baseline", - "comments": " The `baseline` is the tree to be used for comparison to the\n working directory and index; defaults to HEAD." - }, - { - "type": "uint16_t", - "name": "rename_threshold", - "comments": " Threshold above which similar files will be considered renames.\n This is equivalent to the -M option. Defaults to 50." - } - ], - "used": { - "returns": [], - "needs": [ - "git_status_foreach_ext", - "git_status_list_new", - "git_status_options_init" - ] - } - } - ], - [ - "git_status_show_t", - { - "decl": [ - "GIT_STATUS_SHOW_INDEX_AND_WORKDIR", - "GIT_STATUS_SHOW_INDEX_ONLY", - "GIT_STATUS_SHOW_WORKDIR_ONLY" - ], - "type": "enum", - "file": "git2/status.h", - "line": 73, - "lineto": 91, - "block": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR\nGIT_STATUS_SHOW_INDEX_ONLY\nGIT_STATUS_SHOW_WORKDIR_ONLY", - "tdef": "typedef", - "description": " Select the files on which to report status.", - "comments": "

With git_status_foreach_ext, this will control which changes get callbacks. With git_status_list_new, these will control which changes are included in the list.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR", - "comments": "

The default. This roughly matches git status --porcelain regarding\n which files are included and in what order.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STATUS_SHOW_INDEX_ONLY", - "comments": "

Only gives status based on HEAD to index comparison, not looking at\n working directory changes.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STATUS_SHOW_WORKDIR_ONLY", - "comments": "

Only gives status based on index to working directory comparison,\n not comparing the index to the HEAD.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_status_t", - { - "decl": [ - "GIT_STATUS_CURRENT", - "GIT_STATUS_INDEX_NEW", - "GIT_STATUS_INDEX_MODIFIED", - "GIT_STATUS_INDEX_DELETED", - "GIT_STATUS_INDEX_RENAMED", - "GIT_STATUS_INDEX_TYPECHANGE", - "GIT_STATUS_WT_NEW", - "GIT_STATUS_WT_MODIFIED", - "GIT_STATUS_WT_DELETED", - "GIT_STATUS_WT_TYPECHANGE", - "GIT_STATUS_WT_RENAMED", - "GIT_STATUS_WT_UNREADABLE", - "GIT_STATUS_IGNORED", - "GIT_STATUS_CONFLICTED" - ], - "type": "enum", - "file": "git2/status.h", - "line": 34, - "lineto": 52, - "block": "GIT_STATUS_CURRENT\nGIT_STATUS_INDEX_NEW\nGIT_STATUS_INDEX_MODIFIED\nGIT_STATUS_INDEX_DELETED\nGIT_STATUS_INDEX_RENAMED\nGIT_STATUS_INDEX_TYPECHANGE\nGIT_STATUS_WT_NEW\nGIT_STATUS_WT_MODIFIED\nGIT_STATUS_WT_DELETED\nGIT_STATUS_WT_TYPECHANGE\nGIT_STATUS_WT_RENAMED\nGIT_STATUS_WT_UNREADABLE\nGIT_STATUS_IGNORED\nGIT_STATUS_CONFLICTED", - "tdef": "typedef", - "description": " Status flags for a single file.", - "comments": "

A combination of these values will be returned to indicate the status of a file. Status compares the working directory, the index, and the current HEAD of the repository. The GIT_STATUS_INDEX set of flags represents the status of file in the index relative to the HEAD, and the GIT_STATUS_WT set of flags represent the status of the file in the working directory relative to the index.

\n", - "fields": [ - { - "type": "int", - "name": "GIT_STATUS_CURRENT", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_NEW", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_MODIFIED", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_DELETED", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_RENAMED", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_STATUS_INDEX_TYPECHANGE", - "comments": "", - "value": 16 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_NEW", - "comments": "", - "value": 128 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_MODIFIED", - "comments": "", - "value": 256 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_DELETED", - "comments": "", - "value": 512 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_TYPECHANGE", - "comments": "", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_RENAMED", - "comments": "", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_STATUS_WT_UNREADABLE", - "comments": "", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_STATUS_IGNORED", - "comments": "", - "value": 16384 - }, - { - "type": "int", - "name": "GIT_STATUS_CONFLICTED", - "comments": "", - "value": 32768 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_strarray", - { - "decl": [ - "char ** strings", - "size_t count" - ], - "type": "struct", - "value": "git_strarray", - "file": "git2/strarray.h", - "line": 22, - "lineto": 25, - "block": "char ** strings\nsize_t count", - "tdef": "typedef", - "description": " Array of strings ", - "comments": "", - "fields": [ - { - "type": "char **", - "name": "strings", - "comments": "" - }, - { - "type": "size_t", - "name": "count", - "comments": "" - } - ], - "used": { - "returns": [], - "needs": [ - "git_index_add_all", - "git_index_remove_all", - "git_index_update_all", - "git_pathspec_new", - "git_reference_list", - "git_remote_connect", - "git_remote_download", - "git_remote_fetch", - "git_remote_get_fetch_refspecs", - "git_remote_get_push_refspecs", - "git_remote_list", - "git_remote_push", - "git_remote_rename", - "git_remote_upload", - "git_reset_default", - "git_strarray_copy", - "git_strarray_dispose", - "git_strarray_free", - "git_tag_list", - "git_tag_list_match", - "git_worktree_list" - ] - } - } - ], - [ - "git_stream_t", - { - "decl": [ - "GIT_STREAM_STANDARD", - "GIT_STREAM_TLS" - ], - "type": "enum", - "file": "git2/sys/stream.h", - "line": 91, - "lineto": 97, - "block": "GIT_STREAM_STANDARD\nGIT_STREAM_TLS", - "tdef": "typedef", - "description": " The type of stream to register.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_STREAM_STANDARD", - "comments": "

A standard (non-TLS) socket.

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_STREAM_TLS", - "comments": "

A TLS-encrypted socket.

\n", - "value": 2 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_submodule", - { - "decl": "git_submodule", - "type": "struct", - "value": "git_submodule", - "file": "git2/types.h", - "line": 267, - "lineto": 267, - "tdef": "typedef", - "description": " Opaque structure representing a submodule.", - "comments": "", - "used": { - "returns": [ - "git_submodule_fetch_recurse_submodules", - "git_submodule_ignore", - "git_submodule_update_strategy" - ], - "needs": [ - "git_submodule_add_finalize", - "git_submodule_add_setup", - "git_submodule_add_to_index", - "git_submodule_branch", - "git_submodule_cb", - "git_submodule_clone", - "git_submodule_dup", - "git_submodule_fetch_recurse_submodules", - "git_submodule_foreach", - "git_submodule_free", - "git_submodule_head_id", - "git_submodule_ignore", - "git_submodule_index_id", - "git_submodule_init", - "git_submodule_location", - "git_submodule_lookup", - "git_submodule_name", - "git_submodule_open", - "git_submodule_owner", - "git_submodule_path", - "git_submodule_reload", - "git_submodule_repo_init", - "git_submodule_set_fetch_recurse_submodules", - "git_submodule_set_ignore", - "git_submodule_set_update", - "git_submodule_status", - "git_submodule_sync", - "git_submodule_update", - "git_submodule_update_options_init", - "git_submodule_update_strategy", - "git_submodule_url", - "git_submodule_wd_id" - ] - } - } - ], - [ - "git_submodule_ignore_t", - { - "decl": [ - "GIT_SUBMODULE_IGNORE_UNSPECIFIED", - "GIT_SUBMODULE_IGNORE_NONE", - "GIT_SUBMODULE_IGNORE_UNTRACKED", - "GIT_SUBMODULE_IGNORE_DIRTY", - "GIT_SUBMODULE_IGNORE_ALL" - ], - "type": "enum", - "file": "git2/types.h", - "line": 331, - "lineto": 338, - "block": "GIT_SUBMODULE_IGNORE_UNSPECIFIED\nGIT_SUBMODULE_IGNORE_NONE\nGIT_SUBMODULE_IGNORE_UNTRACKED\nGIT_SUBMODULE_IGNORE_DIRTY\nGIT_SUBMODULE_IGNORE_ALL", - "tdef": "typedef", - "description": " Submodule ignore values", - "comments": "

These values represent settings for the submodule.$name.ignore configuration value which says how deeply to look at the working directory when getting submodule status.

\n\n

You can override this value in memory on a per-submodule basis with git_submodule_set_ignore() and can write the changed value to disk with git_submodule_save(). If you have overwritten the value, you can revert to the on disk value by using GIT_SUBMODULE_IGNORE_RESET.

\n\n

The values are:

\n\n
    \n
  • GIT_SUBMODULE_IGNORE_UNSPECIFIED: use the submodule's configuration - GIT_SUBMODULE_IGNORE_NONE: don't ignore any change - i.e. even an untracked file, will mark the submodule as dirty. Ignored files are still ignored, of course. - GIT_SUBMODULE_IGNORE_UNTRACKED: ignore untracked files; only changes to tracked files, or the index or the HEAD commit will matter. - GIT_SUBMODULE_IGNORE_DIRTY: ignore changes in the working directory, only considering changes if the HEAD of submodule has moved from the value in the superproject. - GIT_SUBMODULE_IGNORE_ALL: never check if the submodule is dirty - GIT_SUBMODULE_IGNORE_DEFAULT: not used except as static initializer when we don't want any particular ignore rule to be specified.
  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_UNSPECIFIED", - "comments": "

use the submodule's configuration

\n", - "value": -1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_NONE", - "comments": "

any change or untracked == dirty

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_UNTRACKED", - "comments": "

dirty if tracked files change

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_DIRTY", - "comments": "

only dirty if HEAD moved

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_IGNORE_ALL", - "comments": "

never dirty

\n", - "value": 4 - } - ], - "used": { - "returns": [ - "git_submodule_ignore" - ], - "needs": [ - "git_submodule_set_ignore", - "git_submodule_status" - ] - } - } - ], - [ - "git_submodule_recurse_t", - { - "decl": [ - "GIT_SUBMODULE_RECURSE_NO", - "GIT_SUBMODULE_RECURSE_YES", - "GIT_SUBMODULE_RECURSE_ONDEMAND" - ], - "type": "enum", - "file": "git2/types.h", - "line": 350, - "lineto": 354, - "block": "GIT_SUBMODULE_RECURSE_NO\nGIT_SUBMODULE_RECURSE_YES\nGIT_SUBMODULE_RECURSE_ONDEMAND", - "tdef": "typedef", - "description": " Options for submodule recurse.", - "comments": "

Represent the value of submodule.$name.fetchRecurseSubmodules

\n\n
    \n
  • GIT_SUBMODULE_RECURSE_NO - do no recurse into submodules * GIT_SUBMODULE_RECURSE_YES - recurse into submodules * GIT_SUBMODULE_RECURSE_ONDEMAND - recurse into submodules only when commit not already in local clone
  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_SUBMODULE_RECURSE_NO", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_RECURSE_YES", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_RECURSE_ONDEMAND", - "comments": "", - "value": 2 - } - ], - "used": { - "returns": [ - "git_submodule_fetch_recurse_submodules" - ], - "needs": [ - "git_submodule_set_fetch_recurse_submodules" - ] - } - } - ], - [ - "git_submodule_status_t", - { - "decl": [ - "GIT_SUBMODULE_STATUS_IN_HEAD", - "GIT_SUBMODULE_STATUS_IN_INDEX", - "GIT_SUBMODULE_STATUS_IN_CONFIG", - "GIT_SUBMODULE_STATUS_IN_WD", - "GIT_SUBMODULE_STATUS_INDEX_ADDED", - "GIT_SUBMODULE_STATUS_INDEX_DELETED", - "GIT_SUBMODULE_STATUS_INDEX_MODIFIED", - "GIT_SUBMODULE_STATUS_WD_UNINITIALIZED", - "GIT_SUBMODULE_STATUS_WD_ADDED", - "GIT_SUBMODULE_STATUS_WD_DELETED", - "GIT_SUBMODULE_STATUS_WD_MODIFIED", - "GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED", - "GIT_SUBMODULE_STATUS_WD_WD_MODIFIED", - "GIT_SUBMODULE_STATUS_WD_UNTRACKED" - ], - "type": "enum", - "file": "git2/submodule.h", - "line": 74, - "lineto": 89, - "block": "GIT_SUBMODULE_STATUS_IN_HEAD\nGIT_SUBMODULE_STATUS_IN_INDEX\nGIT_SUBMODULE_STATUS_IN_CONFIG\nGIT_SUBMODULE_STATUS_IN_WD\nGIT_SUBMODULE_STATUS_INDEX_ADDED\nGIT_SUBMODULE_STATUS_INDEX_DELETED\nGIT_SUBMODULE_STATUS_INDEX_MODIFIED\nGIT_SUBMODULE_STATUS_WD_UNINITIALIZED\nGIT_SUBMODULE_STATUS_WD_ADDED\nGIT_SUBMODULE_STATUS_WD_DELETED\nGIT_SUBMODULE_STATUS_WD_MODIFIED\nGIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED\nGIT_SUBMODULE_STATUS_WD_WD_MODIFIED\nGIT_SUBMODULE_STATUS_WD_UNTRACKED", - "tdef": "typedef", - "description": " Return codes for submodule status.", - "comments": "

A combination of these flags will be returned to describe the status of a submodule. Depending on the "ignore" property of the submodule, some of the flags may never be returned because they indicate changes that are supposed to be ignored.

\n\n

Submodule info is contained in 4 places: the HEAD tree, the index, config files (both .git/config and .gitmodules), and the working directory. Any or all of those places might be missing information about the submodule depending on what state the repo is in. We consider all four places to build the combination of status flags.

\n\n

There are four values that are not really status, but give basic info about what sources of submodule data are available. These will be returned even if ignore is set to "ALL".

\n\n
    \n
  • IN_HEAD - superproject head contains submodule * IN_INDEX - superproject index contains submodule * IN_CONFIG - superproject gitmodules has submodule * IN_WD - superproject workdir has submodule
  • \n
\n\n

The following values will be returned so long as ignore is not "ALL".

\n\n
    \n
  • INDEX_ADDED - in index, not in head * INDEX_DELETED - in head, not in index * INDEX_MODIFIED - index and head don't match * WD_UNINITIALIZED - workdir contains empty directory * WD_ADDED - in workdir, not index * WD_DELETED - in index, not workdir * WD_MODIFIED - index and workdir head don't match
  • \n
\n\n

The following can only be returned if ignore is "NONE" or "UNTRACKED".

\n\n
    \n
  • WD_INDEX_MODIFIED - submodule workdir index is dirty * WD_WD_MODIFIED - submodule workdir has modified files
  • \n
\n\n

Lastly, the following will only be returned for ignore "NONE".

\n\n
    \n
  • WD_UNTRACKED - wd contains untracked files
  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_IN_HEAD", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_IN_INDEX", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_IN_CONFIG", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_IN_WD", - "comments": "", - "value": 8 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_INDEX_ADDED", - "comments": "", - "value": 16 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_INDEX_DELETED", - "comments": "", - "value": 32 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_INDEX_MODIFIED", - "comments": "", - "value": 64 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_UNINITIALIZED", - "comments": "", - "value": 128 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_ADDED", - "comments": "", - "value": 256 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_DELETED", - "comments": "", - "value": 512 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_MODIFIED", - "comments": "", - "value": 1024 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED", - "comments": "", - "value": 2048 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_WD_MODIFIED", - "comments": "", - "value": 4096 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_STATUS_WD_UNTRACKED", - "comments": "", - "value": 8192 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_submodule_update_options", - { - "decl": [ - "unsigned int version", - "git_checkout_options checkout_opts", - "git_fetch_options fetch_opts", - "int allow_fetch" - ], - "type": "struct", - "value": "git_submodule_update_options", - "file": "git2/submodule.h", - "line": 128, - "lineto": 153, - "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint allow_fetch", - "tdef": "typedef", - "description": " Submodule update options structure", - "comments": "

Initialize with GIT_SUBMODULE_UPDATE_OPTIONS_INIT. Alternatively, you can use git_submodule_update_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "git_checkout_options", - "name": "checkout_opts", - "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`. Generally you will want the use\n GIT_CHECKOUT_SAFE to update files in the working\n directory." - }, - { - "type": "git_fetch_options", - "name": "fetch_opts", - "comments": " Options which control the fetch, including callbacks.\n\n The callbacks to use for reporting fetch progress, and for acquiring\n credentials in the event they are needed." - }, - { - "type": "int", - "name": "allow_fetch", - "comments": " Allow fetching from the submodule's default remote if the target\n commit isn't found. Enabled by default." - } - ], - "used": { - "returns": [], - "needs": [ - "git_submodule_clone", - "git_submodule_update", - "git_submodule_update_options_init" - ] - } - } - ], - [ - "git_submodule_update_t", - { - "decl": [ - "GIT_SUBMODULE_UPDATE_CHECKOUT", - "GIT_SUBMODULE_UPDATE_REBASE", - "GIT_SUBMODULE_UPDATE_MERGE", - "GIT_SUBMODULE_UPDATE_NONE", - "GIT_SUBMODULE_UPDATE_DEFAULT" - ], - "type": "enum", - "file": "git2/types.h", - "line": 295, - "lineto": 302, - "block": "GIT_SUBMODULE_UPDATE_CHECKOUT\nGIT_SUBMODULE_UPDATE_REBASE\nGIT_SUBMODULE_UPDATE_MERGE\nGIT_SUBMODULE_UPDATE_NONE\nGIT_SUBMODULE_UPDATE_DEFAULT", - "tdef": "typedef", - "description": " Submodule update values", - "comments": "

These values represent settings for the submodule.$name.update configuration value which says how to handle git submodule update for this submodule. The value is usually set in the ".gitmodules" file and copied to ".git/config" when the submodule is initialized.

\n\n

You can override this setting on a per-submodule basis with git_submodule_set_update() and write the changed value to disk using git_submodule_save(). If you have overwritten the value, you can revert it by passing GIT_SUBMODULE_UPDATE_RESET to the set function.

\n\n

The values are:

\n\n
    \n
  • GIT_SUBMODULE_UPDATE_CHECKOUT: the default; when a submodule is updated, checkout the new detached HEAD to the submodule directory. - GIT_SUBMODULE_UPDATE_REBASE: update by rebasing the current checked out branch onto the commit from the superproject. - GIT_SUBMODULE_UPDATE_MERGE: update by merging the commit in the superproject into the current checkout out branch of the submodule. - GIT_SUBMODULE_UPDATE_NONE: do not update this submodule even when the commit in the superproject is updated. - GIT_SUBMODULE_UPDATE_DEFAULT: not used except as static initializer when we don't want any particular update rule to be specified.
  • \n
\n", - "fields": [ - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_CHECKOUT", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_REBASE", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_MERGE", - "comments": "", - "value": 3 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_NONE", - "comments": "", - "value": 4 - }, - { - "type": "int", - "name": "GIT_SUBMODULE_UPDATE_DEFAULT", - "comments": "", - "value": 0 - } - ], - "used": { - "returns": [ - "git_submodule_update_strategy" - ], - "needs": [ - "git_submodule_set_update" - ] - } - } - ], - [ - "git_tag", - { - "decl": "git_tag", - "type": "struct", - "value": "git_tag", - "file": "git2/types.h", - "line": 130, - "lineto": 130, - "tdef": "typedef", - "description": " Parsed representation of a tag object. ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_tag_dup", - "git_tag_foreach", - "git_tag_free", - "git_tag_id", - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_tag_message", - "git_tag_name", - "git_tag_owner", - "git_tag_peel", - "git_tag_tagger", - "git_tag_target", - "git_tag_target_id", - "git_tag_target_type" - ] - } - } - ], - [ - "git_time", - { - "decl": [ - "git_time_t time", - "int offset", - "char sign" - ], - "type": "struct", - "value": "git_time", - "file": "git2/types.h", - "line": 175, - "lineto": 179, - "block": "git_time_t time\nint offset\nchar sign", - "tdef": "typedef", - "description": " Time in a signature ", - "comments": "", - "fields": [ - { - "type": "git_time_t", - "name": "time", - "comments": " time in seconds from epoch " - }, - { - "type": "int", - "name": "offset", - "comments": " timezone offset, in minutes " - }, - { - "type": "char", - "name": "sign", - "comments": " indicator for questionable '-0000' offsets in signature " - } - ], - "used": { - "returns": [ - "git_commit_time" - ], - "needs": [ - "git_signature_new" - ] - } - } - ], - [ - "git_trace_level_t", - { - "decl": [ - "GIT_TRACE_NONE", - "GIT_TRACE_FATAL", - "GIT_TRACE_ERROR", - "GIT_TRACE_WARN", - "GIT_TRACE_INFO", - "GIT_TRACE_DEBUG", - "GIT_TRACE_TRACE" - ], - "type": "enum", - "file": "git2/trace.h", - "line": 26, - "lineto": 47, - "block": "GIT_TRACE_NONE\nGIT_TRACE_FATAL\nGIT_TRACE_ERROR\nGIT_TRACE_WARN\nGIT_TRACE_INFO\nGIT_TRACE_DEBUG\nGIT_TRACE_TRACE", - "tdef": "typedef", - "description": " Available tracing levels. When tracing is set to a particular level,\n callers will be provided tracing at the given level and all lower levels.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_TRACE_NONE", - "comments": "

No tracing will be performed.

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_TRACE_FATAL", - "comments": "

Severe errors that may impact the program's execution

\n", - "value": 1 - }, - { - "type": "int", - "name": "GIT_TRACE_ERROR", - "comments": "

Errors that do not impact the program's execution

\n", - "value": 2 - }, - { - "type": "int", - "name": "GIT_TRACE_WARN", - "comments": "

Warnings that suggest abnormal data

\n", - "value": 3 - }, - { - "type": "int", - "name": "GIT_TRACE_INFO", - "comments": "

Informational messages about program execution

\n", - "value": 4 - }, - { - "type": "int", - "name": "GIT_TRACE_DEBUG", - "comments": "

Detailed data that allows for debugging

\n", - "value": 5 - }, - { - "type": "int", - "name": "GIT_TRACE_TRACE", - "comments": "

Exceptionally detailed debugging data

\n", - "value": 6 - } - ], - "used": { - "returns": [], - "needs": [ - "git_trace_cb", - "git_trace_set" - ] - } - } - ], - [ - "git_transaction", - { - "decl": "git_transaction", - "type": "struct", - "value": "git_transaction", - "file": "git2/types.h", - "line": 195, - "lineto": 195, - "tdef": "typedef", - "description": " Transactional interface to references ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_config_lock", - "git_transaction_commit", - "git_transaction_free", - "git_transaction_lock_ref", - "git_transaction_new", - "git_transaction_remove", - "git_transaction_set_reflog", - "git_transaction_set_symbolic_target", - "git_transaction_set_target" - ] - } - } - ], - [ - "git_transport", - { - "decl": "git_transport", - "type": "struct", - "value": "git_transport", - "file": "git2/types.h", - "line": 247, - "lineto": 247, - "tdef": "typedef", - "description": " Interface which represents a transport to communicate with a\n remote.", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_transport_cb" - ] - } - } - ], - [ - "git_tree", - { - "decl": "git_tree", - "type": "struct", - "value": "git_tree", - "file": "git2/types.h", - "line": 142, - "lineto": 142, - "tdef": "typedef", - "description": " Representation of a tree object. ", - "comments": "", - "used": { - "returns": [ - "git_tree_entry_byid", - "git_tree_entry_byindex", - "git_tree_entry_byname", - "git_treebuilder_get" - ], - "needs": [ - "git_apply_to_tree", - "git_commit_amend", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_cb", - "git_commit_create_v", - "git_commit_tree", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index", - "git_index_read_tree", - "git_merge_trees", - "git_pathspec_match_tree", - "git_tree_create_updated", - "git_tree_dup", - "git_tree_entry_byid", - "git_tree_entry_byindex", - "git_tree_entry_byname", - "git_tree_entry_bypath", - "git_tree_entry_cmp", - "git_tree_entry_dup", - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw", - "git_tree_entry_free", - "git_tree_entry_id", - "git_tree_entry_name", - "git_tree_entry_to_object", - "git_tree_entry_type", - "git_tree_entrycount", - "git_tree_free", - "git_tree_id", - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_tree_owner", - "git_tree_walk", - "git_treebuilder_clear", - "git_treebuilder_entrycount", - "git_treebuilder_filter", - "git_treebuilder_filter_cb", - "git_treebuilder_free", - "git_treebuilder_get", - "git_treebuilder_insert", - "git_treebuilder_new", - "git_treebuilder_remove", - "git_treebuilder_write", - "git_treebuilder_write_with_buffer", - "git_treewalk_cb" - ] - } - } - ], - [ - "git_tree_entry", - { - "decl": "git_tree_entry", - "type": "struct", - "value": "git_tree_entry", - "file": "git2/types.h", - "line": 139, - "lineto": 139, - "tdef": "typedef", - "description": " Representation of each one of the entries in a tree object. ", - "comments": "", - "used": { - "returns": [ - "git_tree_entry_byid", - "git_tree_entry_byindex", - "git_tree_entry_byname", - "git_treebuilder_get" - ], - "needs": [ - "git_tree_entry_bypath", - "git_tree_entry_cmp", - "git_tree_entry_dup", - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw", - "git_tree_entry_free", - "git_tree_entry_id", - "git_tree_entry_name", - "git_tree_entry_to_object", - "git_tree_entry_type", - "git_treebuilder_filter_cb", - "git_treebuilder_insert", - "git_treewalk_cb" - ] - } - } - ], - [ - "git_tree_update", - { - "decl": [ - "git_tree_update_t action", - "git_oid id", - "git_filemode_t filemode", - "const char * path" - ], - "type": "struct", - "value": "git_tree_update", - "file": "git2/tree.h", - "line": 438, - "lineto": 447, - "block": "git_tree_update_t action\ngit_oid id\ngit_filemode_t filemode\nconst char * path", - "tdef": "typedef", - "description": " An action to perform during the update of a tree", - "comments": "", - "fields": [ - { - "type": "git_tree_update_t", - "name": "action", - "comments": " Update action. If it's an removal, only the path is looked at " - }, - { - "type": "git_oid", - "name": "id", - "comments": " The entry's id " - }, - { - "type": "git_filemode_t", - "name": "filemode", - "comments": " The filemode/kind of object " - }, - { - "type": "const char *", - "name": "path", - "comments": " The full path from the root tree " - } - ], - "used": { - "returns": [], - "needs": [ - "git_tree_create_updated" - ] - } - } - ], - [ - "git_tree_update_t", - { - "decl": [ - "GIT_TREE_UPDATE_UPSERT", - "GIT_TREE_UPDATE_REMOVE" - ], - "type": "enum", - "file": "git2/tree.h", - "line": 428, - "lineto": 433, - "block": "GIT_TREE_UPDATE_UPSERT\nGIT_TREE_UPDATE_REMOVE", - "tdef": "typedef", - "description": " The kind of update to perform", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_TREE_UPDATE_UPSERT", - "comments": "

Update or insert an entry at the specified path

\n", - "value": 0 - }, - { - "type": "int", - "name": "GIT_TREE_UPDATE_REMOVE", - "comments": "

Remove an entry from the specified path

\n", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_treebuilder", - { - "decl": "git_treebuilder", - "type": "struct", - "value": "git_treebuilder", - "file": "git2/types.h", - "line": 145, - "lineto": 145, - "tdef": "typedef", - "description": " Constructor for in-memory trees ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_treebuilder_clear", - "git_treebuilder_entrycount", - "git_treebuilder_filter", - "git_treebuilder_free", - "git_treebuilder_get", - "git_treebuilder_insert", - "git_treebuilder_new", - "git_treebuilder_remove", - "git_treebuilder_write", - "git_treebuilder_write_with_buffer" - ] - } - } - ], - [ - "git_treewalk_mode", - { - "decl": [ - "GIT_TREEWALK_PRE", - "GIT_TREEWALK_POST" - ], - "type": "enum", - "file": "git2/tree.h", - "line": 387, - "lineto": 390, - "block": "GIT_TREEWALK_PRE\nGIT_TREEWALK_POST", - "tdef": "typedef", - "description": " Tree traversal modes ", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_TREEWALK_PRE", - "comments": "", - "value": 0 - }, - { - "type": "int", - "name": "GIT_TREEWALK_POST", - "comments": "", - "value": 1 - } - ], - "used": { - "returns": [], - "needs": [ - "git_tree_walk" - ] - } - } - ], - [ - "git_worktree", - { - "decl": "git_worktree", - "type": "struct", - "value": "git_worktree", - "file": "git2/types.h", - "line": 121, - "lineto": 121, - "tdef": "typedef", - "description": " Representation of a working tree ", - "comments": "", - "used": { - "returns": [], - "needs": [ - "git_repository_open_from_worktree", - "git_worktree_add", - "git_worktree_add_options_init", - "git_worktree_free", - "git_worktree_is_locked", - "git_worktree_is_prunable", - "git_worktree_lock", - "git_worktree_lookup", - "git_worktree_name", - "git_worktree_open_from_repository", - "git_worktree_path", - "git_worktree_prune", - "git_worktree_prune_options_init", - "git_worktree_unlock", - "git_worktree_validate" - ] - } - } - ], - [ - "git_worktree_prune_options", - { - "decl": [ - "unsigned int version", - "uint32_t flags" - ], - "type": "struct", - "value": "git_worktree_prune_options", - "file": "git2/worktree.h", - "line": 204, - "lineto": 209, - "block": "unsigned int version\nuint32_t flags", - "tdef": "typedef", - "description": " Worktree prune options structure", - "comments": "

Initialize with GIT_WORKTREE_PRUNE_OPTIONS_INIT. Alternatively, you can use git_worktree_prune_options_init.

\n", - "fields": [ - { - "type": "unsigned int", - "name": "version", - "comments": "" - }, - { - "type": "uint32_t", - "name": "flags", - "comments": " A combination of `git_worktree_prune_t` " - } - ], - "used": { - "returns": [], - "needs": [ - "git_worktree_is_prunable", - "git_worktree_prune", - "git_worktree_prune_options_init" - ] - } - } - ], - [ - "git_worktree_prune_t", - { - "decl": [ - "GIT_WORKTREE_PRUNE_VALID", - "GIT_WORKTREE_PRUNE_LOCKED", - "GIT_WORKTREE_PRUNE_WORKING_TREE" - ], - "type": "enum", - "file": "git2/worktree.h", - "line": 188, - "lineto": 195, - "block": "GIT_WORKTREE_PRUNE_VALID\nGIT_WORKTREE_PRUNE_LOCKED\nGIT_WORKTREE_PRUNE_WORKING_TREE", - "tdef": "typedef", - "description": " Flags which can be passed to git_worktree_prune to alter its\n behavior.", - "comments": "", - "fields": [ - { - "type": "int", - "name": "GIT_WORKTREE_PRUNE_VALID", - "comments": "", - "value": 1 - }, - { - "type": "int", - "name": "GIT_WORKTREE_PRUNE_LOCKED", - "comments": "", - "value": 2 - }, - { - "type": "int", - "name": "GIT_WORKTREE_PRUNE_WORKING_TREE", - "comments": "", - "value": 4 - } - ], - "used": { - "returns": [], - "needs": [] - } - } - ], - [ - "git_writestream", - { - "decl": [ - "int (*)(git_writestream *, const char *, size_t) write", - "int (*)(git_writestream *) close", - "void (*)(git_writestream *) free" - ], - "type": "struct", - "value": "git_writestream", - "file": "git2/types.h", - "line": 359, - "lineto": 363, - "tdef": null, - "description": " A type to write in a streaming fashion, for example, for filters. ", - "comments": "", - "fields": [ - { - "type": "int (*)(git_writestream *, const char *, size_t)", - "name": "write", - "comments": "" - }, - { - "type": "int (*)(git_writestream *)", - "name": "close", - "comments": "" - }, - { - "type": "void (*)(git_writestream *)", - "name": "free", - "comments": "" - } - ], - "block": "int (*)(git_writestream *, const char *, size_t) write\nint (*)(git_writestream *) close\nvoid (*)(git_writestream *) free", - "used": { - "returns": [], - "needs": [ - "git_blob_create_from_stream", - "git_blob_create_from_stream_commit", - "git_filter_list_stream_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_data", - "git_filter_list_stream_file" - ] - } - } - ] + } + ] + ], + "prefix": "include", + "groups": [ + [ + "annotated", + [ + "git_annotated_commit_free", + "git_annotated_commit_from_fetchhead", + "git_annotated_commit_from_ref", + "git_annotated_commit_from_revspec", + "git_annotated_commit_id", + "git_annotated_commit_lookup", + "git_annotated_commit_ref" + ] ], - "prefix": "include", - "groups": [ - [ - "annotated", - [ - "git_annotated_commit_free", - "git_annotated_commit_from_fetchhead", - "git_annotated_commit_from_ref", - "git_annotated_commit_from_revspec", - "git_annotated_commit_id", - "git_annotated_commit_lookup", - "git_annotated_commit_ref" - ] - ], - [ - "apply", - [ - "git_apply", - "git_apply_options_init", - "git_apply_to_tree" - ] - ], - [ - "attr", - [ - "git_attr_add_macro", - "git_attr_cache_flush", - "git_attr_foreach", - "git_attr_foreach_ext", - "git_attr_get", - "git_attr_get_ext", - "git_attr_get_many", - "git_attr_get_many_ext", - "git_attr_value" - ] - ], - [ - "blame", - [ - "git_blame_buffer", - "git_blame_file", - "git_blame_free", - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline", - "git_blame_get_hunk_count", - "git_blame_init_options", - "git_blame_options_init" - ] - ], - [ - "blob", - [ - "git_blob_create_from_buffer", - "git_blob_create_from_disk", - "git_blob_create_from_stream", - "git_blob_create_from_stream_commit", - "git_blob_create_from_workdir", - "git_blob_data_is_binary", - "git_blob_dup", - "git_blob_filter", - "git_blob_filter_options_init", - "git_blob_filtered_content", - "git_blob_free", - "git_blob_id", - "git_blob_is_binary", - "git_blob_lookup", - "git_blob_lookup_prefix", - "git_blob_owner", - "git_blob_rawcontent", - "git_blob_rawsize" - ] - ], - [ - "branch", - [ - "git_branch_create", - "git_branch_create_from_annotated", - "git_branch_delete", - "git_branch_is_checked_out", - "git_branch_is_head", - "git_branch_iterator_free", - "git_branch_iterator_new", - "git_branch_lookup", - "git_branch_move", - "git_branch_name", - "git_branch_name_is_valid", - "git_branch_next", - "git_branch_remote_name", - "git_branch_set_upstream", - "git_branch_upstream", - "git_branch_upstream_merge", - "git_branch_upstream_name", - "git_branch_upstream_remote" - ] - ], - [ - "buf", - [ - "git_buf_contains_nul", - "git_buf_dispose", - "git_buf_free", - "git_buf_grow", - "git_buf_is_binary", - "git_buf_set" - ] - ], - [ - "checkout", - [ - "git_checkout_head", - "git_checkout_index", - "git_checkout_options_init", - "git_checkout_tree" - ] - ], - [ - "cherrypick", - [ - "git_cherrypick", - "git_cherrypick_commit", - "git_cherrypick_options_init" - ] - ], - [ - "clone", - [ - "git_clone", - "git_clone_options_init" - ] - ], - [ - "commit", - [ - "git_commit_amend", - "git_commit_author", - "git_commit_author_with_mailmap", - "git_commit_body", - "git_commit_committer", - "git_commit_committer_with_mailmap", - "git_commit_create", - "git_commit_create_buffer", - "git_commit_create_v", - "git_commit_create_with_signature", - "git_commit_dup", - "git_commit_extract_signature", - "git_commit_free", - "git_commit_header_field", - "git_commit_id", - "git_commit_lookup", - "git_commit_lookup_prefix", - "git_commit_message", - "git_commit_message_encoding", - "git_commit_message_raw", - "git_commit_nth_gen_ancestor", - "git_commit_owner", - "git_commit_parent", - "git_commit_parent_id", - "git_commit_parentcount", - "git_commit_raw_header", - "git_commit_summary", - "git_commit_time", - "git_commit_time_offset", - "git_commit_tree", - "git_commit_tree_id" - ] - ], - [ - "config", - [ - "git_config_add_file_ondisk", - "git_config_backend_foreach_match", - "git_config_delete_entry", - "git_config_delete_multivar", - "git_config_entry_free", - "git_config_find_global", - "git_config_find_programdata", - "git_config_find_system", - "git_config_find_xdg", - "git_config_foreach", - "git_config_foreach_match", - "git_config_free", - "git_config_get_bool", - "git_config_get_entry", - "git_config_get_int32", - "git_config_get_int64", - "git_config_get_mapped", - "git_config_get_multivar_foreach", - "git_config_get_path", - "git_config_get_string", - "git_config_get_string_buf", - "git_config_iterator_free", - "git_config_iterator_glob_new", - "git_config_iterator_new", - "git_config_lock", - "git_config_lookup_map_value", - "git_config_multivar_iterator_new", - "git_config_new", - "git_config_next", - "git_config_open_default", - "git_config_open_global", - "git_config_open_level", - "git_config_open_ondisk", - "git_config_parse_bool", - "git_config_parse_int32", - "git_config_parse_int64", - "git_config_parse_path", - "git_config_set_bool", - "git_config_set_int32", - "git_config_set_int64", - "git_config_set_multivar", - "git_config_set_string", - "git_config_snapshot" - ] - ], - [ - "credential", - [ - "git_credential_default_new", - "git_credential_free", - "git_credential_get_username", - "git_credential_has_username", - "git_credential_ssh_custom_new", - "git_credential_ssh_interactive_new", - "git_credential_ssh_key_from_agent", - "git_credential_ssh_key_memory_new", - "git_credential_ssh_key_new", - "git_credential_username_new", - "git_credential_userpass", - "git_credential_userpass_plaintext_new" - ] - ], - [ - "describe", - [ - "git_describe_commit", - "git_describe_format", - "git_describe_format_options_init", - "git_describe_options_init", - "git_describe_result_free", - "git_describe_workdir" - ] - ], - [ - "diff", - [ - "git_diff_blob_to_buffer", - "git_diff_blobs", - "git_diff_buffers", - "git_diff_commit_as_email", - "git_diff_find_options_init", - "git_diff_find_similar", - "git_diff_foreach", - "git_diff_format_email", - "git_diff_format_email_options_init", - "git_diff_free", - "git_diff_from_buffer", - "git_diff_get_delta", - "git_diff_get_stats", - "git_diff_index_to_index", - "git_diff_index_to_workdir", - "git_diff_is_sorted_icase", - "git_diff_merge", - "git_diff_num_deltas", - "git_diff_num_deltas_of_type", - "git_diff_options_init", - "git_diff_patchid", - "git_diff_patchid_options_init", - "git_diff_print", - "git_diff_stats_deletions", - "git_diff_stats_files_changed", - "git_diff_stats_free", - "git_diff_stats_insertions", - "git_diff_stats_to_buf", - "git_diff_status_char", - "git_diff_to_buf", - "git_diff_tree_to_index", - "git_diff_tree_to_tree", - "git_diff_tree_to_workdir", - "git_diff_tree_to_workdir_with_index" - ] - ], - [ - "error", - [ - "git_error_clear", - "git_error_last", - "git_error_set", - "git_error_set_oom", - "git_error_set_str" - ] - ], - [ - "fetch", - [ - "git_fetch_options_init" - ] - ], - [ - "filter", - [ - "git_filter_list_apply_to_blob", - "git_filter_list_apply_to_buffer", - "git_filter_list_apply_to_data", - "git_filter_list_apply_to_file", - "git_filter_list_contains", - "git_filter_list_free", - "git_filter_list_load", - "git_filter_list_load_ext", - "git_filter_list_stream_blob", - "git_filter_list_stream_buffer", - "git_filter_list_stream_data", - "git_filter_list_stream_file" - ] - ], - [ - "giterr", - [ - "giterr_clear", - "giterr_last", - "giterr_set_oom", - "giterr_set_str" - ] - ], - [ - "graph", - [ - "git_graph_ahead_behind", - "git_graph_descendant_of", - "git_graph_reachable_from_any" - ] - ], - [ - "ignore", - [ - "git_ignore_add_rule", - "git_ignore_clear_internal_rules", - "git_ignore_path_is_ignored" - ] - ], - [ - "index", - [ - "git_index_add", - "git_index_add_all", - "git_index_add_bypath", - "git_index_add_from_buffer", - "git_index_caps", - "git_index_checksum", - "git_index_clear", - "git_index_conflict_add", - "git_index_conflict_cleanup", - "git_index_conflict_get", - "git_index_conflict_iterator_free", - "git_index_conflict_iterator_new", - "git_index_conflict_next", - "git_index_conflict_remove", - "git_index_entry_is_conflict", - "git_index_entry_stage", - "git_index_entrycount", - "git_index_find", - "git_index_find_prefix", - "git_index_free", - "git_index_get_byindex", - "git_index_get_bypath", - "git_index_has_conflicts", - "git_index_iterator_free", - "git_index_iterator_new", - "git_index_iterator_next", - "git_index_owner", - "git_index_path", - "git_index_read", - "git_index_read_tree", - "git_index_remove", - "git_index_remove_all", - "git_index_remove_bypath", - "git_index_remove_directory", - "git_index_set_caps", - "git_index_set_version", - "git_index_update_all", - "git_index_version", - "git_index_write", - "git_index_write_tree", - "git_index_write_tree_to" - ] - ], - [ - "indexer", - [ - "git_indexer_append", - "git_indexer_commit", - "git_indexer_free", - "git_indexer_hash", - "git_indexer_name", - "git_indexer_new", - "git_indexer_options_init" - ] - ], - [ - "libgit2", - [ - "git_libgit2_features", - "git_libgit2_init", - "git_libgit2_opts", - "git_libgit2_prerelease", - "git_libgit2_shutdown", - "git_libgit2_version" - ] - ], - [ - "mailmap", - [ - "git_mailmap_add_entry", - "git_mailmap_free", - "git_mailmap_from_buffer", - "git_mailmap_from_repository", - "git_mailmap_new", - "git_mailmap_resolve", - "git_mailmap_resolve_signature" - ] - ], - [ - "merge", - [ - "git_merge", - "git_merge_analysis", - "git_merge_analysis_for_ref", - "git_merge_base", - "git_merge_base_many", - "git_merge_base_octopus", - "git_merge_bases", - "git_merge_bases_many", - "git_merge_commits", - "git_merge_file", - "git_merge_file_from_index", - "git_merge_file_input_init", - "git_merge_file_options_init", - "git_merge_file_result_free", - "git_merge_options_init", - "git_merge_trees" - ] - ], - [ - "message", - [ - "git_message_prettify", - "git_message_trailer_array_free", - "git_message_trailers" - ] - ], - [ - "note", - [ - "git_note_author", - "git_note_commit_create", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_committer", - "git_note_create", - "git_note_default_ref", - "git_note_foreach", - "git_note_free", - "git_note_id", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_message", - "git_note_next", - "git_note_read", - "git_note_remove" - ] - ], - [ - "object", - [ - "git_object__size", - "git_object_dup", - "git_object_free", - "git_object_id", - "git_object_lookup", - "git_object_lookup_bypath", - "git_object_lookup_prefix", - "git_object_owner", - "git_object_peel", - "git_object_rawcontent_is_valid", - "git_object_short_id", - "git_object_string2type", - "git_object_type", - "git_object_type2string", - "git_object_typeisloose" - ] - ], - [ - "odb", - [ - "git_odb_add_alternate", - "git_odb_add_backend", - "git_odb_add_disk_alternate", - "git_odb_exists", - "git_odb_exists_ext", - "git_odb_exists_prefix", - "git_odb_expand_ids", - "git_odb_foreach", - "git_odb_free", - "git_odb_get_backend", - "git_odb_num_backends", - "git_odb_object_data", - "git_odb_object_dup", - "git_odb_object_free", - "git_odb_object_id", - "git_odb_object_size", - "git_odb_object_type", - "git_odb_open_rstream", - "git_odb_open_wstream", - "git_odb_read", - "git_odb_read_header", - "git_odb_read_prefix", - "git_odb_refresh", - "git_odb_set_commit_graph", - "git_odb_stream_finalize_write", - "git_odb_stream_free", - "git_odb_stream_read", - "git_odb_stream_write", - "git_odb_write", - "git_odb_write_multi_pack_index", - "git_odb_write_pack" - ] - ], - [ - "oid", - [ - "git_oid_cmp", - "git_oid_cpy", - "git_oid_equal", - "git_oid_fmt", - "git_oid_is_zero", - "git_oid_ncmp", - "git_oid_nfmt", - "git_oid_pathfmt", - "git_oid_shorten_add", - "git_oid_shorten_free", - "git_oid_shorten_new", - "git_oid_strcmp", - "git_oid_streq", - "git_oid_tostr", - "git_oid_tostr_s" - ] - ], - [ - "oidarray", - [ - "git_oidarray_dispose", - "git_oidarray_free" - ] - ], - [ - "packbuilder", - [ - "git_packbuilder_foreach", - "git_packbuilder_free", - "git_packbuilder_hash", - "git_packbuilder_insert", - "git_packbuilder_insert_commit", - "git_packbuilder_insert_recur", - "git_packbuilder_insert_tree", - "git_packbuilder_insert_walk", - "git_packbuilder_name", - "git_packbuilder_new", - "git_packbuilder_object_count", - "git_packbuilder_set_callbacks", - "git_packbuilder_set_threads", - "git_packbuilder_write", - "git_packbuilder_write_buf", - "git_packbuilder_written" - ] - ], - [ - "patch", - [ - "git_patch_free", - "git_patch_from_blob_and_buffer", - "git_patch_from_blobs", - "git_patch_from_buffers", - "git_patch_from_diff", - "git_patch_get_delta", - "git_patch_get_hunk", - "git_patch_get_line_in_hunk", - "git_patch_line_stats", - "git_patch_num_hunks", - "git_patch_num_lines_in_hunk", - "git_patch_owner", - "git_patch_print", - "git_patch_size", - "git_patch_to_buf" - ] - ], - [ - "pathspec", - [ - "git_pathspec_free", - "git_pathspec_match_diff", - "git_pathspec_match_index", - "git_pathspec_match_list_diff_entry", - "git_pathspec_match_list_entry", - "git_pathspec_match_list_entrycount", - "git_pathspec_match_list_failed_entry", - "git_pathspec_match_list_failed_entrycount", - "git_pathspec_match_list_free", - "git_pathspec_match_tree", - "git_pathspec_match_workdir", - "git_pathspec_matches_path", - "git_pathspec_new" - ] - ], - [ - "proxy", - [ - "git_proxy_options_init" - ] - ], - [ - "push", - [ - "git_push_options_init" - ] - ], - [ - "rebase", - [ - "git_rebase_abort", - "git_rebase_commit", - "git_rebase_finish", - "git_rebase_free", - "git_rebase_init", - "git_rebase_inmemory_index", - "git_rebase_next", - "git_rebase_onto_id", - "git_rebase_onto_name", - "git_rebase_open", - "git_rebase_operation_byindex", - "git_rebase_operation_current", - "git_rebase_operation_entrycount", - "git_rebase_options_init", - "git_rebase_orig_head_id", - "git_rebase_orig_head_name" - ] - ], - [ - "refdb", - [ - "git_refdb_compress", - "git_refdb_free", - "git_refdb_new", - "git_refdb_open" - ] - ], - [ - "reference", - [ - "git_reference_cmp", - "git_reference_create", - "git_reference_create_matching", - "git_reference_delete", - "git_reference_dup", - "git_reference_dwim", - "git_reference_ensure_log", - "git_reference_foreach", - "git_reference_foreach_glob", - "git_reference_foreach_name", - "git_reference_free", - "git_reference_has_log", - "git_reference_is_branch", - "git_reference_is_note", - "git_reference_is_remote", - "git_reference_is_tag", - "git_reference_is_valid_name", - "git_reference_iterator_free", - "git_reference_iterator_glob_new", - "git_reference_iterator_new", - "git_reference_list", - "git_reference_lookup", - "git_reference_name", - "git_reference_name_is_valid", - "git_reference_name_to_id", - "git_reference_next", - "git_reference_next_name", - "git_reference_normalize_name", - "git_reference_owner", - "git_reference_peel", - "git_reference_remove", - "git_reference_rename", - "git_reference_resolve", - "git_reference_set_target", - "git_reference_shorthand", - "git_reference_symbolic_create", - "git_reference_symbolic_create_matching", - "git_reference_symbolic_set_target", - "git_reference_symbolic_target", - "git_reference_target", - "git_reference_target_peel", - "git_reference_type" - ] - ], - [ - "reflog", - [ - "git_reflog_append", - "git_reflog_delete", - "git_reflog_drop", - "git_reflog_entry_byindex", - "git_reflog_entry_committer", - "git_reflog_entry_id_new", - "git_reflog_entry_id_old", - "git_reflog_entry_message", - "git_reflog_entrycount", - "git_reflog_free", - "git_reflog_read", - "git_reflog_rename", - "git_reflog_write" - ] - ], - [ - "refspec", - [ - "git_refspec_direction", - "git_refspec_dst", - "git_refspec_dst_matches", - "git_refspec_force", - "git_refspec_free", - "git_refspec_parse", - "git_refspec_rtransform", - "git_refspec_src", - "git_refspec_src_matches", - "git_refspec_string", - "git_refspec_transform" - ] - ], - [ - "remote", - [ - "git_remote_add_fetch", - "git_remote_add_push", - "git_remote_autotag", - "git_remote_connect", - "git_remote_connect_ext", - "git_remote_connect_options_init", - "git_remote_connected", - "git_remote_create", - "git_remote_create_anonymous", - "git_remote_create_detached", - "git_remote_create_options_init", - "git_remote_create_with_fetchspec", - "git_remote_create_with_opts", - "git_remote_default_branch", - "git_remote_delete", - "git_remote_disconnect", - "git_remote_download", - "git_remote_dup", - "git_remote_fetch", - "git_remote_free", - "git_remote_get_fetch_refspecs", - "git_remote_get_push_refspecs", - "git_remote_get_refspec", - "git_remote_init_callbacks", - "git_remote_is_valid_name", - "git_remote_list", - "git_remote_lookup", - "git_remote_ls", - "git_remote_name", - "git_remote_name_is_valid", - "git_remote_owner", - "git_remote_prune", - "git_remote_prune_refs", - "git_remote_push", - "git_remote_pushurl", - "git_remote_refspec_count", - "git_remote_rename", - "git_remote_set_autotag", - "git_remote_set_instance_pushurl", - "git_remote_set_instance_url", - "git_remote_set_pushurl", - "git_remote_set_url", - "git_remote_stats", - "git_remote_stop", - "git_remote_update_tips", - "git_remote_upload", - "git_remote_url" - ] - ], - [ - "repository", - [ - "git_repository_commondir", - "git_repository_config", - "git_repository_config_snapshot", - "git_repository_detach_head", - "git_repository_discover", - "git_repository_fetchhead_foreach", - "git_repository_free", - "git_repository_get_namespace", - "git_repository_hashfile", - "git_repository_head", - "git_repository_head_detached", - "git_repository_head_detached_for_worktree", - "git_repository_head_for_worktree", - "git_repository_head_unborn", - "git_repository_ident", - "git_repository_index", - "git_repository_init", - "git_repository_init_ext", - "git_repository_init_options_init", - "git_repository_is_bare", - "git_repository_is_empty", - "git_repository_is_shallow", - "git_repository_is_worktree", - "git_repository_item_path", - "git_repository_mergehead_foreach", - "git_repository_message", - "git_repository_message_remove", - "git_repository_odb", - "git_repository_oid_type", - "git_repository_open", - "git_repository_open_bare", - "git_repository_open_ext", - "git_repository_open_from_worktree", - "git_repository_path", - "git_repository_refdb", - "git_repository_set_head", - "git_repository_set_head_detached", - "git_repository_set_head_detached_from_annotated", - "git_repository_set_ident", - "git_repository_set_namespace", - "git_repository_set_workdir", - "git_repository_state", - "git_repository_state_cleanup", - "git_repository_workdir" - ] - ], - [ - "reset", - [ - "git_reset", - "git_reset_default", - "git_reset_from_annotated" - ] - ], - [ - "revert", - [ - "git_revert", - "git_revert_commit", - "git_revert_options_init" - ] - ], - [ - "revparse", - [ - "git_revparse", - "git_revparse_ext", - "git_revparse_single" - ] - ], - [ - "revwalk", - [ - "git_revwalk_add_hide_cb", - "git_revwalk_free", - "git_revwalk_hide", - "git_revwalk_hide_glob", - "git_revwalk_hide_head", - "git_revwalk_hide_ref", - "git_revwalk_new", - "git_revwalk_next", - "git_revwalk_push", - "git_revwalk_push_glob", - "git_revwalk_push_head", - "git_revwalk_push_range", - "git_revwalk_push_ref", - "git_revwalk_repository", - "git_revwalk_reset", - "git_revwalk_simplify_first_parent", - "git_revwalk_sorting" - ] - ], - [ - "signature", - [ - "git_signature_default", - "git_signature_dup", - "git_signature_free", - "git_signature_from_buffer", - "git_signature_new", - "git_signature_now" - ] - ], - [ - "stash", - [ - "git_stash_apply", - "git_stash_apply_options_init", - "git_stash_drop", - "git_stash_foreach", - "git_stash_pop", - "git_stash_save", - "git_stash_save_options_init", - "git_stash_save_with_opts" - ] - ], - [ - "status", - [ - "git_status_byindex", - "git_status_file", - "git_status_foreach", - "git_status_foreach_ext", - "git_status_list_entrycount", - "git_status_list_free", - "git_status_list_new", - "git_status_options_init", - "git_status_should_ignore" - ] - ], - [ - "strarray", - [ - "git_strarray_copy", - "git_strarray_dispose", - "git_strarray_free" - ] - ], - [ - "submodule", - [ - "git_submodule_add_finalize", - "git_submodule_add_setup", - "git_submodule_add_to_index", - "git_submodule_branch", - "git_submodule_clone", - "git_submodule_dup", - "git_submodule_fetch_recurse_submodules", - "git_submodule_foreach", - "git_submodule_free", - "git_submodule_head_id", - "git_submodule_ignore", - "git_submodule_index_id", - "git_submodule_init", - "git_submodule_location", - "git_submodule_lookup", - "git_submodule_name", - "git_submodule_open", - "git_submodule_owner", - "git_submodule_path", - "git_submodule_reload", - "git_submodule_repo_init", - "git_submodule_resolve_url", - "git_submodule_set_branch", - "git_submodule_set_fetch_recurse_submodules", - "git_submodule_set_ignore", - "git_submodule_set_update", - "git_submodule_set_url", - "git_submodule_status", - "git_submodule_sync", - "git_submodule_update", - "git_submodule_update_options_init", - "git_submodule_update_strategy", - "git_submodule_url", - "git_submodule_wd_id" - ] - ], - [ - "tag", - [ - "git_tag_annotation_create", - "git_tag_create", - "git_tag_create_from_buffer", - "git_tag_create_lightweight", - "git_tag_delete", - "git_tag_dup", - "git_tag_foreach", - "git_tag_free", - "git_tag_id", - "git_tag_list", - "git_tag_list_match", - "git_tag_lookup", - "git_tag_lookup_prefix", - "git_tag_message", - "git_tag_name", - "git_tag_name_is_valid", - "git_tag_owner", - "git_tag_peel", - "git_tag_tagger", - "git_tag_target", - "git_tag_target_id", - "git_tag_target_type" - ] - ], - [ - "trace", - [ - "git_trace_set" - ] - ], - [ - "transaction", - [ - "git_transaction_commit", - "git_transaction_free", - "git_transaction_lock_ref", - "git_transaction_new", - "git_transaction_remove", - "git_transaction_set_reflog", - "git_transaction_set_symbolic_target", - "git_transaction_set_target" - ] - ], - [ - "tree", - [ - "git_tree_create_updated", - "git_tree_dup", - "git_tree_entry_byid", - "git_tree_entry_byindex", - "git_tree_entry_byname", - "git_tree_entry_bypath", - "git_tree_entry_cmp", - "git_tree_entry_dup", - "git_tree_entry_filemode", - "git_tree_entry_filemode_raw", - "git_tree_entry_free", - "git_tree_entry_id", - "git_tree_entry_name", - "git_tree_entry_to_object", - "git_tree_entry_type", - "git_tree_entrycount", - "git_tree_free", - "git_tree_id", - "git_tree_lookup", - "git_tree_lookup_prefix", - "git_tree_owner", - "git_tree_walk" - ] - ], - [ - "treebuilder", - [ - "git_treebuilder_clear", - "git_treebuilder_entrycount", - "git_treebuilder_filter", - "git_treebuilder_free", - "git_treebuilder_get", - "git_treebuilder_insert", - "git_treebuilder_new", - "git_treebuilder_remove", - "git_treebuilder_write", - "git_treebuilder_write_with_buffer" - ] - ], - [ - "worktree", - [ - "git_worktree_add", - "git_worktree_add_options_init", - "git_worktree_free", - "git_worktree_is_locked", - "git_worktree_is_prunable", - "git_worktree_list", - "git_worktree_lock", - "git_worktree_lookup", - "git_worktree_name", - "git_worktree_open_from_repository", - "git_worktree_path", - "git_worktree_prune", - "git_worktree_prune_options_init", - "git_worktree_unlock", - "git_worktree_validate" - ] - ] + ["apply", ["git_apply", "git_apply_options_init", "git_apply_to_tree"]], + [ + "attr", + [ + "git_attr_add_macro", + "git_attr_cache_flush", + "git_attr_foreach", + "git_attr_foreach_ext", + "git_attr_get", + "git_attr_get_ext", + "git_attr_get_many", + "git_attr_get_many_ext", + "git_attr_value" + ] ], - "examples": [ - [ - "add.c", - "ex/v1.7.2/add.html" - ], - [ - "args.c", - "ex/v1.7.2/args.html" - ], - [ - "blame.c", - "ex/v1.7.2/blame.html" - ], - [ - "cat-file.c", - "ex/v1.7.2/cat-file.html" - ], - [ - "checkout.c", - "ex/v1.7.2/checkout.html" - ], - [ - "clone.c", - "ex/v1.7.2/clone.html" - ], - [ - "commit.c", - "ex/v1.7.2/commit.html" - ], - [ - "common.c", - "ex/v1.7.2/common.html" - ], - [ - "config.c", - "ex/v1.7.2/config.html" - ], - [ - "describe.c", - "ex/v1.7.2/describe.html" - ], - [ - "diff.c", - "ex/v1.7.2/diff.html" - ], - [ - "fetch.c", - "ex/v1.7.2/fetch.html" - ], - [ - "for-each-ref.c", - "ex/v1.7.2/for-each-ref.html" - ], - [ - "general.c", - "ex/v1.7.2/general.html" - ], - [ - "index-pack.c", - "ex/v1.7.2/index-pack.html" - ], - [ - "init.c", - "ex/v1.7.2/init.html" - ], - [ - "lg2.c", - "ex/v1.7.2/lg2.html" - ], - [ - "log.c", - "ex/v1.7.2/log.html" - ], - [ - "ls-files.c", - "ex/v1.7.2/ls-files.html" - ], - [ - "ls-remote.c", - "ex/v1.7.2/ls-remote.html" - ], - [ - "merge.c", - "ex/v1.7.2/merge.html" - ], - [ - "push.c", - "ex/v1.7.2/push.html" - ], - [ - "remote.c", - "ex/v1.7.2/remote.html" - ], - [ - "rev-list.c", - "ex/v1.7.2/rev-list.html" - ], - [ - "rev-parse.c", - "ex/v1.7.2/rev-parse.html" - ], - [ - "show-index.c", - "ex/v1.7.2/show-index.html" - ], - [ - "stash.c", - "ex/v1.7.2/stash.html" - ], - [ - "status.c", - "ex/v1.7.2/status.html" - ], - [ - "tag.c", - "ex/v1.7.2/tag.html" - ] + [ + "blame", + [ + "git_blame_buffer", + "git_blame_file", + "git_blame_free", + "git_blame_get_hunk_byindex", + "git_blame_get_hunk_byline", + "git_blame_get_hunk_count", + "git_blame_init_options", + "git_blame_options_init" + ] + ], + [ + "blob", + [ + "git_blob_create_from_buffer", + "git_blob_create_from_disk", + "git_blob_create_from_stream", + "git_blob_create_from_stream_commit", + "git_blob_create_from_workdir", + "git_blob_data_is_binary", + "git_blob_dup", + "git_blob_filter", + "git_blob_filter_options_init", + "git_blob_filtered_content", + "git_blob_free", + "git_blob_id", + "git_blob_is_binary", + "git_blob_lookup", + "git_blob_lookup_prefix", + "git_blob_owner", + "git_blob_rawcontent", + "git_blob_rawsize" + ] + ], + [ + "branch", + [ + "git_branch_create", + "git_branch_create_from_annotated", + "git_branch_delete", + "git_branch_is_checked_out", + "git_branch_is_head", + "git_branch_iterator_free", + "git_branch_iterator_new", + "git_branch_lookup", + "git_branch_move", + "git_branch_name", + "git_branch_name_is_valid", + "git_branch_next", + "git_branch_remote_name", + "git_branch_set_upstream", + "git_branch_upstream", + "git_branch_upstream_merge", + "git_branch_upstream_name", + "git_branch_upstream_remote" + ] + ], + [ + "buf", + [ + "git_buf_contains_nul", + "git_buf_dispose", + "git_buf_free", + "git_buf_grow", + "git_buf_is_binary", + "git_buf_set" + ] + ], + [ + "checkout", + [ + "git_checkout_head", + "git_checkout_index", + "git_checkout_options_init", + "git_checkout_tree" + ] + ], + [ + "cherrypick", + ["git_cherrypick", "git_cherrypick_commit", "git_cherrypick_options_init"] + ], + ["clone", ["git_clone", "git_clone_options_init"]], + [ + "commit", + [ + "git_commit_amend", + "git_commit_author", + "git_commit_author_with_mailmap", + "git_commit_body", + "git_commit_committer", + "git_commit_committer_with_mailmap", + "git_commit_create", + "git_commit_create_buffer", + "git_commit_create_from_stage", + "git_commit_create_v", + "git_commit_create_with_signature", + "git_commit_dup", + "git_commit_extract_signature", + "git_commit_free", + "git_commit_header_field", + "git_commit_id", + "git_commit_lookup", + "git_commit_lookup_prefix", + "git_commit_message", + "git_commit_message_encoding", + "git_commit_message_raw", + "git_commit_nth_gen_ancestor", + "git_commit_owner", + "git_commit_parent", + "git_commit_parent_id", + "git_commit_parentcount", + "git_commit_raw_header", + "git_commit_summary", + "git_commit_time", + "git_commit_time_offset", + "git_commit_tree", + "git_commit_tree_id" + ] + ], + ["commitarray", ["git_commitarray_dispose"]], + [ + "config", + [ + "git_config_add_file_ondisk", + "git_config_backend_foreach_match", + "git_config_delete_entry", + "git_config_delete_multivar", + "git_config_entry_free", + "git_config_find_global", + "git_config_find_programdata", + "git_config_find_system", + "git_config_find_xdg", + "git_config_foreach", + "git_config_foreach_match", + "git_config_free", + "git_config_get_bool", + "git_config_get_entry", + "git_config_get_int32", + "git_config_get_int64", + "git_config_get_mapped", + "git_config_get_multivar_foreach", + "git_config_get_path", + "git_config_get_string", + "git_config_get_string_buf", + "git_config_iterator_free", + "git_config_iterator_glob_new", + "git_config_iterator_new", + "git_config_lock", + "git_config_lookup_map_value", + "git_config_multivar_iterator_new", + "git_config_new", + "git_config_next", + "git_config_open_default", + "git_config_open_global", + "git_config_open_level", + "git_config_open_ondisk", + "git_config_parse_bool", + "git_config_parse_int32", + "git_config_parse_int64", + "git_config_parse_path", + "git_config_set_bool", + "git_config_set_int32", + "git_config_set_int64", + "git_config_set_multivar", + "git_config_set_string", + "git_config_snapshot" + ] + ], + [ + "credential", + [ + "git_credential_default_new", + "git_credential_free", + "git_credential_get_username", + "git_credential_has_username", + "git_credential_ssh_custom_new", + "git_credential_ssh_interactive_new", + "git_credential_ssh_key_from_agent", + "git_credential_ssh_key_memory_new", + "git_credential_ssh_key_new", + "git_credential_username_new", + "git_credential_userpass", + "git_credential_userpass_plaintext_new" + ] + ], + [ + "describe", + [ + "git_describe_commit", + "git_describe_format", + "git_describe_format_options_init", + "git_describe_options_init", + "git_describe_result_free", + "git_describe_workdir" + ] + ], + [ + "diff", + [ + "git_diff_blob_to_buffer", + "git_diff_blobs", + "git_diff_buffers", + "git_diff_commit_as_email", + "git_diff_find_options_init", + "git_diff_find_similar", + "git_diff_foreach", + "git_diff_format_email", + "git_diff_format_email_options_init", + "git_diff_free", + "git_diff_from_buffer", + "git_diff_get_delta", + "git_diff_get_stats", + "git_diff_index_to_index", + "git_diff_index_to_workdir", + "git_diff_is_sorted_icase", + "git_diff_merge", + "git_diff_num_deltas", + "git_diff_num_deltas_of_type", + "git_diff_options_init", + "git_diff_patchid", + "git_diff_patchid_options_init", + "git_diff_print", + "git_diff_stats_deletions", + "git_diff_stats_files_changed", + "git_diff_stats_free", + "git_diff_stats_insertions", + "git_diff_stats_to_buf", + "git_diff_status_char", + "git_diff_to_buf", + "git_diff_tree_to_index", + "git_diff_tree_to_tree", + "git_diff_tree_to_workdir", + "git_diff_tree_to_workdir_with_index" + ] + ], + ["email", ["git_email_create_from_commit", "git_email_create_from_diff"]], + ["error", ["git_error_last"]], + ["fetch", ["git_fetch_options_init"]], + [ + "filter", + [ + "git_filter_list_apply_to_blob", + "git_filter_list_apply_to_buffer", + "git_filter_list_apply_to_data", + "git_filter_list_apply_to_file", + "git_filter_list_contains", + "git_filter_list_free", + "git_filter_list_load", + "git_filter_list_load_ext", + "git_filter_list_stream_blob", + "git_filter_list_stream_buffer", + "git_filter_list_stream_data", + "git_filter_list_stream_file" + ] + ], + [ + "giterr", + ["giterr_clear", "giterr_last", "giterr_set_oom", "giterr_set_str"] + ], + [ + "graph", + [ + "git_graph_ahead_behind", + "git_graph_descendant_of", + "git_graph_reachable_from_any" + ] + ], + [ + "ignore", + [ + "git_ignore_add_rule", + "git_ignore_clear_internal_rules", + "git_ignore_path_is_ignored" + ] + ], + [ + "index", + [ + "git_index_add", + "git_index_add_all", + "git_index_add_bypath", + "git_index_add_from_buffer", + "git_index_caps", + "git_index_checksum", + "git_index_clear", + "git_index_conflict_add", + "git_index_conflict_cleanup", + "git_index_conflict_get", + "git_index_conflict_iterator_free", + "git_index_conflict_iterator_new", + "git_index_conflict_next", + "git_index_conflict_remove", + "git_index_entry_is_conflict", + "git_index_entry_stage", + "git_index_entrycount", + "git_index_find", + "git_index_find_prefix", + "git_index_free", + "git_index_get_byindex", + "git_index_get_bypath", + "git_index_has_conflicts", + "git_index_iterator_free", + "git_index_iterator_new", + "git_index_iterator_next", + "git_index_owner", + "git_index_path", + "git_index_read", + "git_index_read_tree", + "git_index_remove", + "git_index_remove_all", + "git_index_remove_bypath", + "git_index_remove_directory", + "git_index_set_caps", + "git_index_set_version", + "git_index_update_all", + "git_index_version", + "git_index_write", + "git_index_write_tree", + "git_index_write_tree_to" + ] + ], + [ + "indexer", + [ + "git_indexer_append", + "git_indexer_commit", + "git_indexer_free", + "git_indexer_hash", + "git_indexer_name", + "git_indexer_new", + "git_indexer_options_init" + ] + ], + [ + "libgit2", + [ + "git_libgit2_features", + "git_libgit2_init", + "git_libgit2_opts", + "git_libgit2_prerelease", + "git_libgit2_shutdown", + "git_libgit2_version" + ] + ], + [ + "mailmap", + [ + "git_mailmap_add_entry", + "git_mailmap_free", + "git_mailmap_from_buffer", + "git_mailmap_from_repository", + "git_mailmap_new", + "git_mailmap_resolve", + "git_mailmap_resolve_signature" + ] + ], + [ + "merge", + [ + "git_merge", + "git_merge_analysis", + "git_merge_analysis_for_ref", + "git_merge_base", + "git_merge_base_many", + "git_merge_base_octopus", + "git_merge_bases", + "git_merge_bases_many", + "git_merge_commits", + "git_merge_file", + "git_merge_file_from_index", + "git_merge_file_input_init", + "git_merge_file_options_init", + "git_merge_file_result_free", + "git_merge_options_init", + "git_merge_trees" + ] + ], + [ + "message", + [ + "git_message_prettify", + "git_message_trailer_array_free", + "git_message_trailers" + ] + ], + [ + "note", + [ + "git_note_author", + "git_note_commit_create", + "git_note_commit_iterator_new", + "git_note_commit_read", + "git_note_commit_remove", + "git_note_committer", + "git_note_create", + "git_note_default_ref", + "git_note_foreach", + "git_note_free", + "git_note_id", + "git_note_iterator_free", + "git_note_iterator_new", + "git_note_message", + "git_note_next", + "git_note_read", + "git_note_remove" + ] + ], + [ + "object", + [ + "git_object__size", + "git_object_dup", + "git_object_free", + "git_object_id", + "git_object_lookup", + "git_object_lookup_bypath", + "git_object_lookup_prefix", + "git_object_owner", + "git_object_peel", + "git_object_rawcontent_is_valid", + "git_object_short_id", + "git_object_string2type", + "git_object_type", + "git_object_type2string", + "git_object_typeisloose" + ] + ], + [ + "odb", + [ + "git_odb_add_alternate", + "git_odb_add_backend", + "git_odb_add_disk_alternate", + "git_odb_exists", + "git_odb_exists_ext", + "git_odb_exists_prefix", + "git_odb_expand_ids", + "git_odb_foreach", + "git_odb_free", + "git_odb_get_backend", + "git_odb_num_backends", + "git_odb_object_data", + "git_odb_object_dup", + "git_odb_object_free", + "git_odb_object_id", + "git_odb_object_size", + "git_odb_object_type", + "git_odb_open_rstream", + "git_odb_open_wstream", + "git_odb_read", + "git_odb_read_header", + "git_odb_read_prefix", + "git_odb_refresh", + "git_odb_set_commit_graph", + "git_odb_stream_finalize_write", + "git_odb_stream_free", + "git_odb_stream_read", + "git_odb_stream_write", + "git_odb_write", + "git_odb_write_multi_pack_index", + "git_odb_write_pack" + ] + ], + [ + "oid", + [ + "git_oid_cmp", + "git_oid_cpy", + "git_oid_equal", + "git_oid_fmt", + "git_oid_is_zero", + "git_oid_ncmp", + "git_oid_nfmt", + "git_oid_pathfmt", + "git_oid_shorten_add", + "git_oid_shorten_free", + "git_oid_shorten_new", + "git_oid_strcmp", + "git_oid_streq", + "git_oid_tostr", + "git_oid_tostr_s" + ] + ], + ["oidarray", ["git_oidarray_dispose", "git_oidarray_free"]], + [ + "packbuilder", + [ + "git_packbuilder_foreach", + "git_packbuilder_free", + "git_packbuilder_hash", + "git_packbuilder_insert", + "git_packbuilder_insert_commit", + "git_packbuilder_insert_recur", + "git_packbuilder_insert_tree", + "git_packbuilder_insert_walk", + "git_packbuilder_name", + "git_packbuilder_new", + "git_packbuilder_object_count", + "git_packbuilder_set_callbacks", + "git_packbuilder_set_threads", + "git_packbuilder_write", + "git_packbuilder_write_buf", + "git_packbuilder_written" + ] + ], + [ + "patch", + [ + "git_patch_free", + "git_patch_from_blob_and_buffer", + "git_patch_from_blobs", + "git_patch_from_buffers", + "git_patch_from_diff", + "git_patch_get_delta", + "git_patch_get_hunk", + "git_patch_get_line_in_hunk", + "git_patch_line_stats", + "git_patch_num_hunks", + "git_patch_num_lines_in_hunk", + "git_patch_owner", + "git_patch_print", + "git_patch_size", + "git_patch_to_buf" + ] + ], + [ + "pathspec", + [ + "git_pathspec_free", + "git_pathspec_match_diff", + "git_pathspec_match_index", + "git_pathspec_match_list_diff_entry", + "git_pathspec_match_list_entry", + "git_pathspec_match_list_entrycount", + "git_pathspec_match_list_failed_entry", + "git_pathspec_match_list_failed_entrycount", + "git_pathspec_match_list_free", + "git_pathspec_match_tree", + "git_pathspec_match_workdir", + "git_pathspec_matches_path", + "git_pathspec_new" + ] + ], + ["proxy", ["git_proxy_options_init"]], + ["push", ["git_push_options_init"]], + [ + "rebase", + [ + "git_rebase_abort", + "git_rebase_commit", + "git_rebase_finish", + "git_rebase_free", + "git_rebase_init", + "git_rebase_inmemory_index", + "git_rebase_next", + "git_rebase_onto_id", + "git_rebase_onto_name", + "git_rebase_open", + "git_rebase_operation_byindex", + "git_rebase_operation_current", + "git_rebase_operation_entrycount", + "git_rebase_options_init", + "git_rebase_orig_head_id", + "git_rebase_orig_head_name" + ] + ], + [ + "refdb", + [ + "git_refdb_compress", + "git_refdb_free", + "git_refdb_new", + "git_refdb_open" + ] + ], + [ + "reference", + [ + "git_reference_cmp", + "git_reference_create", + "git_reference_create_matching", + "git_reference_delete", + "git_reference_dup", + "git_reference_dwim", + "git_reference_ensure_log", + "git_reference_foreach", + "git_reference_foreach_glob", + "git_reference_foreach_name", + "git_reference_free", + "git_reference_has_log", + "git_reference_is_branch", + "git_reference_is_note", + "git_reference_is_remote", + "git_reference_is_tag", + "git_reference_is_valid_name", + "git_reference_iterator_free", + "git_reference_iterator_glob_new", + "git_reference_iterator_new", + "git_reference_list", + "git_reference_lookup", + "git_reference_name", + "git_reference_name_is_valid", + "git_reference_name_to_id", + "git_reference_next", + "git_reference_next_name", + "git_reference_normalize_name", + "git_reference_owner", + "git_reference_peel", + "git_reference_remove", + "git_reference_rename", + "git_reference_resolve", + "git_reference_set_target", + "git_reference_shorthand", + "git_reference_symbolic_create", + "git_reference_symbolic_create_matching", + "git_reference_symbolic_set_target", + "git_reference_symbolic_target", + "git_reference_target", + "git_reference_target_peel", + "git_reference_type" + ] + ], + [ + "reflog", + [ + "git_reflog_append", + "git_reflog_delete", + "git_reflog_drop", + "git_reflog_entry_byindex", + "git_reflog_entry_committer", + "git_reflog_entry_id_new", + "git_reflog_entry_id_old", + "git_reflog_entry_message", + "git_reflog_entrycount", + "git_reflog_free", + "git_reflog_read", + "git_reflog_rename", + "git_reflog_write" + ] + ], + [ + "refspec", + [ + "git_refspec_direction", + "git_refspec_dst", + "git_refspec_dst_matches", + "git_refspec_force", + "git_refspec_free", + "git_refspec_parse", + "git_refspec_rtransform", + "git_refspec_src", + "git_refspec_src_matches", + "git_refspec_string", + "git_refspec_transform" + ] + ], + [ + "remote", + [ + "git_remote_add_fetch", + "git_remote_add_push", + "git_remote_autotag", + "git_remote_connect", + "git_remote_connect_ext", + "git_remote_connect_options_init", + "git_remote_connected", + "git_remote_create", + "git_remote_create_anonymous", + "git_remote_create_detached", + "git_remote_create_options_init", + "git_remote_create_with_fetchspec", + "git_remote_create_with_opts", + "git_remote_default_branch", + "git_remote_delete", + "git_remote_disconnect", + "git_remote_download", + "git_remote_dup", + "git_remote_fetch", + "git_remote_free", + "git_remote_get_fetch_refspecs", + "git_remote_get_push_refspecs", + "git_remote_get_refspec", + "git_remote_init_callbacks", + "git_remote_is_valid_name", + "git_remote_list", + "git_remote_lookup", + "git_remote_ls", + "git_remote_name", + "git_remote_name_is_valid", + "git_remote_owner", + "git_remote_prune", + "git_remote_prune_refs", + "git_remote_push", + "git_remote_pushurl", + "git_remote_refspec_count", + "git_remote_rename", + "git_remote_set_autotag", + "git_remote_set_instance_pushurl", + "git_remote_set_instance_url", + "git_remote_set_pushurl", + "git_remote_set_url", + "git_remote_stats", + "git_remote_stop", + "git_remote_update_tips", + "git_remote_upload", + "git_remote_url" + ] + ], + [ + "repository", + [ + "git_repository_commit_parents", + "git_repository_commondir", + "git_repository_config", + "git_repository_config_snapshot", + "git_repository_detach_head", + "git_repository_discover", + "git_repository_fetchhead_foreach", + "git_repository_free", + "git_repository_get_namespace", + "git_repository_hashfile", + "git_repository_head", + "git_repository_head_detached", + "git_repository_head_detached_for_worktree", + "git_repository_head_for_worktree", + "git_repository_head_unborn", + "git_repository_ident", + "git_repository_index", + "git_repository_init", + "git_repository_init_ext", + "git_repository_init_options_init", + "git_repository_is_bare", + "git_repository_is_empty", + "git_repository_is_shallow", + "git_repository_is_worktree", + "git_repository_item_path", + "git_repository_mergehead_foreach", + "git_repository_message", + "git_repository_message_remove", + "git_repository_odb", + "git_repository_oid_type", + "git_repository_open", + "git_repository_open_bare", + "git_repository_open_ext", + "git_repository_open_from_worktree", + "git_repository_path", + "git_repository_refdb", + "git_repository_set_head", + "git_repository_set_head_detached", + "git_repository_set_head_detached_from_annotated", + "git_repository_set_ident", + "git_repository_set_namespace", + "git_repository_set_workdir", + "git_repository_state", + "git_repository_state_cleanup", + "git_repository_workdir" + ] + ], + ["reset", ["git_reset", "git_reset_default", "git_reset_from_annotated"]], + ["revert", ["git_revert", "git_revert_commit", "git_revert_options_init"]], + ["revparse", ["git_revparse", "git_revparse_ext", "git_revparse_single"]], + [ + "revwalk", + [ + "git_revwalk_add_hide_cb", + "git_revwalk_free", + "git_revwalk_hide", + "git_revwalk_hide_glob", + "git_revwalk_hide_head", + "git_revwalk_hide_ref", + "git_revwalk_new", + "git_revwalk_next", + "git_revwalk_push", + "git_revwalk_push_glob", + "git_revwalk_push_head", + "git_revwalk_push_range", + "git_revwalk_push_ref", + "git_revwalk_repository", + "git_revwalk_reset", + "git_revwalk_simplify_first_parent", + "git_revwalk_sorting" + ] + ], + [ + "signature", + [ + "git_signature_default", + "git_signature_dup", + "git_signature_free", + "git_signature_from_buffer", + "git_signature_new", + "git_signature_now" + ] + ], + [ + "stash", + [ + "git_stash_apply", + "git_stash_apply_options_init", + "git_stash_drop", + "git_stash_foreach", + "git_stash_pop", + "git_stash_save", + "git_stash_save_options_init", + "git_stash_save_with_opts" + ] + ], + [ + "status", + [ + "git_status_byindex", + "git_status_file", + "git_status_foreach", + "git_status_foreach_ext", + "git_status_list_entrycount", + "git_status_list_free", + "git_status_list_new", + "git_status_options_init", + "git_status_should_ignore" + ] + ], + [ + "strarray", + ["git_strarray_copy", "git_strarray_dispose", "git_strarray_free"] + ], + [ + "submodule", + [ + "git_submodule_add_finalize", + "git_submodule_add_setup", + "git_submodule_add_to_index", + "git_submodule_branch", + "git_submodule_clone", + "git_submodule_dup", + "git_submodule_fetch_recurse_submodules", + "git_submodule_foreach", + "git_submodule_free", + "git_submodule_head_id", + "git_submodule_ignore", + "git_submodule_index_id", + "git_submodule_init", + "git_submodule_location", + "git_submodule_lookup", + "git_submodule_name", + "git_submodule_open", + "git_submodule_owner", + "git_submodule_path", + "git_submodule_reload", + "git_submodule_repo_init", + "git_submodule_resolve_url", + "git_submodule_set_branch", + "git_submodule_set_fetch_recurse_submodules", + "git_submodule_set_ignore", + "git_submodule_set_update", + "git_submodule_set_url", + "git_submodule_status", + "git_submodule_sync", + "git_submodule_update", + "git_submodule_update_options_init", + "git_submodule_update_strategy", + "git_submodule_url", + "git_submodule_wd_id" + ] + ], + [ + "tag", + [ + "git_tag_annotation_create", + "git_tag_create", + "git_tag_create_from_buffer", + "git_tag_create_lightweight", + "git_tag_delete", + "git_tag_dup", + "git_tag_foreach", + "git_tag_free", + "git_tag_id", + "git_tag_list", + "git_tag_list_match", + "git_tag_lookup", + "git_tag_lookup_prefix", + "git_tag_message", + "git_tag_name", + "git_tag_name_is_valid", + "git_tag_owner", + "git_tag_peel", + "git_tag_tagger", + "git_tag_target", + "git_tag_target_id", + "git_tag_target_type" + ] + ], + ["trace", ["git_trace_set"]], + [ + "transaction", + [ + "git_transaction_commit", + "git_transaction_free", + "git_transaction_lock_ref", + "git_transaction_new", + "git_transaction_remove", + "git_transaction_set_reflog", + "git_transaction_set_symbolic_target", + "git_transaction_set_target" + ] + ], + [ + "tree", + [ + "git_tree_create_updated", + "git_tree_dup", + "git_tree_entry_byid", + "git_tree_entry_byindex", + "git_tree_entry_byname", + "git_tree_entry_bypath", + "git_tree_entry_cmp", + "git_tree_entry_dup", + "git_tree_entry_filemode", + "git_tree_entry_filemode_raw", + "git_tree_entry_free", + "git_tree_entry_id", + "git_tree_entry_name", + "git_tree_entry_to_object", + "git_tree_entry_type", + "git_tree_entrycount", + "git_tree_free", + "git_tree_id", + "git_tree_lookup", + "git_tree_lookup_prefix", + "git_tree_owner", + "git_tree_walk" + ] + ], + [ + "treebuilder", + [ + "git_treebuilder_clear", + "git_treebuilder_entrycount", + "git_treebuilder_filter", + "git_treebuilder_free", + "git_treebuilder_get", + "git_treebuilder_insert", + "git_treebuilder_new", + "git_treebuilder_remove", + "git_treebuilder_write", + "git_treebuilder_write_with_buffer" + ] + ], + [ + "worktree", + [ + "git_worktree_add", + "git_worktree_add_options_init", + "git_worktree_free", + "git_worktree_is_locked", + "git_worktree_is_prunable", + "git_worktree_list", + "git_worktree_lock", + "git_worktree_lookup", + "git_worktree_name", + "git_worktree_open_from_repository", + "git_worktree_path", + "git_worktree_prune", + "git_worktree_prune_options_init", + "git_worktree_unlock", + "git_worktree_validate" + ] ] -} \ No newline at end of file + ], + "examples": [ + ["add.c", "ex/v1.8.4/add.html"], + ["args.c", "ex/v1.8.4/args.html"], + ["blame.c", "ex/v1.8.4/blame.html"], + ["cat-file.c", "ex/v1.8.4/cat-file.html"], + ["checkout.c", "ex/v1.8.4/checkout.html"], + ["clone.c", "ex/v1.8.4/clone.html"], + ["commit.c", "ex/v1.8.4/commit.html"], + ["common.c", "ex/v1.8.4/common.html"], + ["config.c", "ex/v1.8.4/config.html"], + ["describe.c", "ex/v1.8.4/describe.html"], + ["diff.c", "ex/v1.8.4/diff.html"], + ["fetch.c", "ex/v1.8.4/fetch.html"], + ["for-each-ref.c", "ex/v1.8.4/for-each-ref.html"], + ["general.c", "ex/v1.8.4/general.html"], + ["index-pack.c", "ex/v1.8.4/index-pack.html"], + ["init.c", "ex/v1.8.4/init.html"], + ["lg2.c", "ex/v1.8.4/lg2.html"], + ["log.c", "ex/v1.8.4/log.html"], + ["ls-files.c", "ex/v1.8.4/ls-files.html"], + ["ls-remote.c", "ex/v1.8.4/ls-remote.html"], + ["merge.c", "ex/v1.8.4/merge.html"], + ["push.c", "ex/v1.8.4/push.html"], + ["remote.c", "ex/v1.8.4/remote.html"], + ["rev-list.c", "ex/v1.8.4/rev-list.html"], + ["rev-parse.c", "ex/v1.8.4/rev-parse.html"], + ["show-index.c", "ex/v1.8.4/show-index.html"], + ["stash.c", "ex/v1.8.4/stash.html"], + ["status.c", "ex/v1.8.4/status.html"], + ["tag.c", "ex/v1.8.4/tag.html"] + ] +} diff --git a/generate/templates/templates/class_header.h b/generate/templates/templates/class_header.h index d74bd0ca2..911234782 100644 --- a/generate/templates/templates/class_header.h +++ b/generate/templates/templates/class_header.h @@ -20,6 +20,7 @@ extern "C" { #include +#include {%each cDependencies as dependency %} #include <{{ dependency }}> {%endeach%} diff --git a/generate/templates/templates/struct_header.h b/generate/templates/templates/struct_header.h index 1c2495f44..ac05fb354 100644 --- a/generate/templates/templates/struct_header.h +++ b/generate/templates/templates/struct_header.h @@ -16,6 +16,7 @@ extern "C" { #include + #include {% each cDependencies as dependency %} #include <{{ dependency }}> {% endeach %} diff --git a/vendor/libgit2 b/vendor/libgit2 index efdaa4ac7..6bfd2b901 160000 --- a/vendor/libgit2 +++ b/vendor/libgit2 @@ -1 +1 @@ -Subproject commit efdaa4ac71e067f0c178e94a0c7d4e197bded48d +Subproject commit 6bfd2b9011897a30494451e75a95cff5b88b93b9 diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index b2ea9471b..78d6eb054 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -22,8 +22,11 @@ "GIT_SSH", "GIT_SSH_MEMORY_CREDENTIALS", "LIBGIT2_NO_FEATURES_H", + "GIT_HTTPPARSER_HTTPPARSER", "GIT_SHA1_COLLISIONDETECT", "GIT_SHA256_OPENSSL", + "GIT_SSH_LIBSSH2", + "GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS", "GIT_USE_NSEC", "GIT_HTTPS", # Node's util.h may be accidentally included so use this to guard @@ -55,13 +58,14 @@ "libgit2/src/libgit2/commit_list.c", "libgit2/src/libgit2/config.c", "libgit2/src/libgit2/config_cache.c", - "libgit2/src/libgit2/config_entries.c", "libgit2/src/libgit2/config_file.c", + "libgit2/src/libgit2/config_list.c", "libgit2/src/libgit2/config_mem.c", "libgit2/src/libgit2/config_parse.c", "libgit2/src/libgit2/config_snapshot.c", "libgit2/src/libgit2/crlf.c", "libgit2/src/libgit2/delta.c", + "libgit2/src/libgit2/describe.c", "libgit2/src/libgit2/diff.c", "libgit2/src/libgit2/diff_driver.c", "libgit2/src/libgit2/diff_file.c", @@ -72,12 +76,11 @@ "libgit2/src/libgit2/diff_tform.c", "libgit2/src/libgit2/diff_xdiff.c", "libgit2/src/libgit2/email.c", - "libgit2/src/libgit2/errors.c", "libgit2/src/libgit2/fetch.c", "libgit2/src/libgit2/fetchhead.c", "libgit2/src/libgit2/filter.c", - "libgit2/src/libgit2/graph.c", "libgit2/src/libgit2/grafts.c", + "libgit2/src/libgit2/graph.c", "libgit2/src/libgit2/hashsig.c", "libgit2/src/libgit2/ident.c", "libgit2/src/libgit2/idxmap.c", @@ -127,19 +130,20 @@ "libgit2/src/libgit2/revert.c", "libgit2/src/libgit2/revparse.c", "libgit2/src/libgit2/revwalk.c", + "libgit2/src/libgit2/settings.c", "libgit2/src/libgit2/signature.c", "libgit2/src/libgit2/stash.c", "libgit2/src/libgit2/status.c", "libgit2/src/libgit2/strarray.c", "libgit2/src/libgit2/streams/mbedtls.c", "libgit2/src/libgit2/streams/openssl.c", + # "libgit2/src/libgit2/streams/openssl_dynamic.c", "libgit2/src/libgit2/streams/openssl_legacy.c", "libgit2/src/libgit2/streams/registry.c", "libgit2/src/libgit2/streams/socket.c", "libgit2/src/libgit2/submodule.c", "libgit2/src/libgit2/sysdir.c", "libgit2/src/libgit2/tag.c", - "libgit2/src/libgit2/threadstate.c", "libgit2/src/libgit2/trace.c", "libgit2/src/libgit2/trailer.c", "libgit2/src/libgit2/transaction.c", @@ -148,11 +152,14 @@ "libgit2/src/libgit2/transports/credential_helpers.c", "libgit2/src/libgit2/transports/git.c", "libgit2/src/libgit2/transports/httpclient.c", + "libgit2/src/libgit2/transports/httpparser.c", "libgit2/src/libgit2/transports/local.c", "libgit2/src/libgit2/transports/smart.c", "libgit2/src/libgit2/transports/smart_pkt.c", "libgit2/src/libgit2/transports/smart_protocol.c", "libgit2/src/libgit2/transports/ssh.c", + # "libgit2/src/libgit2/transports/ssh_exec.c", + "libgit2/src/libgit2/transports/ssh_libssh2.c", "libgit2/src/libgit2/tree-cache.c", "libgit2/src/libgit2/tree.c", "libgit2/src/libgit2/worktree.c", @@ -168,6 +175,7 @@ "libgit2/src/util/allocators/stdalloc.c", "libgit2/src/util/custom_tls.c", "libgit2/src/util/date.c", + "libgit2/src/util/errors.c", "libgit2/src/util/filebuf.c", "libgit2/src/util/fs_path.c", "libgit2/src/util/futils.c", @@ -185,6 +193,7 @@ "libgit2/src/util/runtime.c", "libgit2/src/util/sortedcache.c", "libgit2/src/util/str.c", + "libgit2/src/util/strlist.c", "libgit2/src/util/strmap.c", "libgit2/src/util/thread.c", "libgit2/src/util/tsort.c", @@ -330,6 +339,7 @@ 4013, ], "sources": [ + # "libgit2/src/libgit2/streams/schannel.c", "libgit2/src/libgit2/transports/winhttp.c", "libgit2/src/util/allocators/win32_leakcheck.c", "libgit2/src/util/win32/dir.c", @@ -338,6 +348,7 @@ "libgit2/src/util/win32/path_w32.c", "libgit2/src/util/win32/posix_w32.c", "libgit2/src/util/win32/precompiled.c", + "libgit2/src/util/win32/process.c", "libgit2/src/util/win32/thread.c", "libgit2/src/util/win32/utf-conv.c", "libgit2/src/util/win32/w32_buffer.c", @@ -350,6 +361,7 @@ ], "sources": [ "libgit2/src/util/unix/map.c", + "libgit2/src/util/unix/process.c", "libgit2/src/util/unix/pthread.c", "libgit2/src/util/unix/realpath.c", ], From 2c8929bb008be3207e4f83fa5d3b9cbe1ea177f3 Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 20 May 2025 09:50:36 -0700 Subject: [PATCH 044/103] support new options structs --- generate/input/descriptor.json | 15 ++++++++++++ generate/input/libgit2-supplement.json | 34 ++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index 828a20311..189805946 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -1063,6 +1063,7 @@ "selfFreeing": true }, "config_iterator": { + "needsForwardDeclaration": false, "selfFreeing": true, "fields": { "backend": { @@ -1127,6 +1128,12 @@ } } }, + "config_backend_memory_options": { + "selfFreeing": true, + "cDependencies": [ + "git2/sys/config.h" + ] + }, "credential": { "needsForwardDeclaration": false, "selfFreeing": true, @@ -1509,6 +1516,9 @@ } } }, + "email_create_options": { + "hasConstructor": true + }, "fetch": { "functions": { "git_fetch_init_options": { @@ -4022,6 +4032,11 @@ } } }, + "stash_save_options": { + "dependencies": [ + "../include/str_array_converter.h" + ] + }, "stdalloc": { "ignore": true }, diff --git a/generate/input/libgit2-supplement.json b/generate/input/libgit2-supplement.json index 4f1ddf864..d94be9ba0 100644 --- a/generate/input/libgit2-supplement.json +++ b/generate/input/libgit2-supplement.json @@ -1406,6 +1406,40 @@ ] } ], + [ + "git_commit_create_options", + { + "decl": [ + "unsigned int version", + "unsigned int allow_empty_commit : 1", + "const git_signature *author", + "const git_signature *committer", + "const char *message_encoding" + ], + "fields": [ + { + "name": "version", + "type": "unsigned int" + }, + { + "name": "allow_empty_commit", + "type": "unsigned int" + }, + { + "name": "author", + "type": "const git_signature *" + }, + { + "name": "committer", + "type": "const git_signature *" + }, + { + "name": "message_encoding", + "type": "const char *" + } + ] + } + ], [ "git_describe_format_options", { From c425a4c0bec20d32c5d47aba22c0dd37c18a3530 Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 20 May 2025 09:51:09 -0700 Subject: [PATCH 045/103] fix new commit array structs --- generate/input/descriptor.json | 29 ++++++++++++++++++++ generate/templates/partials/convert_to_v8.cc | 16 +++++++++-- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index 189805946..3e305900d 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -799,6 +799,16 @@ } } }, + "commitarray": { + "fields": { + "commits": { + "ignore": true + }, + "count": { + "ignore": true + } + } + }, "config": { "selfFreeing": true, "functions": { @@ -3667,6 +3677,7 @@ "isSingleton": true, "dependencies": [ "git2/sys/repository.h", + "../include/commit.h", "../include/submodule.h", "../include/remote.h" ], @@ -3677,6 +3688,24 @@ "isErrorCode": true } }, + "git_repository_commit_parents": { + "isAsync": true, + "args": { + "commits": { + "shouldAlloc": true, + "selfFreeing": true, + "isReturn": true, + "cppClassName": "Array", + "jsClassName": "Array", + "arrayElementCppClassName": "GitCommit", + "size": "count", + "key": "commits" + } + }, + "return": { + "isErrorCode": true + } + }, "git_repository_config": { "args": { "out": { diff --git a/generate/templates/partials/convert_to_v8.cc b/generate/templates/partials/convert_to_v8.cc index 6addc3a1d..ccba9b330 100644 --- a/generate/templates/partials/convert_to_v8.cc +++ b/generate/templates/partials/convert_to_v8.cc @@ -28,7 +28,7 @@ {% if isCppClassIntType %} element = Nan::New<{{ cppClassName }}>(({{ parsedClassName }}){{= parsedName =}}[i]); {% else %} - element = Nan::New<{{ cppClassName }}>({% if needsDereference %}*{% endif %}{{= parsedName =}}[i]); + element = Nan::New<{{ cppClassName }}>({% if needsDereference %}*{% endif %}{{= parsedName =}}[i]); {% endif %} Nan::Set(tmpArray, Nan::New(i), element); } @@ -49,7 +49,19 @@ {% if size %} v8::Local tmpArray = Nan::New({{= parsedName =}}->{{ size }}); for (unsigned int i = 0; i < {{= parsedName =}}->{{ size }}; i++) { - Nan::Set(tmpArray, Nan::New(i), Nan::New({{= parsedName =}}->{{ key }}[i]).ToLocalChecked()); + v8::Local element; + {% if arrayElementCppClassName %} + element = {{ arrayElementCppClassName }}::New( + {{ cType|asElementPointer parsedName }}->{{ key }}[i], + {{ selfFreeing|toBool }} + {% if hasOwner %} + , owners + {% endif %} + ); + {% else %} + element = Nan::New({{= parsedName =}}->{{ key }}[i]).ToLocalChecked(); + {% endif %} + Nan::Set(tmpArray, Nan::New(i), element); } {% else %} v8::Local tmpArray = Nan::New({{= parsedName =}}); From 80bda82c6a5354937362dd9dc6a18573d615a277 Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 20 May 2025 16:06:22 -0700 Subject: [PATCH 046/103] drop win32http --- generate/templates/templates/binding.gyp | 4 ++-- vendor/libgit2.gyp | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/generate/templates/templates/binding.gyp b/generate/templates/templates/binding.gyp index 09ca6713c..0f9f49835 100644 --- a/generate/templates/templates/binding.gyp +++ b/generate/templates/templates/binding.gyp @@ -169,9 +169,9 @@ } }, "libraries": [ - "winhttp.lib", "crypt32.lib", - "rpcrt4.lib" + "rpcrt4.lib", + "secur32.lib" ] } ], diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index 78d6eb054..cd3b1c7b3 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -141,6 +141,7 @@ "libgit2/src/libgit2/streams/openssl_legacy.c", "libgit2/src/libgit2/streams/registry.c", "libgit2/src/libgit2/streams/socket.c", + "libgit2/src/libgit2/streams/tls.c", "libgit2/src/libgit2/submodule.c", "libgit2/src/libgit2/sysdir.c", "libgit2/src/libgit2/tag.c", @@ -148,9 +149,11 @@ "libgit2/src/libgit2/trailer.c", "libgit2/src/libgit2/transaction.c", "libgit2/src/libgit2/transport.c", + "libgit2/src/libgit2/transports/auth.c", "libgit2/src/libgit2/transports/credential.c", "libgit2/src/libgit2/transports/credential_helpers.c", "libgit2/src/libgit2/transports/git.c", + "libgit2/src/libgit2/transports/http.c", "libgit2/src/libgit2/transports/httpclient.c", "libgit2/src/libgit2/transports/httpparser.c", "libgit2/src/libgit2/transports/local.c", @@ -256,11 +259,8 @@ "GIT_IO_POLL" # theres a chance this breaks bsd ], "sources": [ - "libgit2/src/libgit2/streams/tls.c", - "libgit2/src/libgit2/transports/auth.c", "libgit2/src/libgit2/transports/auth_gssapi.c", "libgit2/src/libgit2/transports/auth_ntlmclient.c", - "libgit2/src/libgit2/transports/http.c", ], "cflags": [ " Date: Wed, 21 May 2025 12:16:29 -0700 Subject: [PATCH 047/103] drop node 16, 18, test on node 24 and update some dependencies --- .github/workflows/tests.yml | 6 +- package-lock.json | 1476 +++++------------------------------ package.json | 8 +- 3 files changed, 207 insertions(+), 1283 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a9ef00d07..e5e54e3e9 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,7 +14,7 @@ jobs: name: "Linux Tests" strategy: matrix: - node: [16, 18, 20, 22] + node: [20, 22, 24] fail-fast: false runs-on: ubuntu-20.04 steps: @@ -71,7 +71,7 @@ jobs: name: "macOS Tests" strategy: matrix: - node: [16, 18, 20, 22] + node: [20, 22, 24] fail-fast: false runs-on: macOS-13 # This is mostly the same as the Linux steps, waiting for anchor support @@ -122,7 +122,7 @@ jobs: name: Windows Tests strategy: matrix: - node: [16, 18, 20, 22] + node: [20, 22, 24] arch: [x86, x64] fail-fast: false runs-on: windows-2019 diff --git a/package-lock.json b/package-lock.json index c4e3f1604..b619fde28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,15 +17,12 @@ "json5": "^2.1.0", "lodash": "^4.17.14", "node-gyp": "^10.0.1", - "ramda": "^0.25.0", - "tar-fs": "^2.1.1" + "tar-fs": "^3.0.8" }, "devDependencies": { "aws-sdk": "^2.1095.0", - "cheerio": "^1.0.0-rc.2", "clean-for-publish": "~1.0.2", "combyne": "~0.8.1", - "coveralls": "^3.0.2", "js-beautify": "~1.5.10", "jshint": "^2.10.0", "lcov-result-merger": "^3.1.0", @@ -34,7 +31,7 @@ "walk": "^2.3.9" }, "engines": { - "node": ">= 16" + "node": ">= 20" } }, "node_modules/@ampproject/remapping": { @@ -682,22 +679,6 @@ "node": ">=8" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -778,30 +759,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "node_modules/aws-sdk": { "version": "2.1096.0", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1096.0.tgz", @@ -822,68 +779,94 @@ "node": ">= 10.0.0" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "license": "Apache-2.0" }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "node_modules/bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true } - ] + } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, + "node_modules/bare-os": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "tweetnacl": "^0.14.3" + "bare-os": "^3.0.1" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/bare-stream": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -897,17 +880,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + ] }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -1153,49 +1126,6 @@ ], "license": "CC-BY-4.0" }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "dependencies": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -1485,18 +1415,6 @@ "color-support": "bin.js" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/combyne": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/combyne/-/combyne-0.8.1.tgz", @@ -1566,25 +1484,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "node_modules/coveralls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", - "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", - "dev": true, - "dependencies": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - }, - "bin": { - "coveralls": "bin/coveralls.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1612,46 +1511,6 @@ "node": ">= 8" } }, - "node_modules/css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -1733,15 +1592,6 @@ "node": ">= 0.4" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -1767,61 +1617,6 @@ "node": ">=0.3.1" } }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -1869,16 +1664,6 @@ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/electron-to-chromium": { "version": "1.5.90", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", @@ -1908,15 +1693,6 @@ "once": "^1.4.0" } }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -1985,26 +1761,11 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" }, "node_modules/find-cache-dir": { "version": "3.3.2", @@ -2111,29 +1872,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -2155,11 +1893,6 @@ ], "license": "MIT" }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -2284,15 +2017,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", @@ -2438,29 +2162,6 @@ "node": ">=4.x" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2523,25 +2224,6 @@ "dev": true, "license": "MIT" }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -2570,21 +2252,6 @@ "node": ">= 14" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -2624,7 +2291,8 @@ "node_modules/ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true }, "node_modules/imurmurhash": { "version": "0.1.4", @@ -2816,12 +2484,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -3083,12 +2745,6 @@ "node": ">=4" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -3236,30 +2892,12 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3279,21 +2917,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/keyv": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.1.1.tgz", @@ -3365,15 +2988,6 @@ "node": ">=0.10.0" } }, - "node_modules/lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true, - "bin": { - "lcov-parse": "bin/cli.js" - } - }, "node_modules/lcov-result-merger": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lcov-result-merger/-/lcov-result-merger-3.3.0.tgz", @@ -3484,15 +3098,6 @@ "dev": true, "license": "MIT" }, - "node_modules/log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true, - "engines": { - "node": ">=0.8.6" - } - }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -3552,27 +3157,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -3715,11 +3299,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/mocha": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", @@ -4060,18 +3639,6 @@ "set-blocking": "^2.0.0" } }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -4239,15 +3806,6 @@ "node": ">=6" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4419,21 +3977,6 @@ "node": ">=8" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -4497,12 +4040,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -4568,12 +4105,6 @@ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -4604,24 +4135,6 @@ "once": "^1.3.1" } }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -4643,11 +4156,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ramda": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", - "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==" - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -4716,38 +4224,6 @@ "node": ">= 0.10" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4863,7 +4339,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "optional": true }, "node_modules/sax": { "version": "1.2.1", @@ -5012,31 +4488,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ssri": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", @@ -5062,6 +4513,19 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "node_modules/streamx": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -5159,34 +4623,28 @@ } }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", + "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", + "license": "MIT", "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, "node_modules/tar/node_modules/mkdirp": { @@ -5237,6 +4695,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -5312,48 +4779,11 @@ "node": ">= 0.10" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -5454,15 +4884,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", @@ -5503,20 +4924,6 @@ "node": ">= 0.10" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/vinyl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", @@ -6293,18 +5700,6 @@ "indent-string": "^4.0.0" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6365,27 +5760,6 @@ "sprintf-js": "~1.0.2" } }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "aws-sdk": { "version": "2.1096.0", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1096.0.tgz", @@ -6403,62 +5777,61 @@ "xml2js": "0.4.19" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "optional": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, + "bare-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", + "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" } }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "bare-os": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "optional": true + }, + "bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "optional": true, "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } + "bare-os": "^3.0.1" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "bare-stream": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "optional": true, + "requires": { + "streamx": "^2.21.0" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "brace-expansion": { @@ -6625,40 +5998,6 @@ "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - } - }, - "cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - } - }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -6903,15 +6242,6 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "combyne": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/combyne/-/combyne-0.8.1.tgz", @@ -6982,19 +6312,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "coveralls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", - "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" - } - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -7015,34 +6332,6 @@ } } }, - "css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -7094,12 +6383,6 @@ "object-keys": "^1.0.12" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -7116,43 +6399,6 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -7202,16 +6448,6 @@ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "electron-to-chromium": { "version": "1.5.90", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", @@ -7240,12 +6476,6 @@ "once": "^1.4.0" } }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -7297,23 +6527,10 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "find-cache-dir": { "version": "3.3.2", @@ -7400,34 +6617,12 @@ } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -7520,15 +6715,6 @@ "pump": "^3.0.0" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", @@ -7651,22 +6837,6 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -7709,18 +6879,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, "http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -7745,17 +6903,6 @@ } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -7786,7 +6933,8 @@ "ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true }, "imurmurhash": { "version": "0.1.4", @@ -7935,12 +7083,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -8127,12 +7269,6 @@ } } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -8262,30 +7398,12 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -8299,18 +7417,6 @@ "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "keyv": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.1.1.tgz", @@ -8378,12 +7484,6 @@ "invert-kv": "^1.0.0" } }, - "lcov-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", - "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", - "dev": true - }, "lcov-result-merger": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lcov-result-merger/-/lcov-result-merger-3.3.0.tgz", @@ -8470,12 +7570,6 @@ "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -8521,21 +7615,6 @@ } } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -8638,11 +7717,6 @@ "minimist": "^1.2.5" } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "mocha": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", @@ -8885,15 +7959,6 @@ "set-blocking": "^2.0.0" } }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -9023,12 +8088,6 @@ } } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -9159,21 +8218,6 @@ "release-zalgo": "^1.0.0" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -9217,12 +8261,6 @@ } } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -9273,12 +8311,6 @@ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -9311,18 +8343,6 @@ } } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -9334,11 +8354,6 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, - "ramda": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", - "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==" - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -9391,34 +8406,6 @@ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -9496,7 +8483,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "optional": true }, "sax": { "version": "1.2.1", @@ -9607,23 +8594,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "ssri": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", @@ -9645,6 +8615,16 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "streamx": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "requires": { + "bare-events": "^2.2.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -9722,33 +8702,24 @@ } }, "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", + "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0", "pump": "^3.0.0", - "tar-stream": "^2.1.4" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - } + "tar-stream": "^3.1.5" } }, "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, "test-exclude": { @@ -9778,6 +8749,14 @@ } } }, + "text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "requires": { + "b4a": "^1.6.4" + } + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -9849,42 +8828,11 @@ "through2": "^2.0.3" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -9947,15 +8895,6 @@ "picocolors": "^1.1.1" } }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, "url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", @@ -9991,17 +8930,6 @@ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vinyl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", diff --git a/package.json b/package.json index 2406899fa..24f9818b5 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "lib": "./lib" }, "engines": { - "node": ">= 16" + "node": ">= 20" }, "dependencies": { "@axosoft/nan": "^2.22.0-gk.1", @@ -45,15 +45,12 @@ "json5": "^2.1.0", "lodash": "^4.17.14", "node-gyp": "^10.0.1", - "ramda": "^0.25.0", - "tar-fs": "^2.1.1" + "tar-fs": "^3.0.8" }, "devDependencies": { "aws-sdk": "^2.1095.0", - "cheerio": "^1.0.0-rc.2", "clean-for-publish": "~1.0.2", "combyne": "~0.8.1", - "coveralls": "^3.0.2", "js-beautify": "~1.5.10", "jshint": "^2.10.0", "lcov-result-merger": "^3.1.0", @@ -68,7 +65,6 @@ }, "scripts": { "cov": "npm run cppcov && npm run filtercov && npm run mergecov", - "coveralls": "cat ./test/coverage/merged.lcov | coveralls", "cppcov": "mkdir -p test/coverage/cpp && ./lcov-1.10/bin/lcov --gcov-tool /usr/bin/gcov-4.9 --capture --directory build/Release/obj.target/nodegit/src --output-file test/coverage/cpp/lcov_full.info", "filtercov": "./lcov-1.10/bin/lcov --extract test/coverage/cpp/lcov_full.info $(pwd)/src/* $(pwd)/src/**/* $(pwd)/include/* $(pwd)/include/**/* --output-file test/coverage/cpp/lcov.info && rm test/coverage/cpp/lcov_full.info", "generateJson": "node generate/scripts/generateJson", From 086b2945c5bcb6c619ed34e8a6afa6bfc2564ba5 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 21 May 2025 19:00:04 -0700 Subject: [PATCH 048/103] stop null-checking git_error_last git_errror_last will now return a "no-error" object instead of returning a null pointer --- generate/templates/manual/clone/clone.cc | 2 +- generate/templates/manual/commit/extract_signature.cc | 4 ++-- generate/templates/manual/filter_list/load.cc | 2 +- generate/templates/manual/filter_source/repo.cc | 2 +- generate/templates/manual/patches/convenient_patches.cc | 4 ++-- generate/templates/manual/repository/statistics.cc | 2 +- generate/templates/manual/src/filter_registry.cc | 4 ++-- generate/templates/manual/tree/get_all_filepaths.cc | 2 +- generate/templates/partials/async_function.cc | 4 ++-- generate/templates/partials/convert_from_v8.cc | 8 ++------ generate/templates/partials/sync_function.cc | 2 +- 11 files changed, 16 insertions(+), 20 deletions(-) diff --git a/generate/templates/manual/clone/clone.cc b/generate/templates/manual/clone/clone.cc index e3b0bbc14..02c47ff58 100644 --- a/generate/templates/manual/clone/clone.cc +++ b/generate/templates/manual/clone/clone.cc @@ -120,7 +120,7 @@ void GitClone::CloneWorker::Execute() { baton->error_code = result; - if (result != GIT_OK && git_error_last() != NULL) { + if (result != GIT_OK && git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } } diff --git a/generate/templates/manual/commit/extract_signature.cc b/generate/templates/manual/commit/extract_signature.cc index b42e8f188..82a214111 100644 --- a/generate/templates/manual/commit/extract_signature.cc +++ b/generate/templates/manual/commit/extract_signature.cc @@ -31,7 +31,7 @@ NAN_METHOD(GitCommit::ExtractSignature) if (git_oid_fromstr(baton->commit_id, (const char *)strdup(*oidString)) != GIT_OK) { free(baton->commit_id); - if (git_error_last()) { + if (git_error_last()->klass != GIT_ERROR_NONE) { return Nan::ThrowError(git_error_last()->message); } else { return Nan::ThrowError("Unknown Error"); @@ -79,7 +79,7 @@ void GitCommit::ExtractSignatureWorker::Execute() (const char *)baton->field ); - if (baton->error_code != GIT_OK && git_error_last() != NULL) { + if (baton->error_code != GIT_OK) { baton->error = git_error_dup(git_error_last()); } } diff --git a/generate/templates/manual/filter_list/load.cc b/generate/templates/manual/filter_list/load.cc index de15daabb..22e2f1f4f 100644 --- a/generate/templates/manual/filter_list/load.cc +++ b/generate/templates/manual/filter_list/load.cc @@ -119,7 +119,7 @@ void GitFilterList::LoadWorker::Execute() { baton->error_code = result; - if (result != GIT_OK && git_error_last() != NULL) { + if (result != GIT_OK && git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } } diff --git a/generate/templates/manual/filter_source/repo.cc b/generate/templates/manual/filter_source/repo.cc index f7cb98bf4..78903d86b 100644 --- a/generate/templates/manual/filter_source/repo.cc +++ b/generate/templates/manual/filter_source/repo.cc @@ -42,7 +42,7 @@ void GitFilterSource::RepoWorker::Execute() { if (baton->error_code == GIT_OK) { baton->out = repo; - } else if (git_error_last() != NULL) { + } else if (git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } } diff --git a/generate/templates/manual/patches/convenient_patches.cc b/generate/templates/manual/patches/convenient_patches.cc index e183afb75..8873fe07c 100644 --- a/generate/templates/manual/patches/convenient_patches.cc +++ b/generate/templates/manual/patches/convenient_patches.cc @@ -69,7 +69,7 @@ void GitPatch::ConvenientFromDiffWorker::Execute() { baton->error_code = result; - if (git_error_last() != NULL) { + if (git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } @@ -103,7 +103,7 @@ void GitPatch::ConvenientFromDiffWorker::Execute() { baton->error_code = result; - if (git_error_last() != NULL) { + if (git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } diff --git a/generate/templates/manual/repository/statistics.cc b/generate/templates/manual/repository/statistics.cc index 8b04cc31a..f438bb5f8 100644 --- a/generate/templates/manual/repository/statistics.cc +++ b/generate/templates/manual/repository/statistics.cc @@ -1808,7 +1808,7 @@ void GitRepository::StatisticsWorker::Execute() RepoAnalysis *repoAnalysis = static_cast(baton->out); if ((baton->error_code = repoAnalysis->Analyze()) != GIT_OK) { - if (git_error_last() != NULL) { + if (git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } diff --git a/generate/templates/manual/src/filter_registry.cc b/generate/templates/manual/src/filter_registry.cc index 3cdc89feb..21a7cfbb8 100644 --- a/generate/templates/manual/src/filter_registry.cc +++ b/generate/templates/manual/src/filter_registry.cc @@ -99,7 +99,7 @@ void GitFilterRegistry::RegisterWorker::Execute() { int result = git_filter_register(baton->filter_name, baton->filter, baton->filter_priority); baton->error_code = result; - if (result != GIT_OK && git_error_last() != NULL) { + if (result != GIT_OK && git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } } @@ -204,7 +204,7 @@ void GitFilterRegistry::UnregisterWorker::Execute() { int result = git_filter_unregister(baton->filter_name); baton->error_code = result; - if (result != GIT_OK && git_error_last() != NULL) { + if (result != GIT_OK && git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } } diff --git a/generate/templates/manual/tree/get_all_filepaths.cc b/generate/templates/manual/tree/get_all_filepaths.cc index 53334a127..758383980 100644 --- a/generate/templates/manual/tree/get_all_filepaths.cc +++ b/generate/templates/manual/tree/get_all_filepaths.cc @@ -67,7 +67,7 @@ void GitTree::GetAllFilepathsWorker::Execute() std::string buffer; buffer.reserve(4096); baton->error_code = TreeFilepathsHelpers::iterateTreePaths(baton->repo, baton->tree, baton->out, &buffer); - if (baton->error_code != GIT_OK && git_error_last() != NULL) { + if (baton->error_code != GIT_OK && git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } } diff --git a/generate/templates/partials/async_function.cc b/generate/templates/partials/async_function.cc index 1f3b1eaa3..a294043fa 100644 --- a/generate/templates/partials/async_function.cc +++ b/generate/templates/partials/async_function.cc @@ -162,14 +162,14 @@ void {{ cppClassName }}::{{ cppFunctionName }}Worker::Execute() { {% if return.isResultOrError %} baton->error_code = result; - if (result < GIT_OK && git_error_last() != NULL) { + if (result < GIT_OK && git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } {% elsif return.isErrorCode %} baton->error_code = result; - if (result != GIT_OK && git_error_last() != NULL) { + if (result != GIT_OK && git_error_last()->klass != GIT_ERROR_NONE) { baton->error = git_error_dup(git_error_last()); } diff --git a/generate/templates/partials/convert_from_v8.cc b/generate/templates/partials/convert_from_v8.cc index 8b928e7f4..f33eddd0f 100644 --- a/generate/templates/partials/convert_from_v8.cc +++ b/generate/templates/partials/convert_from_v8.cc @@ -60,11 +60,7 @@ Nan::Utf8String oidString(Nan::To(arrayVal).ToLocalChecked()); if (git_oid_fromstr(&from_{{ name }}[i], (const char *) strdup(*oidString)) != GIT_OK) { - if (git_error_last()) { - return Nan::ThrowError(git_error_last()->message); - } else { - return Nan::ThrowError("Unknown Error"); - } + return Nan::ThrowError(git_error_last()->message); } } else { @@ -94,7 +90,7 @@ if (git_oid_fromstr(oidOut, (const char *) strdup(*oidString)) != GIT_OK) { free(oidOut); - if (git_error_last()) { + if (git_error_last()->klass != GIT_ERROR_NONE) { return Nan::ThrowError(git_error_last()->message); } else { return Nan::ThrowError("Unknown Error"); diff --git a/generate/templates/partials/sync_function.cc b/generate/templates/partials/sync_function.cc index 8868bb5ca..cf6febe67 100644 --- a/generate/templates/partials/sync_function.cc +++ b/generate/templates/partials/sync_function.cc @@ -79,7 +79,7 @@ NAN_METHOD({{ cppClassName }}::{{ cppFunctionName }}) { {%endif%} {%endeach%} - if (git_error_last()) { + if (git_error_last()->klass != GIT_ERROR_NONE) { return Nan::ThrowError(git_error_last()->message); } else { return Nan::ThrowError("Unknown Error"); From 0d0622f433de2112bc31fe3f681a02d427d9a88e Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 22 May 2025 11:40:11 -0700 Subject: [PATCH 049/103] update node-gyp --- package-lock.json | 1184 ++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 737 insertions(+), 449 deletions(-) diff --git a/package-lock.json b/package-lock.json index b619fde28..9bf5dc8c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "got": "^11.8.6", "json5": "^2.1.0", "lodash": "^4.17.14", - "node-gyp": "^10.0.1", + "node-gyp": "^11.2.0", "tar-fs": "^3.0.8" }, "devDependencies": { @@ -332,6 +332,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -345,9 +346,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -359,6 +361,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -369,12 +372,14 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -391,6 +396,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -405,6 +411,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -417,6 +424,27 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@isaacs/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -527,66 +555,60 @@ } }, "node_modules/@npmcli/agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", - "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "license": "ISC", "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { "node": ">= 14" } }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -671,6 +693,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -951,11 +974,12 @@ } }, "node_modules/cacache": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", - "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -963,27 +987,38 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/cacache/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/cacache/node_modules/fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -992,19 +1027,33 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { "node": ">=16 || 14 >=14.17" }, @@ -1012,34 +1061,66 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": "14 || >=16.14" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/cacache/node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 18" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, "node_modules/cacheable-lookup": { @@ -1206,6 +1287,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } @@ -1662,7 +1744,8 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.90", @@ -1704,7 +1787,8 @@ "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT" }, "node_modules/es6-error": { "version": "4.1.1", @@ -1767,6 +1851,20 @@ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "license": "MIT" }, + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -2230,9 +2328,10 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -2242,12 +2341,10 @@ } }, "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -2306,6 +2403,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { "node": ">=8" } @@ -2339,10 +2437,24 @@ "node": ">=0.10.0" } }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" }, "node_modules/is-absolute": { "version": "1.0.0", @@ -2392,11 +2504,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - }, "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", @@ -2659,15 +2766,13 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -2745,6 +2850,12 @@ "node": ">=4" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -3106,6 +3217,12 @@ "node": ">=8" } }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3129,30 +3246,32 @@ } }, "node_modules/make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -3203,6 +3322,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -3211,41 +3331,57 @@ } }, "node_modules/minipass-collect/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, + "node_modules/minipass-fetch/node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -3257,6 +3393,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -3268,6 +3405,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -3415,9 +3553,10 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3442,121 +3581,122 @@ } }, "node_modules/node-gyp": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", - "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", + "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^4.0.0" + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/node-gyp/node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/node-gyp/node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, "engines": { - "node": ">=16" + "node": ">= 18" } }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dependencies": { - "brace-expansion": "^2.0.1" + "node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/node-gyp/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/node-gyp/node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": ">=18" + } + }, + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, "node_modules/node-preload": { @@ -3938,14 +4078,12 @@ } }, "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3977,6 +4115,12 @@ "node": ">=8" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -4010,32 +4154,26 @@ } }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/path-scurry/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -4047,6 +4185,18 @@ "dev": true, "license": "ISC" }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -4061,11 +4211,12 @@ } }, "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/process-nextick-args": { @@ -4091,6 +4242,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -4279,6 +4431,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", "engines": { "node": ">= 4" } @@ -4392,44 +4545,45 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -4489,20 +4643,22 @@ "dev": true }, "node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -4552,6 +4708,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4577,6 +4734,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4754,6 +4912,22 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", @@ -4814,25 +4988,27 @@ } }, "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "license": "ISC", "dependencies": { - "unique-slug": "^4.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/unique-stream": { @@ -5040,6 +5216,21 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", @@ -5047,6 +5238,15 @@ "dev": true, "license": "ISC" }, + "node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "engines": { + "node": ">=16" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -5085,6 +5285,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -5452,9 +5653,9 @@ }, "dependencies": { "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" }, "ansi-styles": { "version": "6.2.1", @@ -5496,6 +5697,21 @@ } } }, + "@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "requires": { + "minipass": "^7.0.4" + }, + "dependencies": { + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -5579,45 +5795,37 @@ } }, "@npmcli/agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", - "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", "requires": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "dependencies": { "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==" }, "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" } - }, - "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" } } }, "@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "requires": { "semver": "^7.3.5" } @@ -5695,6 +5903,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -5879,11 +6088,11 @@ "dev": true }, "cacache": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", - "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", "requires": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -5891,10 +6100,10 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "dependencies": { "brace-expansion": { @@ -5905,6 +6114,11 @@ "balanced-match": "^1.0.0" } }, + "chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" + }, "fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", @@ -5914,34 +6128,61 @@ } }, "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" } }, - "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" - }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "requires": { "brace-expansion": "^2.0.1" } }, "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "requires": { + "minipass": "^7.1.2" + } + }, + "mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==" + }, + "tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "requires": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + } + }, + "yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" } } }, @@ -6066,7 +6307,8 @@ "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, "cli": { "version": "1.0.1", @@ -6532,6 +6774,12 @@ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, + "fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "requires": {} + }, "find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -6885,21 +7133,18 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" }, "dependencies": { "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==" } } }, @@ -6944,7 +7189,8 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", @@ -6972,10 +7218,21 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + } + } }, "is-absolute": { "version": "1.0.0", @@ -7013,11 +7270,6 @@ "is-extglob": "^2.1.0" } }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" - }, "is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", @@ -7209,9 +7461,9 @@ } }, "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" @@ -7269,6 +7521,11 @@ } } }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -7575,6 +7832,11 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -7591,27 +7853,27 @@ } }, "make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "requires": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "ssri": "^12.0.0" }, "dependencies": { "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" } } }, @@ -7651,27 +7913,35 @@ }, "dependencies": { "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" } } }, "minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "requires": { "encoding": "^0.1.13", "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "dependencies": { "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "requires": { + "minipass": "^7.1.2" + } } } }, @@ -7812,9 +8082,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" }, "node-fetch": { "version": "2.6.7", @@ -7825,80 +8095,75 @@ } }, "node-gyp": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", - "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", + "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", "requires": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^4.0.0" + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" }, "dependencies": { "abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==" - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==" }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } + "chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" }, - "isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "requires": { - "brace-expansion": "^2.0.1" + "minipass": "^7.1.2" } }, - "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==" }, "nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "requires": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" } }, - "which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "requires": { - "isexe": "^3.1.1" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" } + }, + "yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" } } }, @@ -8193,12 +8458,9 @@ } }, "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==" }, "p-try": { "version": "2.2.0", @@ -8218,6 +8480,11 @@ "release-zalgo": "^1.0.0" } }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -8241,23 +8508,18 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "dependencies": { - "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" - }, "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" } } }, @@ -8267,6 +8529,11 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -8277,9 +8544,9 @@ } }, "proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==" }, "process-nextick-args": { "version": "2.0.1", @@ -8525,31 +8792,28 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", "requires": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "dependencies": { "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==" } } }, @@ -8595,17 +8859,17 @@ "dev": true }, "ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "requires": { "minipass": "^7.0.3" }, "dependencies": { "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" } } }, @@ -8809,6 +9073,15 @@ "xtend": "~4.0.0" } }, + "tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "requires": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + } + }, "to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", @@ -8855,17 +9128,17 @@ "dev": true }, "unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "requires": { - "unique-slug": "^4.0.0" + "unique-slug": "^5.0.0" } }, "unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", "requires": { "imurmurhash": "^0.1.4" } @@ -9039,6 +9312,21 @@ "webidl-conversions": "^3.0.0" } }, + "which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "requires": { + "isexe": "^3.1.1" + }, + "dependencies": { + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + } + } + }, "which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", diff --git a/package.json b/package.json index 24f9818b5..7abe3fa73 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "got": "^11.8.6", "json5": "^2.1.0", "lodash": "^4.17.14", - "node-gyp": "^10.0.1", + "node-gyp": "^11.2.0", "tar-fs": "^3.0.8" }, "devDependencies": { From 5ffcfba88189f4e177ba29dc0f715808b16289ba Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 22 May 2025 11:42:07 -0700 Subject: [PATCH 050/103] update linux runner, don't try to build x86 node 24 --- .github/workflows/tests.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e5e54e3e9..806614d0c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -16,7 +16,7 @@ jobs: matrix: node: [20, 22, 24] fail-fast: false - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Install Dependencies for Ubuntu run: sudo apt-get update && sudo apt-get install -y software-properties-common git build-essential clang libssl-dev libkrb5-dev libc++-dev wget zlib1g-dev @@ -37,7 +37,7 @@ jobs: - uses: actions/setup-python@v5 with: - python-version: "3.6" + python-version: "3.11" - name: Use Node.js uses: actions/setup-node@v4 @@ -124,6 +124,9 @@ jobs: matrix: node: [20, 22, 24] arch: [x86, x64] + exclude: + - node: 24 + arch: x86 fail-fast: false runs-on: windows-2019 steps: From 81daff15381a43615dcffa35cf62156f5282e436 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 22 May 2025 21:17:46 -0700 Subject: [PATCH 051/103] bump got --- package-lock.json | 1617 ++++++++++++++++++++++++++++++++------------- package.json | 2 +- 2 files changed, 1151 insertions(+), 468 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9bf5dc8c7..0b7abfc4a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@axosoft/nan": "^2.22.0-gk.1", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", - "got": "^11.8.6", + "got": "^14.4.7", "json5": "^2.1.0", "lodash": "^4.17.14", "node-gyp": "^11.2.0", @@ -55,15 +55,15 @@ "license": "MIT" }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -221,9 +221,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -231,9 +231,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -251,27 +251,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", - "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.7" + "@babel/types": "^7.27.1" }, "bin": { "parser": "bin/babel-parser.js" @@ -281,15 +281,15 @@ } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -315,14 +315,14 @@ } }, "node_modules/@babel/types": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", - "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -614,64 +614,41 @@ "node": ">=14" } }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.1.tgz", + "integrity": "sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sindresorhus/is?sponsor=1" } }, "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", "dependencies": { - "defer-to-connect": "^2.0.0" + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" + "node": ">=14.16" } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dependencies": { - "@types/node": "*" - } + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" }, "node_modules/abbrev": { "version": "1.0.9", @@ -782,11 +759,29 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sdk": { - "version": "2.1096.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1096.0.tgz", - "integrity": "sha512-q+hotU57U8bGpz1pf5CkO4z630ay0xGJ9HedahKPZ0Xk3/X0GH+QFYPBWJ5IMTtO30bjfPH0zTaL2vJmMXLBrQ==", + "version": "2.1692.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz", + "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -795,8 +790,9 @@ "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" }, "engines": { "node": ">= 10.0.0" @@ -1124,28 +1120,42 @@ } }, "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", "engines": { - "node": ">=10.6.0" + "node": ">=14.16" } }, "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-12.0.1.tgz", + "integrity": "sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==", + "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "@types/http-cache-semantics": "^4.0.4", + "get-stream": "^9.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.4", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.1", + "responselike": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + } + }, + "node_modules/cacheable-request/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/caching-transform": { @@ -1165,13 +1175,50 @@ } }, "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1401,22 +1448,6 @@ "node": ">= 0.10" } }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", @@ -1507,7 +1538,8 @@ "version": "2.15.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commondir": { "version": "1.0.1", @@ -1567,9 +1599,10 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1600,11 +1633,12 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1658,10 +1692,29 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", "engines": { "node": ">=10" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1695,10 +1748,26 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -1790,6 +1859,39 @@ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "license": "MIT" }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -1810,8 +1912,9 @@ "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -1937,6 +2040,22 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/foreachasync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", @@ -1970,6 +2089,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data-encoder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -2034,10 +2162,14 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gauge": { "version": "3.0.2", @@ -2078,14 +2210,25 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2101,15 +2244,43 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", "dependencies": { - "pump": "^3.0.0" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2222,30 +2393,56 @@ "node": ">=4" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", + "version": "14.4.7", + "resolved": "https://registry.npmjs.org/got/-/got-14.4.7.tgz", + "integrity": "sha512-DI8zV1231tqiGzOiOzQWDhsBmncFW7oQDH6Zgy6pDPrqJuVZMtoSgPLLsBZQj8Jg4JFfwoOsDA8NGtLQLnIx2g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^7.0.1", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^12.0.1", "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "form-data-encoder": "^4.0.2", + "http2-wrapper": "^2.2.1", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^4.0.1", + "responselike": "^3.0.0", + "type-fest": "^4.26.1" }, "engines": { - "node": ">=10.19.0" + "node": ">=20" }, "funding": { "url": "https://github.com/sindresorhus/got?sponsor=1" } }, + "node_modules/got/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", @@ -2256,27 +2453,56 @@ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.x" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">= 0.4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -2306,11 +2532,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -2350,12 +2590,13 @@ } }, "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "resolve-alpn": "^1.2.0" }, "engines": { "node": ">=10.19.0" @@ -2469,12 +2710,42 @@ "node": ">=0.10.0" } }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2492,6 +2763,25 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", @@ -2513,6 +2803,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -2538,6 +2847,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2687,16 +3012,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -3001,7 +3316,8 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -3029,9 +3345,10 @@ } }, "node_modules/keyv": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.1.1.tgz", - "integrity": "sha512-tGv1yP6snQVDSM4X6yxrv2zzq/EvpW+oYiUz6aueW1u9CtS8RzUQYxxmFwgZlO2jSgCxQbchhxaqXXp2hnKGpQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -3210,11 +3527,15 @@ "license": "MIT" }, "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lru-cache": { @@ -3238,9 +3559,10 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3276,6 +3598,16 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -3442,6 +3774,7 @@ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, + "license": "MIT", "dependencies": { "browser-stdout": "1.3.1", "commander": "2.15.1", @@ -3468,6 +3801,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3476,7 +3810,9 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3489,20 +3825,12 @@ "node": "*" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3514,7 +3842,8 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/mkdirp": { "version": "0.5.1", @@ -3522,6 +3851,7 @@ "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, + "license": "MIT", "dependencies": { "minimist": "0.0.8" }, @@ -3532,25 +3862,15 @@ "node_modules/mocha/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/negotiator": { "version": "1.0.0", @@ -3746,11 +4066,12 @@ } }, "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4041,11 +4362,12 @@ } }, "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.16" } }, "node_modules/p-limit": { @@ -4210,6 +4532,16 @@ "node": ">=8" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/proc-log": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", @@ -4301,6 +4633,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -4395,7 +4728,8 @@ "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" }, "node_modules/resolve-from": { "version": "5.0.0", @@ -4420,11 +4754,18 @@ } }, "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", "dependencies": { - "lowercase-keys": "^2.0.0" + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/retry": { @@ -4488,6 +4829,24 @@ } ] }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -4497,8 +4856,9 @@ "node_modules/sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "dev": true, + "license": "ISC" }, "node_modules/semver": { "version": "7.7.0", @@ -4517,6 +4877,24 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4761,23 +5139,47 @@ "strip-json-comments": "cli.js" }, "engines": { - "node": ">=0.8.0" + "node": ">=0.8.0" + } + }, + "node_modules/supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, "node_modules/tar-fs": { @@ -4805,6 +5207,15 @@ "streamx": "^2.15.0" } }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -5076,19 +5487,33 @@ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", "dev": true, + "license": "MIT", "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, "node_modules/value-or-function": { @@ -5238,6 +5663,28 @@ "dev": true, "license": "ISC" }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -5364,20 +5811,25 @@ } }, "node_modules/xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dev": true, + "license": "MIT", "dependencies": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, "node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0" } @@ -5443,14 +5895,14 @@ "integrity": "sha512-C4xrZ5HQoWwoq/WZnKDhf/Jd/czIaa0gsjHV792qUp7b7H+4Xtw1Um10BiiU/zrgmGhQuA92dedU2/rGvKErNg==" }, "@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" } }, "@babel/compat-data": { @@ -5567,15 +6019,15 @@ } }, "@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true }, "@babel/helper-validator-option": { @@ -5585,33 +6037,33 @@ "dev": true }, "@babel/helpers": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", - "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, "requires": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@babel/parser": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", - "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, "requires": { - "@babel/types": "^7.26.7" + "@babel/types": "^7.27.1" } }, "@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "requires": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" } }, "@babel/traverse": { @@ -5630,13 +6082,13 @@ } }, "@babel/types": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", - "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" } }, "@isaacs/cliui": { @@ -5836,55 +6288,28 @@ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "optional": true }, + "@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==" + }, "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.1.tgz", + "integrity": "sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==" }, "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" + "defer-to-connect": "^2.0.1" } }, "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "17.0.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", - "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "requires": { - "@types/node": "*" - } + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, "abbrev": { "version": "1.0.9", @@ -5969,10 +6394,19 @@ "sprintf-js": "~1.0.2" } }, + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, "aws-sdk": { - "version": "2.1096.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1096.0.tgz", - "integrity": "sha512-q+hotU57U8bGpz1pf5CkO4z630ay0xGJ9HedahKPZ0Xk3/X0GH+QFYPBWJ5IMTtO30bjfPH0zTaL2vJmMXLBrQ==", + "version": "2.1692.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz", + "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", "dev": true, "requires": { "buffer": "4.9.2", @@ -5982,8 +6416,9 @@ "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" } }, "b4a": { @@ -6187,22 +6622,29 @@ } }, "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==" }, "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-12.0.1.tgz", + "integrity": "sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==", "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "@types/http-cache-semantics": "^4.0.4", + "get-stream": "^9.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.4", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.1", + "responselike": "^3.0.0" + }, + "dependencies": { + "mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==" + } } }, "caching-transform": { @@ -6218,13 +6660,35 @@ } }, "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" } }, "camelcase": { @@ -6396,21 +6860,6 @@ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", "dev": true }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } - } - }, "clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", @@ -6555,9 +7004,9 @@ "dev": true }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6581,11 +7030,11 @@ "dev": true }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "decamelize": { @@ -6616,6 +7065,17 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -6641,6 +7101,17 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -6728,6 +7199,27 @@ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -6743,7 +7235,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "events": { @@ -6843,6 +7335,15 @@ } } }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "requires": { + "is-callable": "^1.2.7" + } + }, "foreachasync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", @@ -6865,6 +7366,11 @@ } } }, + "form-data-encoder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==" + }, "fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -6905,9 +7411,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "gauge": { @@ -6939,14 +7445,21 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" } }, "get-package-type": { @@ -6955,12 +7468,30 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "requires": { - "pump": "^3.0.0" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "dependencies": { + "is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==" + } } }, "glob": { @@ -7056,22 +7587,35 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true + }, "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", + "version": "14.4.7", + "resolved": "https://registry.npmjs.org/got/-/got-14.4.7.tgz", + "integrity": "sha512-DI8zV1231tqiGzOiOzQWDhsBmncFW7oQDH6Zgy6pDPrqJuVZMtoSgPLLsBZQj8Jg4JFfwoOsDA8NGtLQLnIx2g==", + "requires": { + "@sindresorhus/is": "^7.0.1", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^12.0.1", "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "form-data-encoder": "^4.0.2", + "http2-wrapper": "^2.2.1", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^4.0.1", + "responselike": "^3.0.0", + "type-fest": "^4.26.1" + }, + "dependencies": { + "type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==" + } } }, "graceful-fs": { @@ -7085,21 +7629,36 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "es-define-property": "^1.0.0" } }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -7115,10 +7674,19 @@ "type-fest": "^0.8.0" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==", "dev": true }, "html-escaper": { @@ -7149,12 +7717,12 @@ } }, "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "requires": { "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "resolve-alpn": "^1.2.0" } }, "https-proxy-agent": { @@ -7244,12 +7812,28 @@ "is-windows": "^1.0.1" } }, + "is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -7261,6 +7845,18 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + } + }, "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", @@ -7276,6 +7872,18 @@ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", "dev": true }, + "is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -7291,6 +7899,15 @@ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.16" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -7405,12 +8022,6 @@ "supports-color": "^7.1.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -7675,9 +8286,9 @@ } }, "keyv": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.1.1.tgz", - "integrity": "sha512-tGv1yP6snQVDSM4X6yxrv2zzq/EvpW+oYiUz6aueW1u9CtS8RzUQYxxmFwgZlO2jSgCxQbchhxaqXXp2hnKGpQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "requires": { "json-buffer": "3.0.1" } @@ -7828,9 +8439,9 @@ "dev": true }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" }, "lru-cache": { "version": "10.4.3", @@ -7846,9 +8457,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -7877,6 +8488,12 @@ } } }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -8029,12 +8646,6 @@ "path-is-absolute": "^1.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -8062,24 +8673,15 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "negotiator": { "version": "1.0.0", @@ -8200,9 +8802,9 @@ } }, "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==" }, "now-and-later": { "version": "2.0.1", @@ -8435,9 +9037,9 @@ } }, "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==" }, "p-limit": { "version": "2.3.0", @@ -8543,6 +9145,12 @@ "find-up": "^4.0.0" } }, + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true + }, "proc-log": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", @@ -8706,11 +9314,11 @@ } }, "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "requires": { - "lowercase-keys": "^2.0.0" + "lowercase-keys": "^3.0.0" } }, "retry": { @@ -8746,6 +9354,17 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -8755,7 +9374,7 @@ "sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", "dev": true }, "semver": { @@ -8768,6 +9387,20 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -8945,19 +9578,41 @@ "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", "dev": true }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + } + } + }, "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -9186,15 +9841,28 @@ } } }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", "dev": true }, "value-or-function": { @@ -9333,6 +10001,21 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, + "which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + } + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -9422,19 +10105,19 @@ } }, "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dev": true, "requires": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "xmlbuilder": "~11.0.0" } }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, "xtend": { diff --git a/package.json b/package.json index 7abe3fa73..7391610fc 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@axosoft/nan": "^2.22.0-gk.1", "@mapbox/node-pre-gyp": "^1.0.8", "fs-extra": "^7.0.0", - "got": "^11.8.6", + "got": "^14.4.7", "json5": "^2.1.0", "lodash": "^4.17.14", "node-gyp": "^11.2.0", From 1ad275d016675110559a4f5e77b71a5bf80b3240 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 22 May 2025 21:18:06 -0700 Subject: [PATCH 052/103] bump mocha --- package-lock.json | 928 +++++++++++++++++++++++++++++++++++++--------- package.json | 2 +- 2 files changed, 746 insertions(+), 184 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b7abfc4a..510d0fb90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "js-beautify": "~1.5.10", "jshint": "^2.10.0", "lcov-result-merger": "^3.1.0", - "mocha": "^5.2.0", + "mocha": "^11.4.0", "nyc": "^17.1.0", "walk": "^2.3.9" }, @@ -1254,6 +1254,52 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -1534,13 +1580,6 @@ "integrity": "sha1-WJ3kcEXVcVbcHs4YXWTDidzLR9g=", "dev": true }, - "node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true, - "license": "MIT" - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -1744,9 +1783,9 @@ } }, "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -1910,13 +1949,16 @@ } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/events": { @@ -2000,6 +2042,16 @@ "node": ">=8" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", @@ -2448,16 +2500,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.x" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2546,9 +2588,9 @@ } }, "node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -2803,6 +2845,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -2881,6 +2933,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -3526,6 +3591,23 @@ "dev": true, "license": "MIT" }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -3770,101 +3852,280 @@ } }, "node_modules/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.4.0.tgz", + "integrity": "sha512-O6oi5Y9G6uu8f9iqXR6iKNLWHLRex3PKbmHynfpmUnMJJGrdgXh8ZmS85Ei5KR2Gnl+/gQ9s+Ktv5CqKybNw4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 4.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/mocha/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/mocha/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "node_modules/mocha/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "node_modules/mocha/node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "minimist": "0.0.8" + "yocto-queue": "^0.1.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } }, "node_modules/ms": { "version": "2.1.3", @@ -4641,6 +4902,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -4654,6 +4925,20 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -4872,6 +5157,16 @@ "node": ">=10" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -5143,26 +5438,19 @@ } }, "node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/tar": { @@ -5714,6 +6002,13 @@ "node": ">= 0.10.0" } }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -5876,6 +6171,61 @@ "engines": { "node": ">=10" } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -6703,6 +7053,36 @@ "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", "dev": true }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", @@ -6939,12 +7319,6 @@ "integrity": "sha1-WJ3kcEXVcVbcHs4YXWTDidzLR9g=", "dev": true }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -7096,9 +7470,9 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true }, "dunder-proto": { @@ -7233,9 +7607,9 @@ "dev": true }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "events": { @@ -7293,6 +7667,12 @@ "path-exists": "^4.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", @@ -7623,12 +8003,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -7684,9 +8058,9 @@ } }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "html-escaper": { @@ -7872,6 +8246,12 @@ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", "dev": true }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -7923,6 +8303,12 @@ "unc-path-regex": "^0.1.2" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -8438,6 +8824,16 @@ "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, "lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -8605,75 +9001,187 @@ } }, "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.4.0.tgz", + "integrity": "sha512-O6oi5Y9G6uu8f9iqXR6iKNLWHLRex3PKbmHynfpmUnMJJGrdgXh8ZmS85Ei5KR2Gnl+/gQ9s+Ktv5CqKybNw4A==", + "dev": true, + "requires": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "ms": "2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "dependencies": { + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "minimist": "0.0.8" + "yocto-queue": "^0.1.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true } } @@ -9229,6 +9737,15 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -9239,6 +9756,12 @@ "util-deprecate": "^1.0.1" } }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true + }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -9382,6 +9905,15 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==" }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -9579,20 +10111,12 @@ "dev": true }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - } + "has-flag": "^4.0.0" } }, "tar": { @@ -10030,6 +10554,12 @@ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", "dev": true }, + "workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -10156,6 +10686,38 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + } + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 7391610fc..acd56f33b 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "js-beautify": "~1.5.10", "jshint": "^2.10.0", "lcov-result-merger": "^3.1.0", - "mocha": "^5.2.0", + "mocha": "^11.4.0", "nyc": "^17.1.0", "walk": "^2.3.9" }, From 2a1fb8882e7ed10964541a3c61c6dc7182c780b4 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 22 May 2025 21:24:48 -0700 Subject: [PATCH 053/103] bump node-pre-gyp --- package-lock.json | 922 ++++++++++++---------------------------------- package.json | 2 +- 2 files changed, 229 insertions(+), 695 deletions(-) diff --git a/package-lock.json b/package-lock.json index 510d0fb90..39c9bf6cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "MIT", "dependencies": { "@axosoft/nan": "^2.22.0-gk.1", - "@mapbox/node-pre-gyp": "^1.0.8", + "@mapbox/node-pre-gyp": "^2.0.0", "fs-extra": "^7.0.0", "got": "^14.4.7", "json5": "^2.1.0", @@ -536,22 +536,24 @@ } }, "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", - "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", - "dependencies": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.5", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" } }, "node_modules/@npmcli/agent": { @@ -570,28 +572,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/@npmcli/fs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", @@ -653,17 +633,16 @@ "node_modules/abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/aggregate-error": { @@ -726,11 +705,6 @@ "node": ">=8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", @@ -738,18 +712,6 @@ "dev": true, "license": "MIT" }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -905,6 +867,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1001,15 +964,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, "node_modules/cacache/node_modules/fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", @@ -1066,59 +1020,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/cacache/node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -1301,11 +1202,12 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/clean-for-publish": { @@ -1566,14 +1468,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/combyne": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/combyne/-/combyne-0.8.1.tgz", @@ -1590,7 +1484,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/config-chain": { "version": "1.1.13", @@ -1602,6 +1497,15 @@ "proto-list": "~1.2.1" } }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -1611,11 +1515,6 @@ "date-now": "^0.1.4" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -1766,20 +1665,13 @@ "node": ">= 0.4" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", "engines": { - "node": ">=0.10" + "node": ">=8" } }, "node_modules/diff": { @@ -2184,17 +2076,6 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -2211,7 +2092,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/function-bind": { "version": "1.1.2", @@ -2223,25 +2105,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -2552,11 +2415,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -2622,15 +2480,6 @@ "node": ">= 14" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, "node_modules/http2-wrapper": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", @@ -2645,15 +2494,16 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/iconv-lite": { @@ -2695,6 +2545,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2703,7 +2554,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", @@ -3630,6 +3482,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -3644,6 +3497,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3705,6 +3559,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3779,18 +3634,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/minipass-fetch/node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", @@ -3828,15 +3671,24 @@ } }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">= 8" + "node": ">= 18" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/mkdirp": { @@ -4185,101 +4037,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/node-gyp/node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/node-gyp/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/node-gyp/node_modules/minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", - "license": "ISC", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -4301,17 +4058,27 @@ "license": "MIT" }, "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", "dependencies": { - "abbrev": "1" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nopt/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/normalize-path": { @@ -4350,17 +4117,6 @@ "node": ">= 0.10" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -4528,14 +4284,6 @@ "node": ">=6" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -4724,6 +4472,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4912,19 +4661,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -5066,6 +4802,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -5080,6 +4817,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5099,6 +4837,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -5170,7 +4909,8 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "node_modules/set-function-length": { "version": "1.2.2", @@ -5212,7 +4952,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/smart-buffer": { "version": "4.2.0", @@ -5252,15 +4993,6 @@ "node": ">= 14" } }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, "node_modules/spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -5355,14 +5087,6 @@ "bare-events": "^2.2.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -5454,20 +5178,20 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/tar-fs": { @@ -5496,23 +5220,36 @@ } }, "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", "bin": { - "mkdirp": "bin/cmd.js" + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, "node_modules/test-exclude": { @@ -5792,7 +5529,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "node_modules/uuid": { "version": "8.0.0", @@ -5982,14 +5720,6 @@ "node": ">=16" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/window-size": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", @@ -6581,19 +6311,17 @@ } }, "@mapbox/node-pre-gyp": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", - "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", - "requires": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.5", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", + "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", + "requires": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" } }, "@npmcli/agent": { @@ -6606,22 +6334,6 @@ "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", "socks-proxy-agent": "^8.0.3" - }, - "dependencies": { - "agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==" - }, - "https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "requires": { - "agent-base": "^7.1.2", - "debug": "4" - } - } } }, "@npmcli/fs": { @@ -6664,15 +6376,13 @@ "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true }, "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==" }, "aggregate-error": { "version": "3.1.0", @@ -6715,26 +6425,12 @@ "default-require-extensions": "^3.0.0" } }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -6832,6 +6528,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6899,11 +6596,6 @@ "balanced-match": "^1.0.0" } }, - "chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" - }, "fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", @@ -6937,37 +6629,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" - }, - "minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "requires": { - "minipass": "^7.1.2" - } - }, - "mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==" - }, - "tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "requires": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - } - }, - "yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" } } }, @@ -7084,9 +6745,9 @@ } }, "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" }, "clean-for-publish": { "version": "1.0.4", @@ -7308,11 +6969,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, "combyne": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/combyne/-/combyne-0.8.1.tgz", @@ -7328,7 +6984,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "config-chain": { "version": "1.1.13", @@ -7340,6 +6997,11 @@ "proto-list": "~1.2.1" } }, + "consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==" + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -7349,11 +7011,6 @@ "date-now": "^0.1.4" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -7459,15 +7116,10 @@ "object-keys": "^1.0.12" } }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==" }, "diff": { "version": "7.0.0", @@ -7767,14 +7419,6 @@ "universalify": "^0.1.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -7788,7 +7432,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "function-bind": { "version": "1.1.2", @@ -7796,22 +7441,6 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -8033,11 +7662,6 @@ "has-symbols": "^1.0.3" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -8081,13 +7705,6 @@ "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" - }, - "dependencies": { - "agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==" - } } }, "http2-wrapper": { @@ -8100,11 +7717,11 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "requires": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" } }, @@ -8138,6 +7755,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -8146,7 +7764,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", @@ -8848,6 +8467,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "requires": { "semver": "^6.0.0" }, @@ -8855,7 +8475,8 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true } } }, @@ -8899,6 +8520,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -8947,14 +8569,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" - }, - "minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "requires": { - "minipass": "^7.1.2" - } } } }, @@ -8983,12 +8597,18 @@ } }, "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "minipass": "^7.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } } }, "mkdirp": { @@ -9219,62 +8839,6 @@ "tar": "^7.4.3", "tinyglobby": "^0.2.12", "which": "^5.0.0" - }, - "dependencies": { - "abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==" - }, - "chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" - }, - "minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" - }, - "minizlib": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", - "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", - "requires": { - "minipass": "^7.1.2" - } - }, - "mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==" - }, - "nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", - "requires": { - "abbrev": "^3.0.0" - } - }, - "tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "requires": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - } - }, - "yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" - } } }, "node-preload": { @@ -9293,11 +8857,18 @@ "dev": true }, "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "requires": { - "abbrev": "1" + "abbrev": "^3.0.0" + }, + "dependencies": { + "abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==" + } } }, "normalize-path": { @@ -9323,17 +8894,6 @@ "once": "^1.3.2" } }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -9463,11 +9023,6 @@ } } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -9610,7 +9165,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", @@ -9746,16 +9302,6 @@ "safe-buffer": "^5.1.0" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", @@ -9853,6 +9399,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" }, @@ -9861,6 +9408,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9875,7 +9423,8 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true }, "safe-regex-test": { "version": "1.1.0", @@ -9917,7 +9466,8 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-function-length": { "version": "1.2.2", @@ -9949,7 +9499,8 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "smart-buffer": { "version": "4.2.0", @@ -9973,13 +9524,6 @@ "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" - }, - "dependencies": { - "agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==" - } } }, "spawn-wrap": { @@ -10054,14 +9598,6 @@ "text-decoder": "^1.1.0" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -10120,27 +9656,32 @@ } }, "tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "requires": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "dependencies": { "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" }, "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==" + }, + "yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" } } }, @@ -10381,7 +9922,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "uuid": { "version": "8.0.0", @@ -10540,14 +10082,6 @@ "has-tostringtag": "^1.0.2" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "window-size": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", diff --git a/package.json b/package.json index acd56f33b..54e40fcc9 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ }, "dependencies": { "@axosoft/nan": "^2.22.0-gk.1", - "@mapbox/node-pre-gyp": "^1.0.8", + "@mapbox/node-pre-gyp": "^2.0.0", "fs-extra": "^7.0.0", "got": "^14.4.7", "json5": "^2.1.0", From 7ffbed53f74a161ef9c98c13f91ee40a054d0399 Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 23 May 2025 08:58:47 -0700 Subject: [PATCH 054/103] esm-ify acquireOpenSSL --- generate/templates/templates/binding.gyp | 2 +- .../{acquireOpenSSL.js => acquireOpenSSL.mjs} | 63 +++++++++---------- 2 files changed, 30 insertions(+), 35 deletions(-) rename utils/{acquireOpenSSL.js => acquireOpenSSL.mjs} (90%) diff --git a/generate/templates/templates/binding.gyp b/generate/templates/templates/binding.gyp index 0f9f49835..23accc310 100644 --- a/generate/templates/templates/binding.gyp +++ b/generate/templates/templates/binding.gyp @@ -22,7 +22,7 @@ ["<(is_electron) == 1 and (digest) => { // currently this only needs to be done on linux const applyOpenSSLPatches = async (buildCwd, operatingSystem) => { try { - for (const patchFilename of await fse.readdir(opensslPatchPath)) { + for (const patchFilename of await fs.readdir(opensslPatchPath)) { const patchTarget = patchFilename.split("-")[1]; if (patchFilename.split(".").pop() === "patch" && (patchTarget === operatingSystem || patchTarget === "all")) { console.log(`applying ${patchFilename}`); @@ -78,7 +76,7 @@ const buildDarwin = async (buildCwd, macOsDeploymentTarget) => { throw new Error("Expected macOsDeploymentTarget to be specified"); } - const arguments = [ + const configureArgs = [ process.arch === "x64" ? "darwin64-x86_64-cc" : "darwin64-arm64-cc", // speed up ecdh on little-endian platforms with 128bit int support "enable-ec_nistp_64_gcc_128", @@ -95,7 +93,7 @@ const buildDarwin = async (buildCwd, macOsDeploymentTarget) => { `-mmacosx-version-min=${macOsDeploymentTarget}` ]; - await execPromise(`./Configure ${arguments.join(" ")}`, { + await execPromise(`./Configure ${configureArgs.join(" ")}`, { cwd: buildCwd }, { pipeOutput: true }); @@ -117,7 +115,7 @@ const buildDarwin = async (buildCwd, macOsDeploymentTarget) => { }; const buildLinux = async (buildCwd) => { - const arguments = [ + const configureArgs = [ "linux-x86_64", // Electron(at least on centos7) imports the libcups library at runtime, which has a // dependency on the system libssl/libcrypto which causes symbol conflicts and segfaults. @@ -134,7 +132,7 @@ const buildLinux = async (buildCwd) => { `--prefix="${extractPath}"`, `--openssldir="${extractPath}"` ]; - await execPromise(`./Configure ${arguments.join(" ")}`, { + await execPromise(`./Configure ${configureArgs.join(" ")}`, { cwd: buildCwd }, { pipeOutput: true }); @@ -217,7 +215,7 @@ const removeOpenSSLIfOudated = async (openSSLVersion) => { } console.log("Removing outdated OpenSSL at: ", extractPath); - await fse.remove(extractPath); + await fs.rm(extractPath, { recursive: true, force: true }); console.log("Outdated OpenSSL removed."); } catch (err) { console.log("Remove outdated OpenSSL failed: ", err); @@ -361,14 +359,14 @@ const buildPackage = async () => { return path.extname(name) === ".pc" || path.basename(name) === "pkgconfig"; }, - dmode: 0755, - fmode: 0644 + dmode: 0o0755, + fmode: 0o0644 }), zlib.createGzip(), new HashVerify("sha256", (digest) => { resolve(digest); }), - fsNonPromise.createWriteStream(getOpenSSLPackageName()) + createWriteStream(getOpenSSLPackageName()) ); const digest = await promise; await fs.writeFile(`${getOpenSSLPackageName()}.sha256`, digest); @@ -422,15 +420,12 @@ const acquireOpenSSL = async () => { } }; -module.exports = { - acquireOpenSSL, - getOpenSSLPackageName, - OPENSSL_VERSION -}; - -if (require.main === module) { - acquireOpenSSL().catch((error) => { +if (process.argv[1] === import.meta.filename) { + try { + await acquireOpenSSL(); + } + catch(error) { console.error("Acquire OpenSSL failed: ", error); process.exit(1); - }); + }; } From 523b698e03f7be461d35b0bdacb09efe70770a0f Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 23 May 2025 09:22:52 -0700 Subject: [PATCH 055/103] fix dependency graph fix dependency graph --- generate/templates/templates/binding.gyp | 32 -------------------- vendor/libgit2.gyp | 5 ++-- vendor/libssh2.gyp | 38 ++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 34 deletions(-) create mode 100644 vendor/libssh2.gyp diff --git a/generate/templates/templates/binding.gyp b/generate/templates/templates/binding.gyp index 23accc310..61cad0cb5 100644 --- a/generate/templates/templates/binding.gyp +++ b/generate/templates/templates/binding.gyp @@ -15,41 +15,9 @@ }, "targets": [ - { - "target_name": "acquireOpenSSL", - "type": "none", - "conditions": [ - ["<(is_electron) == 1 and Date: Tue, 27 May 2025 10:30:12 -0700 Subject: [PATCH 056/103] bump to v0.28.0-alpha.31 --- CHANGELOG.md | 22 ++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af39f9095..4a7ad1d86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Change Log +## v0.28.0-alpha.31 [(2025-05-27)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.31) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.30...v0.28.0-alpha.31) + +#### Summary of Changes +- bump libgit2 from v1.7.2 to v1.8.4 +- update several npm dependencies for deprecations and vulnerabilities + +#### Merged PRs into NodeGit +- [Dependency/Process Updates](https://github.com/nodegit/nodegit/pull/2019) +- [Bump libgit2 to 1.8.4, CI Updates](https://github.com/nodegit/nodegit/pull/2018) + +## v0.28.0-alpha.30 [(2025-02-13)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.30) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.29...v0.28.0-alpha.30) + +#### Summary of Changes +- Fix windows build + +#### Merged PRs into NodeGit +- [define NOMINMAX on windows](https://github.com/nodegit/nodegit/pull/2016) + ## v0.28.0-alpha.29 [(2025-02-11)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.29) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.28...v0.28.0-alpha.29) diff --git a/package-lock.json b/package-lock.json index 39c9bf6cc..88ca39784 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.30", + "version": "0.28.0-alpha.31", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.30", + "version": "0.28.0-alpha.31", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 54e40fcc9..f41fd06bb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.30", + "version": "0.28.0-alpha.31", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From 70a33c483dec44b38613f909d65a98597076fdfc Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 28 May 2025 08:46:39 -0700 Subject: [PATCH 057/103] fix electron dependencies again --- vendor/libgit2.gyp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index c2deffca9..36dc305e5 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -242,13 +242,15 @@ ["OS=='mac' or OS=='linux' or OS.endswith('bsd') or <(is_IBMi) == 1", { "conditions": [ ["<(is_electron) == 1 and <(electron_openssl_static) == 1", { + "dependencies": [ + "./libssh2.gyp:acquireOpenSSL", + ], "include_dirs": [ "<(electron_openssl_root)/include" ] }] ], "dependencies": [ - "./libssh2.gyp:acquireOpenSSL", "ntlmclient" ], "include_dirs": [ @@ -299,6 +301,9 @@ ], "conditions": [ ["<(is_electron) == 1", { + "dependencies": [ + "./libssh2.gyp:acquireOpenSSL", + ], "include_dirs": [ "<(electron_openssl_root)/include" ] From 0ac2964e9af791d59c5f4c2f72e89930555c8910 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 28 May 2025 13:03:47 -0700 Subject: [PATCH 058/103] bump to v0.28.0-alpha.32 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a7ad1d86..cc2936029 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## v0.28.0-alpha.32 [(2025-05-28)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.32) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.31...v0.28.0-alpha.32) + +#### Summary of Changes + - fix windows build on electron + +#### Merged PRs into NodeGit +- [fix electron dependencies again](https://github.com/nodegit/nodegit/pull/2020) + ## v0.28.0-alpha.31 [(2025-05-27)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.31) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.30...v0.28.0-alpha.31) diff --git a/package-lock.json b/package-lock.json index 88ca39784..0f666729a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.31", + "version": "0.28.0-alpha.32", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.31", + "version": "0.28.0-alpha.32", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index f41fd06bb..f592e17fb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.31", + "version": "0.28.0-alpha.32", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From 7b34e820a95705cc7abc92769bb014a5b33b663e Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 3 Jun 2025 10:57:16 -0700 Subject: [PATCH 059/103] fix non-standard import assertion --- utils/acquireOpenSSL.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index 9a8c66254..1d83f540b 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -12,7 +12,7 @@ import { promisify } from "util"; const pipeline = promisify(stream.pipeline); -import packageJson from '../package.json' assert { type: "json" }; +import packageJson from '../package.json' with { type: "json" }; const OPENSSL_VERSION = "1.1.1t"; const win32BatPath = path.join(import.meta.dirname, "build-openssl.bat"); From f200f22a13c34272b614afa6a64f6c38d375aeb3 Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 3 Jun 2025 10:57:39 -0700 Subject: [PATCH 060/103] bump tar-fs to address vulnerability --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0f666729a..4543c3720 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "json5": "^2.1.0", "lodash": "^4.17.14", "node-gyp": "^11.2.0", - "tar-fs": "^3.0.8" + "tar-fs": "^3.0.9" }, "devDependencies": { "aws-sdk": "^2.1095.0", @@ -5195,9 +5195,9 @@ } }, "node_modules/tar-fs": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", - "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", + "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", "license": "MIT", "dependencies": { "pump": "^3.0.0", @@ -9686,9 +9686,9 @@ } }, "tar-fs": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", - "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", + "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", "requires": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0", diff --git a/package.json b/package.json index f592e17fb..e6f32a5e4 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "json5": "^2.1.0", "lodash": "^4.17.14", "node-gyp": "^11.2.0", - "tar-fs": "^3.0.8" + "tar-fs": "^3.0.9" }, "devDependencies": { "aws-sdk": "^2.1095.0", From 3914838700dfb9051abb5144721b6585d18e8583 Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 3 Jun 2025 11:04:17 -0700 Subject: [PATCH 061/103] update windows runner --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 806614d0c..3a2f8cc7a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -128,7 +128,7 @@ jobs: - node: 24 arch: x86 fail-fast: false - runs-on: windows-2019 + runs-on: windows-2022 steps: - name: Setup Environment run: | From 6d3d13b0b49af9645cdd5b114ee7479285fdb833 Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 3 Jun 2025 13:24:45 -0700 Subject: [PATCH 062/103] bump to 0.28.0-alpha.33 --- CHANGELOG.md | 11 +++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc2936029..6144c3cf3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change Log +## v0.28.0-alpha.33 [(2025-06-03)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.33) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.32...v0.28.0-alpha.33) + +#### Summary of Changes + - fix non-standard import assertion + - update tar-fs + +#### Merged PRs into NodeGit +- [Fix Invalid Import Assertion, Bump tar-fs](https://github.com/nodegit/nodegit/pull/2022) + ## v0.28.0-alpha.32 [(2025-05-28)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.32) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.31...v0.28.0-alpha.32) diff --git a/package-lock.json b/package-lock.json index 4543c3720..3252303b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.32", + "version": "0.28.0-alpha.33", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.32", + "version": "0.28.0-alpha.33", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index e6f32a5e4..9aee7445e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.32", + "version": "0.28.0-alpha.33", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From 51650c7b4b7d65b35c80d4c62ead63072c54fbcc Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 23 Jul 2025 09:28:20 -0700 Subject: [PATCH 063/103] bump to 0.28.0-alpha.34 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6144c3cf3..12d3a9dce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## v0.28.0-alpha.34 [(2025-06-03)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.34) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.33...v0.28.0-alpha.34) + +#### Summary of Changes + - Empty release to fix downstream issues + +#### Merged PRs into NodeGit +- None + ## v0.28.0-alpha.33 [(2025-06-03)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.33) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.32...v0.28.0-alpha.33) diff --git a/package-lock.json b/package-lock.json index 3252303b3..25edeaf61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.33", + "version": "0.28.0-alpha.34", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.33", + "version": "0.28.0-alpha.34", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 9aee7445e..e8bcaa4f2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.33", + "version": "0.28.0-alpha.34", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From 8b09425f00b7401e8df4fe457710161fdc2e655d Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 16 Oct 2025 10:10:09 -0700 Subject: [PATCH 064/103] add workflow for building openssl packages --- .github/workflows/build-openssl-packages.yml | 40 ++++++++++++++++++++ package.json | 1 + utils/uploadOpenSSL.mjs | 29 ++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 .github/workflows/build-openssl-packages.yml create mode 100644 utils/uploadOpenSSL.mjs diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml new file mode 100644 index 000000000..f9b8ab7b0 --- /dev/null +++ b/.github/workflows/build-openssl-packages.yml @@ -0,0 +1,40 @@ +name: Build and Publish OpenSSL Packages + +on: + workflow_dispatch: + push: + branches: + - master + +jobs: + build-openssl: + name: Build OpenSSL package for (${{ matrix.os }} ${{ matrix.arch }}) + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-13, windows-2022] + arch: [x64, arm64] + fail-fast: false + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + architecture: ${{ matrix.arch }} + + - name: Install dependencies + run: npm install + + - name: Build OpenSSL packages + run: node utils/acquireOpenSSL.js + + - name: Push OpenSSL package to S3 + env: + node_pre_gyp_bucket: ${{ secrets.node_pre_gyp_bucket }} + AWS_ACCESS_KEY_ID: ${{ secrets.node_pre_gyp_accessKeyId }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.node_pre_gyp_secretAccessKey }} + run: node utils/uploadOpenSSL.js \ No newline at end of file diff --git a/package.json b/package.json index e8bcaa4f2..fe1273285 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "walk": "^2.3.9" }, "binary": { + "bucket_name": "axonodegit", "module_name": "nodegit", "module_path": "./build/Release/", "host": "https://axonodegit.s3.amazonaws.com/nodegit/nodegit/" diff --git a/utils/uploadOpenSSL.mjs b/utils/uploadOpenSSL.mjs new file mode 100644 index 000000000..784379cb6 --- /dev/null +++ b/utils/uploadOpenSSL.mjs @@ -0,0 +1,29 @@ +import aws from 'aws-sdk'; +import fs from "fs"; +import path from "path"; + +import pkgJson from './package.json' assert { type: "json" }; +import { getOpenSSLPackageName } from './acquireOpenSSL'; + +const s3 = new aws.S3(); + +const uploadBinaryToS3 = (binaryName, bucketName, pathToFile) => + s3.upload({ + Body: fs.createReadStream(pathToFile), + Bucket: bucketName, + Key: binaryName, + ACL: "public-read" + }).promise(); + +export const uploadOpenSSL = async () => { + const binaryName = getOpenSSLPackageName(); + const pathToFile = path.join(import.meta.dirname, binaryName); + return uploadBinaryToS3(binaryName, pkgJson.binary.bucket_name, pathToFile); +}; + +if (require.main === module) { + uploadOpenSSL().catch((error) => { + console.error('Push to S3 failed: ', error); + process.exit(1); + }); +} From ccb0c580aedff9c2886e0778228f450ef69d23db Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 16 Oct 2025 14:16:58 -0700 Subject: [PATCH 065/103] update submodule, docs, and build-script --- generate/input/libgit2-docs.json | 7051 ++++++++++++++++-------------- vendor/libgit2 | 2 +- vendor/libgit2.gyp | 5 +- 3 files changed, 3785 insertions(+), 3273 deletions(-) diff --git a/generate/input/libgit2-docs.json b/generate/input/libgit2-docs.json index 5870c608a..e1969402e 100644 --- a/generate/input/libgit2-docs.json +++ b/generate/input/libgit2-docs.json @@ -12,7 +12,7 @@ "git_annotated_commit_free" ], "meta": {}, - "lines": 121 + "lines": 128 }, { "file": "git2/apply.h", @@ -24,7 +24,7 @@ "git_apply" ], "meta": {}, - "lines": 161 + "lines": 182 }, { "file": "git2/attr.h", @@ -41,21 +41,25 @@ "git_attr_add_macro" ], "meta": {}, - "lines": 363 + "lines": 378 }, { "file": "git2/blame.h", "functions": [ "git_blame_options_init", + "git_blame_linecount", + "git_blame_hunkcount", + "git_blame_hunk_byindex", + "git_blame_hunk_byline", + "git_blame_line_byindex", "git_blame_get_hunk_count", "git_blame_get_hunk_byindex", "git_blame_get_hunk_byline", - "git_blame_file", "git_blame_buffer", "git_blame_free" ], "meta": {}, - "lines": 280 + "lines": 385 }, { "file": "git2/blob.h", @@ -79,7 +83,7 @@ "git_blob_dup" ], "meta": {}, - "lines": 307 + "lines": 350 }, { "file": "git2/branch.h", @@ -104,13 +108,13 @@ "git_branch_name_is_valid" ], "meta": {}, - "lines": 332 + "lines": 339 }, { "file": "git2/buffer.h", "functions": ["git_buf_dispose"], "meta": {}, - "lines": 68 + "lines": 71 }, { "file": "git2/cert.h", @@ -130,7 +134,7 @@ "git_checkout_tree" ], "meta": {}, - "lines": 413 + "lines": 463 }, { "file": "git2/cherrypick.h", @@ -140,7 +144,7 @@ "git_cherrypick" ], "meta": {}, - "lines": 86 + "lines": 94 }, { "file": "git2/clone.h", @@ -151,7 +155,7 @@ "git_clone" ], "meta": {}, - "lines": 205 + "lines": 220 }, { "file": "git2/commit.h", @@ -192,7 +196,7 @@ "git_commitarray_dispose" ], "meta": {}, - "lines": 603 + "lines": 670 }, { "file": "git2/common.h", @@ -200,10 +204,11 @@ "git_libgit2_version", "git_libgit2_prerelease", "git_libgit2_features", + "git_libgit2_feature_backend", "git_libgit2_opts" ], "meta": {}, - "lines": 530 + "lines": 569 }, { "file": "git2/config.h", @@ -220,6 +225,7 @@ "git_config_open_ondisk", "git_config_open_level", "git_config_open_global", + "git_config_set_writeorder", "git_config_snapshot", "git_config_free", "git_config_get_entry", @@ -254,7 +260,7 @@ "git_config_lock" ], "meta": {}, - "lines": 818 + "lines": 847 }, { "file": "git2/credential.h", @@ -268,12 +274,14 @@ "git_credential_username_new", "git_credential_ssh_key_new", "git_credential_ssh_key_memory_new", + "git_credential_ssh_interactive_cb", "git_credential_ssh_interactive_new", "git_credential_ssh_key_from_agent", + "git_credential_sign_cb", "git_credential_ssh_custom_new" ], "meta": {}, - "lines": 311 + "lines": 338 }, { "file": "git2/credential_helpers.h", @@ -311,7 +319,7 @@ "git_blame_init_options" ], "meta": {}, - "lines": 905 + "lines": 1035 }, { "file": "git2/describe.h", @@ -324,7 +332,7 @@ "git_describe_result_free" ], "meta": {}, - "lines": 189 + "lines": 201 }, { "file": "git2/diff.h", @@ -368,22 +376,19 @@ "git_diff_patchid" ], "meta": {}, - "lines": 1471 + "lines": 1502 }, { "file": "git2/email.h", - "functions": [ - "git_email_create_from_diff", - "git_email_create_from_commit" - ], + "functions": ["git_email_create_from_commit"], "meta": {}, - "lines": 122 + "lines": 102 }, { "file": "git2/errors.h", "functions": ["git_error_last"], "meta": {}, - "lines": 139 + "lines": 149 }, { "file": "git2/filter.h", @@ -400,13 +405,13 @@ "git_filter_list_free" ], "meta": {}, - "lines": 269 + "lines": 278 }, { "file": "git2/global.h", "functions": ["git_libgit2_init", "git_libgit2_shutdown"], "meta": {}, - "lines": 39 + "lines": 45 }, { "file": "git2/graph.h", @@ -426,12 +431,14 @@ "git_ignore_path_is_ignored" ], "meta": {}, - "lines": 74 + "lines": 83 }, { "file": "git2/index.h", "functions": [ "git_index_matched_path_cb", + "git_index_open", + "git_index_new", "git_index_free", "git_index_owner", "git_index_caps", @@ -475,7 +482,7 @@ "git_index_conflict_iterator_free" ], "meta": {}, - "lines": 844 + "lines": 928 }, { "file": "git2/indexer.h", @@ -490,7 +497,7 @@ "git_indexer_free" ], "meta": {}, - "lines": 191 + "lines": 207 }, { "file": "git2/mailmap.h", @@ -504,7 +511,7 @@ "git_mailmap_resolve_signature" ], "meta": {}, - "lines": 111 + "lines": 116 }, { "file": "git2/merge.h", @@ -527,7 +534,7 @@ "git_merge" ], "meta": {}, - "lines": 622 + "lines": 666 }, { "file": "git2/message.h", @@ -539,31 +546,16 @@ "meta": {}, "lines": 81 }, - { "file": "git2/net.h", "functions": [], "meta": {}, "lines": 50 }, + { "file": "git2/net.h", "functions": [], "meta": {}, "lines": 51 }, { "file": "git2/notes.h", "functions": [ "git_note_foreach_cb", - "git_note_iterator_new", - "git_note_commit_iterator_new", "git_note_iterator_free", - "git_note_next", - "git_note_read", - "git_note_commit_read", - "git_note_author", - "git_note_committer", - "git_note_message", - "git_note_id", - "git_note_create", - "git_note_commit_create", - "git_note_remove", - "git_note_commit_remove", - "git_note_free", - "git_note_default_ref", - "git_note_foreach" + "git_note_next" ], "meta": {}, - "lines": 302 + "lines": 91 }, { "file": "git2/object.h", @@ -584,12 +576,14 @@ "git_object_rawcontent_is_valid" ], "meta": {}, - "lines": 273 + "lines": 274 }, { "file": "git2/odb.h", "functions": [ "git_odb_foreach_cb", + "git_odb_new", + "git_odb_open", "git_odb_add_disk_alternate", "git_odb_free", "git_odb_read", @@ -610,6 +604,8 @@ "git_odb_open_rstream", "git_odb_write_pack", "git_odb_write_multi_pack_index", + "git_odb_hash", + "git_odb_hashfile", "git_odb_object_dup", "git_odb_object_free", "git_odb_object_id", @@ -623,12 +619,25 @@ "git_odb_set_commit_graph" ], "meta": {}, - "lines": 650 + "lines": 691 + }, + { + "file": "git2/odb_backend.h", + "functions": [ + "git_odb_backend_pack", + "git_odb_backend_one_pack", + "git_odb_backend_loose" + ], + "meta": {}, + "lines": 246 }, - { "file": "git2/odb_backend.h", "functions": [], "meta": {}, "lines": 219 }, { "file": "git2/oid.h", "functions": [ + "git_oid_fromstr", + "git_oid_fromstrp", + "git_oid_fromstrn", + "git_oid_fromraw", "git_oid_fmt", "git_oid_nfmt", "git_oid_pathfmt", @@ -646,13 +655,13 @@ "git_oid_shorten_free" ], "meta": {}, - "lines": 369 + "lines": 366 }, { "file": "git2/oidarray.h", "functions": ["git_oidarray_dispose"], "meta": {}, - "lines": 31 + "lines": 38 }, { "file": "git2/pack.h", @@ -677,7 +686,7 @@ "git_packbuilder_free" ], "meta": {}, - "lines": 263 + "lines": 274 }, { "file": "git2/patch.h", @@ -719,13 +728,13 @@ "git_pathspec_match_list_failed_entry" ], "meta": {}, - "lines": 277 + "lines": 284 }, { "file": "git2/proxy.h", "functions": ["git_proxy_options_init"], "meta": {}, - "lines": 94 + "lines": 103 }, { "file": "git2/rebase.h", @@ -748,7 +757,7 @@ "git_rebase_free" ], "meta": {}, - "lines": 395 + "lines": 397 }, { "file": "git2/refdb.h", @@ -829,7 +838,7 @@ "git_reference_shorthand" ], "meta": {}, - "lines": 767 + "lines": 769 }, { "file": "git2/refspec.h", @@ -841,13 +850,14 @@ "git_refspec_string", "git_refspec_force", "git_refspec_direction", + "git_refspec_src_matches_negative", "git_refspec_src_matches", "git_refspec_dst_matches", "git_refspec_transform", "git_refspec_rtransform" ], "meta": {}, - "lines": 117 + "lines": 126 }, { "file": "git2/remote.h", @@ -907,13 +917,14 @@ "git_remote_default_branch" ], "meta": {}, - "lines": 1189 + "lines": 1244 }, { "file": "git2/repository.h", "functions": [ "git_repository_open", "git_repository_open_from_worktree", + "git_repository_wrap_odb", "git_repository_discover", "git_repository_open_ext", "git_repository_open_bare", @@ -961,7 +972,7 @@ "git_repository_commit_parents" ], "meta": {}, - "lines": 992 + "lines": 1014 }, { "file": "git2/reset.h", @@ -971,7 +982,7 @@ "git_reset_default" ], "meta": {}, - "lines": 107 + "lines": 119 }, { "file": "git2/revert.h", @@ -981,7 +992,7 @@ "git_revert" ], "meta": {}, - "lines": 86 + "lines": 91 }, { "file": "git2/revparse.h", @@ -1019,13 +1030,14 @@ "functions": [ "git_signature_new", "git_signature_now", + "git_signature_default_from_env", "git_signature_default", "git_signature_from_buffer", "git_signature_dup", "git_signature_free" ], "meta": {}, - "lines": 99 + "lines": 143 }, { "file": "git2/stash.h", @@ -1042,7 +1054,7 @@ "git_stash_pop" ], "meta": {}, - "lines": 310 + "lines": 323 }, { "file": "git2/status.h", @@ -1059,7 +1071,7 @@ "git_status_should_ignore" ], "meta": {}, - "lines": 448 + "lines": 451 }, { "file": "git2/strarray.h", @@ -1107,25 +1119,25 @@ "git_submodule_location" ], "meta": {}, - "lines": 664 + "lines": 674 }, { "file": "git2/sys/commit_graph.h", "functions": [], "meta": {}, - "lines": 108 + "lines": 99 }, - { "file": "git2/sys/config.h", "functions": [], "meta": {}, "lines": 143 }, - { "file": "git2/sys/filter.h", "functions": [], "meta": {}, "lines": 95 }, - { "file": "git2/sys/hashsig.h", "functions": [], "meta": {}, "lines": 45 }, - { "file": "git2/sys/merge.h", "functions": [], "meta": {}, "lines": 41 }, - { "file": "git2/sys/path.h", "functions": [], "meta": {}, "lines": 41 }, - { "file": "git2/sys/stream.h", "functions": [], "meta": {}, "lines": 97 }, + { "file": "git2/sys/config.h", "functions": [], "meta": {}, "lines": 162 }, + { "file": "git2/sys/filter.h", "functions": [], "meta": {}, "lines": 109 }, + { "file": "git2/sys/hashsig.h", "functions": [], "meta": {}, "lines": 55 }, + { "file": "git2/sys/merge.h", "functions": [], "meta": {}, "lines": 49 }, + { "file": "git2/sys/path.h", "functions": [], "meta": {}, "lines": 51 }, + { "file": "git2/sys/stream.h", "functions": [], "meta": {}, "lines": 105 }, { "file": "git2/sys/transport.h", "functions": [], "meta": {}, - "lines": 318 + "lines": 328 }, { "file": "git2/tag.h", @@ -1155,13 +1167,13 @@ "git_tag_name_is_valid" ], "meta": {}, - "lines": 379 + "lines": 380 }, { "file": "git2/trace.h", "functions": ["git_trace_cb", "git_trace_set"], "meta": {}, - "lines": 63 + "lines": 68 }, { "file": "git2/transaction.h", @@ -1182,7 +1194,7 @@ "file": "git2/transport.h", "functions": ["git_transport_message_cb", "git_transport_cb"], "meta": {}, - "lines": 37 + "lines": 45 }, { "file": "git2/tree.h", @@ -1222,9 +1234,9 @@ "git_tree_create_updated" ], "meta": {}, - "lines": 470 + "lines": 481 }, - { "file": "git2/types.h", "functions": [], "meta": {}, "lines": 366 }, + { "file": "git2/types.h", "functions": [], "meta": {}, "lines": 382 }, { "file": "git2/worktree.h", "functions": [ @@ -1245,15 +1257,15 @@ "git_worktree_prune" ], "meta": {}, - "lines": 267 + "lines": 273 } ], "functions": { "git_annotated_commit_from_ref": { "type": "function", "file": "git2/annotated_commit.h", - "line": 33, - "lineto": 36, + "line": 40, + "lineto": 43, "args": [ { "name": "out", @@ -1279,15 +1291,15 @@ "group": "annotated", "examples": { "checkout.c": [ - "ex/v1.8.4/checkout.html#git_annotated_commit_from_ref-1" + "ex/v1.9.1/checkout.html#git_annotated_commit_from_ref-1" ] } }, "git_annotated_commit_from_fetchhead": { "type": "function", "file": "git2/annotated_commit.h", - "line": 50, - "lineto": 55, + "line": 57, + "lineto": 62, "args": [ { "name": "out", @@ -1325,8 +1337,8 @@ "git_annotated_commit_lookup": { "type": "function", "file": "git2/annotated_commit.h", - "line": 75, - "lineto": 78, + "line": 82, + "lineto": 85, "args": [ { "name": "out", @@ -1354,8 +1366,8 @@ "git_annotated_commit_from_revspec": { "type": "function", "file": "git2/annotated_commit.h", - "line": 92, - "lineto": 95, + "line": 99, + "lineto": 102, "args": [ { "name": "out", @@ -1383,8 +1395,8 @@ "git_annotated_commit_id": { "type": "function", "file": "git2/annotated_commit.h", - "line": 103, - "lineto": 104, + "line": 110, + "lineto": 111, "args": [ { "name": "commit", @@ -1399,19 +1411,19 @@ "comments": "", "group": "annotated", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_annotated_commit_id-2"], + "checkout.c": ["ex/v1.9.1/checkout.html#git_annotated_commit_id-2"], "merge.c": [ - "ex/v1.8.4/merge.html#git_annotated_commit_id-1", - "ex/v1.8.4/merge.html#git_annotated_commit_id-2", - "ex/v1.8.4/merge.html#git_annotated_commit_id-3" + "ex/v1.9.1/merge.html#git_annotated_commit_id-1", + "ex/v1.9.1/merge.html#git_annotated_commit_id-2", + "ex/v1.9.1/merge.html#git_annotated_commit_id-3" ] } }, "git_annotated_commit_ref": { "type": "function", "file": "git2/annotated_commit.h", - "line": 112, - "lineto": 113, + "line": 119, + "lineto": 120, "args": [ { "name": "commit", @@ -1427,17 +1439,17 @@ "group": "annotated", "examples": { "checkout.c": [ - "ex/v1.8.4/checkout.html#git_annotated_commit_ref-3", - "ex/v1.8.4/checkout.html#git_annotated_commit_ref-4", - "ex/v1.8.4/checkout.html#git_annotated_commit_ref-5" + "ex/v1.9.1/checkout.html#git_annotated_commit_ref-3", + "ex/v1.9.1/checkout.html#git_annotated_commit_ref-4", + "ex/v1.9.1/checkout.html#git_annotated_commit_ref-5" ] } }, "git_annotated_commit_free": { "type": "function", "file": "git2/annotated_commit.h", - "line": 120, - "lineto": 121, + "line": 127, + "lineto": 128, "args": [ { "name": "commit", @@ -1452,14 +1464,14 @@ "comments": "", "group": "annotated", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_annotated_commit_free-6"] + "checkout.c": ["ex/v1.9.1/checkout.html#git_annotated_commit_free-6"] } }, "git_apply_options_init": { "type": "function", "file": "git2/apply.h", - "line": 106, - "lineto": 106, + "line": 127, + "lineto": 127, "args": [ { "name": "opts", @@ -1482,8 +1494,8 @@ "git_apply_to_tree": { "type": "function", "file": "git2/apply.h", - "line": 119, - "lineto": 124, + "line": 140, + "lineto": 145, "args": [ { "name": "out", @@ -1521,8 +1533,8 @@ "git_apply": { "type": "function", "file": "git2/apply.h", - "line": 157, - "lineto": 161, + "line": 178, + "lineto": 182, "args": [ { "name": "repo", @@ -1555,8 +1567,8 @@ "git_attr_value": { "type": "function", "file": "git2/attr.h", - "line": 102, - "lineto": 102, + "line": 106, + "lineto": 106, "args": [ { "name": "attr", "type": "const char *", "comment": "The attribute" } ], @@ -1573,8 +1585,8 @@ "git_attr_get": { "type": "function", "file": "git2/attr.h", - "line": 180, - "lineto": 185, + "line": 195, + "lineto": 200, "args": [ { "name": "value_out", @@ -1612,8 +1624,8 @@ "git_attr_get_ext": { "type": "function", "file": "git2/attr.h", - "line": 203, - "lineto": 208, + "line": 218, + "lineto": 223, "args": [ { "name": "value_out", @@ -1651,8 +1663,8 @@ "git_attr_get_many": { "type": "function", "file": "git2/attr.h", - "line": 240, - "lineto": 246, + "line": 255, + "lineto": 261, "args": [ { "name": "values_out", @@ -1695,8 +1707,8 @@ "git_attr_get_many_ext": { "type": "function", "file": "git2/attr.h", - "line": 265, - "lineto": 271, + "line": 280, + "lineto": 286, "args": [ { "name": "values_out", @@ -1739,8 +1751,8 @@ "git_attr_foreach": { "type": "function", "file": "git2/attr.h", - "line": 304, - "lineto": 309, + "line": 319, + "lineto": 324, "args": [ { "name": "repo", @@ -1781,8 +1793,8 @@ "git_attr_foreach_ext": { "type": "function", "file": "git2/attr.h", - "line": 324, - "lineto": 329, + "line": 339, + "lineto": 344, "args": [ { "name": "repo", @@ -1823,8 +1835,8 @@ "git_attr_cache_flush": { "type": "function", "file": "git2/attr.h", - "line": 342, - "lineto": 343, + "line": 357, + "lineto": 358, "args": [ { "name": "repo", @@ -1842,8 +1854,8 @@ "git_attr_add_macro": { "type": "function", "file": "git2/attr.h", - "line": 360, - "lineto": 363, + "line": 375, + "lineto": 378, "args": [ { "name": "repo", @@ -1871,8 +1883,8 @@ "git_blame_options_init": { "type": "function", "file": "git2/blame.h", - "line": 138, - "lineto": 140, + "line": 146, + "lineto": 148, "args": [ { "name": "opts", @@ -1895,11 +1907,11 @@ "comments": "

Initializes a git_blame_options with default values. Equivalent to creating an instance with GIT_BLAME_OPTIONS_INIT.

\n", "group": "blame" }, - "git_blame_get_hunk_count": { + "git_blame_linecount": { "type": "function", "file": "git2/blame.h", - "line": 210, - "lineto": 210, + "line": 244, + "lineto": 244, "args": [ { "name": "blame", @@ -1909,16 +1921,35 @@ ], "argline": "git_blame *blame", "sig": "git_blame *", - "return": { "type": "uint32_t", "comment": " The number of hunks." }, + "return": { "type": "size_t", "comment": " The number of line." }, + "description": "

Gets the number of lines that exist in the blame structure.

\n", + "comments": "", + "group": "blame" + }, + "git_blame_hunkcount": { + "type": "function", + "file": "git2/blame.h", + "line": 252, + "lineto": 252, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "The blame structure to query." + } + ], + "argline": "git_blame *blame", + "sig": "git_blame *", + "return": { "type": "size_t", "comment": " The number of hunks." }, "description": "

Gets the number of hunks that exist in the blame structure.

\n", "comments": "", "group": "blame" }, - "git_blame_get_hunk_byindex": { + "git_blame_hunk_byindex": { "type": "function", "file": "git2/blame.h", - "line": 219, - "lineto": 221, + "line": 261, + "lineto": 263, "args": [ { "name": "blame", @@ -1927,12 +1958,12 @@ }, { "name": "index", - "type": "uint32_t", + "type": "size_t", "comment": "index of the hunk to retrieve" } ], - "argline": "git_blame *blame, uint32_t index", - "sig": "git_blame *::uint32_t", + "argline": "git_blame *blame, size_t index", + "sig": "git_blame *::size_t", "return": { "type": "const git_blame_hunk *", "comment": " the hunk at the given index, or NULL on error" @@ -1941,11 +1972,11 @@ "comments": "", "group": "blame" }, - "git_blame_get_hunk_byline": { + "git_blame_hunk_byline": { "type": "function", "file": "git2/blame.h", - "line": 230, - "lineto": 232, + "line": 273, + "lineto": 275, "args": [ { "name": "blame", @@ -1964,56 +1995,118 @@ "type": "const git_blame_hunk *", "comment": " the hunk that contains the given line, or NULL on error" }, - "description": "

Gets the hunk that relates to the given line number in the newest commit.

\n", + "description": "

Gets the hunk that relates to the given line number in the newest\n commit.

\n", "comments": "", "group": "blame", "examples": { - "blame.c": ["ex/v1.8.4/blame.html#git_blame_get_hunk_byline-1"] + "blame.c": ["ex/v1.9.1/blame.html#git_blame_hunk_byline-1"] } }, - "git_blame_file": { + "git_blame_line_byindex": { "type": "function", "file": "git2/blame.h", - "line": 245, - "lineto": 249, + "line": 284, + "lineto": 286, "args": [ { - "name": "out", - "type": "git_blame **", - "comment": "pointer that will receive the blame object" + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to query" }, { - "name": "repo", - "type": "git_repository *", - "comment": "repository whose history is to be walked" + "name": "idx", + "type": "size_t", + "comment": "the (1-based) line number" + } + ], + "argline": "git_blame *blame, size_t idx", + "sig": "git_blame *::size_t", + "return": { + "type": "const git_blame_line *", + "comment": " the blamed line, or NULL on error" + }, + "description": "

Gets the information about the line in the blame.

\n", + "comments": "", + "group": "blame" + }, + "git_blame_get_hunk_count": { + "type": "function", + "file": "git2/blame.h", + "line": 296, + "lineto": 296, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "The blame structure to query." + } + ], + "argline": "git_blame *blame", + "sig": "git_blame *", + "return": { "type": "uint32_t", "comment": " The number of hunks." }, + "description": "

Gets the number of hunks that exist in the blame structure.

\n", + "comments": "", + "group": "blame" + }, + "git_blame_get_hunk_byindex": { + "type": "function", + "file": "git2/blame.h", + "line": 305, + "lineto": 307, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to query" }, { - "name": "path", - "type": "const char *", - "comment": "path to file to consider" + "name": "index", + "type": "uint32_t", + "comment": "index of the hunk to retrieve" + } + ], + "argline": "git_blame *blame, uint32_t index", + "sig": "git_blame *::uint32_t", + "return": { + "type": "const git_blame_hunk *", + "comment": " the hunk at the given index, or NULL on error" + }, + "description": "

Gets the blame hunk at the given index.

\n", + "comments": "", + "group": "blame" + }, + "git_blame_get_hunk_byline": { + "type": "function", + "file": "git2/blame.h", + "line": 316, + "lineto": 318, + "args": [ + { + "name": "blame", + "type": "git_blame *", + "comment": "the blame structure to query" }, { - "name": "options", - "type": "git_blame_options *", - "comment": "options for the blame operation. If NULL, this is treated as\n though GIT_BLAME_OPTIONS_INIT were passed." + "name": "lineno", + "type": "size_t", + "comment": "the (1-based) line number to find a hunk for" } ], - "argline": "git_blame **out, git_repository *repo, const char *path, git_blame_options *options", - "sig": "git_blame **::git_repository *::const char *::git_blame_options *", + "argline": "git_blame *blame, size_t lineno", + "sig": "git_blame *::size_t", "return": { - "type": "int", - "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error.)" + "type": "const git_blame_hunk *", + "comment": " the hunk that contains the given line, or NULL on error" }, - "description": "

Get the blame for a single file.

\n", + "description": "

Gets the hunk that relates to the given line number in the newest commit.

\n", "comments": "", - "group": "blame", - "examples": { "blame.c": ["ex/v1.8.4/blame.html#git_blame_file-2"] } + "group": "blame" }, "git_blame_buffer": { "type": "function", "file": "git2/blame.h", - "line": 269, - "lineto": 273, + "line": 374, + "lineto": 378, "args": [ { "name": "out", @@ -2021,7 +2114,7 @@ "comment": "pointer that will receive the resulting blame data" }, { - "name": "reference", + "name": "base", "type": "git_blame *", "comment": "cached blame from the history of the file (usually the output\n from git_blame_file)" }, @@ -2036,21 +2129,21 @@ "comment": "number of valid bytes in the buffer" } ], - "argline": "git_blame **out, git_blame *reference, const char *buffer, size_t buffer_len", + "argline": "git_blame **out, git_blame *base, const char *buffer, size_t buffer_len", "sig": "git_blame **::git_blame *::const char *::size_t", "return": { "type": "int", "comment": " 0 on success, or an error code. (use git_error_last for information\n about the error)" }, - "description": "

Get blame data for a file that has been modified in memory. The reference\n parameter is a pre-calculated blame for the in-odb history of the file. This\n means that once a file blame is completed (which can be expensive), updating\n the buffer blame is very fast.

\n", + "description": "

Get blame data for a file that has been modified in memory. The blame\n parameter is a pre-calculated blame for the in-odb history of the file.\n This means that once a file blame is completed (which can be expensive),\n updating the buffer blame is very fast.

\n", "comments": "

Lines that differ between the buffer and the committed version are marked as having a zero OID for their final_commit_id.

\n", "group": "blame" }, "git_blame_free": { "type": "function", "file": "git2/blame.h", - "line": 280, - "lineto": 280, + "line": 385, + "lineto": 385, "args": [ { "name": "blame", @@ -2064,13 +2157,13 @@ "description": "

Free memory allocated by git_blame_file or git_blame_buffer.

\n", "comments": "", "group": "blame", - "examples": { "blame.c": ["ex/v1.8.4/blame.html#git_blame_free-3"] } + "examples": { "blame.c": ["ex/v1.9.1/blame.html#git_blame_free-2"] } }, "git_blob_lookup": { "type": "function", "file": "git2/blob.h", - "line": 33, - "lineto": 33, + "line": 37, + "lineto": 40, "args": [ { "name": "blob", @@ -2095,15 +2188,15 @@ "comments": "", "group": "blob", "examples": { - "blame.c": ["ex/v1.8.4/blame.html#git_blob_lookup-4"], - "general.c": ["ex/v1.8.4/general.html#git_blob_lookup-1"] + "blame.c": ["ex/v1.9.1/blame.html#git_blob_lookup-3"], + "general.c": ["ex/v1.9.1/general.html#git_blob_lookup-1"] } }, "git_blob_lookup_prefix": { "type": "function", "file": "git2/blob.h", - "line": 47, - "lineto": 47, + "line": 54, + "lineto": 54, "args": [ { "name": "blob", @@ -2136,8 +2229,8 @@ "git_blob_free": { "type": "function", "file": "git2/blob.h", - "line": 60, - "lineto": 60, + "line": 67, + "lineto": 67, "args": [ { "name": "blob", "type": "git_blob *", "comment": "the blob to close" } ], @@ -2148,15 +2241,15 @@ "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a blob. Failure to do so will cause a memory leak.

\n", "group": "blob", "examples": { - "blame.c": ["ex/v1.8.4/blame.html#git_blob_free-5"], - "general.c": ["ex/v1.8.4/general.html#git_blob_free-2"] + "blame.c": ["ex/v1.9.1/blame.html#git_blob_free-4"], + "general.c": ["ex/v1.9.1/general.html#git_blob_free-2"] } }, "git_blob_id": { "type": "function", "file": "git2/blob.h", - "line": 68, - "lineto": 68, + "line": 75, + "lineto": 75, "args": [ { "name": "blob", @@ -2177,8 +2270,8 @@ "git_blob_owner": { "type": "function", "file": "git2/blob.h", - "line": 76, - "lineto": 76, + "line": 83, + "lineto": 83, "args": [ { "name": "blob", @@ -2199,8 +2292,8 @@ "git_blob_rawcontent": { "type": "function", "file": "git2/blob.h", - "line": 89, - "lineto": 89, + "line": 96, + "lineto": 96, "args": [ { "name": "blob", @@ -2212,22 +2305,22 @@ "sig": "const git_blob *", "return": { "type": "const void *", - "comment": " the pointer, or NULL on error" + "comment": " \n\n `unsigned char *` the pointer, or NULL on error" }, "description": "

Get a read-only buffer with the raw content of a blob.

\n", "comments": "

A pointer to the raw content of a blob is returned; this pointer is owned internally by the object and shall not be free'd. The pointer may be invalidated at a later time.

\n", "group": "blob", "examples": { - "blame.c": ["ex/v1.8.4/blame.html#git_blob_rawcontent-6"], - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_blob_rawcontent-1"], - "general.c": ["ex/v1.8.4/general.html#git_blob_rawcontent-3"] + "blame.c": ["ex/v1.9.1/blame.html#git_blob_rawcontent-5"], + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_blob_rawcontent-1"], + "general.c": ["ex/v1.9.1/general.html#git_blob_rawcontent-3"] } }, "git_blob_rawsize": { "type": "function", "file": "git2/blob.h", - "line": 97, - "lineto": 97, + "line": 104, + "lineto": 104, "args": [ { "name": "blob", @@ -2237,24 +2330,24 @@ ], "argline": "const git_blob *blob", "sig": "const git_blob *", - "return": { "type": "git_object_size_t", "comment": " size on bytes" }, + "return": { "type": "git_object_size_t", "comment": " size in bytes" }, "description": "

Get the size in bytes of the contents of a blob

\n", "comments": "", "group": "blob", "examples": { - "blame.c": ["ex/v1.8.4/blame.html#git_blob_rawsize-7"], - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_blob_rawsize-2"], + "blame.c": ["ex/v1.9.1/blame.html#git_blob_rawsize-6"], + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_blob_rawsize-2"], "general.c": [ - "ex/v1.8.4/general.html#git_blob_rawsize-4", - "ex/v1.8.4/general.html#git_blob_rawsize-5" + "ex/v1.9.1/general.html#git_blob_rawsize-4", + "ex/v1.9.1/general.html#git_blob_rawsize-5" ] } }, "git_blob_filter_options_init": { "type": "function", "file": "git2/blob.h", - "line": 164, - "lineto": 164, + "line": 201, + "lineto": 203, "args": [ { "name": "opts", @@ -2264,7 +2357,7 @@ { "name": "version", "type": "unsigned int", - "comment": "The struct version; pass `GIT_BLOB_FILTER_OPTIONS_VERSION`." + "comment": "The struct version; pass GIT_BLOB_FILTER_OPTIONS_VERSION" } ], "argline": "git_blob_filter_options *opts, unsigned int version", @@ -2280,8 +2373,8 @@ "git_blob_filter": { "type": "function", "file": "git2/blob.h", - "line": 188, - "lineto": 192, + "line": 227, + "lineto": 231, "args": [ { "name": "out", @@ -2306,16 +2399,19 @@ ], "argline": "git_buf *out, git_blob *blob, const char *as_path, git_blob_filter_options *opts", "sig": "git_buf *::git_blob *::const char *::git_blob_filter_options *", - "return": { "type": "int", "comment": " 0 on success or an error code" }, + "return": { + "type": "int", + "comment": " \n\n[enum] git_error_code 0 on success or an error code" + }, "description": "

Get a buffer with the filtered content of a blob.

\n", - "comments": "

This applies filters as if the blob was being checked out to the working directory under the specified filename. This may apply CRLF filtering or other types of changes depending on the file attributes set for the blob and the content detected in it.

\n\n

The output is written into a git_buf which the caller must free when done (via git_buf_dispose).

\n\n

If no filters need to be applied, then the out buffer will just be populated with a pointer to the raw content of the blob. In that case, be careful to not free the blob until done with the buffer or copy it into memory you own.

\n", + "comments": "

This applies filters as if the blob was being checked out to the working directory under the specified filename. This may apply CRLF filtering or other types of changes depending on the file attributes set for the blob and the content detected in it.

\n\n

The output is written into a git_buf which the caller must dispose when done (via git_buf_dispose).

\n\n

If no filters need to be applied, then the out buffer will just be populated with a pointer to the raw content of the blob. In that case, be careful to not free the blob until done with the buffer or copy it into memory you own.

\n", "group": "blob" }, "git_blob_create_from_workdir": { "type": "function", "file": "git2/blob.h", - "line": 205, - "lineto": 205, + "line": 244, + "lineto": 244, "args": [ { "name": "id", @@ -2336,15 +2432,15 @@ "argline": "git_oid *id, git_repository *repo, const char *relative_path", "sig": "git_oid *::git_repository *::const char *", "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Read a file from the working folder of a repository\n and write it to the Object Database as a loose blob

\n", + "description": "

Read a file from the working folder of a repository and write it\n to the object database.

\n", "comments": "", "group": "blob" }, "git_blob_create_from_disk": { "type": "function", "file": "git2/blob.h", - "line": 217, - "lineto": 217, + "line": 257, + "lineto": 260, "args": [ { "name": "id", @@ -2365,15 +2461,15 @@ "argline": "git_oid *id, git_repository *repo, const char *path", "sig": "git_oid *::git_repository *::const char *", "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Read a file from the filesystem and write its content\n to the Object Database as a loose blob

\n", + "description": "

Read a file from the filesystem (not necessarily inside the\n working folder of the repository) and write it to the object\n database.

\n", "comments": "", "group": "blob" }, "git_blob_create_from_stream": { "type": "function", "file": "git2/blob.h", - "line": 244, - "lineto": 247, + "line": 287, + "lineto": 290, "args": [ { "name": "out", @@ -2394,15 +2490,15 @@ "argline": "git_writestream **out, git_repository *repo, const char *hintpath", "sig": "git_writestream **::git_repository *::const char *", "return": { "type": "int", "comment": " 0 or error code" }, - "description": "

Create a stream to write a new blob into the object db

\n", + "description": "

Create a stream to write a new blob into the object database.

\n", "comments": "

This function may need to buffer the data on disk and will in general not be the right choice if you know the size of the data to write. If you have data in memory, use git_blob_create_from_buffer(). If you do not, but know the size of the contents (and don't want/need to perform filtering), use git_odb_open_wstream().

\n\n

Don't close this stream yourself but pass it to git_blob_create_from_stream_commit() to commit the write to the object db and get the object id.

\n\n

If the hintpath parameter is filled, it will be used to determine what git filters should be applied to the object before it is written to the object database.

\n", "group": "blob" }, "git_blob_create_from_stream_commit": { "type": "function", "file": "git2/blob.h", - "line": 258, - "lineto": 260, + "line": 301, + "lineto": 303, "args": [ { "name": "out", @@ -2418,15 +2514,15 @@ "argline": "git_oid *out, git_writestream *stream", "sig": "git_oid *::git_writestream *", "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Close the stream and write the blob to the object db

\n", + "description": "

Close the stream and finalize writing the blob to the object database.

\n", "comments": "

The stream will be closed and freed.

\n", "group": "blob" }, "git_blob_create_from_buffer": { "type": "function", "file": "git2/blob.h", - "line": 271, - "lineto": 272, + "line": 314, + "lineto": 315, "args": [ { "name": "id", @@ -2448,15 +2544,15 @@ "argline": "git_oid *id, git_repository *repo, const void *buffer, size_t len", "sig": "git_oid *::git_repository *::const void *::size_t", "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Write an in-memory buffer to the ODB as a blob

\n", + "description": "

Write an in-memory buffer to the object database as a blob.

\n", "comments": "", "group": "blob" }, "git_blob_is_binary": { "type": "function", "file": "git2/blob.h", - "line": 285, - "lineto": 285, + "line": 328, + "lineto": 328, "args": [ { "name": "blob", @@ -2468,17 +2564,17 @@ "sig": "const git_blob *", "return": { "type": "int", - "comment": " 1 if the content of the blob is detected\n as binary; 0 otherwise." + "comment": " \n\n bool 1 if the content of the blob is detected\n as binary; 0 otherwise." }, - "description": "

Determine if the blob content is most certainly binary or not.

\n", + "description": "

Determine if the blob content is most likely binary or not.

\n", "comments": "

The heuristic used to guess if a file is binary is taken from core git: Searching for NUL bytes and looking for a reasonable ratio of printable to non-printable characters among the first 8000 bytes.

\n", "group": "blob" }, "git_blob_data_is_binary": { "type": "function", "file": "git2/blob.h", - "line": 297, - "lineto": 297, + "line": 340, + "lineto": 340, "args": [ { "name": "data", @@ -2500,8 +2596,8 @@ "git_blob_dup": { "type": "function", "file": "git2/blob.h", - "line": 307, - "lineto": 307, + "line": 350, + "lineto": 350, "args": [ { "name": "out", @@ -2524,8 +2620,8 @@ "git_branch_create": { "type": "function", "file": "git2/branch.h", - "line": 52, - "lineto": 57, + "line": 53, + "lineto": 58, "args": [ { "name": "out", @@ -2540,12 +2636,12 @@ { "name": "branch_name", "type": "const char *", - "comment": "Name for the branch; this name is\n validated for consistency. It should also not conflict with\n an already existing branch name." + "comment": "Name for the branch; this name is\n validated for consistency. It should also not conflict with\n an already existing branch name." }, { "name": "target", "type": "const git_commit *", - "comment": "Commit to which this branch should point. This object\n must belong to the given `repo`." + "comment": "Commit to which this branch should point. This object\n must belong to the given `repo`." }, { "name": "force", @@ -2566,36 +2662,55 @@ "git_branch_create_from_annotated": { "type": "function", "file": "git2/branch.h", - "line": 70, - "lineto": 75, + "line": 77, + "lineto": 82, "args": [ - { "name": "ref_out", "type": "git_reference **", "comment": null }, - { "name": "repository", "type": "git_repository *", "comment": null }, - { "name": "branch_name", "type": "const char *", "comment": null }, { - "name": "commit", + "name": "ref_out", + "type": "git_reference **", + "comment": "Pointer where to store the underlying reference." + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "the repository to create the branch in." + }, + { + "name": "branch_name", + "type": "const char *", + "comment": "Name for the branch; this name is\n validated for consistency. It should also not conflict with\n an already existing branch name." + }, + { + "name": "target", "type": "const git_annotated_commit *", - "comment": null + "comment": "Annotated commit to which this branch should point. This\n object must belong to the given `repo`." }, - { "name": "force", "type": "int", "comment": null } + { + "name": "force", + "type": "int", + "comment": "Overwrite existing branch." + } ], - "argline": "git_reference **ref_out, git_repository *repository, const char *branch_name, const git_annotated_commit *commit, int force", + "argline": "git_reference **ref_out, git_repository *repo, const char *branch_name, const git_annotated_commit *target, int force", "sig": "git_reference **::git_repository *::const char *::const git_annotated_commit *::int", - "return": { "type": "int", "comment": null }, + "return": { + "type": "int", + "comment": " 0, GIT_EINVALIDSPEC or an error code." + }, "description": "

Create a new branch pointing at a target commit

\n", - "comments": "

This behaves like git_branch_create() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_branch_create().

\n", + "comments": "

This behaves like git_branch_create() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n", "group": "branch", "examples": { "checkout.c": [ - "ex/v1.8.4/checkout.html#git_branch_create_from_annotated-7" + "ex/v1.9.1/checkout.html#git_branch_create_from_annotated-7" ] } }, "git_branch_delete": { "type": "function", "file": "git2/branch.h", - "line": 87, - "lineto": 87, + "line": 94, + "lineto": 94, "args": [ { "name": "branch", @@ -2616,8 +2731,8 @@ "git_branch_iterator_new": { "type": "function", "file": "git2/branch.h", - "line": 103, - "lineto": 106, + "line": 110, + "lineto": 113, "args": [ { "name": "out", @@ -2645,8 +2760,8 @@ "git_branch_next": { "type": "function", "file": "git2/branch.h", - "line": 116, - "lineto": 116, + "line": 123, + "lineto": 123, "args": [ { "name": "out", @@ -2677,8 +2792,8 @@ "git_branch_iterator_free": { "type": "function", "file": "git2/branch.h", - "line": 123, - "lineto": 123, + "line": 130, + "lineto": 130, "args": [ { "name": "iter", @@ -2696,8 +2811,8 @@ "git_branch_move": { "type": "function", "file": "git2/branch.h", - "line": 146, - "lineto": 150, + "line": 153, + "lineto": 157, "args": [ { "name": "out", @@ -2733,8 +2848,8 @@ "git_branch_lookup": { "type": "function", "file": "git2/branch.h", - "line": 170, - "lineto": 174, + "line": 177, + "lineto": 181, "args": [ { "name": "out", @@ -2770,8 +2885,8 @@ "git_branch_name": { "type": "function", "file": "git2/branch.h", - "line": 191, - "lineto": 193, + "line": 198, + "lineto": 200, "args": [ { "name": "out", @@ -2793,13 +2908,13 @@ "description": "

Get the branch name

\n", "comments": "

Given a reference object, this will check that it really is a branch (ie. it lives under "refs/heads/" or "refs/remotes/"), and return the branch part of it.

\n", "group": "branch", - "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_branch_name-4"] } + "examples": { "merge.c": ["ex/v1.9.1/merge.html#git_branch_name-4"] } }, "git_branch_upstream": { "type": "function", "file": "git2/branch.h", - "line": 209, - "lineto": 211, + "line": 216, + "lineto": 218, "args": [ { "name": "out", @@ -2825,8 +2940,8 @@ "git_branch_set_upstream": { "type": "function", "file": "git2/branch.h", - "line": 228, - "lineto": 230, + "line": 235, + "lineto": 237, "args": [ { "name": "branch", @@ -2843,7 +2958,7 @@ "sig": "git_reference *::const char *", "return": { "type": "int", - "comment": " 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name`\n or an error code" + "comment": " \n\n git_error_t 0 on success; GIT_ENOTFOUND if there's no branch named `branch_name`\n or an error code" }, "description": "

Set a branch's upstream branch

\n", "comments": "

This will update the configuration to set the branch named branch_name as the upstream of branch. Pass a NULL name to unset the upstream information.

\n", @@ -2852,8 +2967,8 @@ "git_branch_upstream_name": { "type": "function", "file": "git2/branch.h", - "line": 246, - "lineto": 249, + "line": 253, + "lineto": 256, "args": [ { "name": "out", @@ -2884,8 +2999,8 @@ "git_branch_is_head": { "type": "function", "file": "git2/branch.h", - "line": 259, - "lineto": 260, + "line": 266, + "lineto": 267, "args": [ { "name": "branch", @@ -2906,8 +3021,8 @@ "git_branch_is_checked_out": { "type": "function", "file": "git2/branch.h", - "line": 272, - "lineto": 273, + "line": 279, + "lineto": 280, "args": [ { "name": "branch", @@ -2928,8 +3043,8 @@ "git_branch_remote_name": { "type": "function", "file": "git2/branch.h", - "line": 291, - "lineto": 294, + "line": 298, + "lineto": 301, "args": [ { "name": "out", @@ -2960,8 +3075,8 @@ "git_branch_upstream_remote": { "type": "function", "file": "git2/branch.h", - "line": 307, - "lineto": 307, + "line": 314, + "lineto": 314, "args": [ { "name": "buf", @@ -2989,8 +3104,8 @@ "git_branch_upstream_merge": { "type": "function", "file": "git2/branch.h", - "line": 320, - "lineto": 320, + "line": 327, + "lineto": 327, "args": [ { "name": "buf", @@ -3018,8 +3133,8 @@ "git_branch_name_is_valid": { "type": "function", "file": "git2/branch.h", - "line": 332, - "lineto": 332, + "line": 339, + "lineto": 339, "args": [ { "name": "valid", @@ -3042,8 +3157,8 @@ "git_buf_dispose": { "type": "function", "file": "git2/buffer.h", - "line": 68, - "lineto": 68, + "line": 71, + "lineto": 71, "args": [ { "name": "buffer", @@ -3059,17 +3174,17 @@ "group": "buf", "examples": { "diff.c": [ - "ex/v1.8.4/diff.html#git_buf_dispose-1", - "ex/v1.8.4/diff.html#git_buf_dispose-2" + "ex/v1.9.1/diff.html#git_buf_dispose-1", + "ex/v1.9.1/diff.html#git_buf_dispose-2" ], - "tag.c": ["ex/v1.8.4/tag.html#git_buf_dispose-1"] + "tag.c": ["ex/v1.9.1/tag.html#git_buf_dispose-1"] } }, "git_checkout_options_init": { "type": "function", "file": "git2/checkout.h", - "line": 360, - "lineto": 362, + "line": 410, + "lineto": 412, "args": [ { "name": "opts", @@ -3095,8 +3210,8 @@ "git_checkout_head": { "type": "function", "file": "git2/checkout.h", - "line": 381, - "lineto": 383, + "line": 431, + "lineto": 433, "args": [ { "name": "repo", @@ -3122,8 +3237,8 @@ "git_checkout_index": { "type": "function", "file": "git2/checkout.h", - "line": 394, - "lineto": 397, + "line": 444, + "lineto": 447, "args": [ { "name": "repo", @@ -3154,8 +3269,8 @@ "git_checkout_tree": { "type": "function", "file": "git2/checkout.h", - "line": 410, - "lineto": 413, + "line": 460, + "lineto": 463, "args": [ { "name": "repo", @@ -3183,15 +3298,15 @@ "comments": "", "group": "checkout", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_checkout_tree-8"], - "merge.c": ["ex/v1.8.4/merge.html#git_checkout_tree-5"] + "checkout.c": ["ex/v1.9.1/checkout.html#git_checkout_tree-8"], + "merge.c": ["ex/v1.9.1/merge.html#git_checkout_tree-5"] } }, "git_cherrypick_options_init": { "type": "function", "file": "git2/cherrypick.h", - "line": 49, - "lineto": 51, + "line": 57, + "lineto": 59, "args": [ { "name": "opts", @@ -3217,8 +3332,8 @@ "git_cherrypick_commit": { "type": "function", "file": "git2/cherrypick.h", - "line": 67, - "lineto": 73, + "line": 75, + "lineto": 81, "args": [ { "name": "out", @@ -3264,8 +3379,8 @@ "git_cherrypick": { "type": "function", "file": "git2/cherrypick.h", - "line": 83, - "lineto": 86, + "line": 91, + "lineto": 94, "args": [ { "name": "repo", @@ -3296,8 +3411,8 @@ "git_clone_options_init": { "type": "function", "file": "git2/clone.h", - "line": 181, - "lineto": 183, + "line": 192, + "lineto": 194, "args": [ { "name": "opts", @@ -3323,8 +3438,8 @@ "git_clone": { "type": "function", "file": "git2/clone.h", - "line": 201, - "lineto": 205, + "line": 216, + "lineto": 220, "args": [ { "name": "out", @@ -3354,14 +3469,14 @@ "comment": " 0 on success, any non-zero return value from a callback\n function, or a negative value to indicate an error (use\n `git_error_last` for a detailed error message)" }, "description": "

Clone a remote repository.

\n", - "comments": "

By default this creates its repository and initial remote to match git's defaults. You can use the options in the callback to customize how these are created.

\n", + "comments": "

By default this creates its repository and initial remote to match git's defaults. You can use the options in the callback to customize how these are created.

\n\n

Note that the libgit2 library must be initialized using git_libgit2_init before any APIs can be called, including this one.

\n", "group": "clone" }, "git_commit_lookup": { "type": "function", "file": "git2/commit.h", - "line": 36, - "lineto": 37, + "line": 40, + "lineto": 41, "args": [ { "name": "commit", @@ -3386,21 +3501,21 @@ "comments": "

The returned object should be released with git_commit_free when no longer needed.

\n", "group": "commit", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_commit_lookup-9"], + "checkout.c": ["ex/v1.9.1/checkout.html#git_commit_lookup-9"], "general.c": [ - "ex/v1.8.4/general.html#git_commit_lookup-6", - "ex/v1.8.4/general.html#git_commit_lookup-7", - "ex/v1.8.4/general.html#git_commit_lookup-8" + "ex/v1.9.1/general.html#git_commit_lookup-6", + "ex/v1.9.1/general.html#git_commit_lookup-7", + "ex/v1.9.1/general.html#git_commit_lookup-8" ], - "log.c": ["ex/v1.8.4/log.html#git_commit_lookup-1"], - "merge.c": ["ex/v1.8.4/merge.html#git_commit_lookup-6"] + "log.c": ["ex/v1.9.1/log.html#git_commit_lookup-1"], + "merge.c": ["ex/v1.9.1/merge.html#git_commit_lookup-6"] } }, "git_commit_lookup_prefix": { "type": "function", "file": "git2/commit.h", - "line": 55, - "lineto": 56, + "line": 59, + "lineto": 60, "args": [ { "name": "commit", @@ -3433,8 +3548,8 @@ "git_commit_free": { "type": "function", "file": "git2/commit.h", - "line": 70, - "lineto": 70, + "line": 74, + "lineto": 74, "args": [ { "name": "commit", @@ -3449,27 +3564,27 @@ "comments": "

This is a wrapper around git_object_free()

\n\n

IMPORTANT: It is necessary to call this method when you stop using a commit. Failure to do so will cause a memory leak.

\n", "group": "commit", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_commit_free-10"], + "checkout.c": ["ex/v1.9.1/checkout.html#git_commit_free-10"], "general.c": [ - "ex/v1.8.4/general.html#git_commit_free-9", - "ex/v1.8.4/general.html#git_commit_free-10", - "ex/v1.8.4/general.html#git_commit_free-11", - "ex/v1.8.4/general.html#git_commit_free-12", - "ex/v1.8.4/general.html#git_commit_free-13" + "ex/v1.9.1/general.html#git_commit_free-9", + "ex/v1.9.1/general.html#git_commit_free-10", + "ex/v1.9.1/general.html#git_commit_free-11", + "ex/v1.9.1/general.html#git_commit_free-12", + "ex/v1.9.1/general.html#git_commit_free-13" ], "log.c": [ - "ex/v1.8.4/log.html#git_commit_free-2", - "ex/v1.8.4/log.html#git_commit_free-3", - "ex/v1.8.4/log.html#git_commit_free-4", - "ex/v1.8.4/log.html#git_commit_free-5" + "ex/v1.9.1/log.html#git_commit_free-2", + "ex/v1.9.1/log.html#git_commit_free-3", + "ex/v1.9.1/log.html#git_commit_free-4", + "ex/v1.9.1/log.html#git_commit_free-5" ] } }, "git_commit_id": { "type": "function", "file": "git2/commit.h", - "line": 78, - "lineto": 78, + "line": 82, + "lineto": 82, "args": [ { "name": "commit", @@ -3487,15 +3602,15 @@ "comments": "", "group": "commit", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_commit_id-14"], - "log.c": ["ex/v1.8.4/log.html#git_commit_id-6"] + "general.c": ["ex/v1.9.1/general.html#git_commit_id-14"], + "log.c": ["ex/v1.9.1/log.html#git_commit_id-6"] } }, "git_commit_owner": { "type": "function", "file": "git2/commit.h", - "line": 86, - "lineto": 86, + "line": 90, + "lineto": 90, "args": [ { "name": "commit", @@ -3514,16 +3629,16 @@ "group": "commit", "examples": { "log.c": [ - "ex/v1.8.4/log.html#git_commit_owner-7", - "ex/v1.8.4/log.html#git_commit_owner-8" + "ex/v1.9.1/log.html#git_commit_owner-7", + "ex/v1.9.1/log.html#git_commit_owner-8" ] } }, "git_commit_message_encoding": { "type": "function", "file": "git2/commit.h", - "line": 98, - "lineto": 98, + "line": 102, + "lineto": 102, "args": [ { "name": "commit", @@ -3541,8 +3656,8 @@ "git_commit_message": { "type": "function", "file": "git2/commit.h", - "line": 109, - "lineto": 109, + "line": 113, + "lineto": 113, "args": [ { "name": "commit", @@ -3561,27 +3676,27 @@ "group": "commit", "examples": { "cat-file.c": [ - "ex/v1.8.4/cat-file.html#git_commit_message-3", - "ex/v1.8.4/cat-file.html#git_commit_message-4" + "ex/v1.9.1/cat-file.html#git_commit_message-3", + "ex/v1.9.1/cat-file.html#git_commit_message-4" ], "general.c": [ - "ex/v1.8.4/general.html#git_commit_message-15", - "ex/v1.8.4/general.html#git_commit_message-16", - "ex/v1.8.4/general.html#git_commit_message-17" + "ex/v1.9.1/general.html#git_commit_message-15", + "ex/v1.9.1/general.html#git_commit_message-16", + "ex/v1.9.1/general.html#git_commit_message-17" ], "log.c": [ - "ex/v1.8.4/log.html#git_commit_message-9", - "ex/v1.8.4/log.html#git_commit_message-10", - "ex/v1.8.4/log.html#git_commit_message-11" + "ex/v1.9.1/log.html#git_commit_message-9", + "ex/v1.9.1/log.html#git_commit_message-10", + "ex/v1.9.1/log.html#git_commit_message-11" ], - "tag.c": ["ex/v1.8.4/tag.html#git_commit_message-2"] + "tag.c": ["ex/v1.9.1/tag.html#git_commit_message-2"] } }, "git_commit_message_raw": { "type": "function", "file": "git2/commit.h", - "line": 117, - "lineto": 117, + "line": 121, + "lineto": 121, "args": [ { "name": "commit", @@ -3602,8 +3717,8 @@ "git_commit_summary": { "type": "function", "file": "git2/commit.h", - "line": 128, - "lineto": 128, + "line": 132, + "lineto": 132, "args": [ { "name": "commit", @@ -3624,8 +3739,8 @@ "git_commit_body": { "type": "function", "file": "git2/commit.h", - "line": 141, - "lineto": 141, + "line": 145, + "lineto": 145, "args": [ { "name": "commit", @@ -3646,8 +3761,8 @@ "git_commit_time": { "type": "function", "file": "git2/commit.h", - "line": 149, - "lineto": 149, + "line": 153, + "lineto": 153, "args": [ { "name": "commit", @@ -3663,16 +3778,16 @@ "group": "commit", "examples": { "general.c": [ - "ex/v1.8.4/general.html#git_commit_time-18", - "ex/v1.8.4/general.html#git_commit_time-19" + "ex/v1.9.1/general.html#git_commit_time-18", + "ex/v1.9.1/general.html#git_commit_time-19" ] } }, "git_commit_time_offset": { "type": "function", "file": "git2/commit.h", - "line": 157, - "lineto": 157, + "line": 161, + "lineto": 161, "args": [ { "name": "commit", @@ -3693,8 +3808,8 @@ "git_commit_committer": { "type": "function", "file": "git2/commit.h", - "line": 165, - "lineto": 165, + "line": 169, + "lineto": 169, "args": [ { "name": "commit", @@ -3712,16 +3827,16 @@ "comments": "", "group": "commit", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_committer-5"], - "general.c": ["ex/v1.8.4/general.html#git_commit_committer-20"], - "log.c": ["ex/v1.8.4/log.html#git_commit_committer-12"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_commit_committer-5"], + "general.c": ["ex/v1.9.1/general.html#git_commit_committer-20"], + "log.c": ["ex/v1.9.1/log.html#git_commit_committer-12"] } }, "git_commit_author": { "type": "function", "file": "git2/commit.h", - "line": 173, - "lineto": 173, + "line": 177, + "lineto": 177, "args": [ { "name": "commit", @@ -3739,22 +3854,22 @@ "comments": "", "group": "commit", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_author-6"], + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_commit_author-6"], "general.c": [ - "ex/v1.8.4/general.html#git_commit_author-21", - "ex/v1.8.4/general.html#git_commit_author-22" + "ex/v1.9.1/general.html#git_commit_author-21", + "ex/v1.9.1/general.html#git_commit_author-22" ], "log.c": [ - "ex/v1.8.4/log.html#git_commit_author-13", - "ex/v1.8.4/log.html#git_commit_author-14" + "ex/v1.9.1/log.html#git_commit_author-13", + "ex/v1.9.1/log.html#git_commit_author-14" ] } }, "git_commit_committer_with_mailmap": { "type": "function", "file": "git2/commit.h", - "line": 186, - "lineto": 187, + "line": 190, + "lineto": 191, "args": [ { "name": "out", @@ -3782,8 +3897,8 @@ "git_commit_author_with_mailmap": { "type": "function", "file": "git2/commit.h", - "line": 200, - "lineto": 201, + "line": 204, + "lineto": 205, "args": [ { "name": "out", @@ -3811,8 +3926,8 @@ "git_commit_raw_header": { "type": "function", "file": "git2/commit.h", - "line": 209, - "lineto": 209, + "line": 213, + "lineto": 213, "args": [ { "name": "commit", @@ -3833,8 +3948,8 @@ "git_commit_tree": { "type": "function", "file": "git2/commit.h", - "line": 218, - "lineto": 218, + "line": 222, + "lineto": 222, "args": [ { "name": "tree_out", @@ -3855,19 +3970,19 @@ "group": "commit", "examples": { "log.c": [ - "ex/v1.8.4/log.html#git_commit_tree-15", - "ex/v1.8.4/log.html#git_commit_tree-16", - "ex/v1.8.4/log.html#git_commit_tree-17", - "ex/v1.8.4/log.html#git_commit_tree-18", - "ex/v1.8.4/log.html#git_commit_tree-19" + "ex/v1.9.1/log.html#git_commit_tree-15", + "ex/v1.9.1/log.html#git_commit_tree-16", + "ex/v1.9.1/log.html#git_commit_tree-17", + "ex/v1.9.1/log.html#git_commit_tree-18", + "ex/v1.9.1/log.html#git_commit_tree-19" ] } }, "git_commit_tree_id": { "type": "function", "file": "git2/commit.h", - "line": 228, - "lineto": 228, + "line": 232, + "lineto": 232, "args": [ { "name": "commit", @@ -3885,14 +4000,14 @@ "comments": "", "group": "commit", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_tree_id-7"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_commit_tree_id-7"] } }, "git_commit_parentcount": { "type": "function", "file": "git2/commit.h", - "line": 236, - "lineto": 236, + "line": 240, + "lineto": 240, "args": [ { "name": "commit", @@ -3910,19 +4025,19 @@ "comments": "", "group": "commit", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_parentcount-8"], - "general.c": ["ex/v1.8.4/general.html#git_commit_parentcount-23"], + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_commit_parentcount-8"], + "general.c": ["ex/v1.9.1/general.html#git_commit_parentcount-23"], "log.c": [ - "ex/v1.8.4/log.html#git_commit_parentcount-20", - "ex/v1.8.4/log.html#git_commit_parentcount-21" + "ex/v1.9.1/log.html#git_commit_parentcount-20", + "ex/v1.9.1/log.html#git_commit_parentcount-21" ] } }, "git_commit_parent": { "type": "function", "file": "git2/commit.h", - "line": 246, - "lineto": 249, + "line": 250, + "lineto": 253, "args": [ { "name": "out", @@ -3947,18 +4062,18 @@ "comments": "", "group": "commit", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_commit_parent-24"], + "general.c": ["ex/v1.9.1/general.html#git_commit_parent-24"], "log.c": [ - "ex/v1.8.4/log.html#git_commit_parent-22", - "ex/v1.8.4/log.html#git_commit_parent-23" + "ex/v1.9.1/log.html#git_commit_parent-22", + "ex/v1.9.1/log.html#git_commit_parent-23" ] } }, "git_commit_parent_id": { "type": "function", "file": "git2/commit.h", - "line": 260, - "lineto": 262, + "line": 264, + "lineto": 266, "args": [ { "name": "commit", @@ -3981,15 +4096,15 @@ "comments": "", "group": "commit", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_commit_parent_id-9"], - "log.c": ["ex/v1.8.4/log.html#git_commit_parent_id-24"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_commit_parent_id-9"], + "log.c": ["ex/v1.9.1/log.html#git_commit_parent_id-24"] } }, "git_commit_nth_gen_ancestor": { "type": "function", "file": "git2/commit.h", - "line": 278, - "lineto": 281, + "line": 282, + "lineto": 285, "args": [ { "name": "ancestor", @@ -4020,8 +4135,8 @@ "git_commit_header_field": { "type": "function", "file": "git2/commit.h", - "line": 293, - "lineto": 293, + "line": 297, + "lineto": 297, "args": [ { "name": "out", @@ -4052,8 +4167,8 @@ "git_commit_extract_signature": { "type": "function", "file": "git2/commit.h", - "line": 313, - "lineto": 313, + "line": 317, + "lineto": 317, "args": [ { "name": "signature", @@ -4094,8 +4209,8 @@ "git_commit_create": { "type": "function", "file": "git2/commit.h", - "line": 359, - "lineto": 369, + "line": 363, + "lineto": 373, "args": [ { "name": "id", @@ -4157,122 +4272,184 @@ "description": "

Create new commit in the repository from a list of git_object pointers

\n", "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n", "group": "commit", - "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_commit_create-7"] } + "examples": { "merge.c": ["ex/v1.9.1/merge.html#git_commit_create-7"] } }, "git_commit_create_v": { "type": "function", "file": "git2/commit.h", - "line": 385, - "lineto": 395, - "args": [ - { "name": "id", "type": "git_oid *", "comment": null }, - { "name": "repo", "type": "git_repository *", "comment": null }, - { "name": "update_ref", "type": "const char *", "comment": null }, - { "name": "author", "type": "const git_signature *", "comment": null }, - { - "name": "committer", - "type": "const git_signature *", - "comment": null - }, - { "name": "message_encoding", "type": "const char *", "comment": null }, - { "name": "message", "type": "const char *", "comment": null }, - { "name": "tree", "type": "const git_tree *", "comment": null }, - { "name": "parent_count", "type": "size_t", "comment": null } - ], - "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count", - "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t", - "return": { "type": "int", "comment": null }, - "description": "

Create new commit in the repository using a variable argument list.

\n", - "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n\n

The parents for the commit are specified as a variable list of pointers to const git_commit *. Note that this is a convenience method which may not be safe to export for certain languages or compilers

\n\n

All other parameters remain the same as git_commit_create().

\n", - "group": "commit", - "examples": { - "commit.c": ["ex/v1.8.4/commit.html#git_commit_create_v-1"], - "general.c": ["ex/v1.8.4/general.html#git_commit_create_v-25"], - "init.c": ["ex/v1.8.4/init.html#git_commit_create_v-1"] - } - }, - "git_commit_create_from_stage": { - "type": "function", - "file": "git2/commit.h", - "line": 434, - "lineto": 438, + "line": 420, + "lineto": 430, "args": [ { "name": "id", "type": "git_oid *", - "comment": "pointer to store the new commit's object id" + "comment": "Pointer in which to store the OID of the newly created commit" }, { "name": "repo", "type": "git_repository *", - "comment": "repository to commit changes in" + "comment": "Repository where to store the commit" }, { - "name": "message", + "name": "update_ref", "type": "const char *", - "comment": "the commit message" - }, - { - "name": "opts", - "type": "const git_commit_create_options *", - "comment": "options for creating the commit" - } - ], - "argline": "git_oid *id, git_repository *repo, const char *message, const git_commit_create_options *opts", - "sig": "git_oid *::git_repository *::const char *::const git_commit_create_options *", - "return": { - "type": "int", - "comment": " 0 on success, GIT_EUNCHANGED if there were no changes to commit, or an error code" - }, - "description": "

Commits the staged changes in the repository; this is a near analog to\n git commit -m message.

\n", - "comments": "

By default, empty commits are not allowed.

\n", - "group": "commit" - }, - "git_commit_amend": { - "type": "function", - "file": "git2/commit.h", - "line": 461, - "lineto": 469, - "args": [ - { "name": "id", "type": "git_oid *", "comment": null }, - { - "name": "commit_to_amend", - "type": "const git_commit *", - "comment": null - }, - { "name": "update_ref", "type": "const char *", "comment": null }, - { "name": "author", "type": "const git_signature *", "comment": null }, - { - "name": "committer", - "type": "const git_signature *", - "comment": null - }, - { "name": "message_encoding", "type": "const char *", "comment": null }, - { "name": "message", "type": "const char *", "comment": null }, - { "name": "tree", "type": "const git_tree *", "comment": null } - ], - "argline": "git_oid *id, const git_commit *commit_to_amend, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree", - "sig": "git_oid *::const git_commit *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *", - "return": { "type": "int", "comment": null }, - "description": "

Amend an existing commit by replacing only non-NULL values.

\n", - "comments": "

This creates a new commit that is exactly the same as the old commit, except that any non-NULL values will be updated. The new commit has the same parents as the old commit.

\n\n

The update_ref value works as in the regular git_commit_create(), updating the ref to point to the newly rewritten commit. If you want to amend a commit that is not currently the tip of the branch and then rewrite the following commits to reach a ref, pass this as NULL and update the rest of the commit chain and ref separately.

\n\n

Unlike git_commit_create(), the author, committer, message, message_encoding, and tree parameters can be NULL in which case this will use the values from the original commit_to_amend.

\n\n

All parameters have the same meanings as in git_commit_create().

\n", - "group": "commit" - }, - "git_commit_create_buffer": { - "type": "function", - "file": "git2/commit.h", - "line": 506, - "lineto": 515, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "the buffer into which to write the commit object content" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where the referenced tree and parents live" + "comment": "If not NULL, name of the reference that\n\twill be updated to point to this commit. If the reference\n\tis not direct, it will be resolved to a direct reference.\n\tUse \"HEAD\" to update the HEAD of the current branch and\n\tmake it point to this commit. If the reference doesn't\n\texist yet, it will be created. If it does exist, the first\n\tparent must be the tip of this branch." + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "Signature with author and author time of commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "Signature with committer and * commit time of commit" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this commit" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." + }, + { + "name": "parent_count", + "type": "size_t", + "comment": "Number of parents for this commit" + } + ], + "argline": "git_oid *id, git_repository *repo, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree, size_t parent_count", + "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *::size_t", + "return": { + "type": "int", + "comment": " 0 or an error code\n\tThe created commit will be written to the Object Database and\n\tthe given reference will be updated to point to it" + }, + "description": "

Create new commit in the repository using a variable argument list.

\n", + "comments": "

The message will not be cleaned up automatically. You can do that with the git_message_prettify() function.

\n\n

The parents for the commit are specified as a variable list of pointers to const git_commit *. Note that this is a convenience method which may not be safe to export for certain languages or compilers

\n\n

All other parameters remain the same as git_commit_create().

\n", + "group": "commit", + "examples": { + "commit.c": ["ex/v1.9.1/commit.html#git_commit_create_v-1"], + "general.c": ["ex/v1.9.1/general.html#git_commit_create_v-25"], + "init.c": ["ex/v1.9.1/init.html#git_commit_create_v-1"] + } + }, + "git_commit_create_from_stage": { + "type": "function", + "file": "git2/commit.h", + "line": 472, + "lineto": 476, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "pointer to store the new commit's object id" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository to commit changes in" + }, + { + "name": "message", + "type": "const char *", + "comment": "the commit message" + }, + { + "name": "opts", + "type": "const git_commit_create_options *", + "comment": "options for creating the commit" + } + ], + "argline": "git_oid *id, git_repository *repo, const char *message, const git_commit_create_options *opts", + "sig": "git_oid *::git_repository *::const char *::const git_commit_create_options *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_EUNCHANGED if there were no changes to commit, or an error code" + }, + "description": "

Commits the staged changes in the repository; this is a near analog to\n git commit -m message.

\n", + "comments": "

By default, empty commits are not allowed.

\n", + "group": "commit" + }, + "git_commit_amend": { + "type": "function", + "file": "git2/commit.h", + "line": 528, + "lineto": 536, + "args": [ + { + "name": "id", + "type": "git_oid *", + "comment": "Pointer in which to store the OID of the newly created commit" + }, + { + "name": "commit_to_amend", + "type": "const git_commit *", + "comment": "The commit to amend" + }, + { + "name": "update_ref", + "type": "const char *", + "comment": "If not NULL, name of the reference that\n\twill be updated to point to this commit. If the reference\n\tis not direct, it will be resolved to a direct reference.\n\tUse \"HEAD\" to update the HEAD of the current branch and\n\tmake it point to this commit. If the reference doesn't\n\texist yet, it will be created. If it does exist, the first\n\tparent must be the tip of this branch." + }, + { + "name": "author", + "type": "const git_signature *", + "comment": "Signature with author and author time of commit" + }, + { + "name": "committer", + "type": "const git_signature *", + "comment": "Signature with committer and * commit time of commit" + }, + { + "name": "message_encoding", + "type": "const char *", + "comment": "The encoding for the message in the\n commit, represented with a standard encoding name.\n E.g. \"UTF-8\". If NULL, no encoding header is written and\n UTF-8 is assumed." + }, + { + "name": "message", + "type": "const char *", + "comment": "Full message for this commit" + }, + { + "name": "tree", + "type": "const git_tree *", + "comment": "An instance of a `git_tree` object that will\n be used as the tree for the commit. This tree object must\n also be owned by the given `repo`." + } + ], + "argline": "git_oid *id, const git_commit *commit_to_amend, const char *update_ref, const git_signature *author, const git_signature *committer, const char *message_encoding, const char *message, const git_tree *tree", + "sig": "git_oid *::const git_commit *::const char *::const git_signature *::const git_signature *::const char *::const char *::const git_tree *", + "return": { + "type": "int", + "comment": " 0 or an error code\n\tThe created commit will be written to the Object Database and\n\tthe given reference will be updated to point to it" + }, + "description": "

Amend an existing commit by replacing only non-NULL values.

\n", + "comments": "

This creates a new commit that is exactly the same as the old commit, except that any non-NULL values will be updated. The new commit has the same parents as the old commit.

\n\n

The update_ref value works as in the regular git_commit_create(), updating the ref to point to the newly rewritten commit. If you want to amend a commit that is not currently the tip of the branch and then rewrite the following commits to reach a ref, pass this as NULL and update the rest of the commit chain and ref separately.

\n\n

Unlike git_commit_create(), the author, committer, message, message_encoding, and tree parameters can be NULL in which case this will use the values from the original commit_to_amend.

\n\n

All parameters have the same meanings as in git_commit_create().

\n", + "group": "commit" + }, + "git_commit_create_buffer": { + "type": "function", + "file": "git2/commit.h", + "line": 573, + "lineto": 582, + "args": [ + { + "name": "out", + "type": "git_buf *", + "comment": "the buffer into which to write the commit object content" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository where the referenced tree and parents live" }, { "name": "author", @@ -4320,8 +4497,8 @@ "git_commit_create_with_signature": { "type": "function", "file": "git2/commit.h", - "line": 533, - "lineto": 538, + "line": 600, + "lineto": 605, "args": [ { "name": "out", @@ -4359,8 +4536,8 @@ "git_commit_dup": { "type": "function", "file": "git2/commit.h", - "line": 548, - "lineto": 548, + "line": 615, + "lineto": 615, "args": [ { "name": "out", @@ -4383,8 +4560,8 @@ "git_commitarray_dispose": { "type": "function", "file": "git2/commit.h", - "line": 603, - "lineto": 603, + "line": 670, + "lineto": 670, "args": [ { "name": "array", @@ -4402,8 +4579,8 @@ "git_libgit2_version": { "type": "function", "file": "git2/common.h", - "line": 117, - "lineto": 117, + "line": 119, + "lineto": 119, "args": [ { "name": "major", @@ -4434,8 +4611,8 @@ "git_libgit2_prerelease": { "type": "function", "file": "git2/common.h", - "line": 128, - "lineto": 128, + "line": 130, + "lineto": 130, "args": [], "argline": "", "sig": "", @@ -4450,8 +4627,8 @@ "git_libgit2_features": { "type": "function", "file": "git2/common.h", - "line": 180, - "lineto": 180, + "line": 184, + "lineto": 184, "args": [], "argline": "", "sig": "", @@ -4460,14 +4637,36 @@ "comment": " A combination of GIT_FEATURE_* values." }, "description": "

Query compile time options for libgit2.

\n", - "comments": "
    \n
  • GIT_FEATURE_THREADS Libgit2 was compiled with thread support. Note that thread support is still to be seen as a 'work in progress' - basic object lookups are believed to be threadsafe, but other operations may not be.

  • \n
  • GIT_FEATURE_HTTPS Libgit2 supports the https:// protocol. This requires the openssl library to be found when compiling libgit2.

  • \n
  • GIT_FEATURE_SSH Libgit2 supports the SSH protocol for network operations. This requires the libssh2 library to be found when compiling libgit2

  • \n
  • GIT_FEATURE_NSEC Libgit2 supports the sub-second resolution in file modification times.

  • \n
\n", + "comments": "", + "group": "libgit2" + }, + "git_libgit2_feature_backend": { + "type": "function", + "file": "git2/common.h", + "line": 205, + "lineto": 206, + "args": [ + { + "name": "feature", + "type": "git_feature_t", + "comment": "the feature to query details for" + } + ], + "argline": "git_feature_t feature", + "sig": "git_feature_t", + "return": { + "type": "const char *", + "comment": " the provider details, or NULL if the feature is not supported" + }, + "description": "

Query the backend details for the compile-time feature in libgit2.

\n", + "comments": "

This will return the "backend" for the feature, which is useful for things like HTTPS or SSH support, that can have multiple backends that could be compiled in.

\n\n

For example, when libgit2 is compiled with dynamic OpenSSL support, the feature backend will be openssl-dynamic. The feature backend names reflect the compilation options specified to the build system (though in all lower case). The backend may be "builtin" for features that are provided by libgit2 itself.

\n\n

If the feature is not supported by the library, this API returns NULL.

\n", "group": "libgit2" }, "git_libgit2_opts": { "type": "function", "file": "git2/common.h", - "line": 530, - "lineto": 530, + "line": 569, + "lineto": 569, "args": [{ "name": "option", "type": "int", "comment": "Option key" }], "argline": "int option", "sig": "int", @@ -4476,14 +4675,14 @@ "comment": " 0 on success, \n<\n0 on failure" }, "description": "

Set or query a library global option

\n", - "comments": "

Available options:

\n\n
* opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *):\n\n    > Get the maximum mmap window size\n\n* opts(GIT_OPT_SET_MWINDOW_SIZE, size_t):\n\n    > Set the maximum mmap window size\n\n* opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *):\n\n    > Get the maximum memory that will be mapped in total by the library\n\n* opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t):\n\n    > Set the maximum amount of memory that can be mapped at any time       > by the library\n\n* opts(GIT_OPT_GET_MWINDOW_FILE_LIMIT, size_t *):\n\n    > Get the maximum number of files that will be mapped at any time by the        > library\n\n* opts(GIT_OPT_SET_MWINDOW_FILE_LIMIT, size_t):\n\n    > Set the maximum number of files that can be mapped at any time        > by the library. The default (0) is unlimited.\n\n* opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf)\n\n    > Get the search path for a given level of config data.  "level" must       > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`,       > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`.        > The search path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path)\n\n    > Set the search path for a level of config data.  The search path      > applied to shared attributes and ignore files, too.       >       > - `path` lists directories delimited by GIT_PATH_LIST_SEPARATOR.      >   Pass NULL to reset to the default (generally based on environment       >   variables).  Use magic path `$PATH` to include the old value        >   of the path (if you want to prepend or append, for instance).       >       > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`,      >   `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or       >   `GIT_CONFIG_LEVEL_PROGRAMDATA`.\n\n* opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_object_t type, size_t size)\n\n    > Set the maximum data size for the given type of object to be      > considered eligible for caching in memory.  Setting to value to       > zero means that that type of object will not be cached.       > Defaults to 0 for GIT_OBJECT_BLOB (i.e. won't cache blobs) and 4k     > for GIT_OBJECT_COMMIT, GIT_OBJECT_TREE, and GIT_OBJECT_TAG.\n\n* opts(GIT_OPT_SET_CACHE_MAX_SIZE, ssize_t max_storage_bytes)\n\n    > Set the maximum total data size that will be cached in memory     > across all repositories before libgit2 starts evicting objects        > from the cache.  This is a soft limit, in that the library might      > briefly exceed it, but will start aggressively evicting objects       > from cache when that happens.  The default cache size is 256MB.\n\n* opts(GIT_OPT_ENABLE_CACHING, int enabled)\n\n    > Enable or disable caching completely.     >       > Because caches are repository-specific, disabling the cache       > cannot immediately clear all cached objects, but each cache will      > be cleared on the next attempt to update anything in it.\n\n* opts(GIT_OPT_GET_CACHED_MEMORY, ssize_t *current, ssize_t *allowed)\n\n    > Get the current bytes in cache and the maximum that would be      > allowed in the cache.\n\n* opts(GIT_OPT_GET_TEMPLATE_PATH, git_buf *out)\n\n    > Get the default template path.        > The path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_TEMPLATE_PATH, const char *path)\n\n    > Set the default template path.        >       > - `path` directory of template.\n\n* opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, const char *file, const char *path)\n\n    > Set the SSL certificate-authority locations.      >       > - `file` is the location of a file containing several     >   certificates concatenated together.     > - `path` is the location of a directory holding several       >   certificates, one per file.     >       > Either parameter may be `NULL`, but not both.\n\n* opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)\n\n    > Set the value of the comment section of the User-Agent header.        > This can be information about your product and its version.       > By default this is "libgit2" followed by the libgit2 version.     >       > This value will be appended to User-Agent _product_, which        > is typically set to "git/2.0".        >       > Set to the empty string ("") to not send any information in the       > comment section, or set to NULL to restore the default.\n\n* opts(GIT_OPT_GET_USER_AGENT, git_buf *out)\n\n    > Get the value of the User-Agent header.       > The User-Agent is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_USER_AGENT_PRODUCT, const char *user_agent_product)\n\n    > Set the value of the product portion of the User-Agent header.        > This defaults to "git/2.0", for compatibility with other git      > clients. It is recommended to keep this as git/<version> for      > compatibility with servers that do user-agent detection.      >       > Set to the empty string ("") to not send any user-agent string,       > or set to NULL to restore the default.\n\n* opts(GIT_OPT_GET_USER_AGENT_PRODUCT, git_buf *out)\n\n    > Get the value of the User-Agent product header.       > The User-Agent product is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value)\n\n    > Set the share mode used when opening files on Windows.        > For more information, see the documentation for CreateFile.       > The default is: FILE_SHARE_READ | FILE_SHARE_WRITE.  This is      > ignored and unused on non-Windows platforms.\n\n* opts(GIT_OPT_GET_WINDOWS_SHAREMODE, unsigned long *value)\n\n    > Get the share mode used when opening files on Windows.\n\n* opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled)\n\n    > Enable strict input validation when creating new objects      > to ensure that all inputs to the new objects are valid.  For      > example, when this is enabled, the parent(s) and tree inputs      > will be validated when creating a new commit.  This defaults      > to enabled.\n\n* opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, int enabled)\n\n    > Validate the target of a symbolic ref when creating it.  For      > example, `foobar` is not a valid ref, therefore `foobar` is       > not a valid target for a symbolic ref by default, whereas     > `refs/heads/foobar` is.  Disabling this bypasses validation       > so that an arbitrary strings such as `foobar` can be used     > for a symbolic ref target.  This defaults to enabled.\n\n* opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers)\n\n    > Set the SSL ciphers use for HTTPS connections.        >       > - `ciphers` is the list of ciphers that are eanbled.\n\n* opts(GIT_OPT_ENABLE_OFS_DELTA, int enabled)\n\n    > Enable or disable the use of "offset deltas" when creating packfiles,     > and the negotiation of them when talking to a remote server.      > Offset deltas store a delta base location as an offset into the       > packfile from the current location, which provides a shorter encoding     > and thus smaller resultant packfiles.     > Packfiles containing offset deltas can still be read.     > This defaults to enabled.\n\n* opts(GIT_OPT_ENABLE_FSYNC_GITDIR, int enabled)\n\n    > Enable synchronized writes of files in the gitdir using `fsync`       > (or the platform equivalent) to ensure that new object data       > is written to permanent storage, not simply cached.  This     > defaults to disabled.\n\n opts(GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION, int enabled)\n\n    > Enable strict verification of object hashsums when reading        > objects from disk. This may impact performance due to an      > additional checksum calculation on each object. This defaults     > to enabled.\n\n opts(GIT_OPT_SET_ALLOCATOR, git_allocator *allocator)\n\n    > Set the memory allocator to a different memory allocator. This        > allocator will then be used to make all memory allocations for        > libgit2 operations.  If the given `allocator` is NULL, then the       > system default will be restored.\n\n opts(GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, int enabled)\n\n    > Ensure that there are no unsaved changes in the index before      > beginning any operation that reloads the index from disk (eg,     > checkout).  If there are unsaved changes, the instruction will        > fail.  (Using the FORCE flag to checkout will still overwrite     > these changes.)\n\n opts(GIT_OPT_GET_PACK_MAX_OBJECTS, size_t *out)\n\n    > Get the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote. This can be      > used to limit maximum memory usage when fetching from an untrusted        > remote.\n\n opts(GIT_OPT_SET_PACK_MAX_OBJECTS, size_t objects)\n\n    > Set the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote.\n\n opts(GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS, int enabled)       > This will cause .keep file existence checks to be skipped when        > accessing packfiles, which can help performance with remote filesystems.\n\n opts(GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE, int enabled)     > When connecting to a server using NTLM or Negotiate       > authentication, use expect/continue when POSTing data.        > This option is not available on Windows.\n
\n\n

opts(GIT_OPT_SET_ODB_PACKED_PRIORITY, int priority) > Override the default priority of the packed ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_SET_ODB_LOOSE_PRIORITY, int priority) > Override the default priority of the loose ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out) > Returns the list of git extensions that are supported. This > is the list of built-in extensions supported by libgit2 and > custom extensions that have been added with > GIT_OPT_SET_EXTENSIONS. Extensions that have been negated > will not be returned. The returned list should be released > with git_strarray_dispose.

\n\n

opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len) > Set that the given git extensions are supported by the caller. > Extensions supported by libgit2 may be negated by prefixing > them with a !. For example: setting extensions to > { "!noop", "newext" } indicates that the caller does not want > to support repositories with the noop extension but does want > to support repositories with the newext extension.

\n\n

opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) > Gets the owner validation setting for repository > directories.

\n\n

opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) > Set that repository directories should be owned by the current > user. The default is to validate ownership.

\n\n

opts(GIT_OPT_GET_HOMEDIR, git_buf *out) > Gets the current user's home directory, as it will be used > for file lookups. The path is written to the out buffer.

\n\n

opts(GIT_OPT_SET_HOMEDIR, const char *path) > Sets the directory used as the current user's home directory, > for file lookups. > > - path directory of home directory.

\n\n

opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) to attempt connections to > a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) to attempt connections to > a remote server. Set to 0 to use the system default. Note that > this may not be able to be configured longer than the system > default, typically 75 seconds.

\n\n

opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) for reading from and writing > to a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) for reading from and writing > to a remote server. Set to 0 to use the system default.

\n", + "comments": "

Available options:

\n\n
* opts(GIT_OPT_GET_MWINDOW_SIZE, size_t *):\n\n    > Get the maximum mmap window size\n\n* opts(GIT_OPT_SET_MWINDOW_SIZE, size_t):\n\n    > Set the maximum mmap window size\n\n* opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, size_t *):\n\n    > Get the maximum memory that will be mapped in total by the library\n\n* opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, size_t):\n\n    > Set the maximum amount of memory that can be mapped at any time       > by the library\n\n* opts(GIT_OPT_GET_MWINDOW_FILE_LIMIT, size_t *):\n\n    > Get the maximum number of files that will be mapped at any time by the        > library\n\n* opts(GIT_OPT_SET_MWINDOW_FILE_LIMIT, size_t):\n\n    > Set the maximum number of files that can be mapped at any time        > by the library. The default (0) is unlimited.\n\n* opts(GIT_OPT_GET_SEARCH_PATH, int level, git_buf *buf)\n\n    > Get the search path for a given level of config data.  "level" must       > be one of `GIT_CONFIG_LEVEL_SYSTEM`, `GIT_CONFIG_LEVEL_GLOBAL`,       > `GIT_CONFIG_LEVEL_XDG`, or `GIT_CONFIG_LEVEL_PROGRAMDATA`.        > The search path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_SEARCH_PATH, int level, const char *path)\n\n    > Set the search path for a level of config data.  The search path      > applied to shared attributes and ignore files, too.       >       > - `path` lists directories delimited by GIT_PATH_LIST_SEPARATOR.      >   Pass NULL to reset to the default (generally based on environment       >   variables).  Use magic path `$PATH` to include the old value        >   of the path (if you want to prepend or append, for instance).       >       > - `level` must be `GIT_CONFIG_LEVEL_SYSTEM`,      >   `GIT_CONFIG_LEVEL_GLOBAL`, `GIT_CONFIG_LEVEL_XDG`, or       >   `GIT_CONFIG_LEVEL_PROGRAMDATA`.\n\n* opts(GIT_OPT_SET_CACHE_OBJECT_LIMIT, git_object_t type, size_t size)\n\n    > Set the maximum data size for the given type of object to be      > considered eligible for caching in memory.  Setting to value to       > zero means that that type of object will not be cached.       > Defaults to 0 for GIT_OBJECT_BLOB (i.e. won't cache blobs) and 4k     > for GIT_OBJECT_COMMIT, GIT_OBJECT_TREE, and GIT_OBJECT_TAG.\n\n* opts(GIT_OPT_SET_CACHE_MAX_SIZE, ssize_t max_storage_bytes)\n\n    > Set the maximum total data size that will be cached in memory     > across all repositories before libgit2 starts evicting objects        > from the cache.  This is a soft limit, in that the library might      > briefly exceed it, but will start aggressively evicting objects       > from cache when that happens.  The default cache size is 256MB.\n\n* opts(GIT_OPT_ENABLE_CACHING, int enabled)\n\n    > Enable or disable caching completely.     >       > Because caches are repository-specific, disabling the cache       > cannot immediately clear all cached objects, but each cache will      > be cleared on the next attempt to update anything in it.\n\n* opts(GIT_OPT_GET_CACHED_MEMORY, ssize_t *current, ssize_t *allowed)\n\n    > Get the current bytes in cache and the maximum that would be      > allowed in the cache.\n\n* opts(GIT_OPT_GET_TEMPLATE_PATH, git_buf *out)\n\n    > Get the default template path.        > The path is written to the `out` buffer.\n\n* opts(GIT_OPT_SET_TEMPLATE_PATH, const char *path)\n\n    > Set the default template path.        >       > - `path` directory of template.\n\n* opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, const char *file, const char *path)\n\n    > Set the SSL certificate-authority locations.      >       > - `file` is the location of a file containing several     >   certificates concatenated together.     > - `path` is the location of a directory holding several       >   certificates, one per file.     >       > Calling `GIT_OPT_ADD_SSL_X509_CERT` may override the      > data in `path`.       >       > Either parameter may be `NULL`, but not both.\n
\n\n
    \n
  • opts(GIT_OPT_ADD_SSL_X509_CERT, const X509 *cert)

    \n\n
    > Add a raw X509 certificate into the SSL certs store.      > This certificate is only used by libgit2 invocations      > during the application lifetime and is not persisted      > to disk. This certificate cannot be removed from the      > application once is has been added.       >       > - `cert` is the raw X509 cert will be added to cert store.\n
    \n\n
      \n
    • opts(GIT_OPT_SET_USER_AGENT, const char *user_agent)

      \n\n
      \n

      Set the value of the comment section of the User-Agent header. > This can be information about your product and its version. > By default this is "libgit2" followed by the libgit2 version. > > This value will be appended to User-Agent product, which > is typically set to "git/2.0". > > Set to the empty string ("") to not send any information in the > comment section, or set to NULL to restore the default.

      \n
    • \n
    • opts(GIT_OPT_GET_USER_AGENT, git_buf *out)

      \n\n
      \n

      Get the value of the User-Agent header. > The User-Agent is written to the out buffer.

      \n
    • \n
    • opts(GIT_OPT_SET_USER_AGENT_PRODUCT, const char *user_agent_product)

      \n\n
      \n

      Set the value of the product portion of the User-Agent header. > This defaults to "git/2.0", for compatibility with other git > clients. It is recommended to keep this as git/ for > compatibility with servers that do user-agent detection. > > Set to the empty string ("") to not send any user-agent string, > or set to NULL to restore the default.

      \n
    • \n
    • opts(GIT_OPT_GET_USER_AGENT_PRODUCT, git_buf *out)

      \n\n
      \n

      Get the value of the User-Agent product header. > The User-Agent product is written to the out buffer.

      \n
    • \n
    • opts(GIT_OPT_SET_WINDOWS_SHAREMODE, unsigned long value)

      \n\n
      \n

      Set the share mode used when opening files on Windows. > For more information, see the documentation for CreateFile. > The default is: FILE_SHARE_READ | FILE_SHARE_WRITE. This is > ignored and unused on non-Windows platforms.

      \n
    • \n
    • opts(GIT_OPT_GET_WINDOWS_SHAREMODE, unsigned long *value)

      \n\n
      \n

      Get the share mode used when opening files on Windows.

      \n
    • \n
    • opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled)

      \n\n
      \n

      Enable strict input validation when creating new objects > to ensure that all inputs to the new objects are valid. For > example, when this is enabled, the parent(s) and tree inputs > will be validated when creating a new commit. This defaults > to enabled.

      \n
    • \n
    • opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, int enabled)

      \n\n
      \n

      Validate the target of a symbolic ref when creating it. For > example, foobar is not a valid ref, therefore foobar is > not a valid target for a symbolic ref by default, whereas > refs/heads/foobar is. Disabling this bypasses validation > so that an arbitrary strings such as foobar can be used > for a symbolic ref target. This defaults to enabled.

      \n
    • \n
    • opts(GIT_OPT_SET_SSL_CIPHERS, const char *ciphers)

      \n\n
      \n

      Set the SSL ciphers use for HTTPS connections. > > - ciphers is the list of ciphers that are eanbled.

      \n
    • \n
    • opts(GIT_OPT_ENABLE_OFS_DELTA, int enabled)

      \n\n
      \n

      Enable or disable the use of "offset deltas" when creating packfiles, > and the negotiation of them when talking to a remote server. > Offset deltas store a delta base location as an offset into the > packfile from the current location, which provides a shorter encoding > and thus smaller resultant packfiles. > Packfiles containing offset deltas can still be read. > This defaults to enabled.

      \n
    • \n
    • opts(GIT_OPT_ENABLE_FSYNC_GITDIR, int enabled)

      \n\n
      \n

      Enable synchronized writes of files in the gitdir using fsync > (or the platform equivalent) to ensure that new object data > is written to permanent storage, not simply cached. This > defaults to disabled.

      \n
    • \n
    \n\n

    opts(GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION, int enabled)

    \n\n
    > Enable strict verification of object hashsums when reading        > objects from disk. This may impact performance due to an      > additional checksum calculation on each object. This defaults     > to enabled.\n
    \n\n

    opts(GIT_OPT_SET_ALLOCATOR, git_allocator *allocator)

    \n\n
    > Set the memory allocator to a different memory allocator. This        > allocator will then be used to make all memory allocations for        > libgit2 operations.  If the given `allocator` is NULL, then the       > system default will be restored.\n
    \n\n

    opts(GIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY, int enabled)

    \n\n
    > Ensure that there are no unsaved changes in the index before      > beginning any operation that reloads the index from disk (eg,     > checkout).  If there are unsaved changes, the instruction will        > fail.  (Using the FORCE flag to checkout will still overwrite     > these changes.)\n
    \n\n

    opts(GIT_OPT_GET_PACK_MAX_OBJECTS, size_t *out)

    \n\n
    > Get the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote. This can be      > used to limit maximum memory usage when fetching from an untrusted        > remote.\n
    \n\n

    opts(GIT_OPT_SET_PACK_MAX_OBJECTS, size_t objects)

    \n\n
    > Set the maximum number of objects libgit2 will allow in a pack        > file when downloading a pack file from a remote.\n
    \n\n

    opts(GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS, int enabled) > This will cause .keep file existence checks to be skipped when > accessing packfiles, which can help performance with remote filesystems.

    \n\n

    opts(GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE, int enabled) > When connecting to a server using NTLM or Negotiate > authentication, use expect/continue when POSTing data. > This option is not available on Windows.

  • \n
\n\n

opts(GIT_OPT_SET_ODB_PACKED_PRIORITY, int priority) > Override the default priority of the packed ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_SET_ODB_LOOSE_PRIORITY, int priority) > Override the default priority of the loose ODB backend which > is added when default backends are assigned to a repository

\n\n

opts(GIT_OPT_GET_EXTENSIONS, git_strarray *out) > Returns the list of git extensions that are supported. This > is the list of built-in extensions supported by libgit2 and > custom extensions that have been added with > GIT_OPT_SET_EXTENSIONS. Extensions that have been negated > will not be returned. The returned list should be released > with git_strarray_dispose.

\n\n

opts(GIT_OPT_SET_EXTENSIONS, const char **extensions, size_t len) > Set that the given git extensions are supported by the caller. > Extensions supported by libgit2 may be negated by prefixing > them with a !. For example: setting extensions to > { "!noop", "newext" } indicates that the caller does not want > to support repositories with the noop extension but does want > to support repositories with the newext extension.

\n\n

opts(GIT_OPT_GET_OWNER_VALIDATION, int *enabled) > Gets the owner validation setting for repository > directories.

\n\n

opts(GIT_OPT_SET_OWNER_VALIDATION, int enabled) > Set that repository directories should be owned by the current > user. The default is to validate ownership.

\n\n

opts(GIT_OPT_GET_HOMEDIR, git_buf *out) > Gets the current user's home directory, as it will be used > for file lookups. The path is written to the out buffer.

\n\n

opts(GIT_OPT_SET_HOMEDIR, const char *path) > Sets the directory used as the current user's home directory, > for file lookups. > > - path directory of home directory.

\n\n

opts(GIT_OPT_GET_SERVER_CONNECT_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) to attempt connections to > a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_CONNECT_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) to attempt connections to > a remote server. Set to 0 to use the system default. Note that > this may not be able to be configured longer than the system > default, typically 75 seconds.

\n\n

opts(GIT_OPT_GET_SERVER_TIMEOUT, int *timeout) > Gets the timeout (in milliseconds) for reading from and writing > to a remote server.

\n\n

opts(GIT_OPT_SET_SERVER_TIMEOUT, int timeout) > Sets the timeout (in milliseconds) for reading from and writing > to a remote server. Set to 0 to use the system default.

\n", "group": "libgit2" }, "git_config_entry_free": { "type": "function", "file": "git2/config.h", - "line": 113, - "lineto": 113, + "line": 131, + "lineto": 131, "args": [ { "name": "entry", @@ -4494,21 +4693,21 @@ "argline": "git_config_entry *entry", "sig": "git_config_entry *", "return": { "type": "void", "comment": null }, - "description": "

Free a config entry

\n", + "description": "

Free a config entry.

\n", "comments": "", "group": "config", "examples": { "config.c": [ - "ex/v1.8.4/config.html#git_config_entry_free-1", - "ex/v1.8.4/config.html#git_config_entry_free-2" + "ex/v1.9.1/config.html#git_config_entry_free-1", + "ex/v1.9.1/config.html#git_config_entry_free-2" ] } }, "git_config_find_global": { "type": "function", "file": "git2/config.h", - "line": 165, - "lineto": 165, + "line": 183, + "lineto": 183, "args": [ { "name": "out", @@ -4529,8 +4728,8 @@ "git_config_find_xdg": { "type": "function", "file": "git2/config.h", - "line": 182, - "lineto": 182, + "line": 200, + "lineto": 200, "args": [ { "name": "out", @@ -4551,8 +4750,8 @@ "git_config_find_system": { "type": "function", "file": "git2/config.h", - "line": 194, - "lineto": 194, + "line": 212, + "lineto": 212, "args": [ { "name": "out", @@ -4573,8 +4772,8 @@ "git_config_find_programdata": { "type": "function", "file": "git2/config.h", - "line": 205, - "lineto": 205, + "line": 223, + "lineto": 223, "args": [ { "name": "out", @@ -4595,8 +4794,8 @@ "git_config_open_default": { "type": "function", "file": "git2/config.h", - "line": 217, - "lineto": 217, + "line": 235, + "lineto": 235, "args": [ { "name": "out", @@ -4614,8 +4813,8 @@ "git_config_new": { "type": "function", "file": "git2/config.h", - "line": 228, - "lineto": 228, + "line": 246, + "lineto": 246, "args": [ { "name": "out", @@ -4633,8 +4832,8 @@ "git_config_add_file_ondisk": { "type": "function", "file": "git2/config.h", - "line": 257, - "lineto": 262, + "line": 275, + "lineto": 280, "args": [ { "name": "cfg", @@ -4675,8 +4874,8 @@ "git_config_open_ondisk": { "type": "function", "file": "git2/config.h", - "line": 276, - "lineto": 276, + "line": 294, + "lineto": 294, "args": [ { "name": "out", @@ -4696,14 +4895,14 @@ "comments": "

This method is a simple utility wrapper for the following sequence of calls: - git_config_new - git_config_add_file_ondisk

\n", "group": "config", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_config_open_ondisk-26"] + "general.c": ["ex/v1.9.1/general.html#git_config_open_ondisk-26"] } }, "git_config_open_level": { "type": "function", "file": "git2/config.h", - "line": 294, - "lineto": 297, + "line": 312, + "lineto": 315, "args": [ { "name": "out", @@ -4734,8 +4933,8 @@ "git_config_open_global": { "type": "function", "file": "git2/config.h", - "line": 312, - "lineto": 312, + "line": 330, + "lineto": 330, "args": [ { "name": "out", @@ -4755,11 +4954,40 @@ "comments": "

Git allows you to store your global configuration at $HOME/.gitconfig or $XDG_CONFIG_HOME/git/config. For backwards compatibility, the XDG file shouldn't be used unless the use has created it explicitly. With this function you'll open the correct one to write to.

\n", "group": "config" }, + "git_config_set_writeorder": { + "type": "function", + "file": "git2/config.h", + "line": 343, + "lineto": 346, + "args": [ + { + "name": "cfg", + "type": "git_config *", + "comment": "the configuration to change write order of" + }, + { + "name": "levels", + "type": "git_config_level_t *", + "comment": "the ordering of levels for writing" + }, + { + "name": "len", + "type": "size_t", + "comment": "the length of the levels array" + } + ], + "argline": "git_config *cfg, git_config_level_t *levels, size_t len", + "sig": "git_config *::git_config_level_t *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Set the write order for configuration backends. By default, the\n write ordering does not match the read ordering; for example, the\n worktree configuration is a high-priority for reading, but is not\n written to unless explicitly chosen.

\n", + "comments": "", + "group": "config" + }, "git_config_snapshot": { "type": "function", "file": "git2/config.h", - "line": 333, - "lineto": 333, + "line": 362, + "lineto": 362, "args": [ { "name": "out", @@ -4782,8 +5010,8 @@ "git_config_free": { "type": "function", "file": "git2/config.h", - "line": 340, - "lineto": 340, + "line": 369, + "lineto": 369, "args": [ { "name": "cfg", @@ -4798,18 +5026,18 @@ "comments": "", "group": "config", "examples": { - "config.c": ["ex/v1.8.4/config.html#git_config_free-3"], + "config.c": ["ex/v1.9.1/config.html#git_config_free-3"], "general.c": [ - "ex/v1.8.4/general.html#git_config_free-27", - "ex/v1.8.4/general.html#git_config_free-28" + "ex/v1.9.1/general.html#git_config_free-27", + "ex/v1.9.1/general.html#git_config_free-28" ] } }, "git_config_get_entry": { "type": "function", "file": "git2/config.h", - "line": 352, - "lineto": 355, + "line": 381, + "lineto": 384, "args": [ { "name": "out", @@ -4834,14 +5062,14 @@ "comments": "

Free the git_config_entry after use with git_config_entry_free().

\n", "group": "config", "examples": { - "config.c": ["ex/v1.8.4/config.html#git_config_get_entry-4"] + "config.c": ["ex/v1.9.1/config.html#git_config_get_entry-4"] } }, "git_config_get_int32": { "type": "function", "file": "git2/config.h", - "line": 369, - "lineto": 369, + "line": 398, + "lineto": 398, "args": [ { "name": "out", @@ -4867,16 +5095,16 @@ "group": "config", "examples": { "general.c": [ - "ex/v1.8.4/general.html#git_config_get_int32-29", - "ex/v1.8.4/general.html#git_config_get_int32-30" + "ex/v1.9.1/general.html#git_config_get_int32-29", + "ex/v1.9.1/general.html#git_config_get_int32-30" ] } }, "git_config_get_int64": { "type": "function", "file": "git2/config.h", - "line": 383, - "lineto": 383, + "line": 412, + "lineto": 412, "args": [ { "name": "out", @@ -4904,8 +5132,8 @@ "git_config_get_bool": { "type": "function", "file": "git2/config.h", - "line": 400, - "lineto": 400, + "line": 429, + "lineto": 429, "args": [ { "name": "out", @@ -4933,8 +5161,8 @@ "git_config_get_path": { "type": "function", "file": "git2/config.h", - "line": 418, - "lineto": 418, + "line": 447, + "lineto": 447, "args": [ { "name": "out", @@ -4962,8 +5190,8 @@ "git_config_get_string": { "type": "function", "file": "git2/config.h", - "line": 436, - "lineto": 436, + "line": 465, + "lineto": 465, "args": [ { "name": "out", @@ -4989,16 +5217,16 @@ "group": "config", "examples": { "general.c": [ - "ex/v1.8.4/general.html#git_config_get_string-31", - "ex/v1.8.4/general.html#git_config_get_string-32" + "ex/v1.9.1/general.html#git_config_get_string-31", + "ex/v1.9.1/general.html#git_config_get_string-32" ] } }, "git_config_get_string_buf": { "type": "function", "file": "git2/config.h", - "line": 452, - "lineto": 452, + "line": 481, + "lineto": 481, "args": [ { "name": "out", @@ -5026,8 +5254,8 @@ "git_config_get_multivar_foreach": { "type": "function", "file": "git2/config.h", - "line": 471, - "lineto": 471, + "line": 500, + "lineto": 500, "args": [ { "name": "cfg", @@ -5065,8 +5293,8 @@ "git_config_multivar_iterator_new": { "type": "function", "file": "git2/config.h", - "line": 487, - "lineto": 487, + "line": 516, + "lineto": 516, "args": [ { "name": "out", @@ -5099,8 +5327,8 @@ "git_config_next": { "type": "function", "file": "git2/config.h", - "line": 499, - "lineto": 499, + "line": 528, + "lineto": 528, "args": [ { "name": "entry", @@ -5126,8 +5354,8 @@ "git_config_iterator_free": { "type": "function", "file": "git2/config.h", - "line": 506, - "lineto": 506, + "line": 535, + "lineto": 535, "args": [ { "name": "iter", @@ -5145,8 +5373,8 @@ "git_config_set_int32": { "type": "function", "file": "git2/config.h", - "line": 517, - "lineto": 517, + "line": 546, + "lineto": 546, "args": [ { "name": "cfg", @@ -5174,8 +5402,8 @@ "git_config_set_int64": { "type": "function", "file": "git2/config.h", - "line": 528, - "lineto": 528, + "line": 557, + "lineto": 557, "args": [ { "name": "cfg", @@ -5203,8 +5431,8 @@ "git_config_set_bool": { "type": "function", "file": "git2/config.h", - "line": 539, - "lineto": 539, + "line": 568, + "lineto": 568, "args": [ { "name": "cfg", @@ -5228,8 +5456,8 @@ "git_config_set_string": { "type": "function", "file": "git2/config.h", - "line": 553, - "lineto": 553, + "line": 582, + "lineto": 582, "args": [ { "name": "cfg", @@ -5254,14 +5482,14 @@ "comments": "

A copy of the string is made and the user is free to use it afterwards.

\n", "group": "config", "examples": { - "config.c": ["ex/v1.8.4/config.html#git_config_set_string-5"] + "config.c": ["ex/v1.9.1/config.html#git_config_set_string-5"] } }, "git_config_set_multivar": { "type": "function", "file": "git2/config.h", - "line": 566, - "lineto": 566, + "line": 595, + "lineto": 595, "args": [ { "name": "cfg", @@ -5290,8 +5518,8 @@ "git_config_delete_entry": { "type": "function", "file": "git2/config.h", - "line": 576, - "lineto": 576, + "line": 605, + "lineto": 605, "args": [ { "name": "cfg", @@ -5314,8 +5542,8 @@ "git_config_delete_multivar": { "type": "function", "file": "git2/config.h", - "line": 589, - "lineto": 589, + "line": 618, + "lineto": 618, "args": [ { "name": "cfg", @@ -5343,8 +5571,8 @@ "git_config_foreach": { "type": "function", "file": "git2/config.h", - "line": 607, - "lineto": 610, + "line": 636, + "lineto": 639, "args": [ { "name": "cfg", @@ -5375,8 +5603,8 @@ "git_config_iterator_new": { "type": "function", "file": "git2/config.h", - "line": 622, - "lineto": 622, + "line": 651, + "lineto": 651, "args": [ { "name": "out", @@ -5399,8 +5627,8 @@ "git_config_iterator_glob_new": { "type": "function", "file": "git2/config.h", - "line": 639, - "lineto": 639, + "line": 668, + "lineto": 668, "args": [ { "name": "out", @@ -5428,8 +5656,8 @@ "git_config_foreach_match": { "type": "function", "file": "git2/config.h", - "line": 661, - "lineto": 665, + "line": 690, + "lineto": 694, "args": [ { "name": "cfg", @@ -5465,8 +5693,8 @@ "git_config_get_mapped": { "type": "function", "file": "git2/config.h", - "line": 701, - "lineto": 706, + "line": 730, + "lineto": 735, "args": [ { "name": "out", @@ -5507,8 +5735,8 @@ "git_config_lookup_map_value": { "type": "function", "file": "git2/config.h", - "line": 717, - "lineto": 721, + "line": 746, + "lineto": 750, "args": [ { "name": "out", @@ -5537,8 +5765,8 @@ "git_config_parse_bool": { "type": "function", "file": "git2/config.h", - "line": 734, - "lineto": 734, + "line": 763, + "lineto": 763, "args": [ { "name": "out", @@ -5557,8 +5785,8 @@ "git_config_parse_int32": { "type": "function", "file": "git2/config.h", - "line": 747, - "lineto": 747, + "line": 776, + "lineto": 776, "args": [ { "name": "out", @@ -5577,8 +5805,8 @@ "git_config_parse_int64": { "type": "function", "file": "git2/config.h", - "line": 760, - "lineto": 760, + "line": 789, + "lineto": 789, "args": [ { "name": "out", @@ -5597,8 +5825,8 @@ "git_config_parse_path": { "type": "function", "file": "git2/config.h", - "line": 776, - "lineto": 776, + "line": 805, + "lineto": 805, "args": [ { "name": "out", @@ -5621,8 +5849,8 @@ "git_config_backend_foreach_match": { "type": "function", "file": "git2/config.h", - "line": 795, - "lineto": 799, + "line": 824, + "lineto": 828, "args": [ { "name": "backend", @@ -5655,8 +5883,8 @@ "git_config_lock": { "type": "function", "file": "git2/config.h", - "line": 818, - "lineto": 818, + "line": 847, + "lineto": 847, "args": [ { "name": "tx", @@ -5679,8 +5907,8 @@ "git_credential_free": { "type": "function", "file": "git2/credential.h", - "line": 146, - "lineto": 146, + "line": 149, + "lineto": 149, "args": [ { "name": "cred", @@ -5698,8 +5926,8 @@ "git_credential_has_username": { "type": "function", "file": "git2/credential.h", - "line": 154, - "lineto": 154, + "line": 157, + "lineto": 157, "args": [ { "name": "cred", @@ -5720,8 +5948,8 @@ "git_credential_get_username": { "type": "function", "file": "git2/credential.h", - "line": 162, - "lineto": 162, + "line": 165, + "lineto": 165, "args": [ { "name": "cred", @@ -5742,8 +5970,8 @@ "git_credential_userpass_plaintext_new": { "type": "function", "file": "git2/credential.h", - "line": 173, - "lineto": 176, + "line": 176, + "lineto": 179, "args": [ { "name": "out", @@ -5774,8 +6002,8 @@ "git_credential_default_new": { "type": "function", "file": "git2/credential.h", - "line": 185, - "lineto": 185, + "line": 188, + "lineto": 188, "args": [ { "name": "out", @@ -5796,8 +6024,8 @@ "git_credential_username_new": { "type": "function", "file": "git2/credential.h", - "line": 197, - "lineto": 197, + "line": 200, + "lineto": 200, "args": [ { "name": "out", @@ -5823,8 +6051,8 @@ "git_credential_ssh_key_new": { "type": "function", "file": "git2/credential.h", - "line": 210, - "lineto": 215, + "line": 213, + "lineto": 218, "args": [ { "name": "out", @@ -5865,8 +6093,8 @@ "git_credential_ssh_key_memory_new": { "type": "function", "file": "git2/credential.h", - "line": 227, - "lineto": 232, + "line": 230, + "lineto": 235, "args": [ { "name": "out", @@ -5907,8 +6135,8 @@ "git_credential_ssh_interactive_new": { "type": "function", "file": "git2/credential.h", - "line": 263, - "lineto": 267, + "line": 278, + "lineto": 282, "args": [ { "name": "out", @@ -5944,8 +6172,8 @@ "git_credential_ssh_key_from_agent": { "type": "function", "file": "git2/credential.h", - "line": 277, - "lineto": 279, + "line": 292, + "lineto": 294, "args": [ { "name": "out", @@ -5971,8 +6199,8 @@ "git_credential_ssh_custom_new": { "type": "function", "file": "git2/credential.h", - "line": 305, - "lineto": 311, + "line": 332, + "lineto": 338, "args": [ { "name": "out", @@ -6057,8 +6285,8 @@ "git_blob_filtered_content": { "type": "function", "file": "git2/deprecated.h", - "line": 115, - "lineto": 119, + "line": 124, + "lineto": 128, "args": [ { "name": "out", "type": "git_buf *", "comment": null }, { "name": "blob", "type": "git_blob *", "comment": null }, @@ -6075,8 +6303,8 @@ "git_filter_list_stream_data": { "type": "function", "file": "git2/deprecated.h", - "line": 139, - "lineto": 142, + "line": 148, + "lineto": 151, "args": [ { "name": "filters", "type": "git_filter_list *", "comment": null }, { "name": "data", "type": "git_buf *", "comment": null }, @@ -6092,8 +6320,8 @@ "git_filter_list_apply_to_data": { "type": "function", "file": "git2/deprecated.h", - "line": 149, - "lineto": 152, + "line": 158, + "lineto": 161, "args": [ { "name": "out", "type": "git_buf *", "comment": null }, { "name": "filters", "type": "git_filter_list *", "comment": null }, @@ -6109,8 +6337,8 @@ "git_treebuilder_write_with_buffer": { "type": "function", "file": "git2/deprecated.h", - "line": 178, - "lineto": 179, + "line": 187, + "lineto": 188, "args": [ { "name": "oid", "type": "git_oid *", "comment": null }, { "name": "bld", "type": "git_treebuilder *", "comment": null }, @@ -6126,8 +6354,8 @@ "git_buf_grow": { "type": "function", "file": "git2/deprecated.h", - "line": 220, - "lineto": 220, + "line": 229, + "lineto": 229, "args": [ { "name": "buffer", @@ -6153,8 +6381,8 @@ "git_buf_set": { "type": "function", "file": "git2/deprecated.h", - "line": 230, - "lineto": 231, + "line": 239, + "lineto": 240, "args": [ { "name": "buffer", @@ -6185,8 +6413,8 @@ "git_buf_is_binary": { "type": "function", "file": "git2/deprecated.h", - "line": 239, - "lineto": 239, + "line": 248, + "lineto": 248, "args": [ { "name": "buf", @@ -6207,8 +6435,8 @@ "git_buf_contains_nul": { "type": "function", "file": "git2/deprecated.h", - "line": 247, - "lineto": 247, + "line": 256, + "lineto": 256, "args": [ { "name": "buf", @@ -6229,8 +6457,8 @@ "git_buf_free": { "type": "function", "file": "git2/deprecated.h", - "line": 259, - "lineto": 259, + "line": 268, + "lineto": 268, "args": [{ "name": "buffer", "type": "git_buf *", "comment": null }], "argline": "git_buf *buffer", "sig": "git_buf *", @@ -6242,8 +6470,8 @@ "git_diff_format_email": { "type": "function", "file": "git2/deprecated.h", - "line": 357, - "lineto": 360, + "line": 374, + "lineto": 377, "args": [ { "name": "out", "type": "git_buf *", "comment": null }, { "name": "diff", "type": "git_diff *", "comment": null }, @@ -6263,8 +6491,8 @@ "git_diff_commit_as_email": { "type": "function", "file": "git2/deprecated.h", - "line": 368, - "lineto": 375, + "line": 385, + "lineto": 392, "args": [ { "name": "out", "type": "git_buf *", "comment": null }, { "name": "repo", "type": "git_repository *", "comment": null }, @@ -6288,8 +6516,8 @@ "git_diff_format_email_options_init": { "type": "function", "file": "git2/deprecated.h", - "line": 387, - "lineto": 389, + "line": 404, + "lineto": 406, "args": [ { "name": "opts", @@ -6315,8 +6543,8 @@ "giterr_last": { "type": "function", "file": "git2/deprecated.h", - "line": 452, - "lineto": 452, + "line": 503, + "lineto": 503, "args": [], "argline": "", "sig": "", @@ -6328,8 +6556,8 @@ "giterr_clear": { "type": "function", "file": "git2/deprecated.h", - "line": 464, - "lineto": 464, + "line": 515, + "lineto": 515, "args": [], "argline": "", "sig": "", @@ -6341,8 +6569,8 @@ "giterr_set_str": { "type": "function", "file": "git2/deprecated.h", - "line": 476, - "lineto": 476, + "line": 527, + "lineto": 527, "args": [ { "name": "error_class", "type": "int", "comment": null }, { "name": "string", "type": "const char *", "comment": null } @@ -6357,8 +6585,8 @@ "giterr_set_oom": { "type": "function", "file": "git2/deprecated.h", - "line": 488, - "lineto": 488, + "line": 539, + "lineto": 539, "args": [], "argline": "", "sig": "", @@ -6370,8 +6598,8 @@ "git_object__size": { "type": "function", "file": "git2/deprecated.h", - "line": 578, - "lineto": 578, + "line": 666, + "lineto": 666, "args": [ { "name": "type", @@ -6389,8 +6617,8 @@ "git_remote_is_valid_name": { "type": "function", "file": "git2/deprecated.h", - "line": 599, - "lineto": 599, + "line": 687, + "lineto": 687, "args": [ { "name": "remote_name", @@ -6411,8 +6639,8 @@ "git_reference_is_valid_name": { "type": "function", "file": "git2/deprecated.h", - "line": 643, - "lineto": 643, + "line": 741, + "lineto": 741, "args": [ { "name": "refname", @@ -6433,8 +6661,8 @@ "git_oidarray_free": { "type": "function", "file": "git2/deprecated.h", - "line": 810, - "lineto": 810, + "line": 922, + "lineto": 922, "args": [{ "name": "array", "type": "git_oidarray *", "comment": null }], "argline": "git_oidarray *array", "sig": "git_oidarray *", @@ -6446,8 +6674,8 @@ "git_strarray_copy": { "type": "function", "file": "git2/deprecated.h", - "line": 879, - "lineto": 879, + "line": 991, + "lineto": 991, "args": [ { "name": "tgt", "type": "git_strarray *", "comment": "target" }, { "name": "src", "type": "const git_strarray *", "comment": "source" } @@ -6465,8 +6693,8 @@ "git_strarray_free": { "type": "function", "file": "git2/deprecated.h", - "line": 891, - "lineto": 891, + "line": 1003, + "lineto": 1003, "args": [{ "name": "array", "type": "git_strarray *", "comment": null }], "argline": "git_strarray *array", "sig": "git_strarray *", @@ -6478,8 +6706,8 @@ "git_blame_init_options": { "type": "function", "file": "git2/deprecated.h", - "line": 905, - "lineto": 905, + "line": 1035, + "lineto": 1035, "args": [ { "name": "opts", "type": "git_blame_options *", "comment": null }, { "name": "version", "type": "unsigned int", "comment": null } @@ -6494,8 +6722,8 @@ "git_describe_options_init": { "type": "function", "file": "git2/describe.h", - "line": 82, - "lineto": 82, + "line": 91, + "lineto": 91, "args": [ { "name": "opts", @@ -6518,14 +6746,14 @@ "comments": "

Initializes a git_describe_options with default values. Equivalent to creating an instance with GIT_DESCRIBE_OPTIONS_INIT.

\n", "group": "describe", "examples": { - "describe.c": ["ex/v1.8.4/describe.html#git_describe_options_init-1"] + "describe.c": ["ex/v1.9.1/describe.html#git_describe_options_init-1"] } }, "git_describe_format_options_init": { "type": "function", "file": "git2/describe.h", - "line": 129, - "lineto": 129, + "line": 141, + "lineto": 141, "args": [ { "name": "opts", @@ -6549,15 +6777,15 @@ "group": "describe", "examples": { "describe.c": [ - "ex/v1.8.4/describe.html#git_describe_format_options_init-2" + "ex/v1.9.1/describe.html#git_describe_format_options_init-2" ] } }, "git_describe_commit": { "type": "function", "file": "git2/describe.h", - "line": 147, - "lineto": 150, + "line": 159, + "lineto": 162, "args": [ { "name": "result", @@ -6582,14 +6810,14 @@ "comments": "

Perform the describe operation on the given committish object.

\n", "group": "describe", "examples": { - "describe.c": ["ex/v1.8.4/describe.html#git_describe_commit-3"] + "describe.c": ["ex/v1.9.1/describe.html#git_describe_commit-3"] } }, "git_describe_workdir": { "type": "function", "file": "git2/describe.h", - "line": 165, - "lineto": 168, + "line": 177, + "lineto": 180, "args": [ { "name": "out", @@ -6614,14 +6842,14 @@ "comments": "

Perform the describe operation on the current commit and the worktree. After performing describe on HEAD, a status is run and the description is considered to be dirty if there are.

\n", "group": "describe", "examples": { - "describe.c": ["ex/v1.8.4/describe.html#git_describe_workdir-4"] + "describe.c": ["ex/v1.9.1/describe.html#git_describe_workdir-4"] } }, "git_describe_format": { "type": "function", "file": "git2/describe.h", - "line": 179, - "lineto": 182, + "line": 191, + "lineto": 194, "args": [ { "name": "out", @@ -6646,14 +6874,14 @@ "comments": "", "group": "describe", "examples": { - "describe.c": ["ex/v1.8.4/describe.html#git_describe_format-5"] + "describe.c": ["ex/v1.9.1/describe.html#git_describe_format-5"] } }, "git_describe_result_free": { "type": "function", "file": "git2/describe.h", - "line": 189, - "lineto": 189, + "line": 201, + "lineto": 201, "args": [ { "name": "result", @@ -6671,8 +6899,8 @@ "git_diff_options_init": { "type": "function", "file": "git2/diff.h", - "line": 485, - "lineto": 487, + "line": 492, + "lineto": 494, "args": [ { "name": "opts", @@ -6698,8 +6926,8 @@ "git_diff_find_options_init": { "type": "function", "file": "git2/diff.h", - "line": 818, - "lineto": 820, + "line": 846, + "lineto": 848, "args": [ { "name": "opts", @@ -6725,8 +6953,8 @@ "git_diff_free": { "type": "function", "file": "git2/diff.h", - "line": 834, - "lineto": 834, + "line": 862, + "lineto": 862, "args": [ { "name": "diff", @@ -6741,18 +6969,18 @@ "comments": "", "group": "diff", "examples": { - "diff.c": ["ex/v1.8.4/diff.html#git_diff_free-3"], + "diff.c": ["ex/v1.9.1/diff.html#git_diff_free-3"], "log.c": [ - "ex/v1.8.4/log.html#git_diff_free-25", - "ex/v1.8.4/log.html#git_diff_free-26" + "ex/v1.9.1/log.html#git_diff_free-25", + "ex/v1.9.1/log.html#git_diff_free-26" ] } }, "git_diff_tree_to_tree": { "type": "function", "file": "git2/diff.h", - "line": 853, - "lineto": 858, + "line": 881, + "lineto": 886, "args": [ { "name": "diff", @@ -6787,18 +7015,18 @@ "comments": "

This is equivalent to git diff <old-tree> <new-tree>

\n\n

The first tree will be used for the "old_file" side of the delta and the second tree will be used for the "new_file" side of the delta. You can pass NULL to indicate an empty tree, although it is an error to pass NULL for both the old_tree and new_tree.

\n", "group": "diff", "examples": { - "diff.c": ["ex/v1.8.4/diff.html#git_diff_tree_to_tree-4"], + "diff.c": ["ex/v1.9.1/diff.html#git_diff_tree_to_tree-4"], "log.c": [ - "ex/v1.8.4/log.html#git_diff_tree_to_tree-27", - "ex/v1.8.4/log.html#git_diff_tree_to_tree-28" + "ex/v1.9.1/log.html#git_diff_tree_to_tree-27", + "ex/v1.9.1/log.html#git_diff_tree_to_tree-28" ] } }, "git_diff_tree_to_index": { "type": "function", "file": "git2/diff.h", - "line": 880, - "lineto": 885, + "line": 908, + "lineto": 913, "args": [ { "name": "diff", @@ -6832,13 +7060,13 @@ "description": "

Create a diff between a tree and repository index.

\n", "comments": "

This is equivalent to git diff --cached <treeish> or if you pass the HEAD tree, then like git diff --cached.

\n\n

The tree you pass will be used for the "old_file" side of the delta, and the index will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", "group": "diff", - "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_tree_to_index-5"] } + "examples": { "diff.c": ["ex/v1.9.1/diff.html#git_diff_tree_to_index-5"] } }, "git_diff_index_to_workdir": { "type": "function", "file": "git2/diff.h", - "line": 908, - "lineto": 912, + "line": 936, + "lineto": 940, "args": [ { "name": "diff", @@ -6868,14 +7096,14 @@ "comments": "

This matches the git diff command. See the note below on git_diff_tree_to_workdir for a discussion of the difference between git diff and git diff HEAD and how to emulate a git diff <treeish> using libgit2.

\n\n

The index will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side of the delta.

\n\n

If you pass NULL for the index, then the existing index of the repo will be used. In this case, the index will be refreshed from disk (if it has changed) before the diff is generated.

\n", "group": "diff", "examples": { - "diff.c": ["ex/v1.8.4/diff.html#git_diff_index_to_workdir-6"] + "diff.c": ["ex/v1.9.1/diff.html#git_diff_index_to_workdir-6"] } }, "git_diff_tree_to_workdir": { "type": "function", "file": "git2/diff.h", - "line": 938, - "lineto": 942, + "line": 966, + "lineto": 970, "args": [ { "name": "diff", @@ -6905,14 +7133,14 @@ "comments": "

The tree you provide will be used for the "old_file" side of the delta, and the working directory will be used for the "new_file" side.

\n\n

This is not the same as git diff <treeish> or git diff-index <treeish>. Those commands use information from the index, whereas this function strictly returns the differences between the tree and the files in the working directory, regardless of the state of the index. Use git_diff_tree_to_workdir_with_index to emulate those commands.

\n\n

To see difference between this and git_diff_tree_to_workdir_with_index, consider the example of a staged file deletion where the file has then been put back into the working dir and further modified. The tree-to-workdir diff for that file is 'modified', but git diff would show status 'deleted' since there is a staged delete.

\n", "group": "diff", "examples": { - "diff.c": ["ex/v1.8.4/diff.html#git_diff_tree_to_workdir-7"] + "diff.c": ["ex/v1.9.1/diff.html#git_diff_tree_to_workdir-7"] } }, "git_diff_tree_to_workdir_with_index": { "type": "function", "file": "git2/diff.h", - "line": 958, - "lineto": 962, + "line": 986, + "lineto": 990, "args": [ { "name": "diff", @@ -6942,14 +7170,14 @@ "comments": "

This emulates git diff <tree> by diffing the tree to the index and the index to the working directory and blending the results into a single diff that includes staged deleted, etc.

\n", "group": "diff", "examples": { - "diff.c": ["ex/v1.8.4/diff.html#git_diff_tree_to_workdir_with_index-8"] + "diff.c": ["ex/v1.9.1/diff.html#git_diff_tree_to_workdir_with_index-8"] } }, "git_diff_index_to_index": { "type": "function", "file": "git2/diff.h", - "line": 977, - "lineto": 982, + "line": 1005, + "lineto": 1010, "args": [ { "name": "diff", @@ -6987,8 +7215,8 @@ "git_diff_merge": { "type": "function", "file": "git2/diff.h", - "line": 998, - "lineto": 1000, + "line": 1026, + "lineto": 1028, "args": [ { "name": "onto", @@ -7011,8 +7239,8 @@ "git_diff_find_similar": { "type": "function", "file": "git2/diff.h", - "line": 1014, - "lineto": 1016, + "line": 1042, + "lineto": 1044, "args": [ { "name": "diff", @@ -7031,13 +7259,13 @@ "description": "

Transform a diff marking file renames, copies, etc.

\n", "comments": "

This modifies a diff in place, replacing old entries that look like renames or copies with new entries reflecting those changes. This also will, if requested, break modified files into add/remove pairs if the amount of change is above a threshold.

\n", "group": "diff", - "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_find_similar-9"] } + "examples": { "diff.c": ["ex/v1.9.1/diff.html#git_diff_find_similar-9"] } }, "git_diff_num_deltas": { "type": "function", "file": "git2/diff.h", - "line": 1034, - "lineto": 1034, + "line": 1062, + "lineto": 1062, "args": [ { "name": "diff", @@ -7054,13 +7282,13 @@ "description": "

Query how many diff records are there in a diff.

\n", "comments": "", "group": "diff", - "examples": { "log.c": ["ex/v1.8.4/log.html#git_diff_num_deltas-29"] } + "examples": { "log.c": ["ex/v1.9.1/log.html#git_diff_num_deltas-29"] } }, "git_diff_num_deltas_of_type": { "type": "function", "file": "git2/diff.h", - "line": 1047, - "lineto": 1048, + "line": 1075, + "lineto": 1076, "args": [ { "name": "diff", @@ -7086,8 +7314,8 @@ "git_diff_get_delta": { "type": "function", "file": "git2/diff.h", - "line": 1067, - "lineto": 1068, + "line": 1095, + "lineto": 1096, "args": [ { "name": "diff", @@ -7109,8 +7337,8 @@ "git_diff_is_sorted_icase": { "type": "function", "file": "git2/diff.h", - "line": 1076, - "lineto": 1076, + "line": 1104, + "lineto": 1104, "args": [ { "name": "diff", @@ -7131,8 +7359,8 @@ "git_diff_foreach": { "type": "function", "file": "git2/diff.h", - "line": 1104, - "lineto": 1110, + "line": 1132, + "lineto": 1138, "args": [ { "name": "diff", @@ -7178,8 +7406,8 @@ "git_diff_status_char": { "type": "function", "file": "git2/diff.h", - "line": 1123, - "lineto": 1123, + "line": 1151, + "lineto": 1151, "args": [ { "name": "status", @@ -7200,8 +7428,8 @@ "git_diff_print": { "type": "function", "file": "git2/diff.h", - "line": 1149, - "lineto": 1153, + "line": 1177, + "lineto": 1181, "args": [ { "name": "diff", @@ -7234,15 +7462,15 @@ "comments": "

Returning a non-zero value from the callbacks will terminate the iteration and return the non-zero value to the caller.

\n", "group": "diff", "examples": { - "diff.c": ["ex/v1.8.4/diff.html#git_diff_print-10"], - "log.c": ["ex/v1.8.4/log.html#git_diff_print-30"] + "diff.c": ["ex/v1.9.1/diff.html#git_diff_print-10"], + "log.c": ["ex/v1.9.1/log.html#git_diff_print-30"] } }, "git_diff_to_buf": { "type": "function", "file": "git2/diff.h", - "line": 1165, - "lineto": 1168, + "line": 1193, + "lineto": 1196, "args": [ { "name": "out", @@ -7270,8 +7498,8 @@ "git_diff_blobs": { "type": "function", "file": "git2/diff.h", - "line": 1204, - "lineto": 1214, + "line": 1232, + "lineto": 1242, "args": [ { "name": "old_blob", @@ -7337,8 +7565,8 @@ "git_diff_blob_to_buffer": { "type": "function", "file": "git2/diff.h", - "line": 1241, - "lineto": 1252, + "line": 1269, + "lineto": 1280, "args": [ { "name": "old_blob", @@ -7409,8 +7637,8 @@ "git_diff_buffers": { "type": "function", "file": "git2/diff.h", - "line": 1275, - "lineto": 1287, + "line": 1303, + "lineto": 1315, "args": [ { "name": "old_buffer", @@ -7486,8 +7714,8 @@ "git_diff_from_buffer": { "type": "function", "file": "git2/diff.h", - "line": 1327, - "lineto": 1334, + "line": 1355, + "lineto": 1362, "args": [ { "name": "out", @@ -7513,16 +7741,16 @@ "group": "diff", "examples": { "diff.c": [ - "ex/v1.8.4/diff.html#git_diff_from_buffer-11", - "ex/v1.8.4/diff.html#git_diff_from_buffer-12" + "ex/v1.9.1/diff.html#git_diff_from_buffer-11", + "ex/v1.9.1/diff.html#git_diff_from_buffer-12" ] } }, "git_diff_get_stats": { "type": "function", "file": "git2/diff.h", - "line": 1370, - "lineto": 1372, + "line": 1398, + "lineto": 1400, "args": [ { "name": "out", @@ -7544,13 +7772,13 @@ "description": "

Accumulate diff statistics for all patches.

\n", "comments": "", "group": "diff", - "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_get_stats-13"] } + "examples": { "diff.c": ["ex/v1.9.1/diff.html#git_diff_get_stats-13"] } }, "git_diff_stats_files_changed": { "type": "function", "file": "git2/diff.h", - "line": 1380, - "lineto": 1381, + "line": 1408, + "lineto": 1409, "args": [ { "name": "stats", @@ -7571,8 +7799,8 @@ "git_diff_stats_insertions": { "type": "function", "file": "git2/diff.h", - "line": 1389, - "lineto": 1390, + "line": 1417, + "lineto": 1418, "args": [ { "name": "stats", @@ -7593,8 +7821,8 @@ "git_diff_stats_deletions": { "type": "function", "file": "git2/diff.h", - "line": 1398, - "lineto": 1399, + "line": 1426, + "lineto": 1427, "args": [ { "name": "stats", @@ -7615,8 +7843,8 @@ "git_diff_stats_to_buf": { "type": "function", "file": "git2/diff.h", - "line": 1410, - "lineto": 1414, + "line": 1438, + "lineto": 1442, "args": [ { "name": "out", @@ -7648,13 +7876,13 @@ "description": "

Print diff statistics to a git_buf.

\n", "comments": "", "group": "diff", - "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_stats_to_buf-14"] } + "examples": { "diff.c": ["ex/v1.9.1/diff.html#git_diff_stats_to_buf-14"] } }, "git_diff_stats_free": { "type": "function", "file": "git2/diff.h", - "line": 1422, - "lineto": 1422, + "line": 1450, + "lineto": 1450, "args": [ { "name": "stats", @@ -7668,13 +7896,13 @@ "description": "

Deallocate a git_diff_stats.

\n", "comments": "", "group": "diff", - "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_diff_stats_free-15"] } + "examples": { "diff.c": ["ex/v1.9.1/diff.html#git_diff_stats_free-15"] } }, "git_diff_patchid_options_init": { "type": "function", "file": "git2/diff.h", - "line": 1448, - "lineto": 1450, + "line": 1479, + "lineto": 1481, "args": [ { "name": "opts", @@ -7700,8 +7928,8 @@ "git_diff_patchid": { "type": "function", "file": "git2/diff.h", - "line": 1471, - "lineto": 1471, + "line": 1502, + "lineto": 1502, "args": [ { "name": "out", @@ -7729,66 +7957,11 @@ "comments": "

Calculate a stable patch ID for the given patch by summing the hash of the file diffs, ignoring whitespace and line numbers. This can be used to derive whether two diffs are the same with a high probability.

\n\n

Currently, this function only calculates stable patch IDs, as defined in git-patch-id(1), and should in fact generate the same IDs as the upstream git project does.

\n", "group": "diff" }, - "git_email_create_from_diff": { - "type": "function", - "file": "git2/email.h", - "line": 100, - "lineto": 109, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer to store the e-mail patch in" - }, - { - "name": "diff", - "type": "git_diff *", - "comment": "the changes to include in the email" - }, - { "name": "patch_idx", "type": "size_t", "comment": "the patch index" }, - { - "name": "patch_count", - "type": "size_t", - "comment": "the total number of patches that will be included" - }, - { - "name": "commit_id", - "type": "const git_oid *", - "comment": "the commit id for this change" - }, - { - "name": "summary", - "type": "const char *", - "comment": "the commit message for this change" - }, - { - "name": "body", - "type": "const char *", - "comment": "optional text to include above the diffstat" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "the person who authored this commit" - }, - { - "name": "opts", - "type": "const git_email_create_options *", - "comment": "email creation options" - } - ], - "argline": "git_buf *out, git_diff *diff, size_t patch_idx, size_t patch_count, const git_oid *commit_id, const char *summary, const char *body, const git_signature *author, const git_email_create_options *opts", - "sig": "git_buf *::git_diff *::size_t::size_t::const git_oid *::const char *::const char *::const git_signature *::const git_email_create_options *", - "return": { "type": "int", "comment": null }, - "description": "

Create a diff for a commit in mbox format for sending via email.

\n", - "comments": "", - "group": "email" - }, "git_email_create_from_commit": { "type": "function", "file": "git2/email.h", - "line": 119, - "lineto": 122, + "line": 99, + "lineto": 102, "args": [ { "name": "out", @@ -7808,7 +7981,7 @@ ], "argline": "git_buf *out, git_commit *commit, const git_email_create_options *opts", "sig": "git_buf *::git_commit *::const git_email_create_options *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

Create a diff for a commit in mbox format for sending via email.\n The commit must not be a merge commit.

\n", "comments": "", "group": "email" @@ -7816,43 +7989,43 @@ "git_error_last": { "type": "function", "file": "git2/errors.h", - "line": 139, - "lineto": 139, + "line": 149, + "lineto": 149, "args": [], "argline": "", "sig": "", "return": { "type": "const git_error *", - "comment": " A git_error object." + "comment": " A pointer to a `git_error` object that describes the error." }, "description": "

Return the last git_error object that was generated for the\n current thread.

\n", "comments": "

This function will never return NULL.

\n\n

Callers should not rely on this to determine whether an error has occurred. For error checking, callers should examine the return codes of libgit2 functions.

\n\n

This call can only reliably report error messages when an error has occurred. (It may contain stale information if it is called after a different function that succeeds.)

\n\n

The memory for this object is managed by libgit2. It should not be freed.

\n", "group": "error", "examples": { "checkout.c": [ - "ex/v1.8.4/checkout.html#git_error_last-11", - "ex/v1.8.4/checkout.html#git_error_last-12", - "ex/v1.8.4/checkout.html#git_error_last-13", - "ex/v1.8.4/checkout.html#git_error_last-14" + "ex/v1.9.1/checkout.html#git_error_last-11", + "ex/v1.9.1/checkout.html#git_error_last-12", + "ex/v1.9.1/checkout.html#git_error_last-13", + "ex/v1.9.1/checkout.html#git_error_last-14" ], - "commit.c": ["ex/v1.8.4/commit.html#git_error_last-2"], + "commit.c": ["ex/v1.9.1/commit.html#git_error_last-2"], "config.c": [ - "ex/v1.8.4/config.html#git_error_last-6", - "ex/v1.8.4/config.html#git_error_last-7", - "ex/v1.8.4/config.html#git_error_last-8" + "ex/v1.9.1/config.html#git_error_last-6", + "ex/v1.9.1/config.html#git_error_last-7", + "ex/v1.9.1/config.html#git_error_last-8" ], - "general.c": ["ex/v1.8.4/general.html#git_error_last-33"], + "general.c": ["ex/v1.9.1/general.html#git_error_last-33"], "merge.c": [ - "ex/v1.8.4/merge.html#git_error_last-8", - "ex/v1.8.4/merge.html#git_error_last-9" + "ex/v1.9.1/merge.html#git_error_last-8", + "ex/v1.9.1/merge.html#git_error_last-9" ] } }, "git_filter_list_load": { "type": "function", "file": "git2/filter.h", - "line": 129, - "lineto": 135, + "line": 138, + "lineto": 144, "args": [ { "name": "filters", @@ -7898,8 +8071,8 @@ "git_filter_list_load_ext": { "type": "function", "file": "git2/filter.h", - "line": 152, - "lineto": 158, + "line": 161, + "lineto": 167, "args": [ { "name": "filters", @@ -7945,8 +8118,8 @@ "git_filter_list_contains": { "type": "function", "file": "git2/filter.h", - "line": 172, - "lineto": 174, + "line": 181, + "lineto": 183, "args": [ { "name": "filters", @@ -7972,8 +8145,8 @@ "git_filter_list_apply_to_buffer": { "type": "function", "file": "git2/filter.h", - "line": 185, - "lineto": 189, + "line": 194, + "lineto": 198, "args": [ { "name": "out", @@ -8009,8 +8182,8 @@ "git_filter_list_apply_to_file": { "type": "function", "file": "git2/filter.h", - "line": 201, - "lineto": 205, + "line": 210, + "lineto": 214, "args": [ { "name": "out", @@ -8043,8 +8216,8 @@ "git_filter_list_apply_to_blob": { "type": "function", "file": "git2/filter.h", - "line": 215, - "lineto": 218, + "line": 224, + "lineto": 227, "args": [ { "name": "out", @@ -8072,8 +8245,8 @@ "git_filter_list_stream_buffer": { "type": "function", "file": "git2/filter.h", - "line": 229, - "lineto": 233, + "line": 238, + "lineto": 242, "args": [ { "name": "filters", @@ -8106,8 +8279,8 @@ "git_filter_list_stream_file": { "type": "function", "file": "git2/filter.h", - "line": 245, - "lineto": 249, + "line": 254, + "lineto": 258, "args": [ { "name": "filters", @@ -8140,8 +8313,8 @@ "git_filter_list_stream_blob": { "type": "function", "file": "git2/filter.h", - "line": 259, - "lineto": 262, + "line": 268, + "lineto": 271, "args": [ { "name": "filters", @@ -8169,8 +8342,8 @@ "git_filter_list_free": { "type": "function", "file": "git2/filter.h", - "line": 269, - "lineto": 269, + "line": 278, + "lineto": 278, "args": [ { "name": "filters", @@ -8188,8 +8361,8 @@ "git_libgit2_init": { "type": "function", "file": "git2/global.h", - "line": 26, - "lineto": 26, + "line": 32, + "lineto": 32, "args": [], "argline": "", "sig": "", @@ -8201,14 +8374,14 @@ "comments": "

This function must be called before any other libgit2 function in order to set up global state and threading.

\n\n

This function may be called multiple times - it will return the number of times the initialization has been called (including this one) that have not subsequently been shutdown.

\n", "group": "libgit2", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_libgit2_init-34"] + "general.c": ["ex/v1.9.1/general.html#git_libgit2_init-34"] } }, "git_libgit2_shutdown": { "type": "function", "file": "git2/global.h", - "line": 39, - "lineto": 39, + "line": 45, + "lineto": 45, "args": [], "argline": "", "sig": "", @@ -8331,8 +8504,8 @@ "git_ignore_add_rule": { "type": "function", "file": "git2/ignore.h", - "line": 37, - "lineto": 39, + "line": 46, + "lineto": 48, "args": [ { "name": "repo", @@ -8355,8 +8528,8 @@ "git_ignore_clear_internal_rules": { "type": "function", "file": "git2/ignore.h", - "line": 52, - "lineto": 53, + "line": 61, + "lineto": 62, "args": [ { "name": "repo", @@ -8374,8 +8547,8 @@ "git_ignore_path_is_ignored": { "type": "function", "file": "git2/ignore.h", - "line": 71, - "lineto": 74, + "line": 80, + "lineto": 83, "args": [ { "name": "ignored", @@ -8403,11 +8576,54 @@ "comments": "

This function checks the ignore rules to see if they would apply to the given file. This indicates if the file would be ignored regardless of whether the file is already in the index or committed to the repository.

\n\n

One way to think of this is if you were to do "git check-ignore --no-index" on the given file, would it be shown or not?

\n", "group": "ignore" }, + "git_index_open": { + "type": "function", + "file": "git2/index.h", + "line": 278, + "lineto": 278, + "args": [ + { + "name": "index_out", + "type": "git_index **", + "comment": "the pointer for the new index" + }, + { + "name": "index_path", + "type": "const char *", + "comment": "the path to the index file in disk" + } + ], + "argline": "git_index **index_out, const char *index_path", + "sig": "git_index **::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a new bare Git index object as a memory representation\n of the Git index file in 'index_path', without a repository\n to back it.

\n", + "comments": "

Since there is no ODB or working directory behind this index, any Index methods which rely on these (e.g. index_add_bypath) will fail with the GIT_ERROR error code.

\n\n

If you need to access the index of an actual repository, use the git_repository_index wrapper.

\n\n

The index must be freed once it's no longer in use.

\n", + "group": "index" + }, + "git_index_new": { + "type": "function", + "file": "git2/index.h", + "line": 291, + "lineto": 291, + "args": [ + { + "name": "index_out", + "type": "git_index **", + "comment": "the pointer for the new index" + } + ], + "argline": "git_index **index_out", + "sig": "git_index **", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create an in-memory index object.

\n", + "comments": "

This index object cannot be read/written to the filesystem, but may be used to perform in-memory index operations.

\n\n

The index must be freed once it's no longer in use.

\n", + "group": "index" + }, "git_index_free": { "type": "function", "file": "git2/index.h", - "line": 216, - "lineto": 216, + "line": 300, + "lineto": 300, "args": [ { "name": "index", @@ -8422,18 +8638,18 @@ "comments": "", "group": "index", "examples": { - "add.c": ["ex/v1.8.4/add.html#git_index_free-1"], - "commit.c": ["ex/v1.8.4/commit.html#git_index_free-3"], - "general.c": ["ex/v1.8.4/general.html#git_index_free-35"], - "init.c": ["ex/v1.8.4/init.html#git_index_free-2"], - "ls-files.c": ["ex/v1.8.4/ls-files.html#git_index_free-1"] + "add.c": ["ex/v1.9.1/add.html#git_index_free-1"], + "commit.c": ["ex/v1.9.1/commit.html#git_index_free-3"], + "general.c": ["ex/v1.9.1/general.html#git_index_free-35"], + "init.c": ["ex/v1.9.1/init.html#git_index_free-2"], + "ls-files.c": ["ex/v1.9.1/ls-files.html#git_index_free-1"] } }, "git_index_owner": { "type": "function", "file": "git2/index.h", - "line": 224, - "lineto": 224, + "line": 308, + "lineto": 308, "args": [ { "name": "index", "type": "const git_index *", "comment": "The index" } ], @@ -8450,8 +8666,8 @@ "git_index_caps": { "type": "function", "file": "git2/index.h", - "line": 232, - "lineto": 232, + "line": 316, + "lineto": 316, "args": [ { "name": "index", @@ -8472,8 +8688,8 @@ "git_index_set_caps": { "type": "function", "file": "git2/index.h", - "line": 245, - "lineto": 245, + "line": 329, + "lineto": 329, "args": [ { "name": "index", @@ -8496,8 +8712,8 @@ "git_index_version": { "type": "function", "file": "git2/index.h", - "line": 257, - "lineto": 257, + "line": 341, + "lineto": 341, "args": [ { "name": "index", @@ -8515,8 +8731,8 @@ "git_index_set_version": { "type": "function", "file": "git2/index.h", - "line": 270, - "lineto": 270, + "line": 354, + "lineto": 354, "args": [ { "name": "index", @@ -8539,8 +8755,8 @@ "git_index_read": { "type": "function", "file": "git2/index.h", - "line": 289, - "lineto": 289, + "line": 373, + "lineto": 373, "args": [ { "name": "index", @@ -8563,8 +8779,8 @@ "git_index_write": { "type": "function", "file": "git2/index.h", - "line": 298, - "lineto": 298, + "line": 382, + "lineto": 382, "args": [ { "name": "index", @@ -8579,15 +8795,15 @@ "comments": "", "group": "index", "examples": { - "add.c": ["ex/v1.8.4/add.html#git_index_write-2"], - "commit.c": ["ex/v1.8.4/commit.html#git_index_write-4"] + "add.c": ["ex/v1.9.1/add.html#git_index_write-2"], + "commit.c": ["ex/v1.9.1/commit.html#git_index_write-4"] } }, "git_index_path": { "type": "function", "file": "git2/index.h", - "line": 306, - "lineto": 306, + "line": 390, + "lineto": 390, "args": [ { "name": "index", @@ -8608,8 +8824,8 @@ "git_index_checksum": { "type": "function", "file": "git2/index.h", - "line": 320, - "lineto": 320, + "line": 404, + "lineto": 404, "args": [ { "name": "index", @@ -8630,8 +8846,8 @@ "git_index_read_tree": { "type": "function", "file": "git2/index.h", - "line": 332, - "lineto": 332, + "line": 416, + "lineto": 416, "args": [ { "name": "index", @@ -8654,8 +8870,8 @@ "git_index_write_tree": { "type": "function", "file": "git2/index.h", - "line": 353, - "lineto": 353, + "line": 437, + "lineto": 437, "args": [ { "name": "out", @@ -8674,16 +8890,16 @@ "comments": "

This method will scan the index and write a representation of its current state back to disk; it recursively creates tree objects for each of the subtrees stored in the index, but only returns the OID of the root tree. This is the OID that can be used e.g. to create a commit.

\n\n

The index instance cannot be bare, and needs to be associated to an existing repository.

\n\n

The index must not contain any file in conflict.

\n", "group": "index", "examples": { - "commit.c": ["ex/v1.8.4/commit.html#git_index_write_tree-5"], - "init.c": ["ex/v1.8.4/init.html#git_index_write_tree-3"], - "merge.c": ["ex/v1.8.4/merge.html#git_index_write_tree-10"] + "commit.c": ["ex/v1.9.1/commit.html#git_index_write_tree-5"], + "init.c": ["ex/v1.9.1/init.html#git_index_write_tree-3"], + "merge.c": ["ex/v1.9.1/merge.html#git_index_write_tree-10"] } }, "git_index_write_tree_to": { "type": "function", "file": "git2/index.h", - "line": 370, - "lineto": 370, + "line": 454, + "lineto": 454, "args": [ { "name": "out", @@ -8710,8 +8926,8 @@ "git_index_entrycount": { "type": "function", "file": "git2/index.h", - "line": 389, - "lineto": 389, + "line": 473, + "lineto": 473, "args": [ { "name": "index", @@ -8729,15 +8945,15 @@ "comments": "", "group": "index", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_index_entrycount-36"], - "ls-files.c": ["ex/v1.8.4/ls-files.html#git_index_entrycount-2"] + "general.c": ["ex/v1.9.1/general.html#git_index_entrycount-36"], + "ls-files.c": ["ex/v1.9.1/ls-files.html#git_index_entrycount-2"] } }, "git_index_clear": { "type": "function", "file": "git2/index.h", - "line": 400, - "lineto": 400, + "line": 484, + "lineto": 484, "args": [ { "name": "index", @@ -8758,8 +8974,8 @@ "git_index_get_byindex": { "type": "function", "file": "git2/index.h", - "line": 413, - "lineto": 414, + "line": 497, + "lineto": 498, "args": [ { "name": "index", @@ -8782,15 +8998,15 @@ "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", "group": "index", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_index_get_byindex-37"], - "ls-files.c": ["ex/v1.8.4/ls-files.html#git_index_get_byindex-3"] + "general.c": ["ex/v1.9.1/general.html#git_index_get_byindex-37"], + "ls-files.c": ["ex/v1.9.1/ls-files.html#git_index_get_byindex-3"] } }, "git_index_get_bypath": { "type": "function", "file": "git2/index.h", - "line": 428, - "lineto": 429, + "line": 512, + "lineto": 513, "args": [ { "name": "index", @@ -8810,14 +9026,14 @@ "comments": "

The entry is not modifiable and should not be freed. Because the git_index_entry struct is a publicly defined struct, you should be able to make your own permanent copy of the data if necessary.

\n", "group": "index", "examples": { - "ls-files.c": ["ex/v1.8.4/ls-files.html#git_index_get_bypath-4"] + "ls-files.c": ["ex/v1.9.1/ls-files.html#git_index_get_bypath-4"] } }, "git_index_remove": { "type": "function", "file": "git2/index.h", - "line": 439, - "lineto": 439, + "line": 523, + "lineto": 523, "args": [ { "name": "index", @@ -8837,8 +9053,8 @@ "git_index_remove_directory": { "type": "function", "file": "git2/index.h", - "line": 449, - "lineto": 450, + "line": 533, + "lineto": 534, "args": [ { "name": "index", @@ -8862,8 +9078,8 @@ "git_index_add": { "type": "function", "file": "git2/index.h", - "line": 466, - "lineto": 466, + "line": 550, + "lineto": 550, "args": [ { "name": "index", @@ -8886,8 +9102,8 @@ "git_index_entry_stage": { "type": "function", "file": "git2/index.h", - "line": 478, - "lineto": 478, + "line": 562, + "lineto": 562, "args": [ { "name": "entry", @@ -8905,8 +9121,8 @@ "git_index_entry_is_conflict": { "type": "function", "file": "git2/index.h", - "line": 487, - "lineto": 487, + "line": 571, + "lineto": 571, "args": [ { "name": "entry", @@ -8927,8 +9143,8 @@ "git_index_iterator_new": { "type": "function", "file": "git2/index.h", - "line": 508, - "lineto": 510, + "line": 592, + "lineto": 594, "args": [ { "name": "iterator_out", @@ -8951,8 +9167,8 @@ "git_index_iterator_next": { "type": "function", "file": "git2/index.h", - "line": 519, - "lineto": 521, + "line": 603, + "lineto": 605, "args": [ { "name": "out", @@ -8978,8 +9194,8 @@ "git_index_iterator_free": { "type": "function", "file": "git2/index.h", - "line": 528, - "lineto": 528, + "line": 612, + "lineto": 612, "args": [ { "name": "iterator", @@ -8997,8 +9213,8 @@ "git_index_add_bypath": { "type": "function", "file": "git2/index.h", - "line": 559, - "lineto": 559, + "line": 643, + "lineto": 643, "args": [ { "name": "index", @@ -9017,8 +9233,8 @@ "git_index_add_from_buffer": { "type": "function", "file": "git2/index.h", - "line": 587, - "lineto": 590, + "line": 671, + "lineto": 674, "args": [ { "name": "index", @@ -9047,8 +9263,8 @@ "git_index_remove_bypath": { "type": "function", "file": "git2/index.h", - "line": 606, - "lineto": 606, + "line": 690, + "lineto": 690, "args": [ { "name": "index", @@ -9071,8 +9287,8 @@ "git_index_add_all": { "type": "function", "file": "git2/index.h", - "line": 654, - "lineto": 659, + "line": 738, + "lineto": 743, "args": [ { "name": "index", @@ -9109,13 +9325,13 @@ "description": "

Add or update index entries matching files in the working directory.

\n", "comments": "

This method will fail in bare index instances.

\n\n

The pathspec is a list of file names or shell glob patterns that will be matched against files in the repository's working directory. Each file that matches will be added to the index (either updating an existing entry or adding a new entry). You can disable glob expansion and force exact matching with the GIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH flag.

\n\n

Files that are ignored will be skipped (unlike git_index_add_bypath). If a file is already tracked in the index, then it will be updated even if it is ignored. Pass the GIT_INDEX_ADD_FORCE flag to skip the checking of ignore rules.

\n\n

To emulate git add -A and generate an error if the pathspec contains the exact path of an ignored file (when not using FORCE), add the GIT_INDEX_ADD_CHECK_PATHSPEC flag. This checks that each entry in the pathspec that is an exact match to a filename on disk is either not ignored or already in the index. If this check fails, the function will return GIT_EINVALIDSPEC.

\n\n

To emulate git add -A with the "dry-run" option, just use a callback function that always returns a positive value. See below for details.

\n\n

If any files are currently the result of a merge conflict, those files will no longer be marked as conflicting. The data about the conflicts will be moved to the "resolve undo" (REUC) section.

\n\n

If you provide a callback function, it will be invoked on each matching item in the working directory immediately before it is added to / updated in the index. Returning zero will add the item to the index, greater than zero will skip the item, and less than zero will abort the scan and return that value to the caller.

\n", "group": "index", - "examples": { "add.c": ["ex/v1.8.4/add.html#git_index_add_all-3"] } + "examples": { "add.c": ["ex/v1.9.1/add.html#git_index_add_all-3"] } }, "git_index_remove_all": { "type": "function", "file": "git2/index.h", - "line": 676, - "lineto": 680, + "line": 760, + "lineto": 764, "args": [ { "name": "index", @@ -9151,8 +9367,8 @@ "git_index_update_all": { "type": "function", "file": "git2/index.h", - "line": 705, - "lineto": 709, + "line": 789, + "lineto": 793, "args": [ { "name": "index", @@ -9184,13 +9400,13 @@ "description": "

Update all index entries to match the working directory

\n", "comments": "

This method will fail in bare index instances.

\n\n

This scans the existing index entries and synchronizes them with the working directory, deleting them if the corresponding working directory file no longer exists otherwise updating the information (including adding the latest version of file to the ODB if needed).

\n\n

If you provide a callback function, it will be invoked on each matching item in the index immediately before it is updated (either refreshed or removed depending on working directory state). Return 0 to proceed with updating the item, > 0 to skip the item, and < 0 to abort the scan.

\n", "group": "index", - "examples": { "add.c": ["ex/v1.8.4/add.html#git_index_update_all-4"] } + "examples": { "add.c": ["ex/v1.9.1/add.html#git_index_update_all-4"] } }, "git_index_find": { "type": "function", "file": "git2/index.h", - "line": 720, - "lineto": 720, + "line": 804, + "lineto": 804, "args": [ { "name": "at_pos", @@ -9214,8 +9430,8 @@ "git_index_find_prefix": { "type": "function", "file": "git2/index.h", - "line": 731, - "lineto": 731, + "line": 815, + "lineto": 815, "args": [ { "name": "at_pos", @@ -9243,8 +9459,8 @@ "git_index_conflict_add": { "type": "function", "file": "git2/index.h", - "line": 756, - "lineto": 760, + "line": 840, + "lineto": 844, "args": [ { "name": "index", @@ -9277,8 +9493,8 @@ "git_index_conflict_get": { "type": "function", "file": "git2/index.h", - "line": 776, - "lineto": 781, + "line": 860, + "lineto": 865, "args": [ { "name": "ancestor_out", @@ -9312,8 +9528,8 @@ "git_index_conflict_remove": { "type": "function", "file": "git2/index.h", - "line": 790, - "lineto": 790, + "line": 874, + "lineto": 874, "args": [ { "name": "index", @@ -9336,8 +9552,8 @@ "git_index_conflict_cleanup": { "type": "function", "file": "git2/index.h", - "line": 798, - "lineto": 798, + "line": 882, + "lineto": 882, "args": [ { "name": "index", @@ -9355,8 +9571,8 @@ "git_index_has_conflicts": { "type": "function", "file": "git2/index.h", - "line": 806, - "lineto": 806, + "line": 890, + "lineto": 890, "args": [ { "name": "index", @@ -9374,14 +9590,14 @@ "comments": "", "group": "index", "examples": { - "merge.c": ["ex/v1.8.4/merge.html#git_index_has_conflicts-11"] + "merge.c": ["ex/v1.9.1/merge.html#git_index_has_conflicts-11"] } }, "git_index_conflict_iterator_new": { "type": "function", "file": "git2/index.h", - "line": 817, - "lineto": 819, + "line": 901, + "lineto": 903, "args": [ { "name": "iterator_out", @@ -9401,14 +9617,14 @@ "comments": "

The index must not be modified while iterating; the results are undefined.

\n", "group": "index", "examples": { - "merge.c": ["ex/v1.8.4/merge.html#git_index_conflict_iterator_new-12"] + "merge.c": ["ex/v1.9.1/merge.html#git_index_conflict_iterator_new-12"] } }, "git_index_conflict_next": { "type": "function", "file": "git2/index.h", - "line": 832, - "lineto": 836, + "line": 916, + "lineto": 920, "args": [ { "name": "ancestor_out", @@ -9441,14 +9657,14 @@ "comments": "", "group": "index", "examples": { - "merge.c": ["ex/v1.8.4/merge.html#git_index_conflict_next-13"] + "merge.c": ["ex/v1.9.1/merge.html#git_index_conflict_next-13"] } }, "git_index_conflict_iterator_free": { "type": "function", "file": "git2/index.h", - "line": 843, - "lineto": 844, + "line": 927, + "lineto": 928, "args": [ { "name": "iterator", @@ -9463,14 +9679,14 @@ "comments": "", "group": "index", "examples": { - "merge.c": ["ex/v1.8.4/merge.html#git_index_conflict_iterator_free-14"] + "merge.c": ["ex/v1.9.1/merge.html#git_index_conflict_iterator_free-14"] } }, "git_indexer_options_init": { "type": "function", "file": "git2/indexer.h", - "line": 99, - "lineto": 101, + "line": 116, + "lineto": 118, "args": [ { "name": "opts", @@ -9496,8 +9712,8 @@ "git_indexer_new": { "type": "function", "file": "git2/indexer.h", - "line": 131, - "lineto": 136, + "line": 147, + "lineto": 152, "args": [ { "name": "out", @@ -9535,8 +9751,8 @@ "git_indexer_append": { "type": "function", "file": "git2/indexer.h", - "line": 148, - "lineto": 148, + "line": 164, + "lineto": 164, "args": [ { "name": "idx", "type": "git_indexer *", "comment": "the indexer" }, { @@ -9565,8 +9781,8 @@ "git_indexer_commit": { "type": "function", "file": "git2/indexer.h", - "line": 159, - "lineto": 159, + "line": 175, + "lineto": 175, "args": [ { "name": "idx", "type": "git_indexer *", "comment": "the indexer" }, { @@ -9585,8 +9801,8 @@ "git_indexer_hash": { "type": "function", "file": "git2/indexer.h", - "line": 172, - "lineto": 172, + "line": 188, + "lineto": 188, "args": [ { "name": "idx", @@ -9607,8 +9823,8 @@ "git_indexer_name": { "type": "function", "file": "git2/indexer.h", - "line": 184, - "lineto": 184, + "line": 200, + "lineto": 200, "args": [ { "name": "idx", @@ -9629,8 +9845,8 @@ "git_indexer_free": { "type": "function", "file": "git2/indexer.h", - "line": 191, - "lineto": 191, + "line": 207, + "lineto": 207, "args": [ { "name": "idx", @@ -9648,8 +9864,8 @@ "git_mailmap_new": { "type": "function", "file": "git2/mailmap.h", - "line": 32, - "lineto": 32, + "line": 37, + "lineto": 37, "args": [ { "name": "out", @@ -9667,8 +9883,8 @@ "git_mailmap_free": { "type": "function", "file": "git2/mailmap.h", - "line": 39, - "lineto": 39, + "line": 44, + "lineto": 44, "args": [ { "name": "mm", @@ -9686,8 +9902,8 @@ "git_mailmap_add_entry": { "type": "function", "file": "git2/mailmap.h", - "line": 52, - "lineto": 54, + "line": 57, + "lineto": 59, "args": [ { "name": "mm", @@ -9725,8 +9941,8 @@ "git_mailmap_from_buffer": { "type": "function", "file": "git2/mailmap.h", - "line": 64, - "lineto": 65, + "line": 69, + "lineto": 70, "args": [ { "name": "out", @@ -9754,8 +9970,8 @@ "git_mailmap_from_repository": { "type": "function", "file": "git2/mailmap.h", - "line": 81, - "lineto": 82, + "line": 86, + "lineto": 87, "args": [ { "name": "out", @@ -9778,8 +9994,8 @@ "git_mailmap_resolve": { "type": "function", "file": "git2/mailmap.h", - "line": 96, - "lineto": 98, + "line": 101, + "lineto": 103, "args": [ { "name": "real_name", @@ -9817,8 +10033,8 @@ "git_mailmap_resolve_signature": { "type": "function", "file": "git2/mailmap.h", - "line": 110, - "lineto": 111, + "line": 115, + "lineto": 116, "args": [ { "name": "out", @@ -9846,8 +10062,8 @@ "git_merge_file_input_init": { "type": "function", "file": "git2/merge.h", - "line": 60, - "lineto": 62, + "line": 66, + "lineto": 68, "args": [ { "name": "opts", @@ -9873,8 +10089,8 @@ "git_merge_file_options_init": { "type": "function", "file": "git2/merge.h", - "line": 233, - "lineto": 233, + "line": 243, + "lineto": 243, "args": [ { "name": "opts", @@ -9900,8 +10116,8 @@ "git_merge_options_init": { "type": "function", "file": "git2/merge.h", - "line": 329, - "lineto": 329, + "line": 342, + "lineto": 342, "args": [ { "name": "opts", @@ -9927,8 +10143,8 @@ "git_merge_analysis": { "type": "function", "file": "git2/merge.h", - "line": 399, - "lineto": 404, + "line": 412, + "lineto": 417, "args": [ { "name": "analysis_out", @@ -9962,13 +10178,13 @@ "description": "

Analyzes the given branch(es) and determines the opportunities for\n merging them into the HEAD of the repository.

\n", "comments": "", "group": "merge", - "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_merge_analysis-15"] } + "examples": { "merge.c": ["ex/v1.9.1/merge.html#git_merge_analysis-15"] } }, "git_merge_analysis_for_ref": { "type": "function", "file": "git2/merge.h", - "line": 418, - "lineto": 424, + "line": 431, + "lineto": 437, "args": [ { "name": "analysis_out", @@ -10011,8 +10227,8 @@ "git_merge_base": { "type": "function", "file": "git2/merge.h", - "line": 435, - "lineto": 439, + "line": 448, + "lineto": 452, "args": [ { "name": "out", @@ -10045,15 +10261,15 @@ "comments": "", "group": "merge", "examples": { - "log.c": ["ex/v1.8.4/log.html#git_merge_base-31"], - "rev-parse.c": ["ex/v1.8.4/rev-parse.html#git_merge_base-1"] + "log.c": ["ex/v1.9.1/log.html#git_merge_base-31"], + "rev-parse.c": ["ex/v1.9.1/rev-parse.html#git_merge_base-1"] } }, "git_merge_bases": { "type": "function", "file": "git2/merge.h", - "line": 450, - "lineto": 454, + "line": 463, + "lineto": 467, "args": [ { "name": "out", @@ -10089,8 +10305,8 @@ "git_merge_base_many": { "type": "function", "file": "git2/merge.h", - "line": 465, - "lineto": 469, + "line": 478, + "lineto": 482, "args": [ { "name": "out", @@ -10126,8 +10342,8 @@ "git_merge_bases_many": { "type": "function", "file": "git2/merge.h", - "line": 480, - "lineto": 484, + "line": 524, + "lineto": 528, "args": [ { "name": "out", @@ -10157,14 +10373,14 @@ "comment": " Zero on success; GIT_ENOTFOUND or -1 on failure." }, "description": "

Find all merge bases given a list of commits

\n", - "comments": "", + "comments": "

This behaves similar to git merge-base.

\n\n

Given three commits a, b, and c, merge_base_many will compute a hypothetical commit m, which is a merge between b and c.

\n\n

For example, with the following topology: text o---o---o---o---C / / o---o---o---B / / ---2---1---o---o---o---A

\n\n

the result of merge_base_many given a, b, and c is 1. This is because the equivalent topology with the imaginary merge commit m between b and c is: text o---o---o---o---o / \\ / o---o---o---o---M / / ---2---1---o---o---o---A

\n\n

and the result of merge_base_many given a and m is 1.

\n\n

If you're looking to recieve the common ancestor between all the given commits, use merge_base_octopus.

\n", "group": "merge" }, "git_merge_base_octopus": { "type": "function", "file": "git2/merge.h", - "line": 495, - "lineto": 499, + "line": 539, + "lineto": 543, "args": [ { "name": "out", @@ -10200,8 +10416,8 @@ "git_merge_file": { "type": "function", "file": "git2/merge.h", - "line": 517, - "lineto": 522, + "line": 561, + "lineto": 566, "args": [ { "name": "out", @@ -10239,8 +10455,8 @@ "git_merge_file_from_index": { "type": "function", "file": "git2/merge.h", - "line": 538, - "lineto": 544, + "line": 582, + "lineto": 588, "args": [ { "name": "out", @@ -10283,8 +10499,8 @@ "git_merge_file_result_free": { "type": "function", "file": "git2/merge.h", - "line": 551, - "lineto": 551, + "line": 595, + "lineto": 595, "args": [ { "name": "result", @@ -10302,8 +10518,8 @@ "git_merge_trees": { "type": "function", "file": "git2/merge.h", - "line": 569, - "lineto": 575, + "line": 613, + "lineto": 619, "args": [ { "name": "out", @@ -10346,8 +10562,8 @@ "git_merge_commits": { "type": "function", "file": "git2/merge.h", - "line": 592, - "lineto": 597, + "line": 636, + "lineto": 641, "args": [ { "name": "out", @@ -10385,8 +10601,8 @@ "git_merge": { "type": "function", "file": "git2/merge.h", - "line": 617, - "lineto": 622, + "line": 661, + "lineto": 666, "args": [ { "name": "repo", @@ -10420,7 +10636,7 @@ "description": "

Merges the given commit(s) into HEAD, writing the results into the working\n directory. Any changes are staged for commit and any conflicts are written\n to the index. Callers should inspect the repository's index after this\n completes, resolve any conflicts and prepare a commit.

\n", "comments": "

For compatibility with git, the repository is put into a merging state. Once the commit is done (or if the user wishes to abort), you should clear this state by calling git_repository_state_cleanup().

\n", "group": "merge", - "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_merge-16"] } + "examples": { "merge.c": ["ex/v1.9.1/merge.html#git_merge-16"] } }, "git_message_prettify": { "type": "function", @@ -10502,64 +10718,11 @@ "comments": "", "group": "message" }, - "git_note_iterator_new": { - "type": "function", - "file": "git2/notes.h", - "line": 49, - "lineto": 52, - "args": [ - { - "name": "out", - "type": "git_note_iterator **", - "comment": "pointer to the iterator" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" - } - ], - "argline": "git_note_iterator **out, git_repository *repo, const char *notes_ref", - "sig": "git_note_iterator **::git_repository *::const char *", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Creates a new iterator for notes

\n", - "comments": "

The iterator must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_commit_iterator_new": { - "type": "function", - "file": "git2/notes.h", - "line": 64, - "lineto": 66, - "args": [ - { - "name": "out", - "type": "git_note_iterator **", - "comment": "pointer to the iterator" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - } - ], - "argline": "git_note_iterator **out, git_commit *notes_commit", - "sig": "git_note_iterator **::git_commit *", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Creates a new iterator for notes from a commit

\n", - "comments": "

The iterator must be freed manually by the user.

\n", - "group": "note" - }, "git_note_iterator_free": { "type": "function", "file": "git2/notes.h", - "line": 73, - "lineto": 73, + "line": 75, + "lineto": 75, "args": [ { "name": "it", @@ -10577,8 +10740,8 @@ "git_note_next": { "type": "function", "file": "git2/notes.h", - "line": 86, - "lineto": 89, + "line": 88, + "lineto": 91, "args": [ { "name": "note_id", @@ -10606,413 +10769,11 @@ "comments": "", "group": "note" }, - "git_note_read": { - "type": "function", - "file": "git2/notes.h", - "line": 105, - "lineto": 109, - "args": [ - { - "name": "out", - "type": "git_note **", - "comment": "pointer to the read note; NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional); defaults to\n \"refs/notes/commits\"" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to read the note from" - } - ], - "argline": "git_note **out, git_repository *repo, const char *notes_ref, const git_oid *oid", - "sig": "git_note **::git_repository *::const char *::const git_oid *", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Read the note for an object

\n", - "comments": "

The note must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_commit_read": { - "type": "function", - "file": "git2/notes.h", - "line": 124, - "lineto": 128, - "args": [ - { - "name": "out", - "type": "git_note **", - "comment": "pointer to the read note; NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to look up the note" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to read the note from" - } - ], - "argline": "git_note **out, git_repository *repo, git_commit *notes_commit, const git_oid *oid", - "sig": "git_note **::git_repository *::git_commit *::const git_oid *", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Read the note for an object from a note commit

\n", - "comments": "

The note must be freed manually by the user.

\n", - "group": "note" - }, - "git_note_author": { - "type": "function", - "file": "git2/notes.h", - "line": 136, - "lineto": 136, - "args": [ - { "name": "note", "type": "const git_note *", "comment": "the note" } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { "type": "const git_signature *", "comment": " the author" }, - "description": "

Get the note author

\n", - "comments": "", - "group": "note" - }, - "git_note_committer": { - "type": "function", - "file": "git2/notes.h", - "line": 144, - "lineto": 144, - "args": [ - { "name": "note", "type": "const git_note *", "comment": "the note" } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const git_signature *", - "comment": " the committer" - }, - "description": "

Get the note committer

\n", - "comments": "", - "group": "note" - }, - "git_note_message": { - "type": "function", - "file": "git2/notes.h", - "line": 153, - "lineto": 153, - "args": [ - { "name": "note", "type": "const git_note *", "comment": "the note" } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { "type": "const char *", "comment": " the note message" }, - "description": "

Get the note message

\n", - "comments": "", - "group": "note" - }, - "git_note_id": { - "type": "function", - "file": "git2/notes.h", - "line": 162, - "lineto": 162, - "args": [ - { "name": "note", "type": "const git_note *", "comment": "the note" } - ], - "argline": "const git_note *note", - "sig": "const git_note *", - "return": { - "type": "const git_oid *", - "comment": " the note object's id" - }, - "description": "

Get the note object's id

\n", - "comments": "", - "group": "note" - }, - "git_note_create": { - "type": "function", - "file": "git2/notes.h", - "line": 179, - "lineto": 187, - "args": [ - { - "name": "out", - "type": "git_oid *", - "comment": "pointer to store the OID (optional); NULL in case of error" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where to store the note" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to decorate" - }, - { - "name": "note", - "type": "const char *", - "comment": "Content of the note to add for object oid" - }, - { "name": "force", "type": "int", "comment": "Overwrite existing note" } - ], - "argline": "git_oid *out, git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int force", - "sig": "git_oid *::git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *::const char *::int", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Add a note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_commit_create": { - "type": "function", - "file": "git2/notes.h", - "line": 209, - "lineto": 218, - "args": [ - { - "name": "notes_commit_out", - "type": "git_oid *", - "comment": "pointer to store the commit (optional);\n\t\t\t\t\tNULL in case of error" - }, - { - "name": "notes_blob_out", - "type": "git_oid *", - "comment": "a point to the id of a note blob (optional)" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note will live" - }, - { - "name": "parent", - "type": "git_commit *", - "comment": "Pointer to parent note\n\t\t\t\t\tor NULL if this shall start a new notes tree" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to decorate" - }, - { - "name": "note", - "type": "const char *", - "comment": "Content of the note to add for object oid" - }, - { - "name": "allow_note_overwrite", - "type": "int", - "comment": "Overwrite existing note" - } - ], - "argline": "git_oid *notes_commit_out, git_oid *notes_blob_out, git_repository *repo, git_commit *parent, const git_signature *author, const git_signature *committer, const git_oid *oid, const char *note, int allow_note_overwrite", - "sig": "git_oid *::git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *::const char *::int", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Add a note for an object from a commit

\n", - "comments": "

This function will create a notes commit for a given object, the commit is a dangling commit, no reference is created.

\n", - "group": "note" - }, - "git_note_remove": { - "type": "function", - "file": "git2/notes.h", - "line": 232, - "lineto": 237, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note lives" - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "canonical name of the reference to use (optional);\n\t\t\t\t\tdefaults to \"refs/notes/commits\"" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to remove the note from" - } - ], - "argline": "git_repository *repo, const char *notes_ref, const git_signature *author, const git_signature *committer, const git_oid *oid", - "sig": "git_repository *::const char *::const git_signature *::const git_signature *::const git_oid *", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Remove the note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_commit_remove": { - "type": "function", - "file": "git2/notes.h", - "line": 257, - "lineto": 263, - "args": [ - { - "name": "notes_commit_out", - "type": "git_oid *", - "comment": "pointer to store the new notes commit (optional);\n\t\t\t\t\tNULL in case of error.\n\t\t\t\t\tWhen removing a note a new tree containing all notes\n\t\t\t\t\tsans the note to be removed is created and a new commit\n\t\t\t\t\tpointing to that tree is also created.\n\t\t\t\t\tIn the case where the resulting tree is an empty tree\n\t\t\t\t\ta new commit pointing to this empty tree will be returned." - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "repository where the note lives" - }, - { - "name": "notes_commit", - "type": "git_commit *", - "comment": "a pointer to the notes commit object" - }, - { - "name": "author", - "type": "const git_signature *", - "comment": "signature of the notes commit author" - }, - { - "name": "committer", - "type": "const git_signature *", - "comment": "signature of the notes commit committer" - }, - { - "name": "oid", - "type": "const git_oid *", - "comment": "OID of the git object to remove the note from" - } - ], - "argline": "git_oid *notes_commit_out, git_repository *repo, git_commit *notes_commit, const git_signature *author, const git_signature *committer, const git_oid *oid", - "sig": "git_oid *::git_repository *::git_commit *::const git_signature *::const git_signature *::const git_oid *", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Remove the note for an object

\n", - "comments": "", - "group": "note" - }, - "git_note_free": { - "type": "function", - "file": "git2/notes.h", - "line": 270, - "lineto": 270, - "args": [ - { "name": "note", "type": "git_note *", "comment": "git_note object" } - ], - "argline": "git_note *note", - "sig": "git_note *", - "return": { "type": "void", "comment": null }, - "description": "

Free a git_note object

\n", - "comments": "", - "group": "note" - }, - "git_note_default_ref": { - "type": "function", - "file": "git2/notes.h", - "line": 280, - "lineto": 280, - "args": [ - { - "name": "out", - "type": "git_buf *", - "comment": "buffer in which to store the name of the default notes reference" - }, - { - "name": "repo", - "type": "git_repository *", - "comment": "The Git repository" - } - ], - "argline": "git_buf *out, git_repository *repo", - "sig": "git_buf *::git_repository *", - "return": { "type": "int", "comment": " 0 or an error code" }, - "description": "

Get the default notes reference for a repository

\n", - "comments": "", - "group": "note" - }, - "git_note_foreach": { - "type": "function", - "file": "git2/notes.h", - "line": 298, - "lineto": 302, - "args": [ - { - "name": "repo", - "type": "git_repository *", - "comment": "Repository where to find the notes." - }, - { - "name": "notes_ref", - "type": "const char *", - "comment": "Reference to read from (optional); defaults to\n \"refs/notes/commits\"." - }, - { - "name": "note_cb", - "type": "git_note_foreach_cb", - "comment": "Callback to invoke per found annotation. Return non-zero\n to stop looping." - }, - { - "name": "payload", - "type": "void *", - "comment": "Extra parameter to callback function." - } - ], - "argline": "git_repository *repo, const char *notes_ref, git_note_foreach_cb note_cb, void *payload", - "sig": "git_repository *::const char *::git_note_foreach_cb::void *", - "return": { - "type": "int", - "comment": " 0 on success, non-zero callback return value, or error code" - }, - "description": "

Loop over all the notes within a specified namespace\n and issue a callback for each one.

\n", - "comments": "", - "group": "note" - }, "git_object_lookup": { "type": "function", "file": "git2/object.h", - "line": 44, - "lineto": 48, + "line": 45, + "lineto": 49, "args": [ { "name": "object", @@ -11042,15 +10803,15 @@ "comments": "

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", "group": "object", "examples": { - "log.c": ["ex/v1.8.4/log.html#git_object_lookup-32"], - "merge.c": ["ex/v1.8.4/merge.html#git_object_lookup-17"] + "log.c": ["ex/v1.9.1/log.html#git_object_lookup-32"], + "merge.c": ["ex/v1.9.1/merge.html#git_object_lookup-17"] } }, "git_object_lookup_prefix": { "type": "function", "file": "git2/object.h", - "line": 77, - "lineto": 82, + "line": 78, + "lineto": 83, "args": [ { "name": "object_out", @@ -11082,14 +10843,14 @@ "sig": "git_object **::git_repository *::const git_oid *::size_t::git_object_t", "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

Lookup a reference to one of the objects in a repository,\n given a prefix of its identifier (short id).

\n", - "comments": "

The object obtained will be so that its identifier matches the first 'len' hexadecimal characters (packets of 4 bits) of the given 'id'. 'len' must be at least GIT_OID_MINPREFIXLEN, and long enough to identify a unique object matching the prefix; otherwise the method will fail.

\n\n

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The 'type' parameter must match the type of the object in the odb; the method will fail otherwise. The special value 'GIT_OBJECT_ANY' may be passed to let the method guess the object's type.

\n", + "comments": "

The object obtained will be so that its identifier matches the first 'len' hexadecimal characters (packets of 4 bits) of the given id. len must be at least GIT_OID_MINPREFIXLEN, and long enough to identify a unique object matching the prefix; otherwise the method will fail.

\n\n

The generated reference is owned by the repository and should be closed with the git_object_free method instead of free'd manually.

\n\n

The type parameter must match the type of the object in the odb; the method will fail otherwise. The special value GIT_OBJECT_ANY may be passed to let the method guess the object's type.

\n", "group": "object" }, "git_object_lookup_bypath": { "type": "function", "file": "git2/object.h", - "line": 95, - "lineto": 99, + "line": 96, + "lineto": 100, "args": [ { "name": "out", @@ -11122,8 +10883,8 @@ "git_object_id": { "type": "function", "file": "git2/object.h", - "line": 107, - "lineto": 107, + "line": 108, + "lineto": 108, "args": [ { "name": "obj", @@ -11139,35 +10900,35 @@ "group": "object", "examples": { "blame.c": [ - "ex/v1.8.4/blame.html#git_object_id-8", - "ex/v1.8.4/blame.html#git_object_id-9", - "ex/v1.8.4/blame.html#git_object_id-10", - "ex/v1.8.4/blame.html#git_object_id-11" + "ex/v1.9.1/blame.html#git_object_id-7", + "ex/v1.9.1/blame.html#git_object_id-8", + "ex/v1.9.1/blame.html#git_object_id-9", + "ex/v1.9.1/blame.html#git_object_id-10" ], "cat-file.c": [ - "ex/v1.8.4/cat-file.html#git_object_id-10", - "ex/v1.8.4/cat-file.html#git_object_id-11" + "ex/v1.9.1/cat-file.html#git_object_id-10", + "ex/v1.9.1/cat-file.html#git_object_id-11" ], "log.c": [ - "ex/v1.8.4/log.html#git_object_id-33", - "ex/v1.8.4/log.html#git_object_id-34", - "ex/v1.8.4/log.html#git_object_id-35", - "ex/v1.8.4/log.html#git_object_id-36" + "ex/v1.9.1/log.html#git_object_id-33", + "ex/v1.9.1/log.html#git_object_id-34", + "ex/v1.9.1/log.html#git_object_id-35", + "ex/v1.9.1/log.html#git_object_id-36" ], "rev-parse.c": [ - "ex/v1.8.4/rev-parse.html#git_object_id-2", - "ex/v1.8.4/rev-parse.html#git_object_id-3", - "ex/v1.8.4/rev-parse.html#git_object_id-4", - "ex/v1.8.4/rev-parse.html#git_object_id-5", - "ex/v1.8.4/rev-parse.html#git_object_id-6" + "ex/v1.9.1/rev-parse.html#git_object_id-2", + "ex/v1.9.1/rev-parse.html#git_object_id-3", + "ex/v1.9.1/rev-parse.html#git_object_id-4", + "ex/v1.9.1/rev-parse.html#git_object_id-5", + "ex/v1.9.1/rev-parse.html#git_object_id-6" ] } }, "git_object_short_id": { "type": "function", "file": "git2/object.h", - "line": 121, - "lineto": 121, + "line": 122, + "lineto": 122, "args": [ { "name": "out", @@ -11186,13 +10947,13 @@ "description": "

Get a short abbreviated OID string for the object

\n", "comments": "

This starts at the "core.abbrev" length (default 7 characters) and iteratively extends to a longer string if that length is ambiguous. The result will be unambiguous (at least until new objects are added to the repository).

\n", "group": "object", - "examples": { "tag.c": ["ex/v1.8.4/tag.html#git_object_short_id-3"] } + "examples": { "tag.c": ["ex/v1.9.1/tag.html#git_object_short_id-3"] } }, "git_object_type": { "type": "function", "file": "git2/object.h", - "line": 129, - "lineto": 129, + "line": 130, + "lineto": 130, "args": [ { "name": "obj", @@ -11208,18 +10969,18 @@ "group": "object", "examples": { "cat-file.c": [ - "ex/v1.8.4/cat-file.html#git_object_type-12", - "ex/v1.8.4/cat-file.html#git_object_type-13", - "ex/v1.8.4/cat-file.html#git_object_type-14" + "ex/v1.9.1/cat-file.html#git_object_type-12", + "ex/v1.9.1/cat-file.html#git_object_type-13", + "ex/v1.9.1/cat-file.html#git_object_type-14" ], - "tag.c": ["ex/v1.8.4/tag.html#git_object_type-4"] + "tag.c": ["ex/v1.9.1/tag.html#git_object_type-4"] } }, "git_object_owner": { "type": "function", "file": "git2/object.h", - "line": 143, - "lineto": 143, + "line": 144, + "lineto": 144, "args": [ { "name": "obj", "type": "const git_object *", "comment": "the object" } ], @@ -11236,8 +10997,8 @@ "git_object_free": { "type": "function", "file": "git2/object.h", - "line": 160, - "lineto": 160, + "line": 161, + "lineto": 161, "args": [ { "name": "object", @@ -11253,34 +11014,34 @@ "group": "object", "examples": { "blame.c": [ - "ex/v1.8.4/blame.html#git_object_free-12", - "ex/v1.8.4/blame.html#git_object_free-13", - "ex/v1.8.4/blame.html#git_object_free-14", - "ex/v1.8.4/blame.html#git_object_free-15" - ], - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_object_free-15"], - "commit.c": ["ex/v1.8.4/commit.html#git_object_free-6"], - "general.c": ["ex/v1.8.4/general.html#git_object_free-38"], - "log.c": ["ex/v1.8.4/log.html#git_object_free-37"], - "merge.c": ["ex/v1.8.4/merge.html#git_object_free-18"], + "ex/v1.9.1/blame.html#git_object_free-11", + "ex/v1.9.1/blame.html#git_object_free-12", + "ex/v1.9.1/blame.html#git_object_free-13", + "ex/v1.9.1/blame.html#git_object_free-14" + ], + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_object_free-15"], + "commit.c": ["ex/v1.9.1/commit.html#git_object_free-6"], + "general.c": ["ex/v1.9.1/general.html#git_object_free-38"], + "log.c": ["ex/v1.9.1/log.html#git_object_free-37"], + "merge.c": ["ex/v1.9.1/merge.html#git_object_free-18"], "rev-parse.c": [ - "ex/v1.8.4/rev-parse.html#git_object_free-7", - "ex/v1.8.4/rev-parse.html#git_object_free-8", - "ex/v1.8.4/rev-parse.html#git_object_free-9" + "ex/v1.9.1/rev-parse.html#git_object_free-7", + "ex/v1.9.1/rev-parse.html#git_object_free-8", + "ex/v1.9.1/rev-parse.html#git_object_free-9" ], "tag.c": [ - "ex/v1.8.4/tag.html#git_object_free-5", - "ex/v1.8.4/tag.html#git_object_free-6", - "ex/v1.8.4/tag.html#git_object_free-7", - "ex/v1.8.4/tag.html#git_object_free-8" + "ex/v1.9.1/tag.html#git_object_free-5", + "ex/v1.9.1/tag.html#git_object_free-6", + "ex/v1.9.1/tag.html#git_object_free-7", + "ex/v1.9.1/tag.html#git_object_free-8" ] } }, "git_object_type2string": { "type": "function", "file": "git2/object.h", - "line": 171, - "lineto": 171, + "line": 172, + "lineto": 172, "args": [ { "name": "type", @@ -11299,22 +11060,22 @@ "group": "object", "examples": { "cat-file.c": [ - "ex/v1.8.4/cat-file.html#git_object_type2string-16", - "ex/v1.8.4/cat-file.html#git_object_type2string-17", - "ex/v1.8.4/cat-file.html#git_object_type2string-18", - "ex/v1.8.4/cat-file.html#git_object_type2string-19" + "ex/v1.9.1/cat-file.html#git_object_type2string-16", + "ex/v1.9.1/cat-file.html#git_object_type2string-17", + "ex/v1.9.1/cat-file.html#git_object_type2string-18", + "ex/v1.9.1/cat-file.html#git_object_type2string-19" ], "general.c": [ - "ex/v1.8.4/general.html#git_object_type2string-39", - "ex/v1.8.4/general.html#git_object_type2string-40" + "ex/v1.9.1/general.html#git_object_type2string-39", + "ex/v1.9.1/general.html#git_object_type2string-40" ] } }, "git_object_string2type": { "type": "function", "file": "git2/object.h", - "line": 179, - "lineto": 179, + "line": 180, + "lineto": 180, "args": [ { "name": "str", @@ -11335,8 +11096,8 @@ "git_object_typeisloose": { "type": "function", "file": "git2/object.h", - "line": 188, - "lineto": 188, + "line": 189, + "lineto": 189, "args": [ { "name": "type", @@ -11357,8 +11118,8 @@ "git_object_peel": { "type": "function", "file": "git2/object.h", - "line": 213, - "lineto": 216, + "line": 214, + "lineto": 217, "args": [ { "name": "peeled", @@ -11389,8 +11150,8 @@ "git_object_dup": { "type": "function", "file": "git2/object.h", - "line": 226, - "lineto": 226, + "line": 227, + "lineto": 227, "args": [ { "name": "dest", @@ -11413,8 +11174,8 @@ "git_object_rawcontent_is_valid": { "type": "function", "file": "git2/object.h", - "line": 269, - "lineto": 273, + "line": 270, + "lineto": 274, "args": [ { "name": "valid", @@ -11444,11 +11205,54 @@ "comments": "", "group": "object" }, + "git_odb_new": { + "type": "function", + "file": "git2/odb.h", + "line": 102, + "lineto": 102, + "args": [ + { + "name": "odb", + "type": "git_odb **", + "comment": "location to store the database pointer, if opened." + } + ], + "argline": "git_odb **odb", + "sig": "git_odb **", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a new object database with no backends.

\n", + "comments": "

Before the ODB can be used for read/writing, a custom database backend must be manually added using git_odb_add_backend()

\n", + "group": "odb" + }, + "git_odb_open": { + "type": "function", + "file": "git2/odb.h", + "line": 120, + "lineto": 120, + "args": [ + { + "name": "odb_out", + "type": "git_odb **", + "comment": "location to store the database pointer, if opened.\n\t\t\tSet to NULL if the open failed." + }, + { + "name": "objects_dir", + "type": "const char *", + "comment": "path of the backends' \"objects\" directory." + } + ], + "argline": "git_odb **odb_out, const char *objects_dir", + "sig": "git_odb **::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a new object database and automatically add\n the two default backends:

\n", + "comments": "
- git_odb_backend_loose: read and write loose object files      from disk, assuming `objects_dir` as the Objects folder\n\n- git_odb_backend_pack: read objects from packfiles,        assuming `objects_dir` as the Objects folder which      contains a 'pack/' folder with the corresponding data\n
\n", + "group": "odb" + }, "git_odb_add_disk_alternate": { "type": "function", "file": "git2/odb.h", - "line": 118, - "lineto": 118, + "line": 138, + "lineto": 138, "args": [ { "name": "odb", @@ -11474,8 +11278,8 @@ "git_odb_free": { "type": "function", "file": "git2/odb.h", - "line": 125, - "lineto": 125, + "line": 145, + "lineto": 145, "args": [ { "name": "db", @@ -11490,18 +11294,18 @@ "comments": "", "group": "odb", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_odb_free-20"], - "general.c": ["ex/v1.8.4/general.html#git_odb_free-41"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_odb_free-20"], + "general.c": ["ex/v1.9.1/general.html#git_odb_free-41"] } }, "git_odb_read": { "type": "function", "file": "git2/odb.h", - "line": 143, - "lineto": 143, + "line": 163, + "lineto": 163, "args": [ { - "name": "out", + "name": "obj", "type": "git_odb_object **", "comment": "pointer where to store the read object" }, @@ -11516,7 +11320,7 @@ "comment": "identity of the object to read." } ], - "argline": "git_odb_object **out, git_odb *db, const git_oid *id", + "argline": "git_odb_object **obj, git_odb *db, const git_oid *id", "sig": "git_odb_object **::git_odb *::const git_oid *", "return": { "type": "int", @@ -11526,18 +11330,18 @@ "comments": "

This method queries all available ODB backends trying to read the given OID.

\n\n

The returned object is reference counted and internally cached, so it should be closed by the user once it's no longer in use.

\n", "group": "odb", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_odb_read-21"], - "general.c": ["ex/v1.8.4/general.html#git_odb_read-42"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_odb_read-21"], + "general.c": ["ex/v1.9.1/general.html#git_odb_read-42"] } }, "git_odb_read_prefix": { "type": "function", "file": "git2/odb.h", - "line": 171, - "lineto": 171, + "line": 191, + "lineto": 191, "args": [ { - "name": "out", + "name": "obj", "type": "git_odb_object **", "comment": "pointer where to store the read object" }, @@ -11557,7 +11361,7 @@ "comment": "the length of the prefix" } ], - "argline": "git_odb_object **out, git_odb *db, const git_oid *short_id, size_t len", + "argline": "git_odb_object **obj, git_odb *db, const git_oid *short_id, size_t len", "sig": "git_odb_object **::git_odb *::const git_oid *::size_t", "return": { "type": "int", @@ -11570,8 +11374,8 @@ "git_odb_read_header": { "type": "function", "file": "git2/odb.h", - "line": 190, - "lineto": 190, + "line": 210, + "lineto": 210, "args": [ { "name": "len_out", @@ -11607,8 +11411,8 @@ "git_odb_exists": { "type": "function", "file": "git2/odb.h", - "line": 199, - "lineto": 199, + "line": 219, + "lineto": 219, "args": [ { "name": "db", @@ -11634,8 +11438,8 @@ "git_odb_exists_ext": { "type": "function", "file": "git2/odb.h", - "line": 210, - "lineto": 210, + "line": 230, + "lineto": 230, "args": [ { "name": "db", @@ -11666,8 +11470,8 @@ "git_odb_exists_prefix": { "type": "function", "file": "git2/odb.h", - "line": 223, - "lineto": 224, + "line": 243, + "lineto": 244, "args": [ { "name": "out", @@ -11703,8 +11507,8 @@ "git_odb_expand_ids": { "type": "function", "file": "git2/odb.h", - "line": 266, - "lineto": 269, + "line": 286, + "lineto": 289, "args": [ { "name": "db", @@ -11735,17 +11539,13 @@ "git_odb_refresh": { "type": "function", "file": "git2/odb.h", - "line": 289, - "lineto": 289, + "line": 309, + "lineto": 309, "args": [ - { - "name": "db", - "type": "struct git_odb *", - "comment": "database to refresh" - } + { "name": "db", "type": "git_odb *", "comment": "database to refresh" } ], - "argline": "struct git_odb *db", - "sig": "struct git_odb *", + "argline": "git_odb *db", + "sig": "git_odb *", "return": { "type": "int", "comment": " 0 on success, error code otherwise" @@ -11757,8 +11557,8 @@ "git_odb_foreach": { "type": "function", "file": "git2/odb.h", - "line": 304, - "lineto": 304, + "line": 324, + "lineto": 327, "args": [ { "name": "db", "type": "git_odb *", "comment": "database to use" }, { @@ -11785,8 +11585,8 @@ "git_odb_write": { "type": "function", "file": "git2/odb.h", - "line": 324, - "lineto": 324, + "line": 347, + "lineto": 347, "args": [ { "name": "out", @@ -11801,7 +11601,7 @@ { "name": "data", "type": "const void *", - "comment": "buffer with the data to store" + "comment": "`const unsigned char *` buffer with the data to store" }, { "name": "len", "type": "size_t", "comment": "size of the buffer" }, { @@ -11816,13 +11616,13 @@ "description": "

Write an object directly into the ODB

\n", "comments": "

This method writes a full object straight into the ODB. For most cases, it is preferred to write objects through a write stream, which is both faster and less memory intensive, specially for big objects.

\n\n

This method is provided for compatibility with custom backends which are not able to support streaming writes

\n", "group": "odb", - "examples": { "general.c": ["ex/v1.8.4/general.html#git_odb_write-43"] } + "examples": { "general.c": ["ex/v1.9.1/general.html#git_odb_write-43"] } }, "git_odb_open_wstream": { "type": "function", "file": "git2/odb.h", - "line": 347, - "lineto": 347, + "line": 370, + "lineto": 370, "args": [ { "name": "out", @@ -11858,8 +11658,8 @@ "git_odb_stream_write": { "type": "function", "file": "git2/odb.h", - "line": 360, - "lineto": 360, + "line": 383, + "lineto": 383, "args": [ { "name": "stream", @@ -11886,8 +11686,8 @@ "git_odb_stream_finalize_write": { "type": "function", "file": "git2/odb.h", - "line": 375, - "lineto": 375, + "line": 398, + "lineto": 398, "args": [ { "name": "out", @@ -11913,8 +11713,8 @@ "git_odb_stream_read": { "type": "function", "file": "git2/odb.h", - "line": 387, - "lineto": 387, + "line": 410, + "lineto": 410, "args": [ { "name": "stream", @@ -11932,7 +11732,7 @@ "sig": "git_odb_stream *::char *::size_t", "return": { "type": "int", - "comment": " 0 if the read succeeded, error code otherwise" + "comment": " the number of bytes read if succeeded, error code otherwise" }, "description": "

Read from an odb stream

\n", "comments": "

Most backends don't implement streaming reads

\n", @@ -11941,8 +11741,8 @@ "git_odb_stream_free": { "type": "function", "file": "git2/odb.h", - "line": 394, - "lineto": 394, + "line": 417, + "lineto": 417, "args": [ { "name": "stream", @@ -11960,8 +11760,8 @@ "git_odb_open_rstream": { "type": "function", "file": "git2/odb.h", - "line": 422, - "lineto": 427, + "line": 445, + "lineto": 450, "args": [ { "name": "out", @@ -12002,8 +11802,8 @@ "git_odb_write_pack": { "type": "function", "file": "git2/odb.h", - "line": 448, - "lineto": 452, + "line": 471, + "lineto": 475, "args": [ { "name": "out", @@ -12036,8 +11836,8 @@ "git_odb_write_multi_pack_index": { "type": "function", "file": "git2/odb.h", - "line": 466, - "lineto": 467, + "line": 489, + "lineto": 490, "args": [ { "name": "db", @@ -12052,11 +11852,66 @@ "comments": "

If the ODB layer understands pack files, then this will create a file called multi-pack-index next to the .pack and .idx files, which will contain an index of all objects stored in .pack files. This will allow for O(log n) lookup for n objects (regardless of how many packfiles there exist).

\n", "group": "odb" }, + "git_odb_hash": { + "type": "function", + "file": "git2/odb.h", + "line": 539, + "lineto": 539, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "the resulting object-ID." + }, + { "name": "data", "type": "const void *", "comment": "data to hash" }, + { "name": "len", "type": "size_t", "comment": "size of the data" }, + { + "name": "object_type", + "type": "git_object_t", + "comment": "of the data to hash" + } + ], + "argline": "git_oid *oid, const void *data, size_t len, git_object_t object_type", + "sig": "git_oid *::const void *::size_t::git_object_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Determine the object-ID (sha1 or sha256 hash) of a data buffer

\n", + "comments": "

The resulting OID will be the identifier for the data buffer as if the data buffer it were to written to the ODB.

\n", + "group": "odb" + }, + "git_odb_hashfile": { + "type": "function", + "file": "git2/odb.h", + "line": 554, + "lineto": 554, + "args": [ + { + "name": "oid", + "type": "git_oid *", + "comment": "oid structure the result is written into." + }, + { + "name": "path", + "type": "const char *", + "comment": "file to read and determine object id for" + }, + { + "name": "object_type", + "type": "git_object_t", + "comment": "of the data to hash" + } + ], + "argline": "git_oid *oid, const char *path, git_object_t object_type", + "sig": "git_oid *::const char *::git_object_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Read a file from disk and fill a git_oid with the object id\n that the file would have if it were written to the Object\n Database as an object of the given type (w/o applying filters).\n Similar functionality to git.git's git hash-object without\n the -w flag, however, with the --no-filters flag.\n If you need filters, see git_repository_hashfile.

\n", + "comments": "", + "group": "odb" + }, "git_odb_object_dup": { "type": "function", "file": "git2/odb.h", - "line": 529, - "lineto": 529, + "line": 570, + "lineto": 570, "args": [ { "name": "dest", @@ -12079,8 +11934,8 @@ "git_odb_object_free": { "type": "function", "file": "git2/odb.h", - "line": 539, - "lineto": 539, + "line": 580, + "lineto": 580, "args": [ { "name": "object", @@ -12095,15 +11950,15 @@ "comments": "

This method must always be called once a git_odb_object is no longer needed, otherwise memory will leak.

\n", "group": "odb", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_odb_object_free-22"], - "general.c": ["ex/v1.8.4/general.html#git_odb_object_free-44"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_odb_object_free-22"], + "general.c": ["ex/v1.9.1/general.html#git_odb_object_free-44"] } }, "git_odb_object_id": { "type": "function", "file": "git2/odb.h", - "line": 549, - "lineto": 549, + "line": 590, + "lineto": 590, "args": [ { "name": "object", @@ -12124,8 +11979,8 @@ "git_odb_object_data": { "type": "function", "file": "git2/odb.h", - "line": 562, - "lineto": 562, + "line": 603, + "lineto": 603, "args": [ { "name": "object", @@ -12135,19 +11990,22 @@ ], "argline": "git_odb_object *object", "sig": "git_odb_object *", - "return": { "type": "const void *", "comment": " a pointer to the data" }, + "return": { + "type": "const void *", + "comment": " \n\n `const unsigned char *` a pointer to the data" + }, "description": "

Return the data of an ODB object

\n", "comments": "

This is the uncompressed, raw data as read from the ODB, without the leading header.

\n\n

This pointer is owned by the object and shall not be free'd.

\n", "group": "odb", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_odb_object_data-45"] + "general.c": ["ex/v1.9.1/general.html#git_odb_object_data-45"] } }, "git_odb_object_size": { "type": "function", "file": "git2/odb.h", - "line": 573, - "lineto": 573, + "line": 614, + "lineto": 614, "args": [ { "name": "object", @@ -12162,15 +12020,15 @@ "comments": "

This is the real size of the data buffer, not the actual size of the object.

\n", "group": "odb", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_odb_object_size-23"], - "general.c": ["ex/v1.8.4/general.html#git_odb_object_size-46"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_odb_object_size-23"], + "general.c": ["ex/v1.9.1/general.html#git_odb_object_size-46"] } }, "git_odb_object_type": { "type": "function", "file": "git2/odb.h", - "line": 581, - "lineto": 581, + "line": 622, + "lineto": 622, "args": [ { "name": "object", @@ -12185,14 +12043,14 @@ "comments": "", "group": "odb", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_odb_object_type-47"] + "general.c": ["ex/v1.9.1/general.html#git_odb_object_type-47"] } }, "git_odb_add_backend": { "type": "function", "file": "git2/odb.h", - "line": 596, - "lineto": 596, + "line": 637, + "lineto": 637, "args": [ { "name": "odb", @@ -12223,8 +12081,8 @@ "git_odb_add_alternate": { "type": "function", "file": "git2/odb.h", - "line": 617, - "lineto": 617, + "line": 658, + "lineto": 658, "args": [ { "name": "odb", @@ -12255,8 +12113,8 @@ "git_odb_num_backends": { "type": "function", "file": "git2/odb.h", - "line": 625, - "lineto": 625, + "line": 666, + "lineto": 666, "args": [ { "name": "odb", "type": "git_odb *", "comment": "object database" } ], @@ -12273,8 +12131,8 @@ "git_odb_get_backend": { "type": "function", "file": "git2/odb.h", - "line": 635, - "lineto": 635, + "line": 676, + "lineto": 676, "args": [ { "name": "out", @@ -12301,8 +12159,8 @@ "git_odb_set_commit_graph": { "type": "function", "file": "git2/odb.h", - "line": 650, - "lineto": 650, + "line": 691, + "lineto": 691, "args": [ { "name": "odb", "type": "git_odb *", "comment": "object database" }, { @@ -12321,11 +12179,224 @@ "comments": "

After a successful call, the ownership of the cgraph parameter will be transferred to libgit2, and the caller should not free it.

\n\n

The commit-graph can also be unset by explicitly passing NULL as the cgraph parameter.

\n", "group": "odb" }, + "git_odb_backend_pack": { + "type": "function", + "file": "git2/odb_backend.h", + "line": 142, + "lineto": 144, + "args": [ + { + "name": "out", + "type": "git_odb_backend **", + "comment": "location to store the odb backend pointer" + }, + { + "name": "objects_dir", + "type": "const char *", + "comment": "the Git repository's objects directory" + } + ], + "argline": "git_odb_backend **out, const char *objects_dir", + "sig": "git_odb_backend **::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a backend for a directory containing packfiles.

\n", + "comments": "", + "group": "odb" + }, + "git_odb_backend_one_pack": { + "type": "function", + "file": "git2/odb_backend.h", + "line": 156, + "lineto": 158, + "args": [ + { + "name": "out", + "type": "git_odb_backend **", + "comment": "location to store the odb backend pointer" + }, + { + "name": "index_file", + "type": "const char *", + "comment": "path to the packfile's .idx file" + } + ], + "argline": "git_odb_backend **out, const char *index_file", + "sig": "git_odb_backend **::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a backend out of a single packfile

\n", + "comments": "

This can be useful for inspecting the contents of a single packfile.

\n", + "group": "odb" + }, + "git_odb_backend_loose": { + "type": "function", + "file": "git2/odb_backend.h", + "line": 171, + "lineto": 177, + "args": [ + { + "name": "out", + "type": "git_odb_backend **", + "comment": "location to store the odb backend pointer" + }, + { + "name": "objects_dir", + "type": "const char *", + "comment": "the Git repository's objects directory" + }, + { + "name": "compression_level", + "type": "int", + "comment": "zlib compression level (0-9), or -1 for the default" + }, + { + "name": "do_fsync", + "type": "int", + "comment": "if non-zero, perform an fsync on write" + }, + { + "name": "dir_mode", + "type": "unsigned int", + "comment": "permission to use when creating directories, or 0 for default" + }, + { + "name": "file_mode", + "type": "unsigned int", + "comment": "permission to use when creating directories, or 0 for default" + } + ], + "argline": "git_odb_backend **out, const char *objects_dir, int compression_level, int do_fsync, unsigned int dir_mode, unsigned int file_mode", + "sig": "git_odb_backend **::const char *::int::int::unsigned int::unsigned int", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a backend for loose objects

\n", + "comments": "", + "group": "odb" + }, + "git_oid_fromstr": { + "type": "function", + "file": "git2/oid.h", + "line": 137, + "lineto": 137, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "oid structure the result is written into." + }, + { + "name": "str", + "type": "const char *", + "comment": "input hex string; must be pointing at the start of\n\t\tthe hex sequence and have at least the number of bytes\n\t\tneeded for an oid encoded in hex (40 bytes for sha1,\n\t\t256 bytes for sha256)." + } + ], + "argline": "git_oid *out, const char *str", + "sig": "git_oid *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Parse a hex formatted object id into a git_oid.

\n", + "comments": "

The appropriate number of bytes for the given object ID type will be read from the string - 40 bytes for SHA1, 64 bytes for SHA256. The given string need not be NUL terminated.

\n", + "group": "oid", + "examples": { + "general.c": [ + "ex/v1.9.1/general.html#git_oid_fromstr-48", + "ex/v1.9.1/general.html#git_oid_fromstr-49", + "ex/v1.9.1/general.html#git_oid_fromstr-50", + "ex/v1.9.1/general.html#git_oid_fromstr-51", + "ex/v1.9.1/general.html#git_oid_fromstr-52", + "ex/v1.9.1/general.html#git_oid_fromstr-53", + "ex/v1.9.1/general.html#git_oid_fromstr-54", + "ex/v1.9.1/general.html#git_oid_fromstr-55", + "ex/v1.9.1/general.html#git_oid_fromstr-56", + "ex/v1.9.1/general.html#git_oid_fromstr-57", + "ex/v1.9.1/general.html#git_oid_fromstr-58", + "ex/v1.9.1/general.html#git_oid_fromstr-59", + "ex/v1.9.1/general.html#git_oid_fromstr-60", + "ex/v1.9.1/general.html#git_oid_fromstr-61", + "ex/v1.9.1/general.html#git_oid_fromstr-62", + "ex/v1.9.1/general.html#git_oid_fromstr-63" + ] + } + }, + "git_oid_fromstrp": { + "type": "function", + "file": "git2/oid.h", + "line": 146, + "lineto": 146, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "oid structure the result is written into." + }, + { + "name": "str", + "type": "const char *", + "comment": "input hex string; must be null-terminated." + } + ], + "argline": "git_oid *out, const char *str", + "sig": "git_oid *::const char *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Parse a hex formatted NUL-terminated string into a git_oid.

\n", + "comments": "", + "group": "oid" + }, + "git_oid_fromstrn": { + "type": "function", + "file": "git2/oid.h", + "line": 159, + "lineto": 159, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "oid structure the result is written into." + }, + { + "name": "str", + "type": "const char *", + "comment": "input hex string of at least size `length`" + }, + { + "name": "length", + "type": "size_t", + "comment": "length of the input string" + } + ], + "argline": "git_oid *out, const char *str, size_t length", + "sig": "git_oid *::const char *::size_t", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Parse N characters of a hex formatted object id into a git_oid.

\n", + "comments": "

If N is odd, the last byte's high nibble will be read in and the low nibble set to zero.

\n", + "group": "oid" + }, + "git_oid_fromraw": { + "type": "function", + "file": "git2/oid.h", + "line": 168, + "lineto": 168, + "args": [ + { + "name": "out", + "type": "git_oid *", + "comment": "oid structure the result is written into." + }, + { + "name": "raw", + "type": "const unsigned char *", + "comment": "the raw input bytes to be copied." + } + ], + "argline": "git_oid *out, const unsigned char *raw", + "sig": "git_oid *::const unsigned char *", + "return": { "type": "int", "comment": " 0 on success or error code" }, + "description": "

Copy an already raw oid into a git_oid structure.

\n", + "comments": "", + "group": "oid" + }, "git_oid_fmt": { "type": "function", "file": "git2/oid.h", - "line": 188, - "lineto": 188, + "line": 184, + "lineto": 184, "args": [ { "name": "out", @@ -12346,24 +12417,24 @@ "group": "oid", "examples": { "fetch.c": [ - "ex/v1.8.4/fetch.html#git_oid_fmt-1", - "ex/v1.8.4/fetch.html#git_oid_fmt-2" + "ex/v1.9.1/fetch.html#git_oid_fmt-1", + "ex/v1.9.1/fetch.html#git_oid_fmt-2" ], "general.c": [ - "ex/v1.8.4/general.html#git_oid_fmt-48", - "ex/v1.8.4/general.html#git_oid_fmt-49", - "ex/v1.8.4/general.html#git_oid_fmt-50", - "ex/v1.8.4/general.html#git_oid_fmt-51", - "ex/v1.8.4/general.html#git_oid_fmt-52" + "ex/v1.9.1/general.html#git_oid_fmt-64", + "ex/v1.9.1/general.html#git_oid_fmt-65", + "ex/v1.9.1/general.html#git_oid_fmt-66", + "ex/v1.9.1/general.html#git_oid_fmt-67", + "ex/v1.9.1/general.html#git_oid_fmt-68" ], - "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_oid_fmt-1"] + "ls-remote.c": ["ex/v1.9.1/ls-remote.html#git_oid_fmt-1"] } }, "git_oid_nfmt": { "type": "function", "file": "git2/oid.h", - "line": 200, - "lineto": 200, + "line": 196, + "lineto": 196, "args": [ { "name": "out", @@ -12391,8 +12462,8 @@ "git_oid_pathfmt": { "type": "function", "file": "git2/oid.h", - "line": 217, - "lineto": 217, + "line": 213, + "lineto": 213, "args": [ { "name": "out", @@ -12418,8 +12489,8 @@ "git_oid_tostr_s": { "type": "function", "file": "git2/oid.h", - "line": 230, - "lineto": 230, + "line": 226, + "lineto": 226, "args": [ { "name": "oid", @@ -12438,16 +12509,16 @@ "group": "oid", "examples": { "merge.c": [ - "ex/v1.8.4/merge.html#git_oid_tostr_s-19", - "ex/v1.8.4/merge.html#git_oid_tostr_s-20" + "ex/v1.9.1/merge.html#git_oid_tostr_s-19", + "ex/v1.9.1/merge.html#git_oid_tostr_s-20" ] } }, "git_oid_tostr": { "type": "function", "file": "git2/oid.h", - "line": 251, - "lineto": 251, + "line": 247, + "lineto": 247, "args": [ { "name": "out", @@ -12476,33 +12547,33 @@ "group": "oid", "examples": { "blame.c": [ - "ex/v1.8.4/blame.html#git_oid_tostr-16", - "ex/v1.8.4/blame.html#git_oid_tostr-17" + "ex/v1.9.1/blame.html#git_oid_tostr-15", + "ex/v1.9.1/blame.html#git_oid_tostr-16" ], "cat-file.c": [ - "ex/v1.8.4/cat-file.html#git_oid_tostr-24", - "ex/v1.8.4/cat-file.html#git_oid_tostr-25", - "ex/v1.8.4/cat-file.html#git_oid_tostr-26", - "ex/v1.8.4/cat-file.html#git_oid_tostr-27", - "ex/v1.8.4/cat-file.html#git_oid_tostr-28" + "ex/v1.9.1/cat-file.html#git_oid_tostr-24", + "ex/v1.9.1/cat-file.html#git_oid_tostr-25", + "ex/v1.9.1/cat-file.html#git_oid_tostr-26", + "ex/v1.9.1/cat-file.html#git_oid_tostr-27", + "ex/v1.9.1/cat-file.html#git_oid_tostr-28" ], "log.c": [ - "ex/v1.8.4/log.html#git_oid_tostr-38", - "ex/v1.8.4/log.html#git_oid_tostr-39" + "ex/v1.9.1/log.html#git_oid_tostr-38", + "ex/v1.9.1/log.html#git_oid_tostr-39" ], "rev-parse.c": [ - "ex/v1.8.4/rev-parse.html#git_oid_tostr-10", - "ex/v1.8.4/rev-parse.html#git_oid_tostr-11", - "ex/v1.8.4/rev-parse.html#git_oid_tostr-12", - "ex/v1.8.4/rev-parse.html#git_oid_tostr-13" + "ex/v1.9.1/rev-parse.html#git_oid_tostr-10", + "ex/v1.9.1/rev-parse.html#git_oid_tostr-11", + "ex/v1.9.1/rev-parse.html#git_oid_tostr-12", + "ex/v1.9.1/rev-parse.html#git_oid_tostr-13" ] } }, "git_oid_cpy": { "type": "function", "file": "git2/oid.h", - "line": 260, - "lineto": 260, + "line": 256, + "lineto": 256, "args": [ { "name": "out", @@ -12523,17 +12594,17 @@ "group": "oid", "examples": { "blame.c": [ - "ex/v1.8.4/blame.html#git_oid_cpy-18", - "ex/v1.8.4/blame.html#git_oid_cpy-19", - "ex/v1.8.4/blame.html#git_oid_cpy-20" + "ex/v1.9.1/blame.html#git_oid_cpy-17", + "ex/v1.9.1/blame.html#git_oid_cpy-18", + "ex/v1.9.1/blame.html#git_oid_cpy-19" ] } }, "git_oid_cmp": { "type": "function", "file": "git2/oid.h", - "line": 269, - "lineto": 269, + "line": 265, + "lineto": 265, "args": [ { "name": "a", @@ -12559,8 +12630,8 @@ "git_oid_equal": { "type": "function", "file": "git2/oid.h", - "line": 278, - "lineto": 278, + "line": 274, + "lineto": 274, "args": [ { "name": "a", @@ -12583,8 +12654,8 @@ "git_oid_ncmp": { "type": "function", "file": "git2/oid.h", - "line": 289, - "lineto": 289, + "line": 285, + "lineto": 285, "args": [ { "name": "a", @@ -12612,8 +12683,8 @@ "git_oid_streq": { "type": "function", "file": "git2/oid.h", - "line": 298, - "lineto": 298, + "line": 294, + "lineto": 294, "args": [ { "name": "id", @@ -12639,8 +12710,8 @@ "git_oid_strcmp": { "type": "function", "file": "git2/oid.h", - "line": 308, - "lineto": 308, + "line": 304, + "lineto": 304, "args": [ { "name": "id", @@ -12666,9 +12737,15 @@ "git_oid_is_zero": { "type": "function", "file": "git2/oid.h", - "line": 315, - "lineto": 315, - "args": [{ "name": "id", "type": "const git_oid *", "comment": null }], + "line": 312, + "lineto": 312, + "args": [ + { + "name": "id", + "type": "const git_oid *", + "comment": "the object ID to check" + } + ], "argline": "const git_oid *id", "sig": "const git_oid *", "return": { "type": "int", "comment": " 1 if all zeros, 0 otherwise." }, @@ -12676,15 +12753,15 @@ "comments": "", "group": "oid", "examples": { - "blame.c": ["ex/v1.8.4/blame.html#git_oid_is_zero-21"], - "fetch.c": ["ex/v1.8.4/fetch.html#git_oid_is_zero-3"] + "blame.c": ["ex/v1.9.1/blame.html#git_oid_is_zero-20"], + "fetch.c": ["ex/v1.9.1/fetch.html#git_oid_is_zero-3"] } }, "git_oid_shorten_new": { "type": "function", "file": "git2/oid.h", - "line": 336, - "lineto": 336, + "line": 333, + "lineto": 333, "args": [ { "name": "min_length", @@ -12705,8 +12782,8 @@ "git_oid_shorten_add": { "type": "function", "file": "git2/oid.h", - "line": 362, - "lineto": 362, + "line": 359, + "lineto": 359, "args": [ { "name": "os", @@ -12732,8 +12809,8 @@ "git_oid_shorten_free": { "type": "function", "file": "git2/oid.h", - "line": 369, - "lineto": 369, + "line": 366, + "lineto": 366, "args": [ { "name": "os", @@ -12751,8 +12828,8 @@ "git_oidarray_dispose": { "type": "function", "file": "git2/oidarray.h", - "line": 31, - "lineto": 31, + "line": 38, + "lineto": 38, "args": [ { "name": "array", @@ -13128,8 +13205,8 @@ "git_packbuilder_set_callbacks": { "type": "function", "file": "git2/pack.h", - "line": 253, - "lineto": 256, + "line": 264, + "lineto": 267, "args": [ { "name": "pb", @@ -13139,7 +13216,7 @@ { "name": "progress_cb", "type": "git_packbuilder_progress", - "comment": "Function to call with progress information during\n pack building. Be aware that this is called inline with pack building\n operations, so performance may be affected." + "comment": "Function to call with progress information during\n pack building. Be aware that this is called inline with pack building\n operations, so performance may be affected.\n When progress_cb returns an error, the pack building process will be\n aborted and the error will be returned from the invoked function.\n `pb` must then be freed." }, { "name": "progress_cb_payload", @@ -13157,8 +13234,8 @@ "git_packbuilder_free": { "type": "function", "file": "git2/pack.h", - "line": 263, - "lineto": 263, + "line": 274, + "lineto": 274, "args": [ { "name": "pb", @@ -13371,7 +13448,7 @@ "comments": "

This is just like git_diff_buffers() except it generates a patch object for the difference instead of directly making callbacks. You can use the standard git_patch accessor functions to read the patch data, and you must call git_patch_free() on the patch when done.

\n", "group": "patch", "examples": { - "diff.c": ["ex/v1.8.4/diff.html#git_patch_from_buffers-16"] + "diff.c": ["ex/v1.9.1/diff.html#git_patch_from_buffers-16"] } }, "git_patch_free": { @@ -13392,7 +13469,7 @@ "description": "

Free a git_patch object.

\n", "comments": "", "group": "patch", - "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_patch_free-17"] } + "examples": { "diff.c": ["ex/v1.9.1/diff.html#git_patch_free-17"] } }, "git_patch_get_delta": { "type": "function", @@ -13661,13 +13738,13 @@ "description": "

Get the content of a patch as a single diff text.

\n", "comments": "", "group": "patch", - "examples": { "diff.c": ["ex/v1.8.4/diff.html#git_patch_to_buf-18"] } + "examples": { "diff.c": ["ex/v1.9.1/diff.html#git_patch_to_buf-18"] } }, "git_pathspec_new": { "type": "function", "file": "git2/pathspec.h", - "line": 82, - "lineto": 83, + "line": 89, + "lineto": 90, "args": [ { "name": "out", @@ -13689,13 +13766,13 @@ "description": "

Compile a pathspec

\n", "comments": "", "group": "pathspec", - "examples": { "log.c": ["ex/v1.8.4/log.html#git_pathspec_new-40"] } + "examples": { "log.c": ["ex/v1.9.1/log.html#git_pathspec_new-40"] } }, "git_pathspec_free": { "type": "function", "file": "git2/pathspec.h", - "line": 90, - "lineto": 90, + "line": 97, + "lineto": 97, "args": [ { "name": "ps", @@ -13709,13 +13786,13 @@ "description": "

Free a pathspec

\n", "comments": "", "group": "pathspec", - "examples": { "log.c": ["ex/v1.8.4/log.html#git_pathspec_free-41"] } + "examples": { "log.c": ["ex/v1.9.1/log.html#git_pathspec_free-41"] } }, "git_pathspec_matches_path": { "type": "function", "file": "git2/pathspec.h", - "line": 105, - "lineto": 106, + "line": 112, + "lineto": 113, "args": [ { "name": "ps", @@ -13746,8 +13823,8 @@ "git_pathspec_match_workdir": { "type": "function", "file": "git2/pathspec.h", - "line": 130, - "lineto": 134, + "line": 137, + "lineto": 141, "args": [ { "name": "out", @@ -13783,8 +13860,8 @@ "git_pathspec_match_index": { "type": "function", "file": "git2/pathspec.h", - "line": 159, - "lineto": 163, + "line": 166, + "lineto": 170, "args": [ { "name": "out", @@ -13820,8 +13897,8 @@ "git_pathspec_match_tree": { "type": "function", "file": "git2/pathspec.h", - "line": 183, - "lineto": 187, + "line": 190, + "lineto": 194, "args": [ { "name": "out", @@ -13853,13 +13930,13 @@ "description": "

Match a pathspec against files in a tree.

\n", "comments": "

This matches the pathspec against the files in the given tree.

\n\n

If out is not NULL, this returns a git_patchspec_match_list. That contains the list of all matched filenames (unless you pass the GIT_PATHSPEC_FAILURES_ONLY flag) and may also contain the list of pathspecs with no match (if you used the GIT_PATHSPEC_FIND_FAILURES flag). You must call git_pathspec_match_list_free() on this object.

\n", "group": "pathspec", - "examples": { "log.c": ["ex/v1.8.4/log.html#git_pathspec_match_tree-42"] } + "examples": { "log.c": ["ex/v1.9.1/log.html#git_pathspec_match_tree-42"] } }, "git_pathspec_match_diff": { "type": "function", "file": "git2/pathspec.h", - "line": 207, - "lineto": 211, + "line": 214, + "lineto": 218, "args": [ { "name": "out", @@ -13895,8 +13972,8 @@ "git_pathspec_match_list_free": { "type": "function", "file": "git2/pathspec.h", - "line": 218, - "lineto": 218, + "line": 225, + "lineto": 225, "args": [ { "name": "m", @@ -13914,8 +13991,8 @@ "git_pathspec_match_list_entrycount": { "type": "function", "file": "git2/pathspec.h", - "line": 226, - "lineto": 227, + "line": 233, + "lineto": 234, "args": [ { "name": "m", @@ -13936,8 +14013,8 @@ "git_pathspec_match_list_entry": { "type": "function", "file": "git2/pathspec.h", - "line": 239, - "lineto": 240, + "line": 246, + "lineto": 247, "args": [ { "name": "m", @@ -13963,8 +14040,8 @@ "git_pathspec_match_list_diff_entry": { "type": "function", "file": "git2/pathspec.h", - "line": 252, - "lineto": 253, + "line": 259, + "lineto": 260, "args": [ { "name": "m", @@ -13990,8 +14067,8 @@ "git_pathspec_match_list_failed_entrycount": { "type": "function", "file": "git2/pathspec.h", - "line": 264, - "lineto": 265, + "line": 271, + "lineto": 272, "args": [ { "name": "m", @@ -14012,8 +14089,8 @@ "git_pathspec_match_list_failed_entry": { "type": "function", "file": "git2/pathspec.h", - "line": 276, - "lineto": 277, + "line": 283, + "lineto": 284, "args": [ { "name": "m", @@ -14039,8 +14116,8 @@ "git_proxy_options_init": { "type": "function", "file": "git2/proxy.h", - "line": 94, - "lineto": 94, + "line": 103, + "lineto": 103, "args": [ { "name": "opts", @@ -14066,8 +14143,8 @@ "git_rebase_options_init": { "type": "function", "file": "git2/rebase.h", - "line": 199, - "lineto": 201, + "line": 201, + "lineto": 203, "args": [ { "name": "opts", @@ -14093,8 +14170,8 @@ "git_rebase_init": { "type": "function", "file": "git2/rebase.h", - "line": 220, - "lineto": 226, + "line": 222, + "lineto": 228, "args": [ { "name": "out", @@ -14140,8 +14217,8 @@ "git_rebase_open": { "type": "function", "file": "git2/rebase.h", - "line": 237, - "lineto": 240, + "line": 239, + "lineto": 242, "args": [ { "name": "out", @@ -14172,8 +14249,8 @@ "git_rebase_orig_head_name": { "type": "function", "file": "git2/rebase.h", - "line": 248, - "lineto": 248, + "line": 250, + "lineto": 250, "args": [ { "name": "rebase", @@ -14194,8 +14271,8 @@ "git_rebase_orig_head_id": { "type": "function", "file": "git2/rebase.h", - "line": 256, - "lineto": 256, + "line": 258, + "lineto": 258, "args": [ { "name": "rebase", @@ -14216,8 +14293,8 @@ "git_rebase_onto_name": { "type": "function", "file": "git2/rebase.h", - "line": 264, - "lineto": 264, + "line": 266, + "lineto": 266, "args": [ { "name": "rebase", @@ -14235,8 +14312,8 @@ "git_rebase_onto_id": { "type": "function", "file": "git2/rebase.h", - "line": 272, - "lineto": 272, + "line": 274, + "lineto": 274, "args": [ { "name": "rebase", @@ -14254,8 +14331,8 @@ "git_rebase_operation_entrycount": { "type": "function", "file": "git2/rebase.h", - "line": 280, - "lineto": 280, + "line": 282, + "lineto": 282, "args": [ { "name": "rebase", @@ -14276,8 +14353,8 @@ "git_rebase_operation_current": { "type": "function", "file": "git2/rebase.h", - "line": 291, - "lineto": 291, + "line": 293, + "lineto": 293, "args": [ { "name": "rebase", @@ -14298,8 +14375,8 @@ "git_rebase_operation_byindex": { "type": "function", "file": "git2/rebase.h", - "line": 300, - "lineto": 302, + "line": 302, + "lineto": 304, "args": [ { "name": "rebase", @@ -14325,8 +14402,8 @@ "git_rebase_next": { "type": "function", "file": "git2/rebase.h", - "line": 315, - "lineto": 317, + "line": 317, + "lineto": 319, "args": [ { "name": "operation", @@ -14352,8 +14429,8 @@ "git_rebase_inmemory_index": { "type": "function", "file": "git2/rebase.h", - "line": 334, - "lineto": 336, + "line": 336, + "lineto": 338, "args": [ { "name": "index", @@ -14376,8 +14453,8 @@ "git_rebase_commit": { "type": "function", "file": "git2/rebase.h", - "line": 360, - "lineto": 366, + "line": 362, + "lineto": 368, "args": [ { "name": "id", @@ -14423,8 +14500,8 @@ "git_rebase_abort": { "type": "function", "file": "git2/rebase.h", - "line": 376, - "lineto": 376, + "line": 378, + "lineto": 378, "args": [ { "name": "rebase", @@ -14445,8 +14522,8 @@ "git_rebase_finish": { "type": "function", "file": "git2/rebase.h", - "line": 386, - "lineto": 388, + "line": 388, + "lineto": 390, "args": [ { "name": "rebase", @@ -14469,8 +14546,8 @@ "git_rebase_free": { "type": "function", "file": "git2/rebase.h", - "line": 395, - "lineto": 395, + "line": 397, + "lineto": 397, "args": [ { "name": "rebase", @@ -14921,11 +14998,11 @@ "group": "reference", "examples": { "checkout.c": [ - "ex/v1.8.4/checkout.html#git_reference_lookup-15", - "ex/v1.8.4/checkout.html#git_reference_lookup-16" + "ex/v1.9.1/checkout.html#git_reference_lookup-15", + "ex/v1.9.1/checkout.html#git_reference_lookup-16" ], - "general.c": ["ex/v1.8.4/general.html#git_reference_lookup-53"], - "merge.c": ["ex/v1.8.4/merge.html#git_reference_lookup-21"] + "general.c": ["ex/v1.9.1/general.html#git_reference_lookup-69"], + "merge.c": ["ex/v1.9.1/merge.html#git_reference_lookup-21"] } }, "git_reference_name_to_id": { @@ -14988,7 +15065,7 @@ "description": "

Lookup a reference by DWIMing its short name

\n", "comments": "

Apply the git precedence rules to the given shorthand to determine which reference the user is referring to.

\n", "group": "reference", - "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_reference_dwim-22"] } + "examples": { "merge.c": ["ex/v1.9.1/merge.html#git_reference_dwim-22"] } }, "git_reference_symbolic_create_matching": { "type": "function", @@ -15136,7 +15213,7 @@ "comments": "

A direct reference (also called an object id reference) refers directly to a specific object id (a.k.a. OID or SHA) in the repository. The id permanently refers to the object (although the reference itself can be moved). For example, in libgit2 the direct ref "refs/tags/v0.17.0" refers to OID 5b9fac39d8a76b9139667c26a63e6b3f204b3977.

\n\n

The direct reference will be created in the repository and written to the disk. The generated reference object must be freed by the user.

\n\n

Valid reference names must follow one of two patterns:

\n\n
    \n
  1. Top-level names must contain only capital letters and underscores, and must begin and end with a letter. (e.g. "HEAD", "ORIG_HEAD"). 2. Names prefixed with "refs/" can be almost anything. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.
  2. \n
\n\n

This function will return an error if a reference already exists with the given name unless force is true, in which case it will be overwritten.

\n\n

The message for the reflog will be ignored if the reference does not belong in the standard set (HEAD, branches and remote-tracking branches) and it does not have a reflog.

\n", "group": "reference", "examples": { - "merge.c": ["ex/v1.8.4/merge.html#git_reference_create-23"] + "merge.c": ["ex/v1.9.1/merge.html#git_reference_create-23"] } }, "git_reference_create_matching": { @@ -15213,7 +15290,7 @@ "comments": "

Only available if the reference is direct (i.e. an object id reference, not a symbolic one).

\n\n

To find the OID of a symbolic ref, call git_reference_resolve() and then this function (or maybe use git_reference_name_to_id() to directly resolve a reference name all the way through to an OID).

\n", "group": "reference", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_reference_target-54"] + "general.c": ["ex/v1.9.1/general.html#git_reference_target-70"] } }, "git_reference_target_peel": { @@ -15261,9 +15338,9 @@ "group": "reference", "examples": { "general.c": [ - "ex/v1.8.4/general.html#git_reference_symbolic_target-55" + "ex/v1.9.1/general.html#git_reference_symbolic_target-71" ], - "merge.c": ["ex/v1.8.4/merge.html#git_reference_symbolic_target-24"] + "merge.c": ["ex/v1.9.1/merge.html#git_reference_symbolic_target-24"] } }, "git_reference_type": { @@ -15285,7 +15362,7 @@ "comments": "

Either direct (GIT_REFERENCE_DIRECT) or symbolic (GIT_REFERENCE_SYMBOLIC)

\n", "group": "reference", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_reference_type-56"] + "general.c": ["ex/v1.9.1/general.html#git_reference_type-72"] } }, "git_reference_name": { @@ -15310,8 +15387,8 @@ "comments": "

See git_reference_symbolic_create() for rules about valid names.

\n", "group": "reference", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_reference_name-17"], - "merge.c": ["ex/v1.8.4/merge.html#git_reference_name-25"] + "checkout.c": ["ex/v1.9.1/checkout.html#git_reference_name-17"], + "merge.c": ["ex/v1.9.1/merge.html#git_reference_name-25"] } }, "git_reference_resolve": { @@ -15434,16 +15511,20 @@ "comments": "

The new reference will be written to disk, overwriting the given reference.

\n", "group": "reference", "examples": { - "merge.c": ["ex/v1.8.4/merge.html#git_reference_set_target-26"] + "merge.c": ["ex/v1.9.1/merge.html#git_reference_set_target-26"] } }, "git_reference_rename": { "type": "function", "file": "git2/refs.h", - "line": 381, - "lineto": 386, + "line": 382, + "lineto": 387, "args": [ - { "name": "new_ref", "type": "git_reference **", "comment": null }, + { + "name": "new_ref", + "type": "git_reference **", + "comment": "The new reference" + }, { "name": "ref", "type": "git_reference *", @@ -15478,8 +15559,8 @@ "git_reference_delete": { "type": "function", "file": "git2/refs.h", - "line": 401, - "lineto": 401, + "line": 402, + "lineto": 402, "args": [ { "name": "ref", @@ -15500,10 +15581,14 @@ "git_reference_remove": { "type": "function", "file": "git2/refs.h", - "line": 412, - "lineto": 412, + "line": 414, + "lineto": 414, "args": [ - { "name": "repo", "type": "git_repository *", "comment": null }, + { + "name": "repo", + "type": "git_repository *", + "comment": "The repository to remove the reference from" + }, { "name": "name", "type": "const char *", @@ -15520,8 +15605,8 @@ "git_reference_list": { "type": "function", "file": "git2/refs.h", - "line": 426, - "lineto": 426, + "line": 428, + "lineto": 428, "args": [ { "name": "array", @@ -15541,14 +15626,14 @@ "comments": "

The string array will be filled with the names of all references; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free().

\n", "group": "reference", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_reference_list-57"] + "general.c": ["ex/v1.9.1/general.html#git_reference_list-73"] } }, "git_reference_foreach": { "type": "function", "file": "git2/refs.h", - "line": 466, - "lineto": 469, + "line": 468, + "lineto": 471, "args": [ { "name": "repo", @@ -15579,8 +15664,8 @@ "git_reference_foreach_name": { "type": "function", "file": "git2/refs.h", - "line": 484, - "lineto": 487, + "line": 486, + "lineto": 489, "args": [ { "name": "repo", @@ -15611,8 +15696,8 @@ "git_reference_dup": { "type": "function", "file": "git2/refs.h", - "line": 498, - "lineto": 498, + "line": 500, + "lineto": 500, "args": [ { "name": "dest", @@ -15635,8 +15720,8 @@ "git_reference_free": { "type": "function", "file": "git2/refs.h", - "line": 505, - "lineto": 505, + "line": 507, + "lineto": 507, "args": [ { "name": "ref", "type": "git_reference *", "comment": "git_reference" } ], @@ -15648,25 +15733,25 @@ "group": "reference", "examples": { "checkout.c": [ - "ex/v1.8.4/checkout.html#git_reference_free-18", - "ex/v1.8.4/checkout.html#git_reference_free-19", - "ex/v1.8.4/checkout.html#git_reference_free-20" + "ex/v1.9.1/checkout.html#git_reference_free-18", + "ex/v1.9.1/checkout.html#git_reference_free-19", + "ex/v1.9.1/checkout.html#git_reference_free-20" ], - "commit.c": ["ex/v1.8.4/commit.html#git_reference_free-7"], - "general.c": ["ex/v1.8.4/general.html#git_reference_free-58"], + "commit.c": ["ex/v1.9.1/commit.html#git_reference_free-7"], + "general.c": ["ex/v1.9.1/general.html#git_reference_free-74"], "merge.c": [ - "ex/v1.8.4/merge.html#git_reference_free-27", - "ex/v1.8.4/merge.html#git_reference_free-28", - "ex/v1.8.4/merge.html#git_reference_free-29" + "ex/v1.9.1/merge.html#git_reference_free-27", + "ex/v1.9.1/merge.html#git_reference_free-28", + "ex/v1.9.1/merge.html#git_reference_free-29" ], - "status.c": ["ex/v1.8.4/status.html#git_reference_free-1"] + "status.c": ["ex/v1.9.1/status.html#git_reference_free-1"] } }, "git_reference_cmp": { "type": "function", "file": "git2/refs.h", - "line": 514, - "lineto": 516, + "line": 516, + "lineto": 518, "args": [ { "name": "ref1", @@ -15692,8 +15777,8 @@ "git_reference_iterator_new": { "type": "function", "file": "git2/refs.h", - "line": 525, - "lineto": 527, + "line": 527, + "lineto": 529, "args": [ { "name": "out", @@ -15716,8 +15801,8 @@ "git_reference_iterator_glob_new": { "type": "function", "file": "git2/refs.h", - "line": 538, - "lineto": 541, + "line": 540, + "lineto": 543, "args": [ { "name": "out", @@ -15745,8 +15830,8 @@ "git_reference_next": { "type": "function", "file": "git2/refs.h", - "line": 550, - "lineto": 550, + "line": 552, + "lineto": 552, "args": [ { "name": "out", @@ -15772,8 +15857,8 @@ "git_reference_next_name": { "type": "function", "file": "git2/refs.h", - "line": 563, - "lineto": 563, + "line": 565, + "lineto": 565, "args": [ { "name": "out", @@ -15799,8 +15884,8 @@ "git_reference_iterator_free": { "type": "function", "file": "git2/refs.h", - "line": 570, - "lineto": 570, + "line": 572, + "lineto": 572, "args": [ { "name": "iter", @@ -15818,8 +15903,8 @@ "git_reference_foreach_glob": { "type": "function", "file": "git2/refs.h", - "line": 590, - "lineto": 594, + "line": 592, + "lineto": 596, "args": [ { "name": "repo", @@ -15855,8 +15940,8 @@ "git_reference_has_log": { "type": "function", "file": "git2/refs.h", - "line": 604, - "lineto": 604, + "line": 606, + "lineto": 606, "args": [ { "name": "repo", @@ -15882,8 +15967,8 @@ "git_reference_ensure_log": { "type": "function", "file": "git2/refs.h", - "line": 616, - "lineto": 616, + "line": 618, + "lineto": 618, "args": [ { "name": "repo", @@ -15906,8 +15991,8 @@ "git_reference_is_branch": { "type": "function", "file": "git2/refs.h", - "line": 626, - "lineto": 626, + "line": 628, + "lineto": 628, "args": [ { "name": "ref", @@ -15928,8 +16013,8 @@ "git_reference_is_remote": { "type": "function", "file": "git2/refs.h", - "line": 636, - "lineto": 636, + "line": 638, + "lineto": 638, "args": [ { "name": "ref", @@ -15947,14 +16032,14 @@ "comments": "", "group": "reference", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_reference_is_remote-21"] + "checkout.c": ["ex/v1.9.1/checkout.html#git_reference_is_remote-21"] } }, "git_reference_is_tag": { "type": "function", "file": "git2/refs.h", - "line": 646, - "lineto": 646, + "line": 648, + "lineto": 648, "args": [ { "name": "ref", @@ -15975,8 +16060,8 @@ "git_reference_is_note": { "type": "function", "file": "git2/refs.h", - "line": 656, - "lineto": 656, + "line": 658, + "lineto": 658, "args": [ { "name": "ref", @@ -15997,8 +16082,8 @@ "git_reference_normalize_name": { "type": "function", "file": "git2/refs.h", - "line": 712, - "lineto": 716, + "line": 714, + "lineto": 718, "args": [ { "name": "buffer_out", @@ -16034,8 +16119,8 @@ "git_reference_peel": { "type": "function", "file": "git2/refs.h", - "line": 733, - "lineto": 736, + "line": 735, + "lineto": 738, "args": [ { "name": "out", @@ -16062,13 +16147,13 @@ "description": "

Recursively peel reference until object of the specified type is found.

\n", "comments": "

The retrieved peeled object is owned by the repository and should be closed with the git_object_free method.

\n\n

If you pass GIT_OBJECT_ANY as the target type, then the object will be peeled until a non-tag object is met.

\n", "group": "reference", - "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_reference_peel-30"] } + "examples": { "merge.c": ["ex/v1.9.1/merge.html#git_reference_peel-30"] } }, "git_reference_name_is_valid": { "type": "function", "file": "git2/refs.h", - "line": 753, - "lineto": 753, + "line": 755, + "lineto": 755, "args": [ { "name": "valid", @@ -16091,8 +16176,8 @@ "git_reference_shorthand": { "type": "function", "file": "git2/refs.h", - "line": 767, - "lineto": 767, + "line": 769, + "lineto": 769, "args": [ { "name": "ref", @@ -16110,7 +16195,7 @@ "comments": "

This will transform the reference name into a name "human-readable" version. If no shortname is appropriate, it will return the full name.

\n\n

The memory is owned by the reference and must not be freed.

\n", "group": "reference", "examples": { - "status.c": ["ex/v1.8.4/status.html#git_reference_shorthand-2"] + "status.c": ["ex/v1.9.1/status.html#git_reference_shorthand-2"] } }, "git_refspec_parse": { @@ -16270,7 +16355,7 @@ "comments": "", "group": "refspec" }, - "git_refspec_src_matches": { + "git_refspec_src_matches_negative": { "type": "function", "file": "git2/refspec.h", "line": 88, @@ -16293,11 +16378,11 @@ "type": "int", "comment": " 1 if the refspec matches, 0 otherwise" }, - "description": "

Check if a refspec's source descriptor matches a reference

\n", + "description": "

Check if a refspec's source descriptor matches a negative reference

\n", "comments": "", "group": "refspec" }, - "git_refspec_dst_matches": { + "git_refspec_src_matches": { "type": "function", "file": "git2/refspec.h", "line": 97, @@ -16320,6 +16405,33 @@ "type": "int", "comment": " 1 if the refspec matches, 0 otherwise" }, + "description": "

Check if a refspec's source descriptor matches a reference

\n", + "comments": "", + "group": "refspec" + }, + "git_refspec_dst_matches": { + "type": "function", + "file": "git2/refspec.h", + "line": 106, + "lineto": 106, + "args": [ + { + "name": "refspec", + "type": "const git_refspec *", + "comment": "the refspec" + }, + { + "name": "refname", + "type": "const char *", + "comment": "the name of the reference to check" + } + ], + "argline": "const git_refspec *refspec, const char *refname", + "sig": "const git_refspec *::const char *", + "return": { + "type": "int", + "comment": " 1 if the refspec matches, 0 otherwise" + }, "description": "

Check if a refspec's destination descriptor matches a reference

\n", "comments": "", "group": "refspec" @@ -16327,8 +16439,8 @@ "git_refspec_transform": { "type": "function", "file": "git2/refspec.h", - "line": 107, - "lineto": 107, + "line": 116, + "lineto": 116, "args": [ { "name": "out", @@ -16356,8 +16468,8 @@ "git_refspec_rtransform": { "type": "function", "file": "git2/refspec.h", - "line": 117, - "lineto": 117, + "line": 126, + "lineto": 126, "args": [ { "name": "out", @@ -16380,7 +16492,10 @@ "return": { "type": "int", "comment": " 0, GIT_EBUFS or another error" }, "description": "

Transform a target reference to its source reference following the refspec's rules

\n", "comments": "", - "group": "refspec" + "group": "refspec", + "examples": { + "fetch.c": ["ex/v1.9.1/fetch.html#git_refspec_rtransform-4"] + } }, "git_remote_create": { "type": "function", @@ -16414,13 +16529,13 @@ "description": "

Add a remote with the default fetch refspec to the repository's configuration.

\n", "comments": "", "group": "remote", - "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_create-1"] } + "examples": { "remote.c": ["ex/v1.9.1/remote.html#git_remote_create-1"] } }, "git_remote_create_options_init": { "type": "function", "file": "git2/remote.h", - "line": 132, - "lineto": 134, + "line": 135, + "lineto": 137, "args": [ { "name": "opts", @@ -16446,8 +16561,8 @@ "git_remote_create_with_opts": { "type": "function", "file": "git2/remote.h", - "line": 148, - "lineto": 151, + "line": 151, + "lineto": 154, "args": [ { "name": "out", @@ -16478,8 +16593,8 @@ "git_remote_create_with_fetchspec": { "type": "function", "file": "git2/remote.h", - "line": 164, - "lineto": 169, + "line": 167, + "lineto": 172, "args": [ { "name": "out", @@ -16520,8 +16635,8 @@ "git_remote_create_anonymous": { "type": "function", "file": "git2/remote.h", - "line": 182, - "lineto": 185, + "line": 185, + "lineto": 188, "args": [ { "name": "out", @@ -16546,17 +16661,17 @@ "comments": "

Create a remote with the given url in-memory. You can use this when you have a URL instead of a remote's name.

\n", "group": "remote", "examples": { - "fetch.c": ["ex/v1.8.4/fetch.html#git_remote_create_anonymous-4"], + "fetch.c": ["ex/v1.9.1/fetch.html#git_remote_create_anonymous-5"], "ls-remote.c": [ - "ex/v1.8.4/ls-remote.html#git_remote_create_anonymous-2" + "ex/v1.9.1/ls-remote.html#git_remote_create_anonymous-2" ] } }, "git_remote_create_detached": { "type": "function", "file": "git2/remote.h", - "line": 201, - "lineto": 203, + "line": 204, + "lineto": 206, "args": [ { "name": "out", @@ -16579,8 +16694,8 @@ "git_remote_lookup": { "type": "function", "file": "git2/remote.h", - "line": 216, - "lineto": 216, + "line": 219, + "lineto": 219, "args": [ { "name": "out", @@ -16608,17 +16723,17 @@ "comments": "

The name will be checked for validity. See git_tag_create() for rules about valid names.

\n", "group": "remote", "examples": { - "fetch.c": ["ex/v1.8.4/fetch.html#git_remote_lookup-5"], - "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_remote_lookup-3"], - "push.c": ["ex/v1.8.4/push.html#git_remote_lookup-1"], - "remote.c": ["ex/v1.8.4/remote.html#git_remote_lookup-2"] + "fetch.c": ["ex/v1.9.1/fetch.html#git_remote_lookup-6"], + "ls-remote.c": ["ex/v1.9.1/ls-remote.html#git_remote_lookup-3"], + "push.c": ["ex/v1.9.1/push.html#git_remote_lookup-1"], + "remote.c": ["ex/v1.9.1/remote.html#git_remote_lookup-2"] } }, "git_remote_dup": { "type": "function", "file": "git2/remote.h", - "line": 228, - "lineto": 228, + "line": 231, + "lineto": 231, "args": [ { "name": "dest", @@ -16641,8 +16756,8 @@ "git_remote_owner": { "type": "function", "file": "git2/remote.h", - "line": 236, - "lineto": 236, + "line": 239, + "lineto": 239, "args": [ { "name": "remote", @@ -16663,8 +16778,8 @@ "git_remote_name": { "type": "function", "file": "git2/remote.h", - "line": 244, - "lineto": 244, + "line": 247, + "lineto": 247, "args": [ { "name": "remote", @@ -16685,8 +16800,8 @@ "git_remote_url": { "type": "function", "file": "git2/remote.h", - "line": 256, - "lineto": 256, + "line": 259, + "lineto": 259, "args": [ { "name": "remote", @@ -16698,15 +16813,15 @@ "sig": "const git_remote *", "return": { "type": "const char *", "comment": " a pointer to the url" }, "description": "

Get the remote's url

\n", - "comments": "

If url.*.insteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", + "comments": "

If url.*.insteadOf has been configured for this URL, it will return the modified URL. This function does not consider if a push url has been configured for this remote (use git_remote_pushurl if needed).

\n", "group": "remote", - "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_url-3"] } + "examples": { "remote.c": ["ex/v1.9.1/remote.html#git_remote_url-3"] } }, "git_remote_pushurl": { "type": "function", "file": "git2/remote.h", - "line": 268, - "lineto": 268, + "line": 271, + "lineto": 271, "args": [ { "name": "remote", @@ -16723,13 +16838,13 @@ "description": "

Get the remote's url for pushing.

\n", "comments": "

If url.*.pushInsteadOf has been configured for this URL, it will return the modified URL. If git_remote_set_instance_pushurl has been called for this remote, then that URL will be returned.

\n", "group": "remote", - "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_pushurl-4"] } + "examples": { "remote.c": ["ex/v1.9.1/remote.html#git_remote_pushurl-4"] } }, "git_remote_set_url": { "type": "function", "file": "git2/remote.h", - "line": 281, - "lineto": 281, + "line": 284, + "lineto": 284, "args": [ { "name": "repo", @@ -16749,13 +16864,13 @@ "description": "

Set the remote's url in the configuration

\n", "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", "group": "remote", - "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_set_url-5"] } + "examples": { "remote.c": ["ex/v1.9.1/remote.html#git_remote_set_url-5"] } }, "git_remote_set_pushurl": { "type": "function", "file": "git2/remote.h", - "line": 295, - "lineto": 295, + "line": 298, + "lineto": 298, "args": [ { "name": "repo", @@ -16776,14 +16891,14 @@ "comments": "

Remote objects already in memory will not be affected. This assumes the common case of a single-url remote and will otherwise return an error.

\n", "group": "remote", "examples": { - "remote.c": ["ex/v1.8.4/remote.html#git_remote_set_pushurl-6"] + "remote.c": ["ex/v1.9.1/remote.html#git_remote_set_pushurl-6"] } }, "git_remote_set_instance_url": { "type": "function", "file": "git2/remote.h", - "line": 305, - "lineto": 305, + "line": 308, + "lineto": 308, "args": [ { "name": "remote", @@ -16802,8 +16917,8 @@ "git_remote_set_instance_pushurl": { "type": "function", "file": "git2/remote.h", - "line": 315, - "lineto": 315, + "line": 318, + "lineto": 318, "args": [ { "name": "remote", @@ -16822,8 +16937,8 @@ "git_remote_add_fetch": { "type": "function", "file": "git2/remote.h", - "line": 328, - "lineto": 328, + "line": 331, + "lineto": 331, "args": [ { "name": "repo", @@ -16854,8 +16969,8 @@ "git_remote_get_fetch_refspecs": { "type": "function", "file": "git2/remote.h", - "line": 340, - "lineto": 340, + "line": 343, + "lineto": 343, "args": [ { "name": "array", @@ -16878,8 +16993,8 @@ "git_remote_add_push": { "type": "function", "file": "git2/remote.h", - "line": 353, - "lineto": 353, + "line": 356, + "lineto": 356, "args": [ { "name": "repo", @@ -16910,8 +17025,8 @@ "git_remote_get_push_refspecs": { "type": "function", "file": "git2/remote.h", - "line": 365, - "lineto": 365, + "line": 368, + "lineto": 368, "args": [ { "name": "array", @@ -16934,8 +17049,8 @@ "git_remote_refspec_count": { "type": "function", "file": "git2/remote.h", - "line": 373, - "lineto": 373, + "line": 376, + "lineto": 376, "args": [ { "name": "remote", @@ -16956,8 +17071,8 @@ "git_remote_get_refspec": { "type": "function", "file": "git2/remote.h", - "line": 382, - "lineto": 382, + "line": 385, + "lineto": 385, "args": [ { "name": "remote", @@ -16979,8 +17094,8 @@ "git_remote_ls": { "type": "function", "file": "git2/remote.h", - "line": 404, - "lineto": 404, + "line": 407, + "lineto": 407, "args": [ { "name": "out", @@ -17001,14 +17116,14 @@ "comments": "

Get the list of references with which the server responds to a new connection.

\n\n

The remote (or more exactly its transport) must have connected to the remote repository. This list is available as soon as the connection to the remote is initiated and it remains available after disconnecting.

\n\n

The memory belongs to the remote. The pointer will be valid as long as a new connection is not initiated, but it is recommended that you make a copy in order to make use of the data.

\n", "group": "remote", "examples": { - "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_remote_ls-4"] + "ls-remote.c": ["ex/v1.9.1/ls-remote.html#git_remote_ls-4"] } }, "git_remote_connected": { "type": "function", "file": "git2/remote.h", - "line": 415, - "lineto": 415, + "line": 418, + "lineto": 418, "args": [ { "name": "remote", @@ -17029,8 +17144,8 @@ "git_remote_stop": { "type": "function", "file": "git2/remote.h", - "line": 426, - "lineto": 426, + "line": 429, + "lineto": 429, "args": [ { "name": "remote", "type": "git_remote *", "comment": "the remote" } ], @@ -17044,8 +17159,8 @@ "git_remote_disconnect": { "type": "function", "file": "git2/remote.h", - "line": 436, - "lineto": 436, + "line": 439, + "lineto": 439, "args": [ { "name": "remote", @@ -17063,8 +17178,8 @@ "git_remote_free": { "type": "function", "file": "git2/remote.h", - "line": 446, - "lineto": 446, + "line": 449, + "lineto": 449, "args": [ { "name": "remote", @@ -17080,18 +17195,18 @@ "group": "remote", "examples": { "fetch.c": [ - "ex/v1.8.4/fetch.html#git_remote_free-6", - "ex/v1.8.4/fetch.html#git_remote_free-7" + "ex/v1.9.1/fetch.html#git_remote_free-7", + "ex/v1.9.1/fetch.html#git_remote_free-8" ], - "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_remote_free-5"], - "remote.c": ["ex/v1.8.4/remote.html#git_remote_free-7"] + "ls-remote.c": ["ex/v1.9.1/ls-remote.html#git_remote_free-5"], + "remote.c": ["ex/v1.9.1/remote.html#git_remote_free-7"] } }, "git_remote_list": { "type": "function", "file": "git2/remote.h", - "line": 457, - "lineto": 457, + "line": 460, + "lineto": 460, "args": [ { "name": "out", @@ -17111,15 +17226,15 @@ "comments": "

The string array must be freed by the user.

\n", "group": "remote", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_remote_list-22"], - "remote.c": ["ex/v1.8.4/remote.html#git_remote_list-8"] + "checkout.c": ["ex/v1.9.1/checkout.html#git_remote_list-22"], + "remote.c": ["ex/v1.9.1/remote.html#git_remote_list-8"] } }, "git_remote_init_callbacks": { "type": "function", "file": "git2/remote.h", - "line": 671, - "lineto": 673, + "line": 714, + "lineto": 716, "args": [ { "name": "opts", @@ -17142,14 +17257,14 @@ "comments": "", "group": "remote", "examples": { - "push.c": ["ex/v1.8.4/push.html#git_remote_init_callbacks-2"] + "push.c": ["ex/v1.9.1/push.html#git_remote_init_callbacks-2"] } }, "git_fetch_options_init": { "type": "function", "file": "git2/remote.h", - "line": 806, - "lineto": 808, + "line": 852, + "lineto": 854, "args": [ { "name": "opts", @@ -17175,8 +17290,8 @@ "git_push_options_init": { "type": "function", "file": "git2/remote.h", - "line": 868, - "lineto": 870, + "line": 917, + "lineto": 919, "args": [ { "name": "opts", @@ -17198,13 +17313,13 @@ "description": "

Initialize git_push_options structure

\n", "comments": "

Initializes a git_push_options with default values. Equivalent to creating an instance with GIT_PUSH_OPTIONS_INIT.

\n", "group": "push", - "examples": { "push.c": ["ex/v1.8.4/push.html#git_push_options_init-3"] } + "examples": { "push.c": ["ex/v1.9.1/push.html#git_push_options_init-3"] } }, "git_remote_connect_options_init": { "type": "function", "file": "git2/remote.h", - "line": 916, - "lineto": 918, + "line": 968, + "lineto": 970, "args": [ { "name": "opts", @@ -17230,8 +17345,8 @@ "git_remote_connect": { "type": "function", "file": "git2/remote.h", - "line": 935, - "lineto": 940, + "line": 987, + "lineto": 992, "args": [ { "name": "remote", @@ -17266,14 +17381,14 @@ "comments": "

The transport is selected based on the URL; the direction argument is due to a limitation of the git protocol which starts up a specific binary which can only do the one or the other.

\n", "group": "remote", "examples": { - "ls-remote.c": ["ex/v1.8.4/ls-remote.html#git_remote_connect-6"] + "ls-remote.c": ["ex/v1.9.1/ls-remote.html#git_remote_connect-6"] } }, "git_remote_connect_ext": { "type": "function", "file": "git2/remote.h", - "line": 960, - "lineto": 963, + "line": 1012, + "lineto": 1015, "args": [ { "name": "remote", @@ -17301,8 +17416,8 @@ "git_remote_download": { "type": "function", "file": "git2/remote.h", - "line": 985, - "lineto": 988, + "line": 1037, + "lineto": 1040, "args": [ { "name": "remote", "type": "git_remote *", "comment": "the remote" }, { @@ -17326,8 +17441,8 @@ "git_remote_upload": { "type": "function", "file": "git2/remote.h", - "line": 1007, - "lineto": 1010, + "line": 1059, + "lineto": 1062, "args": [ { "name": "remote", "type": "git_remote *", "comment": "the remote" }, { @@ -17351,8 +17466,8 @@ "git_remote_update_tips": { "type": "function", "file": "git2/remote.h", - "line": 1029, - "lineto": 1034, + "line": 1081, + "lineto": 1086, "args": [ { "name": "remote", @@ -17390,8 +17505,8 @@ "git_remote_fetch": { "type": "function", "file": "git2/remote.h", - "line": 1054, - "lineto": 1058, + "line": 1106, + "lineto": 1110, "args": [ { "name": "remote", @@ -17420,13 +17535,13 @@ "description": "

Download new data and update tips.

\n", "comments": "

Convenience function to connect to a remote, download the data, disconnect and update the remote-tracking branches.

\n\n

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", "group": "remote", - "examples": { "fetch.c": ["ex/v1.8.4/fetch.html#git_remote_fetch-8"] } + "examples": { "fetch.c": ["ex/v1.9.1/fetch.html#git_remote_fetch-9"] } }, "git_remote_prune": { "type": "function", "file": "git2/remote.h", - "line": 1070, - "lineto": 1072, + "line": 1122, + "lineto": 1124, "args": [ { "name": "remote", @@ -17449,8 +17564,8 @@ "git_remote_push": { "type": "function", "file": "git2/remote.h", - "line": 1087, - "lineto": 1090, + "line": 1139, + "lineto": 1142, "args": [ { "name": "remote", @@ -17474,27 +17589,36 @@ "description": "

Perform a push.

\n", "comments": "

If options are specified and this remote is already connected then the existing remote connection options will be discarded and the remote will now use the new options.

\n", "group": "remote", - "examples": { "push.c": ["ex/v1.8.4/push.html#git_remote_push-4"] } + "examples": { "push.c": ["ex/v1.9.1/push.html#git_remote_push-4"] } }, "git_remote_stats": { "type": "function", "file": "git2/remote.h", - "line": 1095, - "lineto": 1095, - "args": [{ "name": "remote", "type": "git_remote *", "comment": null }], + "line": 1150, + "lineto": 1150, + "args": [ + { + "name": "remote", + "type": "git_remote *", + "comment": "the remote to get statistics for" + } + ], "argline": "git_remote *remote", "sig": "git_remote *", - "return": { "type": "const git_indexer_progress *", "comment": null }, + "return": { + "type": "const git_indexer_progress *", + "comment": " the git_indexer_progress for the remote" + }, "description": "

Get the statistics structure that is filled in by the fetch operation.

\n", "comments": "", "group": "remote", - "examples": { "fetch.c": ["ex/v1.8.4/fetch.html#git_remote_stats-9"] } + "examples": { "fetch.c": ["ex/v1.9.1/fetch.html#git_remote_stats-10"] } }, "git_remote_autotag": { "type": "function", "file": "git2/remote.h", - "line": 1103, - "lineto": 1103, + "line": 1158, + "lineto": 1158, "args": [ { "name": "remote", @@ -17515,8 +17639,8 @@ "git_remote_set_autotag": { "type": "function", "file": "git2/remote.h", - "line": 1116, - "lineto": 1116, + "line": 1171, + "lineto": 1171, "args": [ { "name": "repo", @@ -17544,8 +17668,8 @@ "git_remote_prune_refs": { "type": "function", "file": "git2/remote.h", - "line": 1124, - "lineto": 1124, + "line": 1179, + "lineto": 1179, "args": [ { "name": "remote", @@ -17563,8 +17687,8 @@ "git_remote_rename": { "type": "function", "file": "git2/remote.h", - "line": 1146, - "lineto": 1150, + "line": 1201, + "lineto": 1205, "args": [ { "name": "problems", @@ -17596,13 +17720,13 @@ "description": "

Give the remote a new name

\n", "comments": "

All remote-tracking branches and configuration settings for the remote are updated.

\n\n

The new name will be checked for validity. See git_tag_create() for rules about valid names.

\n\n

No loaded instances of a the remote with the old name will change their name or their list of refspecs.

\n", "group": "remote", - "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_rename-9"] } + "examples": { "remote.c": ["ex/v1.9.1/remote.html#git_remote_rename-9"] } }, "git_remote_name_is_valid": { "type": "function", "file": "git2/remote.h", - "line": 1159, - "lineto": 1159, + "line": 1214, + "lineto": 1214, "args": [ { "name": "valid", @@ -17625,8 +17749,8 @@ "git_remote_delete": { "type": "function", "file": "git2/remote.h", - "line": 1171, - "lineto": 1171, + "line": 1226, + "lineto": 1226, "args": [ { "name": "repo", @@ -17648,13 +17772,13 @@ "description": "

Delete an existing persisted remote.

\n", "comments": "

All remote-tracking branches and configuration settings for the remote will be removed.

\n", "group": "remote", - "examples": { "remote.c": ["ex/v1.8.4/remote.html#git_remote_delete-10"] } + "examples": { "remote.c": ["ex/v1.9.1/remote.html#git_remote_delete-10"] } }, "git_remote_default_branch": { "type": "function", "file": "git2/remote.h", - "line": 1189, - "lineto": 1189, + "line": 1244, + "lineto": 1244, "args": [ { "name": "out", @@ -17676,8 +17800,8 @@ "git_repository_open": { "type": "function", "file": "git2/repository.h", - "line": 38, - "lineto": 38, + "line": 43, + "lineto": 43, "args": [ { "name": "out", @@ -17694,17 +17818,17 @@ "sig": "git_repository **::const char *", "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

Open a git repository.

\n", - "comments": "

The 'path' argument must point to either a git repository folder, or an existing work dir.

\n\n

The method will automatically detect if 'path' is a normal or bare repository or fail is 'path' is neither.

\n", + "comments": "

The 'path' argument must point to either a git repository folder, or an existing work dir.

\n\n

The method will automatically detect if 'path' is a normal or bare repository or fail is 'path' is neither.

\n\n

Note that the libgit2 library must be initialized using git_libgit2_init before any APIs can be called, including this one.

\n", "group": "repository", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_repository_open-59"] + "general.c": ["ex/v1.9.1/general.html#git_repository_open-75"] } }, "git_repository_open_from_worktree": { "type": "function", "file": "git2/repository.h", - "line": 49, - "lineto": 49, + "line": 54, + "lineto": 54, "args": [ { "name": "out", @@ -17724,11 +17848,35 @@ "comments": "

Open the working directory of the working tree as a normal repository that can then be worked on.

\n", "group": "repository" }, + "git_repository_wrap_odb": { + "type": "function", + "file": "git2/repository.h", + "line": 67, + "lineto": 69, + "args": [ + { + "name": "out", + "type": "git_repository **", + "comment": "pointer to the repo" + }, + { + "name": "odb", + "type": "git_odb *", + "comment": "the object database to wrap" + } + ], + "argline": "git_repository **out, git_odb *odb", + "sig": "git_repository **::git_odb *", + "return": { "type": "int", "comment": " 0 or an error code" }, + "description": "

Create a "fake" repository to wrap an object database

\n", + "comments": "

Create a repository object to wrap an object database to be used with the API when all you have is an object database. This doesn't have any paths associated with it, so use with care.

\n", + "group": "repository" + }, "git_repository_discover": { "type": "function", "file": "git2/repository.h", - "line": 100, - "lineto": 104, + "line": 101, + "lineto": 105, "args": [ { "name": "out", @@ -17755,14 +17903,14 @@ "sig": "git_buf *::const char *::int::const char *", "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

Look for a git repository and copy its path in the given buffer.\n The lookup start from base_path and walk across parent directories\n if nothing has been found. The lookup ends when the first repository\n is found, or when reaching a directory referenced in ceiling_dirs\n or when the filesystem changes (in case across_fs is true).

\n", - "comments": "

The method will automatically detect if the repository is bare (if there is a repository).

\n", + "comments": "

The method will automatically detect if the repository is bare (if there is a repository).

\n\n

Note that the libgit2 library must be initialized using git_libgit2_init before any APIs can be called, including this one.

\n", "group": "repository" }, "git_repository_open_ext": { "type": "function", "file": "git2/repository.h", - "line": 176, - "lineto": 180, + "line": 181, + "lineto": 185, "args": [ { "name": "out", @@ -17792,15 +17940,15 @@ "comment": " 0 on success, GIT_ENOTFOUND if no repository could be found,\n or -1 if there was a repository but open failed for some reason\n (such as repo corruption or system errors)." }, "description": "

Find and open a repository with extended controls.

\n", - "comments": "", + "comments": "

Note that the libgit2 library must be initialized using git_libgit2_init before any APIs can be called, including this one.

\n", "group": "repository", - "examples": { "log.c": ["ex/v1.8.4/log.html#git_repository_open_ext-43"] } + "examples": { "log.c": ["ex/v1.9.1/log.html#git_repository_open_ext-43"] } }, "git_repository_open_bare": { "type": "function", "file": "git2/repository.h", - "line": 193, - "lineto": 193, + "line": 202, + "lineto": 202, "args": [ { "name": "out", @@ -17817,14 +17965,14 @@ "sig": "git_repository **::const char *", "return": { "type": "int", "comment": " 0 on success, or an error code" }, "description": "

Open a bare repository on the serverside.

\n", - "comments": "

This is a fast open for bare repositories that will come in handy if you're e.g. hosting git repositories and need to access them efficiently

\n", + "comments": "

This is a fast open for bare repositories that will come in handy if you're e.g. hosting git repositories and need to access them efficiently

\n\n

Note that the libgit2 library must be initialized using git_libgit2_init before any APIs can be called, including this one.

\n", "group": "repository" }, "git_repository_free": { "type": "function", "file": "git2/repository.h", - "line": 206, - "lineto": 206, + "line": 215, + "lineto": 215, "args": [ { "name": "repo", @@ -17839,15 +17987,15 @@ "comments": "

Note that after a repository is free'd, all the objects it has spawned will still exist until they are manually closed by the user with git_object_free, but accessing any of the attributes of an object without a backing repository will result in undefined behavior

\n", "group": "repository", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_repository_free-60"], - "init.c": ["ex/v1.8.4/init.html#git_repository_free-4"] + "general.c": ["ex/v1.9.1/general.html#git_repository_free-76"], + "init.c": ["ex/v1.9.1/init.html#git_repository_free-4"] } }, "git_repository_init": { "type": "function", "file": "git2/repository.h", - "line": 223, - "lineto": 226, + "line": 236, + "lineto": 239, "args": [ { "name": "out", @@ -17869,15 +18017,15 @@ "sig": "git_repository **::const char *::unsigned int", "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

Creates a new Git repository in the given folder.

\n", - "comments": "

TODO: - Reinit the repository

\n", + "comments": "

TODO: - Reinit the repository

\n\n

Note that the libgit2 library must be initialized using git_libgit2_init before any APIs can be called, including this one.

\n", "group": "repository", - "examples": { "init.c": ["ex/v1.8.4/init.html#git_repository_init-5"] } + "examples": { "init.c": ["ex/v1.9.1/init.html#git_repository_init-5"] } }, "git_repository_init_options_init": { "type": "function", "file": "git2/repository.h", - "line": 389, - "lineto": 391, + "line": 405, + "lineto": 407, "args": [ { "name": "opts", @@ -17903,8 +18051,8 @@ "git_repository_init_ext": { "type": "function", "file": "git2/repository.h", - "line": 406, - "lineto": 409, + "line": 426, + "lineto": 429, "args": [ { "name": "out", @@ -17926,17 +18074,17 @@ "sig": "git_repository **::const char *::git_repository_init_options *", "return": { "type": "int", "comment": " 0 or an error code on failure." }, "description": "

Create a new Git repository in the given folder with extended controls.

\n", - "comments": "

This will initialize a new git repository (creating the repo_path if requested by flags) and working directory as needed. It will auto-detect the case sensitivity of the file system and if the file system supports file mode bits correctly.

\n", + "comments": "

This will initialize a new git repository (creating the repo_path if requested by flags) and working directory as needed. It will auto-detect the case sensitivity of the file system and if the file system supports file mode bits correctly.

\n\n

Note that the libgit2 library must be initialized using git_libgit2_init before any APIs can be called, including this one.

\n", "group": "repository", "examples": { - "init.c": ["ex/v1.8.4/init.html#git_repository_init_ext-6"] + "init.c": ["ex/v1.9.1/init.html#git_repository_init_ext-6"] } }, "git_repository_head": { "type": "function", "file": "git2/repository.h", - "line": 424, - "lineto": 424, + "line": 444, + "lineto": 444, "args": [ { "name": "out", @@ -17960,17 +18108,17 @@ "group": "repository", "examples": { "merge.c": [ - "ex/v1.8.4/merge.html#git_repository_head-31", - "ex/v1.8.4/merge.html#git_repository_head-32" + "ex/v1.9.1/merge.html#git_repository_head-31", + "ex/v1.9.1/merge.html#git_repository_head-32" ], - "status.c": ["ex/v1.8.4/status.html#git_repository_head-3"] + "status.c": ["ex/v1.9.1/status.html#git_repository_head-3"] } }, "git_repository_head_for_worktree": { "type": "function", "file": "git2/repository.h", - "line": 434, - "lineto": 435, + "line": 454, + "lineto": 455, "args": [ { "name": "out", @@ -18001,8 +18149,8 @@ "git_repository_head_detached": { "type": "function", "file": "git2/repository.h", - "line": 447, - "lineto": 447, + "line": 467, + "lineto": 467, "args": [ { "name": "repo", @@ -18023,8 +18171,8 @@ "git_repository_head_detached_for_worktree": { "type": "function", "file": "git2/repository.h", - "line": 460, - "lineto": 461, + "line": 480, + "lineto": 481, "args": [ { "name": "repo", @@ -18050,8 +18198,8 @@ "git_repository_head_unborn": { "type": "function", "file": "git2/repository.h", - "line": 473, - "lineto": 473, + "line": 493, + "lineto": 493, "args": [ { "name": "repo", @@ -18072,8 +18220,8 @@ "git_repository_is_empty": { "type": "function", "file": "git2/repository.h", - "line": 487, - "lineto": 487, + "line": 507, + "lineto": 507, "args": [ { "name": "repo", @@ -18094,8 +18242,8 @@ "git_repository_item_path": { "type": "function", "file": "git2/repository.h", - "line": 525, - "lineto": 525, + "line": 545, + "lineto": 545, "args": [ { "name": "out", @@ -18126,8 +18274,8 @@ "git_repository_path": { "type": "function", "file": "git2/repository.h", - "line": 536, - "lineto": 536, + "line": 556, + "lineto": 556, "args": [ { "name": "repo", @@ -18145,15 +18293,15 @@ "comments": "

This is the path of the .git folder for normal repositories, or of the repository itself for bare repositories.

\n", "group": "repository", "examples": { - "init.c": ["ex/v1.8.4/init.html#git_repository_path-7"], - "status.c": ["ex/v1.8.4/status.html#git_repository_path-4"] + "init.c": ["ex/v1.9.1/init.html#git_repository_path-7"], + "status.c": ["ex/v1.9.1/status.html#git_repository_path-4"] } }, "git_repository_workdir": { "type": "function", "file": "git2/repository.h", - "line": 547, - "lineto": 547, + "line": 567, + "lineto": 567, "args": [ { "name": "repo", @@ -18170,13 +18318,13 @@ "description": "

Get the path of the working directory for this repository

\n", "comments": "

If the repository is bare, this function will always return NULL.

\n", "group": "repository", - "examples": { "init.c": ["ex/v1.8.4/init.html#git_repository_workdir-8"] } + "examples": { "init.c": ["ex/v1.9.1/init.html#git_repository_workdir-8"] } }, "git_repository_commondir": { "type": "function", "file": "git2/repository.h", - "line": 559, - "lineto": 559, + "line": 579, + "lineto": 579, "args": [ { "name": "repo", @@ -18197,8 +18345,8 @@ "git_repository_set_workdir": { "type": "function", "file": "git2/repository.h", - "line": 578, - "lineto": 579, + "line": 598, + "lineto": 599, "args": [ { "name": "repo", @@ -18226,8 +18374,8 @@ "git_repository_is_bare": { "type": "function", "file": "git2/repository.h", - "line": 587, - "lineto": 587, + "line": 607, + "lineto": 607, "args": [ { "name": "repo", @@ -18245,14 +18393,14 @@ "comments": "", "group": "repository", "examples": { - "status.c": ["ex/v1.8.4/status.html#git_repository_is_bare-5"] + "status.c": ["ex/v1.9.1/status.html#git_repository_is_bare-5"] } }, "git_repository_is_worktree": { "type": "function", "file": "git2/repository.h", - "line": 595, - "lineto": 595, + "line": 615, + "lineto": 615, "args": [ { "name": "repo", @@ -18273,8 +18421,8 @@ "git_repository_config": { "type": "function", "file": "git2/repository.h", - "line": 611, - "lineto": 611, + "line": 631, + "lineto": 631, "args": [ { "name": "out", @@ -18294,14 +18442,14 @@ "comments": "

If a configuration file has not been set, the default config set for the repository will be returned, including global and system configurations (if they are available).

\n\n

The configuration file must be freed once it's no longer being used by the user.

\n", "group": "repository", "examples": { - "config.c": ["ex/v1.8.4/config.html#git_repository_config-9"] + "config.c": ["ex/v1.9.1/config.html#git_repository_config-9"] } }, "git_repository_config_snapshot": { "type": "function", "file": "git2/repository.h", - "line": 627, - "lineto": 627, + "line": 647, + "lineto": 647, "args": [ { "name": "out", @@ -18322,16 +18470,16 @@ "group": "repository", "examples": { "general.c": [ - "ex/v1.8.4/general.html#git_repository_config_snapshot-61", - "ex/v1.8.4/general.html#git_repository_config_snapshot-62" + "ex/v1.9.1/general.html#git_repository_config_snapshot-77", + "ex/v1.9.1/general.html#git_repository_config_snapshot-78" ] } }, "git_repository_odb": { "type": "function", "file": "git2/repository.h", - "line": 643, - "lineto": 643, + "line": 663, + "lineto": 663, "args": [ { "name": "out", @@ -18351,15 +18499,15 @@ "comments": "

If a custom ODB has not been set, the default database for the repository will be returned (the one located in .git/objects).

\n\n

The ODB must be freed once it's no longer being used by the user.

\n", "group": "repository", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_repository_odb-29"], - "general.c": ["ex/v1.8.4/general.html#git_repository_odb-63"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_repository_odb-29"], + "general.c": ["ex/v1.9.1/general.html#git_repository_odb-79"] } }, "git_repository_refdb": { "type": "function", "file": "git2/repository.h", - "line": 659, - "lineto": 659, + "line": 679, + "lineto": 679, "args": [ { "name": "out", @@ -18382,8 +18530,8 @@ "git_repository_index": { "type": "function", "file": "git2/repository.h", - "line": 675, - "lineto": 675, + "line": 695, + "lineto": 695, "args": [ { "name": "out", @@ -18403,19 +18551,19 @@ "comments": "

If a custom index has not been set, the default index for the repository will be returned (the one located in .git/index).

\n\n

The index must be freed once it's no longer being used by the user.

\n", "group": "repository", "examples": { - "add.c": ["ex/v1.8.4/add.html#git_repository_index-5"], - "commit.c": ["ex/v1.8.4/commit.html#git_repository_index-8"], - "general.c": ["ex/v1.8.4/general.html#git_repository_index-64"], - "init.c": ["ex/v1.8.4/init.html#git_repository_index-9"], - "ls-files.c": ["ex/v1.8.4/ls-files.html#git_repository_index-5"], - "merge.c": ["ex/v1.8.4/merge.html#git_repository_index-33"] + "add.c": ["ex/v1.9.1/add.html#git_repository_index-5"], + "commit.c": ["ex/v1.9.1/commit.html#git_repository_index-8"], + "general.c": ["ex/v1.9.1/general.html#git_repository_index-80"], + "init.c": ["ex/v1.9.1/init.html#git_repository_index-9"], + "ls-files.c": ["ex/v1.9.1/ls-files.html#git_repository_index-5"], + "merge.c": ["ex/v1.9.1/merge.html#git_repository_index-33"] } }, "git_repository_message": { "type": "function", "file": "git2/repository.h", - "line": 693, - "lineto": 693, + "line": 713, + "lineto": 713, "args": [ { "name": "out", @@ -18441,8 +18589,8 @@ "git_repository_message_remove": { "type": "function", "file": "git2/repository.h", - "line": 703, - "lineto": 703, + "line": 723, + "lineto": 723, "args": [ { "name": "repo", @@ -18460,8 +18608,8 @@ "git_repository_state_cleanup": { "type": "function", "file": "git2/repository.h", - "line": 712, - "lineto": 712, + "line": 732, + "lineto": 732, "args": [ { "name": "repo", @@ -18476,14 +18624,14 @@ "comments": "", "group": "repository", "examples": { - "merge.c": ["ex/v1.8.4/merge.html#git_repository_state_cleanup-34"] + "merge.c": ["ex/v1.9.1/merge.html#git_repository_state_cleanup-34"] } }, "git_repository_fetchhead_foreach": { "type": "function", "file": "git2/repository.h", - "line": 743, - "lineto": 746, + "line": 763, + "lineto": 766, "args": [ { "name": "repo", @@ -18514,8 +18662,8 @@ "git_repository_mergehead_foreach": { "type": "function", "file": "git2/repository.h", - "line": 772, - "lineto": 775, + "line": 792, + "lineto": 795, "args": [ { "name": "repo", @@ -18546,8 +18694,8 @@ "git_repository_hashfile": { "type": "function", "file": "git2/repository.h", - "line": 802, - "lineto": 807, + "line": 822, + "lineto": 827, "args": [ { "name": "out", @@ -18585,8 +18733,8 @@ "git_repository_set_head": { "type": "function", "file": "git2/repository.h", - "line": 827, - "lineto": 829, + "line": 847, + "lineto": 849, "args": [ { "name": "repo", @@ -18606,14 +18754,14 @@ "comments": "

If the provided reference points to a Tree or a Blob, the HEAD is unaltered and -1 is returned.

\n\n

If the provided reference points to a branch, the HEAD will point to that branch, staying attached, or become attached if it isn't yet. If the branch doesn't exist yet, no error will be return. The HEAD will then be attached to an unborn branch.

\n\n

Otherwise, the HEAD will be detached and will directly point to the Commit.

\n", "group": "repository", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_repository_set_head-23"] + "checkout.c": ["ex/v1.9.1/checkout.html#git_repository_set_head-23"] } }, "git_repository_set_head_detached": { "type": "function", "file": "git2/repository.h", - "line": 847, - "lineto": 849, + "line": 867, + "lineto": 869, "args": [ { "name": "repo", @@ -18636,33 +18784,37 @@ "git_repository_set_head_detached_from_annotated": { "type": "function", "file": "git2/repository.h", - "line": 863, - "lineto": 865, + "line": 885, + "lineto": 887, "args": [ - { "name": "repo", "type": "git_repository *", "comment": null }, + { + "name": "repo", + "type": "git_repository *", + "comment": "Repository pointer" + }, { "name": "committish", "type": "const git_annotated_commit *", - "comment": null + "comment": "annotated commit to point HEAD to" } ], "argline": "git_repository *repo, const git_annotated_commit *committish", "sig": "git_repository *::const git_annotated_commit *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 on success, or an error code" }, "description": "

Make the repository HEAD directly point to the Commit.

\n", "comments": "

This behaves like git_repository_set_head_detached() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_repository_set_head_detached().

\n", "group": "repository", "examples": { "checkout.c": [ - "ex/v1.8.4/checkout.html#git_repository_set_head_detached_from_annotated-24" + "ex/v1.9.1/checkout.html#git_repository_set_head_detached_from_annotated-24" ] } }, "git_repository_detach_head": { "type": "function", "file": "git2/repository.h", - "line": 884, - "lineto": 885, + "line": 906, + "lineto": 907, "args": [ { "name": "repo", @@ -18683,8 +18835,8 @@ "git_repository_state": { "type": "function", "file": "git2/repository.h", - "line": 915, - "lineto": 915, + "line": 937, + "lineto": 937, "args": [ { "name": "repo", @@ -18699,15 +18851,15 @@ "comments": "", "group": "repository", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_repository_state-25"], - "merge.c": ["ex/v1.8.4/merge.html#git_repository_state-35"] + "checkout.c": ["ex/v1.9.1/checkout.html#git_repository_state-25"], + "merge.c": ["ex/v1.9.1/merge.html#git_repository_state-35"] } }, "git_repository_set_namespace": { "type": "function", "file": "git2/repository.h", - "line": 929, - "lineto": 929, + "line": 951, + "lineto": 951, "args": [ { "name": "repo", "type": "git_repository *", "comment": "The repo" }, { @@ -18726,8 +18878,8 @@ "git_repository_get_namespace": { "type": "function", "file": "git2/repository.h", - "line": 937, - "lineto": 937, + "line": 959, + "lineto": 959, "args": [ { "name": "repo", "type": "git_repository *", "comment": "The repo" } ], @@ -18744,8 +18896,8 @@ "git_repository_is_shallow": { "type": "function", "file": "git2/repository.h", - "line": 946, - "lineto": 946, + "line": 968, + "lineto": 968, "args": [ { "name": "repo", @@ -18763,8 +18915,8 @@ "git_repository_ident": { "type": "function", "file": "git2/repository.h", - "line": 959, - "lineto": 959, + "line": 981, + "lineto": 981, "args": [ { "name": "name", @@ -18792,8 +18944,8 @@ "git_repository_set_ident": { "type": "function", "file": "git2/repository.h", - "line": 973, - "lineto": 973, + "line": 995, + "lineto": 995, "args": [ { "name": "repo", @@ -18821,8 +18973,8 @@ "git_repository_oid_type": { "type": "function", "file": "git2/repository.h", - "line": 981, - "lineto": 981, + "line": 1003, + "lineto": 1003, "args": [ { "name": "repo", @@ -18840,8 +18992,8 @@ "git_repository_commit_parents": { "type": "function", "file": "git2/repository.h", - "line": 992, - "lineto": 992, + "line": 1014, + "lineto": 1014, "args": [ { "name": "commits", @@ -18898,25 +19050,33 @@ "git_reset_from_annotated": { "type": "function", "file": "git2/reset.h", - "line": 80, - "lineto": 84, + "line": 92, + "lineto": 96, "args": [ - { "name": "repo", "type": "git_repository *", "comment": null }, { - "name": "commit", + "name": "repo", + "type": "git_repository *", + "comment": "Repository where to perform the reset operation." + }, + { + "name": "target", "type": "const git_annotated_commit *", - "comment": null + "comment": "Annotated commit to which the Head should be moved to.\n This object must belong to the given `repo`, it will be dereferenced\n to a git_commit which oid will be used as the target of the branch." + }, + { + "name": "reset_type", + "type": "git_reset_t", + "comment": "Kind of reset operation to perform." }, - { "name": "reset_type", "type": "git_reset_t", "comment": null }, { "name": "checkout_opts", "type": "const git_checkout_options *", - "comment": null + "comment": "Optional checkout options to be used for a HARD reset.\n The checkout_strategy field will be overridden (based on reset_type).\n This parameter can be used to propagate notify and progress callbacks." } ], - "argline": "git_repository *repo, const git_annotated_commit *commit, git_reset_t reset_type, const git_checkout_options *checkout_opts", + "argline": "git_repository *repo, const git_annotated_commit *target, git_reset_t reset_type, const git_checkout_options *checkout_opts", "sig": "git_repository *::const git_annotated_commit *::git_reset_t::const git_checkout_options *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 on success or an error code" }, "description": "

Sets the current head to the specified commit oid and optionally\n resets the index and working tree to match.

\n", "comments": "

This behaves like git_reset() but takes an annotated commit, which lets you specify which extended sha syntax string was specified by a user, allowing for more exact reflog messages.

\n\n

See the documentation for git_reset().

\n", "group": "reset" @@ -18924,8 +19084,8 @@ "git_reset_default": { "type": "function", "file": "git2/reset.h", - "line": 104, - "lineto": 107, + "line": 116, + "lineto": 119, "args": [ { "name": "repo", @@ -18956,8 +19116,8 @@ "git_revert_options_init": { "type": "function", "file": "git2/revert.h", - "line": 49, - "lineto": 51, + "line": 54, + "lineto": 56, "args": [ { "name": "opts", @@ -18983,8 +19143,8 @@ "git_revert_commit": { "type": "function", "file": "git2/revert.h", - "line": 67, - "lineto": 73, + "line": 72, + "lineto": 78, "args": [ { "name": "out", @@ -19030,8 +19190,8 @@ "git_revert": { "type": "function", "file": "git2/revert.h", - "line": 83, - "lineto": 86, + "line": 88, + "lineto": 91, "args": [ { "name": "repo", @@ -19091,15 +19251,15 @@ "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

The returned object should be released with git_object_free when no longer needed.

\n", "group": "revparse", "examples": { - "blame.c": ["ex/v1.8.4/blame.html#git_revparse_single-22"], - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_revparse_single-30"], - "describe.c": ["ex/v1.8.4/describe.html#git_revparse_single-6"], - "log.c": ["ex/v1.8.4/log.html#git_revparse_single-44"], + "blame.c": ["ex/v1.9.1/blame.html#git_revparse_single-21"], + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_revparse_single-30"], + "describe.c": ["ex/v1.9.1/describe.html#git_revparse_single-6"], + "log.c": ["ex/v1.9.1/log.html#git_revparse_single-44"], "tag.c": [ - "ex/v1.8.4/tag.html#git_revparse_single-9", - "ex/v1.8.4/tag.html#git_revparse_single-10", - "ex/v1.8.4/tag.html#git_revparse_single-11", - "ex/v1.8.4/tag.html#git_revparse_single-12" + "ex/v1.9.1/tag.html#git_revparse_single-9", + "ex/v1.9.1/tag.html#git_revparse_single-10", + "ex/v1.9.1/tag.html#git_revparse_single-11", + "ex/v1.9.1/tag.html#git_revparse_single-12" ] } }, @@ -19139,7 +19299,7 @@ "description": "

Find a single object and intermediate reference by a revision string.

\n", "comments": "

See man gitrevisions, or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n\n

In some cases (@{<-n>} or <branchname>@{upstream}), the expression may point to an intermediate reference. When such expressions are being passed in, reference_out will be valued as well.

\n\n

The returned object should be released with git_object_free and the returned reference with git_reference_free when no longer needed.

\n", "group": "revparse", - "examples": { "commit.c": ["ex/v1.8.4/commit.html#git_revparse_ext-9"] } + "examples": { "commit.c": ["ex/v1.9.1/commit.html#git_revparse_ext-9"] } }, "git_revparse": { "type": "function", @@ -19173,11 +19333,11 @@ "comments": "

See man gitrevisions or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information on the syntax accepted.

\n", "group": "revparse", "examples": { - "blame.c": ["ex/v1.8.4/blame.html#git_revparse-23"], - "log.c": ["ex/v1.8.4/log.html#git_revparse-45"], + "blame.c": ["ex/v1.9.1/blame.html#git_revparse-22"], + "log.c": ["ex/v1.9.1/log.html#git_revparse-45"], "rev-parse.c": [ - "ex/v1.8.4/rev-parse.html#git_revparse-14", - "ex/v1.8.4/rev-parse.html#git_revparse-15" + "ex/v1.9.1/rev-parse.html#git_revparse-14", + "ex/v1.9.1/rev-parse.html#git_revparse-15" ] } }, @@ -19205,10 +19365,10 @@ "comments": "

This revision walker uses a custom memory pool and an internal commit cache, so it is relatively expensive to allocate.

\n\n

For maximum performance, this revision walker should be reused for different walks.

\n\n

This revision walker is not thread safe: it may only be used to walk a repository on a single thread; however, it is possible to have several revision walkers in several different threads walking the same repository.

\n", "group": "revwalk", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_revwalk_new-65"], + "general.c": ["ex/v1.9.1/general.html#git_revwalk_new-81"], "log.c": [ - "ex/v1.8.4/log.html#git_revwalk_new-46", - "ex/v1.8.4/log.html#git_revwalk_new-47" + "ex/v1.9.1/log.html#git_revwalk_new-46", + "ex/v1.9.1/log.html#git_revwalk_new-47" ] } }, @@ -19255,8 +19415,8 @@ "comments": "

The pushed commit will be marked as one of the roots from which to start the walk. This commit may not be walked if it or a child is hidden.

\n\n

At least one commit must be pushed onto the walker before a walk can be started.

\n\n

The given id must belong to a committish on the walked repository.

\n", "group": "revwalk", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_revwalk_push-66"], - "log.c": ["ex/v1.8.4/log.html#git_revwalk_push-48"] + "general.c": ["ex/v1.9.1/general.html#git_revwalk_push-82"], + "log.c": ["ex/v1.9.1/log.html#git_revwalk_push-48"] } }, "git_revwalk_push_glob": { @@ -19301,7 +19461,7 @@ "description": "

Push the repository's HEAD

\n", "comments": "", "group": "revwalk", - "examples": { "log.c": ["ex/v1.8.4/log.html#git_revwalk_push_head-49"] } + "examples": { "log.c": ["ex/v1.9.1/log.html#git_revwalk_push_head-49"] } }, "git_revwalk_hide": { "type": "function", @@ -19326,7 +19486,7 @@ "description": "

Mark a commit (and its ancestors) uninteresting for the output.

\n", "comments": "

The given id must belong to a committish on the walked repository.

\n\n

The resolved commit and all its parents will be hidden from the output on the revision walk.

\n", "group": "revwalk", - "examples": { "log.c": ["ex/v1.8.4/log.html#git_revwalk_hide-50"] } + "examples": { "log.c": ["ex/v1.9.1/log.html#git_revwalk_hide-50"] } }, "git_revwalk_hide_glob": { "type": "function", @@ -19446,8 +19606,8 @@ "comments": "

The initial call to this method is not blocking when iterating through a repo with a time-sorting mode.

\n\n

Iterating with Topological or inverted modes makes the initial call blocking to preprocess the commit list, but this block should be mostly unnoticeable on most repositories (topological preprocessing times at 0.3s on the git.git repo).

\n\n

The revision walker is reset when the walk is over.

\n", "group": "revwalk", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_revwalk_next-67"], - "log.c": ["ex/v1.8.4/log.html#git_revwalk_next-51"] + "general.c": ["ex/v1.9.1/general.html#git_revwalk_next-83"], + "log.c": ["ex/v1.9.1/log.html#git_revwalk_next-51"] } }, "git_revwalk_sorting": { @@ -19474,10 +19634,10 @@ "comments": "

Changing the sorting mode resets the walker.

\n", "group": "revwalk", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_revwalk_sorting-68"], + "general.c": ["ex/v1.9.1/general.html#git_revwalk_sorting-84"], "log.c": [ - "ex/v1.8.4/log.html#git_revwalk_sorting-52", - "ex/v1.8.4/log.html#git_revwalk_sorting-53" + "ex/v1.9.1/log.html#git_revwalk_sorting-52", + "ex/v1.9.1/log.html#git_revwalk_sorting-53" ] } }, @@ -19539,8 +19699,8 @@ "comments": "", "group": "revwalk", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_revwalk_free-69"], - "log.c": ["ex/v1.8.4/log.html#git_revwalk_free-54"] + "general.c": ["ex/v1.9.1/general.html#git_revwalk_free-85"], + "log.c": ["ex/v1.9.1/log.html#git_revwalk_free-54"] } }, "git_revwalk_repository": { @@ -19597,8 +19757,8 @@ "git_signature_new": { "type": "function", "file": "git2/signature.h", - "line": 37, - "lineto": 37, + "line": 41, + "lineto": 41, "args": [ { "name": "out", @@ -19634,16 +19794,16 @@ "group": "signature", "examples": { "general.c": [ - "ex/v1.8.4/general.html#git_signature_new-70", - "ex/v1.8.4/general.html#git_signature_new-71" + "ex/v1.9.1/general.html#git_signature_new-86", + "ex/v1.9.1/general.html#git_signature_new-87" ] } }, "git_signature_now": { "type": "function", "file": "git2/signature.h", - "line": 49, - "lineto": 49, + "line": 53, + "lineto": 53, "args": [ { "name": "out", @@ -19667,13 +19827,50 @@ "description": "

Create a new action signature with a timestamp of 'now'.

\n", "comments": "

Call git_signature_free() to free the data.

\n", "group": "signature", - "examples": { "merge.c": ["ex/v1.8.4/merge.html#git_signature_now-36"] } + "examples": { "merge.c": ["ex/v1.9.1/merge.html#git_signature_now-36"] } + }, + "git_signature_default_from_env": { + "type": "function", + "file": "git2/signature.h", + "line": 86, + "lineto": 89, + "args": [ + { + "name": "author_out", + "type": "git_signature **", + "comment": "pointer to set the author signature, or NULL" + }, + { + "name": "committer_out", + "type": "git_signature **", + "comment": "pointer to set the committer signature, or NULL" + }, + { + "name": "repo", + "type": "git_repository *", + "comment": "repository pointer" + } + ], + "argline": "git_signature **author_out, git_signature **committer_out, git_repository *repo", + "sig": "git_signature **::git_signature **::git_repository *", + "return": { + "type": "int", + "comment": " 0 on success, GIT_ENOTFOUND if config is missing, or error code" + }, + "description": "

Create a new author and/or committer signatures with default\n information based on the configuration and environment variables.

\n", + "comments": "

If author_out is set, it will be populated with the author information. The GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL environment variables will be honored, and user.name and user.email configuration options will be honored if the environment variables are unset. For timestamps, GIT_AUTHOR_DATE will be used, otherwise the current time will be used.

\n\n

If committer_out is set, it will be populated with the committer information. The GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL environment variables will be honored, and user.name and user.email configuration options will be honored if the environment variables are unset. For timestamps, GIT_COMMITTER_DATE will be used, otherwise the current time will be used.

\n\n

If neither GIT_AUTHOR_DATE nor GIT_COMMITTER_DATE are set, both timestamps will be set to the same time.

\n\n

It will return GIT_ENOTFOUND if either the user.name or user.email are not set and there is no fallback from an environment variable. One of author_out or committer_out must be set.

\n", + "group": "signature", + "examples": { + "commit.c": ["ex/v1.9.1/commit.html#git_signature_default_from_env-10"], + "init.c": ["ex/v1.9.1/init.html#git_signature_default_from_env-10"], + "tag.c": ["ex/v1.9.1/tag.html#git_signature_default_from_env-13"] + } }, "git_signature_default": { "type": "function", "file": "git2/signature.h", - "line": 63, - "lineto": 63, + "line": 107, + "lineto": 107, "args": [ { "name": "out", @@ -19693,19 +19890,14 @@ "comment": " 0 on success, GIT_ENOTFOUND if config is missing, or error code" }, "description": "

Create a new action signature with default user and now timestamp.

\n", - "comments": "

This looks up the user.name and user.email from the configuration and uses the current time as the timestamp, and creates a new signature based on that information. It will return GIT_ENOTFOUND if either the user.name or user.email are not set.

\n", - "group": "signature", - "examples": { - "commit.c": ["ex/v1.8.4/commit.html#git_signature_default-10"], - "init.c": ["ex/v1.8.4/init.html#git_signature_default-10"], - "tag.c": ["ex/v1.8.4/tag.html#git_signature_default-13"] - } + "comments": "

This looks up the user.name and user.email from the configuration and uses the current time as the timestamp, and creates a new signature based on that information. It will return GIT_ENOTFOUND if either the user.name or user.email are not set.

\n\n

Note that these do not examine environment variables, only the configuration files. Use git_signature_default_from_env to consider the environment variables.

\n", + "group": "signature" }, "git_signature_from_buffer": { "type": "function", "file": "git2/signature.h", - "line": 76, - "lineto": 76, + "line": 120, + "lineto": 120, "args": [ { "name": "out", @@ -19727,8 +19919,8 @@ "git_signature_dup": { "type": "function", "file": "git2/signature.h", - "line": 88, - "lineto": 88, + "line": 132, + "lineto": 132, "args": [ { "name": "dest", @@ -19751,8 +19943,8 @@ "git_signature_free": { "type": "function", "file": "git2/signature.h", - "line": 99, - "lineto": 99, + "line": 143, + "lineto": 143, "args": [ { "name": "sig", @@ -19767,20 +19959,26 @@ "comments": "

Because the signature is not an opaque structure, it is legal to free it manually, but be sure to free the "name" and "email" strings in addition to the structure itself.

\n", "group": "signature", "examples": { - "commit.c": ["ex/v1.8.4/commit.html#git_signature_free-11"], + "commit.c": [ + "ex/v1.9.1/commit.html#git_signature_free-11", + "ex/v1.9.1/commit.html#git_signature_free-12" + ], "general.c": [ - "ex/v1.8.4/general.html#git_signature_free-72", - "ex/v1.8.4/general.html#git_signature_free-73" + "ex/v1.9.1/general.html#git_signature_free-88", + "ex/v1.9.1/general.html#git_signature_free-89" + ], + "init.c": [ + "ex/v1.9.1/init.html#git_signature_free-11", + "ex/v1.9.1/init.html#git_signature_free-12" ], - "init.c": ["ex/v1.8.4/init.html#git_signature_free-11"], - "tag.c": ["ex/v1.8.4/tag.html#git_signature_free-14"] + "tag.c": ["ex/v1.9.1/tag.html#git_signature_free-14"] } }, "git_stash_save": { "type": "function", "file": "git2/stash.h", - "line": 67, - "lineto": 72, + "line": 72, + "lineto": 77, "args": [ { "name": "out", @@ -19821,8 +20019,8 @@ "git_stash_save_options_init": { "type": "function", "file": "git2/stash.h", - "line": 110, - "lineto": 111, + "line": 118, + "lineto": 119, "args": [ { "name": "opts", @@ -19848,8 +20046,8 @@ "git_stash_save_with_opts": { "type": "function", "file": "git2/stash.h", - "line": 123, - "lineto": 126, + "line": 131, + "lineto": 134, "args": [ { "name": "out", @@ -19880,8 +20078,8 @@ "git_stash_apply_options_init": { "type": "function", "file": "git2/stash.h", - "line": 210, - "lineto": 211, + "line": 225, + "lineto": 226, "args": [ { "name": "opts", @@ -19907,8 +20105,8 @@ "git_stash_apply": { "type": "function", "file": "git2/stash.h", - "line": 239, - "lineto": 242, + "line": 252, + "lineto": 255, "args": [ { "name": "repo", @@ -19933,14 +20131,14 @@ "comment": " 0 on success, GIT_ENOTFOUND if there's no stashed state for the\n given index, GIT_EMERGECONFLICT if changes exist in the working\n directory, or an error code" }, "description": "

Apply a single stashed state from the stash list.

\n", - "comments": "

If local changes in the working directory conflict with changes in the stash then GIT_EMERGECONFLICT will be returned. In this case, the index will always remain unmodified and all files in the working directory will remain unmodified. However, if you are restoring untracked files or ignored files and there is a conflict when applying the modified files, then those files will remain in the working directory.

\n\n

If passing the GIT_STASH_APPLY_REINSTATE_INDEX flag and there would be conflicts when reinstating the index, the function will return GIT_EMERGECONFLICT and both the working directory and index will be left unmodified.

\n\n

Note that a minimum checkout strategy of GIT_CHECKOUT_SAFE is implied.

\n", + "comments": "

If local changes in the working directory conflict with changes in the stash then GIT_EMERGECONFLICT will be returned. In this case, the index will always remain unmodified and all files in the working directory will remain unmodified. However, if you are restoring untracked files or ignored files and there is a conflict when applying the modified files, then those files will remain in the working directory.

\n\n

If passing the GIT_STASH_APPLY_REINSTATE_INDEX flag and there would be conflicts when reinstating the index, the function will return GIT_EMERGECONFLICT and both the working directory and index will be left unmodified.

\n", "group": "stash" }, "git_stash_foreach": { "type": "function", "file": "git2/stash.h", - "line": 275, - "lineto": 278, + "line": 288, + "lineto": 291, "args": [ { "name": "repo", @@ -19971,8 +20169,8 @@ "git_stash_drop": { "type": "function", "file": "git2/stash.h", - "line": 291, - "lineto": 293, + "line": 304, + "lineto": 306, "args": [ { "name": "repo", @@ -19998,8 +20196,8 @@ "git_stash_pop": { "type": "function", "file": "git2/stash.h", - "line": 307, - "lineto": 310, + "line": 320, + "lineto": 323, "args": [ { "name": "repo", @@ -20030,8 +20228,8 @@ "git_status_options_init": { "type": "function", "file": "git2/status.h", - "line": 277, - "lineto": 279, + "line": 280, + "lineto": 282, "args": [ { "name": "opts", @@ -20057,8 +20255,8 @@ "git_status_foreach": { "type": "function", "file": "git2/status.h", - "line": 317, - "lineto": 320, + "line": 320, + "lineto": 323, "args": [ { "name": "repo", @@ -20085,13 +20283,13 @@ "description": "

Gather file statuses and run a callback for each one.

\n", "comments": "

The callback is passed the path of the file, the status (a combination of the git_status_t values above) and the payload data pointer passed into this function.

\n\n

If the callback returns a non-zero value, this function will stop looping and return that value to caller.

\n", "group": "status", - "examples": { "status.c": ["ex/v1.8.4/status.html#git_status_foreach-6"] } + "examples": { "status.c": ["ex/v1.9.1/status.html#git_status_foreach-6"] } }, "git_status_foreach_ext": { "type": "function", "file": "git2/status.h", - "line": 341, - "lineto": 345, + "line": 344, + "lineto": 348, "args": [ { "name": "repo", @@ -20124,14 +20322,14 @@ "comments": "

This is an extended version of the git_status_foreach() API that allows for more granular control over which paths will be processed and in what order. See the git_status_options structure for details about the additional controls that this makes available.

\n\n

Note that if a pathspec is given in the git_status_options to filter the status, then the results from rename detection (if you enable it) may not be accurate. To do rename detection properly, this must be called with no pathspec so that all files can be considered.

\n", "group": "status", "examples": { - "status.c": ["ex/v1.8.4/status.html#git_status_foreach_ext-7"] + "status.c": ["ex/v1.9.1/status.html#git_status_foreach_ext-7"] } }, "git_status_file": { "type": "function", "file": "git2/status.h", - "line": 373, - "lineto": 376, + "line": 376, + "lineto": 379, "args": [ { "name": "status_flags", @@ -20158,13 +20356,13 @@ "description": "

Get file status for a single file.

\n", "comments": "

This tries to get status for the filename that you give. If no files match that name (in either the HEAD, index, or working directory), this returns GIT_ENOTFOUND.

\n\n

If the name matches multiple files (for example, if the path names a directory or if running on a case- insensitive filesystem and yet the HEAD has two entries that both match the path), then this returns GIT_EAMBIGUOUS because it cannot give correct results.

\n\n

This does not do any sort of rename detection. Renames require a set of targets and because of the path filtering, there is not enough information to check renames correctly. To check file status with rename detection, there is no choice but to do a full git_status_list_new and scan through looking for the path that you are interested in.

\n", "group": "status", - "examples": { "add.c": ["ex/v1.8.4/add.html#git_status_file-6"] } + "examples": { "add.c": ["ex/v1.9.1/add.html#git_status_file-6"] } }, "git_status_list_new": { "type": "function", "file": "git2/status.h", - "line": 391, - "lineto": 394, + "line": 394, + "lineto": 397, "args": [ { "name": "out", @@ -20190,16 +20388,16 @@ "group": "status", "examples": { "status.c": [ - "ex/v1.8.4/status.html#git_status_list_new-8", - "ex/v1.8.4/status.html#git_status_list_new-9" + "ex/v1.9.1/status.html#git_status_list_new-8", + "ex/v1.9.1/status.html#git_status_list_new-9" ] } }, "git_status_list_entrycount": { "type": "function", "file": "git2/status.h", - "line": 405, - "lineto": 406, + "line": 408, + "lineto": 409, "args": [ { "name": "statuslist", @@ -20218,16 +20416,16 @@ "group": "status", "examples": { "status.c": [ - "ex/v1.8.4/status.html#git_status_list_entrycount-10", - "ex/v1.8.4/status.html#git_status_list_entrycount-11" + "ex/v1.9.1/status.html#git_status_list_entrycount-10", + "ex/v1.9.1/status.html#git_status_list_entrycount-11" ] } }, "git_status_byindex": { "type": "function", "file": "git2/status.h", - "line": 417, - "lineto": 419, + "line": 420, + "lineto": 422, "args": [ { "name": "statuslist", @@ -20247,20 +20445,20 @@ "group": "status", "examples": { "status.c": [ - "ex/v1.8.4/status.html#git_status_byindex-12", - "ex/v1.8.4/status.html#git_status_byindex-13", - "ex/v1.8.4/status.html#git_status_byindex-14", - "ex/v1.8.4/status.html#git_status_byindex-15", - "ex/v1.8.4/status.html#git_status_byindex-16", - "ex/v1.8.4/status.html#git_status_byindex-17" + "ex/v1.9.1/status.html#git_status_byindex-12", + "ex/v1.9.1/status.html#git_status_byindex-13", + "ex/v1.9.1/status.html#git_status_byindex-14", + "ex/v1.9.1/status.html#git_status_byindex-15", + "ex/v1.9.1/status.html#git_status_byindex-16", + "ex/v1.9.1/status.html#git_status_byindex-17" ] } }, "git_status_list_free": { "type": "function", "file": "git2/status.h", - "line": 426, - "lineto": 427, + "line": 429, + "lineto": 430, "args": [ { "name": "statuslist", @@ -20275,14 +20473,14 @@ "comments": "", "group": "status", "examples": { - "status.c": ["ex/v1.8.4/status.html#git_status_list_free-18"] + "status.c": ["ex/v1.9.1/status.html#git_status_list_free-18"] } }, "git_status_should_ignore": { "type": "function", "file": "git2/status.h", - "line": 445, - "lineto": 448, + "line": 448, + "lineto": 451, "args": [ { "name": "ignored", @@ -20329,20 +20527,20 @@ "comments": "

This does not free the git_strarray itself, since the library will never allocate that object directly itself.

\n", "group": "strarray", "examples": { - "checkout.c": ["ex/v1.8.4/checkout.html#git_strarray_dispose-26"], - "general.c": ["ex/v1.8.4/general.html#git_strarray_dispose-74"], + "checkout.c": ["ex/v1.9.1/checkout.html#git_strarray_dispose-26"], + "general.c": ["ex/v1.9.1/general.html#git_strarray_dispose-90"], "remote.c": [ - "ex/v1.8.4/remote.html#git_strarray_dispose-11", - "ex/v1.8.4/remote.html#git_strarray_dispose-12" + "ex/v1.9.1/remote.html#git_strarray_dispose-11", + "ex/v1.9.1/remote.html#git_strarray_dispose-12" ], - "tag.c": ["ex/v1.8.4/tag.html#git_strarray_dispose-15"] + "tag.c": ["ex/v1.9.1/tag.html#git_strarray_dispose-15"] } }, "git_submodule_update_options_init": { "type": "function", "file": "git2/submodule.h", - "line": 171, - "lineto": 172, + "line": 180, + "lineto": 181, "args": [ { "name": "opts", @@ -20368,8 +20566,8 @@ "git_submodule_update": { "type": "function", "file": "git2/submodule.h", - "line": 192, - "lineto": 192, + "line": 201, + "lineto": 201, "args": [ { "name": "submodule", @@ -20400,8 +20598,8 @@ "git_submodule_lookup": { "type": "function", "file": "git2/submodule.h", - "line": 221, - "lineto": 224, + "line": 230, + "lineto": 233, "args": [ { "name": "out", @@ -20432,8 +20630,8 @@ "git_submodule_dup": { "type": "function", "file": "git2/submodule.h", - "line": 234, - "lineto": 234, + "line": 243, + "lineto": 243, "args": [ { "name": "out", @@ -20456,8 +20654,8 @@ "git_submodule_free": { "type": "function", "file": "git2/submodule.h", - "line": 241, - "lineto": 241, + "line": 250, + "lineto": 250, "args": [ { "name": "submodule", @@ -20475,8 +20673,8 @@ "git_submodule_foreach": { "type": "function", "file": "git2/submodule.h", - "line": 261, - "lineto": 264, + "line": 270, + "lineto": 273, "args": [ { "name": "repo", @@ -20504,14 +20702,14 @@ "comments": "

See the note on git_submodule above. This iterates over the tracked submodules as described therein.

\n\n

If you are concerned about items in the working directory that look like submodules but are not tracked, the diff API will generate a diff record for workdir items that look like submodules but are not tracked, showing them as added in the workdir. Also, the status API will treat the entire subdirectory of a contained git repo as a single GIT_STATUS_WT_NEW item.

\n", "group": "submodule", "examples": { - "status.c": ["ex/v1.8.4/status.html#git_submodule_foreach-19"] + "status.c": ["ex/v1.9.1/status.html#git_submodule_foreach-19"] } }, "git_submodule_add_setup": { "type": "function", "file": "git2/submodule.h", - "line": 292, - "lineto": 297, + "line": 301, + "lineto": 306, "args": [ { "name": "out", @@ -20552,8 +20750,8 @@ "git_submodule_clone": { "type": "function", "file": "git2/submodule.h", - "line": 310, - "lineto": 313, + "line": 319, + "lineto": 322, "args": [ { "name": "out", @@ -20584,8 +20782,8 @@ "git_submodule_add_finalize": { "type": "function", "file": "git2/submodule.h", - "line": 326, - "lineto": 326, + "line": 335, + "lineto": 335, "args": [ { "name": "submodule", @@ -20603,8 +20801,8 @@ "git_submodule_add_to_index": { "type": "function", "file": "git2/submodule.h", - "line": 338, - "lineto": 340, + "line": 347, + "lineto": 349, "args": [ { "name": "submodule", @@ -20630,8 +20828,8 @@ "git_submodule_owner": { "type": "function", "file": "git2/submodule.h", - "line": 353, - "lineto": 353, + "line": 362, + "lineto": 362, "args": [ { "name": "submodule", @@ -20652,8 +20850,8 @@ "git_submodule_name": { "type": "function", "file": "git2/submodule.h", - "line": 361, - "lineto": 361, + "line": 370, + "lineto": 370, "args": [ { "name": "submodule", @@ -20671,14 +20869,14 @@ "comments": "", "group": "submodule", "examples": { - "status.c": ["ex/v1.8.4/status.html#git_submodule_name-20"] + "status.c": ["ex/v1.9.1/status.html#git_submodule_name-20"] } }, "git_submodule_path": { "type": "function", "file": "git2/submodule.h", - "line": 372, - "lineto": 372, + "line": 381, + "lineto": 381, "args": [ { "name": "submodule", @@ -20696,14 +20894,14 @@ "comments": "

The path is almost always the same as the submodule name, but the two are actually not required to match.

\n", "group": "submodule", "examples": { - "status.c": ["ex/v1.8.4/status.html#git_submodule_path-21"] + "status.c": ["ex/v1.9.1/status.html#git_submodule_path-21"] } }, "git_submodule_url": { "type": "function", "file": "git2/submodule.h", - "line": 380, - "lineto": 380, + "line": 389, + "lineto": 389, "args": [ { "name": "submodule", @@ -20724,8 +20922,8 @@ "git_submodule_resolve_url": { "type": "function", "file": "git2/submodule.h", - "line": 390, - "lineto": 390, + "line": 399, + "lineto": 399, "args": [ { "name": "out", @@ -20749,8 +20947,8 @@ "git_submodule_branch": { "type": "function", "file": "git2/submodule.h", - "line": 398, - "lineto": 398, + "line": 407, + "lineto": 407, "args": [ { "name": "submodule", @@ -20771,8 +20969,8 @@ "git_submodule_set_branch": { "type": "function", "file": "git2/submodule.h", - "line": 411, - "lineto": 411, + "line": 420, + "lineto": 420, "args": [ { "name": "repo", @@ -20803,8 +21001,8 @@ "git_submodule_set_url": { "type": "function", "file": "git2/submodule.h", - "line": 425, - "lineto": 425, + "line": 434, + "lineto": 434, "args": [ { "name": "repo", @@ -20835,8 +21033,8 @@ "git_submodule_index_id": { "type": "function", "file": "git2/submodule.h", - "line": 433, - "lineto": 433, + "line": 442, + "lineto": 442, "args": [ { "name": "submodule", @@ -20857,8 +21055,8 @@ "git_submodule_head_id": { "type": "function", "file": "git2/submodule.h", - "line": 441, - "lineto": 441, + "line": 450, + "lineto": 450, "args": [ { "name": "submodule", @@ -20879,8 +21077,8 @@ "git_submodule_wd_id": { "type": "function", "file": "git2/submodule.h", - "line": 454, - "lineto": 454, + "line": 463, + "lineto": 463, "args": [ { "name": "submodule", @@ -20901,8 +21099,8 @@ "git_submodule_ignore": { "type": "function", "file": "git2/submodule.h", - "line": 479, - "lineto": 480, + "line": 488, + "lineto": 489, "args": [ { "name": "submodule", @@ -20923,8 +21121,8 @@ "git_submodule_set_ignore": { "type": "function", "file": "git2/submodule.h", - "line": 492, - "lineto": 495, + "line": 501, + "lineto": 504, "args": [ { "name": "repo", @@ -20952,8 +21150,8 @@ "git_submodule_update_strategy": { "type": "function", "file": "git2/submodule.h", - "line": 507, - "lineto": 508, + "line": 516, + "lineto": 517, "args": [ { "name": "submodule", @@ -20974,8 +21172,8 @@ "git_submodule_set_update": { "type": "function", "file": "git2/submodule.h", - "line": 520, - "lineto": 523, + "line": 529, + "lineto": 532, "args": [ { "name": "repo", @@ -21003,16 +21201,20 @@ "git_submodule_fetch_recurse_submodules": { "type": "function", "file": "git2/submodule.h", - "line": 536, - "lineto": 537, + "line": 546, + "lineto": 547, "args": [ - { "name": "submodule", "type": "git_submodule *", "comment": null } + { + "name": "submodule", + "type": "git_submodule *", + "comment": "the submodule to examine" + } ], "argline": "git_submodule *submodule", "sig": "git_submodule *", "return": { "type": "git_submodule_recurse_t", - "comment": " 0 if fetchRecurseSubmodules is false, 1 if true" + "comment": " the submodule recursion configuration" }, "description": "

Read the fetchRecurseSubmodules rule for a submodule.

\n", "comments": "

This accesses the submodule..fetchRecurseSubmodules value for the submodule that controls fetching behavior for the submodule.

\n\n

Note that at this time, libgit2 does not honor this setting and the fetch functionality current ignores submodules.

\n", @@ -21021,8 +21223,8 @@ "git_submodule_set_fetch_recurse_submodules": { "type": "function", "file": "git2/submodule.h", - "line": 549, - "lineto": 552, + "line": 559, + "lineto": 562, "args": [ { "name": "repo", @@ -21037,7 +21239,7 @@ { "name": "fetch_recurse_submodules", "type": "git_submodule_recurse_t", - "comment": "Boolean value" + "comment": "the submodule recursion configuration" } ], "argline": "git_repository *repo, const char *name, git_submodule_recurse_t fetch_recurse_submodules", @@ -21053,8 +21255,8 @@ "git_submodule_init": { "type": "function", "file": "git2/submodule.h", - "line": 567, - "lineto": 567, + "line": 577, + "lineto": 577, "args": [ { "name": "submodule", @@ -21080,8 +21282,8 @@ "git_submodule_repo_init": { "type": "function", "file": "git2/submodule.h", - "line": 582, - "lineto": 585, + "line": 592, + "lineto": 595, "args": [ { "name": "out", @@ -21112,8 +21314,8 @@ "git_submodule_sync": { "type": "function", "file": "git2/submodule.h", - "line": 598, - "lineto": 598, + "line": 608, + "lineto": 608, "args": [ { "name": "submodule", @@ -21131,8 +21333,8 @@ "git_submodule_open": { "type": "function", "file": "git2/submodule.h", - "line": 612, - "lineto": 614, + "line": 622, + "lineto": 624, "args": [ { "name": "repo", @@ -21158,8 +21360,8 @@ "git_submodule_reload": { "type": "function", "file": "git2/submodule.h", - "line": 626, - "lineto": 626, + "line": 636, + "lineto": 636, "args": [ { "name": "submodule", @@ -21182,8 +21384,8 @@ "git_submodule_status": { "type": "function", "file": "git2/submodule.h", - "line": 642, - "lineto": 646, + "line": 652, + "lineto": 656, "args": [ { "name": "status", @@ -21213,14 +21415,14 @@ "comments": "

This looks at a submodule and tries to determine the status. It will return a combination of the GIT_SUBMODULE_STATUS values above. How deeply it examines the working directory to do this will depend on the git_submodule_ignore_t value for the submodule.

\n", "group": "submodule", "examples": { - "status.c": ["ex/v1.8.4/status.html#git_submodule_status-22"] + "status.c": ["ex/v1.9.1/status.html#git_submodule_status-22"] } }, "git_submodule_location": { "type": "function", "file": "git2/submodule.h", - "line": 662, - "lineto": 664, + "line": 672, + "lineto": 674, "args": [ { "name": "location_status", @@ -21268,7 +21470,7 @@ "description": "

Lookup a tag object from the repository.

\n", "comments": "", "group": "tag", - "examples": { "general.c": ["ex/v1.8.4/general.html#git_tag_lookup-75"] } + "examples": { "general.c": ["ex/v1.9.1/general.html#git_tag_lookup-91"] } }, "git_tag_lookup_prefix": { "type": "function", @@ -21318,7 +21520,7 @@ "description": "

Close an open tag

\n", "comments": "

You can no longer use the git_tag pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you are through with a tag to release memory. Failure to do so will cause a memory leak.

\n", "group": "tag", - "examples": { "general.c": ["ex/v1.8.4/general.html#git_tag_free-76"] } + "examples": { "general.c": ["ex/v1.9.1/general.html#git_tag_free-92"] } }, "git_tag_id": { "type": "function", @@ -21387,7 +21589,7 @@ "description": "

Get the tagged object of a tag

\n", "comments": "

This method performs a repository lookup for the given object and returns it

\n", "group": "tag", - "examples": { "general.c": ["ex/v1.8.4/general.html#git_tag_target-77"] } + "examples": { "general.c": ["ex/v1.9.1/general.html#git_tag_target-93"] } }, "git_tag_target_id": { "type": "function", @@ -21408,7 +21610,7 @@ "comments": "", "group": "tag", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tag_target_id-31"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tag_target_id-31"] } }, "git_tag_target_type": { @@ -21433,8 +21635,8 @@ "comments": "", "group": "tag", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tag_target_type-32"], - "general.c": ["ex/v1.8.4/general.html#git_tag_target_type-78"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tag_target_type-32"], + "general.c": ["ex/v1.9.1/general.html#git_tag_target_type-94"] } }, "git_tag_name": { @@ -21456,9 +21658,9 @@ "comments": "", "group": "tag", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tag_name-33"], - "general.c": ["ex/v1.8.4/general.html#git_tag_name-79"], - "tag.c": ["ex/v1.8.4/tag.html#git_tag_name-16"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tag_name-33"], + "general.c": ["ex/v1.9.1/general.html#git_tag_name-95"], + "tag.c": ["ex/v1.9.1/tag.html#git_tag_name-16"] } }, "git_tag_tagger": { @@ -21483,7 +21685,7 @@ "comments": "", "group": "tag", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tag_tagger-34"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tag_tagger-34"] } }, "git_tag_message": { @@ -21509,11 +21711,11 @@ "group": "tag", "examples": { "cat-file.c": [ - "ex/v1.8.4/cat-file.html#git_tag_message-35", - "ex/v1.8.4/cat-file.html#git_tag_message-36" + "ex/v1.9.1/cat-file.html#git_tag_message-35", + "ex/v1.9.1/cat-file.html#git_tag_message-36" ], - "general.c": ["ex/v1.8.4/general.html#git_tag_message-80"], - "tag.c": ["ex/v1.8.4/tag.html#git_tag_message-17"] + "general.c": ["ex/v1.9.1/general.html#git_tag_message-96"], + "tag.c": ["ex/v1.9.1/tag.html#git_tag_message-17"] } }, "git_tag_create": { @@ -21567,7 +21769,7 @@ "description": "

Create a new tag in the repository from an object

\n", "comments": "

A new reference will also be created pointing to this tag object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The message will not be cleaned up. This can be achieved through git_message_prettify().

\n\n

The tag name will be checked for validity. You must avoid the characters '~', '^', ':', '\\', '?', '[', and '*', and the sequences ".." and "@{" which have special meaning to revparse.

\n", "group": "tag", - "examples": { "tag.c": ["ex/v1.8.4/tag.html#git_tag_create-18"] } + "examples": { "tag.c": ["ex/v1.9.1/tag.html#git_tag_create-18"] } }, "git_tag_annotation_create": { "type": "function", @@ -21684,7 +21886,7 @@ "comments": "

A new direct reference will be created pointing to this target object. If force is true and a reference already exists with the given name, it'll be replaced.

\n\n

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", "group": "tag", "examples": { - "tag.c": ["ex/v1.8.4/tag.html#git_tag_create_lightweight-19"] + "tag.c": ["ex/v1.9.1/tag.html#git_tag_create_lightweight-19"] } }, "git_tag_delete": { @@ -21713,7 +21915,7 @@ "description": "

Delete an existing tag reference.

\n", "comments": "

The tag name will be checked for validity. See git_tag_create() for rules about valid names.

\n", "group": "tag", - "examples": { "tag.c": ["ex/v1.8.4/tag.html#git_tag_delete-20"] } + "examples": { "tag.c": ["ex/v1.9.1/tag.html#git_tag_delete-20"] } }, "git_tag_list": { "type": "function", @@ -21767,13 +21969,13 @@ "description": "

Fill a list with all the tags in the Repository\n which name match a defined pattern

\n", "comments": "

If an empty pattern is provided, all the tags will be returned.

\n\n

The string array will be filled with the names of the matching tags; these values are owned by the user and should be free'd manually when no longer needed, using git_strarray_free.

\n", "group": "tag", - "examples": { "tag.c": ["ex/v1.8.4/tag.html#git_tag_list_match-21"] } + "examples": { "tag.c": ["ex/v1.9.1/tag.html#git_tag_list_match-21"] } }, "git_tag_foreach": { "type": "function", "file": "git2/tag.h", - "line": 339, - "lineto": 342, + "line": 340, + "lineto": 343, "args": [ { "name": "repo", "type": "git_repository *", "comment": "Repository" }, { @@ -21789,7 +21991,7 @@ ], "argline": "git_repository *repo, git_tag_foreach_cb callback, void *payload", "sig": "git_repository *::git_tag_foreach_cb::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 on success or an error code" }, "description": "

Call callback `cb' for each tag in the repository

\n", "comments": "", "group": "tag" @@ -21797,8 +21999,8 @@ "git_tag_peel": { "type": "function", "file": "git2/tag.h", - "line": 355, - "lineto": 357, + "line": 356, + "lineto": 358, "args": [ { "name": "tag_target_out", @@ -21821,8 +22023,8 @@ "git_tag_dup": { "type": "function", "file": "git2/tag.h", - "line": 367, - "lineto": 367, + "line": 368, + "lineto": 368, "args": [ { "name": "out", @@ -21845,8 +22047,8 @@ "git_tag_name_is_valid": { "type": "function", "file": "git2/tag.h", - "line": 379, - "lineto": 379, + "line": 380, + "lineto": 380, "args": [ { "name": "valid", @@ -21869,8 +22071,8 @@ "git_trace_set": { "type": "function", "file": "git2/trace.h", - "line": 63, - "lineto": 63, + "line": 68, + "lineto": 68, "args": [ { "name": "level", @@ -22148,13 +22350,13 @@ "comments": "", "group": "tree", "examples": { - "commit.c": ["ex/v1.8.4/commit.html#git_tree_lookup-12"], + "commit.c": ["ex/v1.9.1/commit.html#git_tree_lookup-13"], "general.c": [ - "ex/v1.8.4/general.html#git_tree_lookup-81", - "ex/v1.8.4/general.html#git_tree_lookup-82" + "ex/v1.9.1/general.html#git_tree_lookup-97", + "ex/v1.9.1/general.html#git_tree_lookup-98" ], - "init.c": ["ex/v1.8.4/init.html#git_tree_lookup-12"], - "merge.c": ["ex/v1.8.4/merge.html#git_tree_lookup-37"] + "init.c": ["ex/v1.9.1/init.html#git_tree_lookup-13"], + "merge.c": ["ex/v1.9.1/merge.html#git_tree_lookup-37"] } }, "git_tree_lookup_prefix": { @@ -22206,22 +22408,22 @@ "comments": "

You can no longer use the git_tree pointer after this call.

\n\n

IMPORTANT: You MUST call this method when you stop using a tree to release memory. Failure to do so will cause a memory leak.

\n", "group": "tree", "examples": { - "commit.c": ["ex/v1.8.4/commit.html#git_tree_free-13"], + "commit.c": ["ex/v1.9.1/commit.html#git_tree_free-14"], "diff.c": [ - "ex/v1.8.4/diff.html#git_tree_free-19", - "ex/v1.8.4/diff.html#git_tree_free-20" + "ex/v1.9.1/diff.html#git_tree_free-19", + "ex/v1.9.1/diff.html#git_tree_free-20" ], "general.c": [ - "ex/v1.8.4/general.html#git_tree_free-83", - "ex/v1.8.4/general.html#git_tree_free-84" + "ex/v1.9.1/general.html#git_tree_free-99", + "ex/v1.9.1/general.html#git_tree_free-100" ], - "init.c": ["ex/v1.8.4/init.html#git_tree_free-13"], + "init.c": ["ex/v1.9.1/init.html#git_tree_free-14"], "log.c": [ - "ex/v1.8.4/log.html#git_tree_free-55", - "ex/v1.8.4/log.html#git_tree_free-56", - "ex/v1.8.4/log.html#git_tree_free-57", - "ex/v1.8.4/log.html#git_tree_free-58", - "ex/v1.8.4/log.html#git_tree_free-59" + "ex/v1.9.1/log.html#git_tree_free-55", + "ex/v1.9.1/log.html#git_tree_free-56", + "ex/v1.9.1/log.html#git_tree_free-57", + "ex/v1.9.1/log.html#git_tree_free-58", + "ex/v1.9.1/log.html#git_tree_free-59" ] } }, @@ -22291,8 +22493,8 @@ "comments": "", "group": "tree", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entrycount-37"], - "general.c": ["ex/v1.8.4/general.html#git_tree_entrycount-85"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tree_entrycount-37"], + "general.c": ["ex/v1.9.1/general.html#git_tree_entrycount-101"] } }, "git_tree_entry_byname": { @@ -22322,7 +22524,7 @@ "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", "group": "tree", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_tree_entry_byname-86"] + "general.c": ["ex/v1.9.1/general.html#git_tree_entry_byname-102"] } }, "git_tree_entry_byindex": { @@ -22352,8 +22554,8 @@ "comments": "

This returns a git_tree_entry that is owned by the git_tree. You don't have to free it, but you must not use it after the git_tree is released.

\n", "group": "tree", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_byindex-38"], - "general.c": ["ex/v1.8.4/general.html#git_tree_entry_byindex-87"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tree_entry_byindex-38"], + "general.c": ["ex/v1.9.1/general.html#git_tree_entry_byindex-103"] } }, "git_tree_entry_byid": { @@ -22477,10 +22679,10 @@ "comments": "", "group": "tree", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_name-39"], + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tree_entry_name-39"], "general.c": [ - "ex/v1.8.4/general.html#git_tree_entry_name-88", - "ex/v1.8.4/general.html#git_tree_entry_name-89" + "ex/v1.9.1/general.html#git_tree_entry_name-104", + "ex/v1.9.1/general.html#git_tree_entry_name-105" ] } }, @@ -22506,7 +22708,7 @@ "comments": "", "group": "tree", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_id-40"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tree_entry_id-40"] } }, "git_tree_entry_type": { @@ -22531,7 +22733,7 @@ "comments": "", "group": "tree", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_type-41"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tree_entry_type-41"] } }, "git_tree_entry_filemode": { @@ -22556,7 +22758,7 @@ "comments": "", "group": "tree", "examples": { - "cat-file.c": ["ex/v1.8.4/cat-file.html#git_tree_entry_filemode-42"] + "cat-file.c": ["ex/v1.9.1/cat-file.html#git_tree_entry_filemode-42"] } }, "git_tree_entry_filemode_raw": { @@ -22637,7 +22839,7 @@ "comments": "

You must call git_object_free() on the object when you are done with it.

\n", "group": "tree", "examples": { - "general.c": ["ex/v1.8.4/general.html#git_tree_entry_to_object-90"] + "general.c": ["ex/v1.9.1/general.html#git_tree_entry_to_object-106"] } }, "git_treebuilder_new": { @@ -22828,8 +23030,8 @@ "git_treebuilder_filter": { "type": "function", "file": "git2/tree.h", - "line": 364, - "lineto": 367, + "line": 368, + "lineto": 371, "args": [ { "name": "bld", @@ -22860,8 +23062,8 @@ "git_treebuilder_write": { "type": "function", "file": "git2/tree.h", - "line": 379, - "lineto": 380, + "line": 383, + "lineto": 384, "args": [ { "name": "id", @@ -22884,8 +23086,8 @@ "git_tree_walk": { "type": "function", "file": "git2/tree.h", - "line": 409, - "lineto": 413, + "line": 420, + "lineto": 424, "args": [ { "name": "tree", @@ -22918,8 +23120,8 @@ "git_tree_dup": { "type": "function", "file": "git2/tree.h", - "line": 423, - "lineto": 423, + "line": 434, + "lineto": 434, "args": [ { "name": "out", @@ -22942,8 +23144,8 @@ "git_tree_create_updated": { "type": "function", "file": "git2/tree.h", - "line": 470, - "lineto": 470, + "line": 481, + "lineto": 481, "args": [ { "name": "out", "type": "git_oid *", "comment": "id of the new tree" }, { @@ -23095,8 +23297,8 @@ "git_worktree_add_options_init": { "type": "function", "file": "git2/worktree.h", - "line": 113, - "lineto": 114, + "line": 116, + "lineto": 117, "args": [ { "name": "opts", @@ -23122,8 +23324,8 @@ "git_worktree_add": { "type": "function", "file": "git2/worktree.h", - "line": 130, - "lineto": 132, + "line": 133, + "lineto": 135, "args": [ { "name": "out", @@ -23161,8 +23363,8 @@ "git_worktree_lock": { "type": "function", "file": "git2/worktree.h", - "line": 144, - "lineto": 144, + "line": 147, + "lineto": 147, "args": [ { "name": "wt", @@ -23188,8 +23390,8 @@ "git_worktree_unlock": { "type": "function", "file": "git2/worktree.h", - "line": 153, - "lineto": 153, + "line": 156, + "lineto": 156, "args": [ { "name": "wt", @@ -23210,8 +23412,8 @@ "git_worktree_is_locked": { "type": "function", "file": "git2/worktree.h", - "line": 167, - "lineto": 167, + "line": 170, + "lineto": 170, "args": [ { "name": "reason", @@ -23237,8 +23439,8 @@ "git_worktree_name": { "type": "function", "file": "git2/worktree.h", - "line": 176, - "lineto": 176, + "line": 179, + "lineto": 179, "args": [ { "name": "wt", @@ -23259,8 +23461,8 @@ "git_worktree_path": { "type": "function", "file": "git2/worktree.h", - "line": 185, - "lineto": 185, + "line": 188, + "lineto": 188, "args": [ { "name": "wt", @@ -23281,8 +23483,8 @@ "git_worktree_prune_options_init": { "type": "function", "file": "git2/worktree.h", - "line": 227, - "lineto": 229, + "line": 233, + "lineto": 235, "args": [ { "name": "opts", @@ -23308,8 +23510,8 @@ "git_worktree_is_prunable": { "type": "function", "file": "git2/worktree.h", - "line": 251, - "lineto": 252, + "line": 257, + "lineto": 258, "args": [ { "name": "wt", @@ -23335,8 +23537,8 @@ "git_worktree_prune": { "type": "function", "file": "git2/worktree.h", - "line": 266, - "lineto": 267, + "line": 272, + "lineto": 273, "args": [ { "name": "wt", @@ -23361,8 +23563,8 @@ "git_apply_delta_cb": { "type": "callback", "file": "git2/apply.h", - "line": 38, - "lineto": 40, + "line": 41, + "lineto": 43, "args": [ { "name": "delta", @@ -23387,8 +23589,8 @@ "git_apply_hunk_cb": { "type": "callback", "file": "git2/apply.h", - "line": 56, - "lineto": 58, + "line": 59, + "lineto": 61, "args": [ { "name": "hunk", @@ -23413,8 +23615,8 @@ "git_attr_foreach_cb": { "type": "callback", "file": "git2/attr.h", - "line": 289, - "lineto": 289, + "line": 304, + "lineto": 304, "args": [ { "name": "name", @@ -23480,67 +23682,107 @@ "git_checkout_notify_cb": { "type": "callback", "file": "git2/checkout.h", - "line": 255, - "lineto": 261, + "line": 275, + "lineto": 281, "args": [ - { "name": "why", "type": "git_checkout_notify_t", "comment": null }, - { "name": "path", "type": "const char *", "comment": null }, + { + "name": "why", + "type": "git_checkout_notify_t", + "comment": "the notification reason" + }, + { + "name": "path", + "type": "const char *", + "comment": "the path to the file being checked out" + }, { "name": "baseline", "type": "const git_diff_file *", - "comment": null + "comment": "the baseline's diff file information" }, - { "name": "target", "type": "const git_diff_file *", "comment": null }, - { "name": "workdir", "type": "const git_diff_file *", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "target", + "type": "const git_diff_file *", + "comment": "the checkout target diff file information" + }, + { + "name": "workdir", + "type": "const git_diff_file *", + "comment": "the working directory diff file information" + }, + { + "name": "payload", + "type": "void *", + "comment": "the user-supplied callback payload" + } ], "argline": "git_checkout_notify_t why, const char *path, const git_diff_file *baseline, const git_diff_file *target, const git_diff_file *workdir, void *payload", "sig": "git_checkout_notify_t::const char *::const git_diff_file *::const git_diff_file *::const git_diff_file *::void *", - "return": { "type": "int", "comment": null }, - "description": "

Checkout notification callback function

\n", + "return": { "type": "int", "comment": " 0 on success, or an error code" }, + "description": "

Checkout notification callback function.

\n", "comments": "" }, "git_checkout_progress_cb": { "type": "callback", "file": "git2/checkout.h", - "line": 264, - "lineto": 268, + "line": 291, + "lineto": 295, "args": [ - { "name": "path", "type": "const char *", "comment": null }, - { "name": "completed_steps", "type": "size_t", "comment": null }, - { "name": "total_steps", "type": "size_t", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "path", + "type": "const char *", + "comment": "the path to the file being checked out" + }, + { + "name": "completed_steps", + "type": "size_t", + "comment": "number of checkout steps completed" + }, + { + "name": "total_steps", + "type": "size_t", + "comment": "number of total steps in the checkout process" + }, + { + "name": "payload", + "type": "void *", + "comment": "the user-supplied callback payload" + } ], "argline": "const char *path, size_t completed_steps, size_t total_steps, void *payload", "sig": "const char *::size_t::size_t::void *", "return": { "type": "void", "comment": null }, - "description": "

Checkout progress notification function

\n", + "description": "

Checkout progress notification function.

\n", "comments": "" }, "git_checkout_perfdata_cb": { "type": "callback", "file": "git2/checkout.h", - "line": 271, - "lineto": 273, + "line": 303, + "lineto": 305, "args": [ { "name": "perfdata", "type": "const git_checkout_perfdata *", - "comment": null + "comment": "the performance data for the checkout" }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "payload", + "type": "void *", + "comment": "the user-supplied callback payload" + } ], "argline": "const git_checkout_perfdata *perfdata, void *payload", "sig": "const git_checkout_perfdata *::void *", "return": { "type": "void", "comment": null }, - "description": "

Checkout perfdata notification function

\n", + "description": "

Checkout performance data reporting function.

\n", "comments": "" }, "git_remote_create_cb": { "type": "callback", "file": "git2/clone.h", - "line": 69, - "lineto": 74, + "line": 73, + "lineto": 78, "args": [ { "name": "out", @@ -23576,8 +23818,8 @@ "git_repository_create_cb": { "type": "callback", "file": "git2/clone.h", - "line": 90, - "lineto": 94, + "line": 94, + "lineto": 98, "args": [ { "name": "out", @@ -23612,8 +23854,8 @@ "git_commit_create_cb": { "type": "callback", "file": "git2/commit.h", - "line": 576, - "lineto": 585, + "line": 643, + "lineto": 652, "args": [ { "name": "out", @@ -23673,8 +23915,8 @@ "git_config_foreach_cb": { "type": "callback", "file": "git2/config.h", - "line": 122, - "lineto": 122, + "line": 140, + "lineto": 140, "args": [ { "name": "entry", @@ -23693,14 +23935,14 @@ "type": "int", "comment": " non-zero to terminate the iteration." }, - "description": "

A config enumeration callback

\n", + "description": "

A config enumeration callback.

\n", "comments": "" }, "git_credential_acquire_cb": { "type": "callback", "file": "git2/credential.h", - "line": 131, - "lineto": 136, + "line": 134, + "lineto": 139, "args": [ { "name": "out", @@ -23737,11 +23979,98 @@ "description": "

Credential acquisition callback.

\n", "comments": "

This callback is usually involved any time another system might need authentication. As such, you are expected to provide a valid git_credential object back, depending on allowed_types (a git_credential_t bitmask).

\n\n

Note that most authentication details are your responsibility - this callback will be called until the authentication succeeds, or you report an error. As such, it's easy to get in a loop if you fail to stop providing the same incorrect credentials.

\n" }, + "git_credential_ssh_interactive_cb": { + "type": "callback", + "file": "git2/credential.h", + "line": 259, + "lineto": 265, + "args": [ + { "name": "name", "type": "const char *", "comment": "the name" }, + { + "name": "name_len", + "type": "int", + "comment": "the length of the name" + }, + { + "name": "instruction", + "type": "const char *", + "comment": "the authentication instruction" + }, + { + "name": "instruction_len", + "type": "int", + "comment": "the length of the instruction" + }, + { + "name": "num_prompts", + "type": "int", + "comment": "the number of prompts" + }, + { + "name": "prompts", + "type": "const LIBSSH2_USERAUTH_KBDINT_PROMPT *", + "comment": "the prompts" + }, + { + "name": "responses", + "type": "LIBSSH2_USERAUTH_KBDINT_RESPONSE *", + "comment": "the responses" + }, + { "name": "abstract", "type": "void **", "comment": "the abstract" } + ], + "argline": "const char *name, int name_len, const char *instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, void **abstract", + "sig": "const char *::int::const char *::int::int::const LIBSSH2_USERAUTH_KBDINT_PROMPT *::LIBSSH2_USERAUTH_KBDINT_RESPONSE *::void **", + "return": { "type": "void", "comment": null }, + "description": "

Callback for interactive SSH credentials.

\n", + "comments": "" + }, + "git_credential_sign_cb": { + "type": "callback", + "file": "git2/credential.h", + "line": 308, + "lineto": 312, + "args": [ + { + "name": "session", + "type": "LIBSSH2_SESSION *", + "comment": "the libssh2 session" + }, + { + "name": "sig", + "type": "unsigned char **", + "comment": "the signature" + }, + { + "name": "sig_len", + "type": "size_t *", + "comment": "the length of the signature" + }, + { + "name": "data", + "type": "const unsigned char *", + "comment": "the data" + }, + { + "name": "data_len", + "type": "size_t", + "comment": "the length of the data" + }, + { "name": "abstract", "type": "void **", "comment": "the abstract" } + ], + "argline": "LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, const unsigned char *data, size_t data_len, void **abstract", + "sig": "LIBSSH2_SESSION *::unsigned char **::size_t *::const unsigned char *::size_t::void **", + "return": { + "type": "int", + "comment": " 0 for success, \n<\n 0 to indicate an error, > 0 to indicate\n no credential was acquired" + }, + "description": "

Callback for credential signing.

\n", + "comments": "" + }, "git_commit_signing_cb": { "type": "callback", "file": "git2/deprecated.h", - "line": 276, - "lineto": 280, + "line": 285, + "lineto": 289, "args": [ { "name": "signature", "type": "git_buf *", "comment": null }, { "name": "signature_field", "type": "git_buf *", "comment": null }, @@ -23757,8 +24086,8 @@ "git_headlist_cb": { "type": "callback", "file": "git2/deprecated.h", - "line": 855, - "lineto": 855, + "line": 967, + "lineto": 967, "args": [ { "name": "rhead", "type": "git_remote_head *", "comment": null }, { "name": "payload", "type": "void *", "comment": null } @@ -23772,29 +24101,44 @@ "git_diff_notify_cb": { "type": "callback", "file": "git2/diff.h", - "line": 346, - "lineto": 350, + "line": 352, + "lineto": 356, "args": [ - { "name": "diff_so_far", "type": "const git_diff *", "comment": null }, + { + "name": "diff_so_far", + "type": "const git_diff *", + "comment": "the diff structure as it currently exists" + }, { "name": "delta_to_add", "type": "const git_diff_delta *", - "comment": null + "comment": "the delta that is to be added" }, - { "name": "matched_pathspec", "type": "const char *", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "matched_pathspec", + "type": "const char *", + "comment": "the pathspec" + }, + { + "name": "payload", + "type": "void *", + "comment": "the user-specified callback payload" + } ], "argline": "const git_diff *diff_so_far, const git_diff_delta *delta_to_add, const char *matched_pathspec, void *payload", "sig": "const git_diff *::const git_diff_delta *::const char *::void *", - "return": { "type": "int", "comment": null }, + "return": { + "type": "int", + "comment": " 0 on success, 1 to skip this delta, or an error code" + }, "description": "

Diff notification callback function.

\n", "comments": "

The callback will be called for each file, just before the git_diff_delta gets inserted into the diff.

\n\n

When the callback: - returns < 0, the diff process will be aborted. - returns > 0, the delta will not be inserted into the diff, but the diff process continues. - returns 0, the delta is inserted into the diff, and the diff process continues.

\n" }, "git_diff_progress_cb": { "type": "callback", "file": "git2/diff.h", - "line": 362, - "lineto": 366, + "line": 369, + "lineto": 373, "args": [ { "name": "diff_so_far", @@ -23811,19 +24155,23 @@ "type": "const char *", "comment": "The path to the new file or NULL." }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "payload", + "type": "void *", + "comment": "the user-specified callback payload" + } ], "argline": "const git_diff *diff_so_far, const char *old_path, const char *new_path, void *payload", "sig": "const git_diff *::const char *::const char *::void *", - "return": { "type": "int", "comment": " Non-zero to abort the diff." }, + "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

Diff progress callback.

\n", "comments": "

Called before each file comparison.

\n" }, "git_diff_file_cb": { "type": "callback", "file": "git2/diff.h", - "line": 496, - "lineto": 499, + "line": 504, + "lineto": 507, "args": [ { "name": "delta", @@ -23843,84 +24191,131 @@ ], "argline": "const git_diff_delta *delta, float progress, void *payload", "sig": "const git_diff_delta *::float::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

When iterating over a diff, callback that will be made per file.

\n", "comments": "" }, "git_diff_binary_cb": { "type": "callback", "file": "git2/diff.h", - "line": 562, - "lineto": 565, + "line": 576, + "lineto": 579, "args": [ - { "name": "delta", "type": "const git_diff_delta *", "comment": null }, + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": "the delta" + }, { "name": "binary", "type": "const git_diff_binary *", - "comment": null + "comment": "the binary content" }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "payload", + "type": "void *", + "comment": "the user-specified callback payload" + } ], "argline": "const git_diff_delta *delta, const git_diff_binary *binary, void *payload", "sig": "const git_diff_delta *::const git_diff_binary *::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

When iterating over a diff, callback that will be made for\n binary content within the diff.

\n", "comments": "" }, "git_diff_hunk_cb": { "type": "callback", "file": "git2/diff.h", - "line": 588, - "lineto": 591, + "line": 607, + "lineto": 610, "args": [ - { "name": "delta", "type": "const git_diff_delta *", "comment": null }, - { "name": "hunk", "type": "const git_diff_hunk *", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": "the delta" + }, + { + "name": "hunk", + "type": "const git_diff_hunk *", + "comment": "the hunk" + }, + { + "name": "payload", + "type": "void *", + "comment": "the user-specified callback payload" + } ], "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, void *payload", "sig": "const git_diff_delta *::const git_diff_hunk *::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

When iterating over a diff, callback that will be made per hunk.

\n", "comments": "" }, "git_diff_line_cb": { "type": "callback", "file": "git2/diff.h", - "line": 649, - "lineto": 653, + "line": 674, + "lineto": 678, "args": [ - { "name": "delta", "type": "const git_diff_delta *", "comment": null }, - { "name": "hunk", "type": "const git_diff_hunk *", "comment": null }, - { "name": "line", "type": "const git_diff_line *", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "delta", + "type": "const git_diff_delta *", + "comment": "the delta that contains the line" + }, + { + "name": "hunk", + "type": "const git_diff_hunk *", + "comment": "the hunk that contains the line" + }, + { + "name": "line", + "type": "const git_diff_line *", + "comment": "the line in the diff" + }, + { + "name": "payload", + "type": "void *", + "comment": "the user-specified callback payload" + } ], "argline": "const git_diff_delta *delta, const git_diff_hunk *hunk, const git_diff_line *line, void *payload", "sig": "const git_diff_delta *::const git_diff_hunk *::const git_diff_line *::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 or an error code" }, "description": "

When iterating over a diff, callback that will be made per text diff\n line. In this context, the provided range will be NULL.

\n", "comments": "

When printing a diff, callback that will be made to output each line of text. This uses some extra GIT_DIFF_LINE_... constants for output of lines of file and hunk headers.

\n" }, "git_index_matched_path_cb": { "type": "callback", "file": "git2/index.h", - "line": 135, - "lineto": 136, + "line": 158, + "lineto": 159, "args": [ - { "name": "path", "type": "const char *", "comment": null }, - { "name": "matched_pathspec", "type": "const char *", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { "name": "path", "type": "const char *", "comment": "the path" }, + { + "name": "matched_pathspec", + "type": "const char *", + "comment": "the given pathspec" + }, + { + "name": "payload", + "type": "void *", + "comment": "the user-specified payload" + } ], "argline": "const char *path, const char *matched_pathspec, void *payload", "sig": "const char *::const char *::void *", - "return": { "type": "int", "comment": null }, - "description": "

Callback for APIs that add/remove/update files matching pathspec

\n", + "return": { + "type": "int", + "comment": " 0 to continue with the index operation, positive number to skip this file for the index operation, negative number on failure" + }, + "description": "

Callback for APIs that add/remove/update files matching pathspec

\n", "comments": "" }, "git_indexer_progress_cb": { "type": "callback", "file": "git2/indexer.h", - "line": 57, - "lineto": 57, + "line": 68, + "lineto": 68, "args": [ { "name": "stats", @@ -23935,7 +24330,7 @@ ], "argline": "const git_indexer_progress *stats, void *payload", "sig": "const git_indexer_progress *::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 on success or an error code" }, "description": "

Type for progress callbacks during indexing. Return a value less\n than zero to cancel the indexing or download.

\n", "comments": "" }, @@ -23943,34 +24338,53 @@ "type": "callback", "file": "git2/notes.h", "line": 29, - "lineto": 30, + "lineto": 32, "args": [ - { "name": "blob_id", "type": "const git_oid *", "comment": null }, + { + "name": "blob_id", + "type": "const git_oid *", + "comment": "object id of the blob containing the message" + }, { "name": "annotated_object_id", "type": "const git_oid *", - "comment": null + "comment": "the id of the object being annotated" }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "payload", + "type": "void *", + "comment": "user-specified data to the foreach function" + } ], "argline": "const git_oid *blob_id, const git_oid *annotated_object_id, void *payload", "sig": "const git_oid *::const git_oid *::void *", - "return": { "type": "int", "comment": null }, + "return": { + "type": "int", + "comment": " 0 on success, or a negative number on failure" + }, "description": "

Callback for git_note_foreach.

\n", - "comments": "

Receives: - blob_id: Oid of the blob containing the message - annotated_object_id: Oid of the git object being annotated - payload: Payload data passed to git_note_foreach

\n" + "comments": "" }, "git_odb_foreach_cb": { "type": "callback", "file": "git2/odb.h", - "line": 39, - "lineto": 39, + "line": 43, + "lineto": 43, "args": [ - { "name": "id", "type": "const git_oid *", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "id", + "type": "const git_oid *", + "comment": "an id of an object in the object database" + }, + { + "name": "payload", + "type": "void *", + "comment": "the payload from the initial call to git_odb_foreach" + } ], "argline": "const git_oid *id, void *payload", "sig": "const git_oid *::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 on success, or an error code" }, "description": "

Function type for callbacks from git_odb_foreach.

\n", "comments": "" }, @@ -24008,25 +24422,41 @@ "git_packbuilder_progress": { "type": "callback", "file": "git2/pack.h", - "line": 237, - "lineto": 241, + "line": 245, + "lineto": 249, "args": [ - { "name": "stage", "type": "int", "comment": null }, - { "name": "current", "type": "uint32_t", "comment": null }, - { "name": "total", "type": "uint32_t", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "stage", + "type": "int", + "comment": "the stage of the packbuilder" + }, + { + "name": "current", + "type": "uint32_t", + "comment": "the current object" + }, + { + "name": "total", + "type": "uint32_t", + "comment": "the total number of objects" + }, + { + "name": "payload", + "type": "void *", + "comment": "the callback payload" + } ], "argline": "int stage, uint32_t current, uint32_t total, void *payload", "sig": "int::uint32_t::uint32_t::void *", - "return": { "type": "int", "comment": null }, - "description": "

Packbuilder progress notification function

\n", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Packbuilder progress notification function.

\n", "comments": "" }, "git_reference_foreach_cb": { "type": "callback", "file": "git2/refs.h", - "line": 437, - "lineto": 437, + "line": 439, + "lineto": 439, "args": [ { "name": "reference", @@ -24051,8 +24481,8 @@ "git_reference_foreach_name_cb": { "type": "callback", "file": "git2/refs.h", - "line": 448, - "lineto": 448, + "line": 450, + "lineto": 450, "args": [ { "name": "name", @@ -24077,25 +24507,44 @@ "git_push_transfer_progress_cb": { "type": "callback", "file": "git2/remote.h", - "line": 470, - "lineto": 474, + "line": 481, + "lineto": 485, "args": [ - { "name": "current", "type": "unsigned int", "comment": null }, - { "name": "total", "type": "unsigned int", "comment": null }, - { "name": "bytes", "type": "size_t", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "current", + "type": "unsigned int", + "comment": "The number of objects pushed so far" + }, + { + "name": "total", + "type": "unsigned int", + "comment": "The total number of objects to push" + }, + { + "name": "bytes", + "type": "size_t", + "comment": "The number of bytes pushed" + }, + { + "name": "payload", + "type": "void *", + "comment": "The user-specified payload callback" + } ], "argline": "unsigned int current, unsigned int total, size_t bytes, void *payload", "sig": "unsigned int::unsigned int::size_t::void *", - "return": { "type": "int", "comment": null }, - "description": "

Push network progress notification function

\n", + "return": { + "type": "int", + "comment": " 0 or an error code to stop the transfer" + }, + "description": "

Push network progress notification callback.

\n", "comments": "" }, "git_push_negotiation": { "type": "callback", "file": "git2/remote.h", - "line": 506, - "lineto": 506, + "line": 518, + "lineto": 521, "args": [ { "name": "updates", @@ -24115,15 +24564,18 @@ ], "argline": "const git_push_update **updates, size_t len, void *payload", "sig": "const git_push_update **::size_t::void *", - "return": { "type": "int", "comment": null }, + "return": { + "type": "int", + "comment": " 0 or an error code to stop the push" + }, "description": "

Callback used to inform of upcoming updates.

\n", "comments": "" }, "git_push_update_reference_cb": { "type": "callback", "file": "git2/remote.h", - "line": 520, - "lineto": 520, + "line": 535, + "lineto": 535, "args": [ { "name": "refname", @@ -24153,8 +24605,8 @@ "git_url_resolve_cb": { "type": "callback", "file": "git2/remote.h", - "line": 536, - "lineto": 536, + "line": 551, + "lineto": 551, "args": [ { "name": "url_resolved", @@ -24189,8 +24641,8 @@ "git_remote_ready_cb": { "type": "callback", "file": "git2/remote.h", - "line": 549, - "lineto": 549, + "line": 564, + "lineto": 564, "args": [ { "name": "remote", @@ -24217,8 +24669,8 @@ "git_repository_fetchhead_foreach_cb": { "type": "callback", "file": "git2/repository.h", - "line": 726, - "lineto": 730, + "line": 746, + "lineto": 750, "args": [ { "name": "ref_name", @@ -24258,8 +24710,8 @@ "git_repository_mergehead_foreach_cb": { "type": "callback", "file": "git2/repository.h", - "line": 757, - "lineto": 758, + "line": 777, + "lineto": 778, "args": [ { "name": "oid", @@ -24310,27 +24762,31 @@ "git_stash_apply_progress_cb": { "type": "callback", "file": "git2/stash.h", - "line": 169, - "lineto": 171, + "line": 181, + "lineto": 183, "args": [ { "name": "progress", "type": "git_stash_apply_progress_t", - "comment": null + "comment": "the progress information" }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "payload", + "type": "void *", + "comment": "the user-specified payload to the apply function" + } ], "argline": "git_stash_apply_progress_t progress, void *payload", "sig": "git_stash_apply_progress_t::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 on success, -1 on error" }, "description": "

Stash application progress notification function.\n Return 0 to continue processing, or a negative value to\n abort the stash application.

\n", "comments": "" }, "git_stash_cb": { "type": "callback", "file": "git2/stash.h", - "line": 255, - "lineto": 259, + "line": 268, + "lineto": 272, "args": [ { "name": "index", @@ -24365,24 +24821,39 @@ "git_status_cb": { "type": "callback", "file": "git2/status.h", - "line": 63, - "lineto": 64, + "line": 62, + "lineto": 63, "args": [ - { "name": "path", "type": "const char *", "comment": null }, - { "name": "status_flags", "type": "unsigned int", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "path", + "type": "const char *", + "comment": "is the path to the file" + }, + { + "name": "status_flags", + "type": "unsigned int", + "comment": "the `git_status_t` values for file's status" + }, + { + "name": "payload", + "type": "void *", + "comment": "the user-specified payload to the foreach function" + } ], "argline": "const char *path, unsigned int status_flags, void *payload", "sig": "const char *::unsigned int::void *", - "return": { "type": "int", "comment": null }, + "return": { + "type": "int", + "comment": " 0 on success, or a negative number on failure" + }, "description": "

Function pointer to receive status on individual files

\n", - "comments": "

path is the relative path to the file from the root of the repository.

\n\n

status_flags is a combination of git_status_t values that apply.

\n\n

payload is the value you passed to the foreach function as payload.

\n" + "comments": "" }, "git_submodule_cb": { "type": "callback", "file": "git2/submodule.h", - "line": 118, - "lineto": 119, + "line": 125, + "lineto": 126, "args": [ { "name": "sm", @@ -24432,11 +24903,19 @@ "git_trace_cb": { "type": "callback", "file": "git2/trace.h", - "line": 52, - "lineto": 52, + "line": 55, + "lineto": 57, "args": [ - { "name": "level", "type": "git_trace_level_t", "comment": null }, - { "name": "msg", "type": "const char *", "comment": null } + { + "name": "level", + "type": "git_trace_level_t", + "comment": "the trace level" + }, + { + "name": "msg", + "type": "const char *", + "comment": "the trace message" + } ], "argline": "git_trace_level_t level, const char *msg", "sig": "git_trace_level_t::const char *", @@ -24447,8 +24926,8 @@ "git_transport_message_cb": { "type": "callback", "file": "git2/transport.h", - "line": 34, - "lineto": 34, + "line": 35, + "lineto": 35, "args": [ { "name": "str", @@ -24468,55 +24947,93 @@ ], "argline": "const char *str, int len, void *payload", "sig": "const char *::int::void *", - "return": { "type": "int", "comment": null }, + "return": { "type": "int", "comment": " 0 on success or an error code" }, "description": "

Callback for messages received by the transport.

\n", "comments": "

Return a negative value to cancel the network operation.

\n" }, "git_transport_cb": { "type": "callback", "file": "git2/transport.h", - "line": 37, - "lineto": 37, + "line": 45, + "lineto": 45, "args": [ - { "name": "out", "type": "git_transport **", "comment": null }, - { "name": "owner", "type": "git_remote *", "comment": null }, - { "name": "param", "type": "void *", "comment": null } + { + "name": "out", + "type": "git_transport **", + "comment": "the transport generate" + }, + { + "name": "owner", + "type": "git_remote *", + "comment": "the owner for the transport" + }, + { + "name": "param", + "type": "void *", + "comment": "the param to the transport creation" + } ], "argline": "git_transport **out, git_remote *owner, void *param", "sig": "git_transport **::git_remote *::void *", - "return": { "type": "int", "comment": null }, - "description": "

Signature of a function which creates a transport

\n", + "return": { "type": "int", "comment": " 0 on success or an error code" }, + "description": "

Signature of a function which creates a transport.

\n", "comments": "" }, "git_treebuilder_filter_cb": { "type": "callback", "file": "git2/tree.h", - "line": 349, - "lineto": 350, + "line": 353, + "lineto": 354, "args": [ - { "name": "entry", "type": "const git_tree_entry *", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "the tree entry for the callback to examine" + }, + { + "name": "payload", + "type": "void *", + "comment": "the payload from the caller" + } ], "argline": "const git_tree_entry *entry, void *payload", "sig": "const git_tree_entry *::void *", - "return": { "type": "int", "comment": null }, + "return": { + "type": "int", + "comment": " 0 to do nothing, non-zero to remove the entry" + }, "description": "

Callback for git_treebuilder_filter

\n", "comments": "

The return value is treated as a boolean, with zero indicating that the entry should be left alone and any non-zero value meaning that the entry should be removed from the treebuilder list (i.e. filtered out).

\n" }, "git_treewalk_cb": { "type": "callback", "file": "git2/tree.h", - "line": 383, - "lineto": 384, + "line": 394, + "lineto": 395, "args": [ - { "name": "root", "type": "const char *", "comment": null }, - { "name": "entry", "type": "const git_tree_entry *", "comment": null }, - { "name": "payload", "type": "void *", "comment": null } + { + "name": "root", + "type": "const char *", + "comment": "the current (relative) root to the entry" + }, + { + "name": "entry", + "type": "const git_tree_entry *", + "comment": "the tree entry" + }, + { + "name": "payload", + "type": "void *", + "comment": "the caller-provided callback payload" + } ], "argline": "const char *root, const git_tree_entry *entry, void *payload", "sig": "const char *::const git_tree_entry *::void *", - "return": { "type": "int", "comment": null }, - "description": "

Callback for the tree traversal method

\n", + "return": { + "type": "int", + "comment": " a positive value to skip the entry, a negative value to stop the walk" + }, + "description": "

Callback for the tree traversal method.

\n", "comments": "" } }, @@ -24529,11 +25046,11 @@ "type": "struct", "value": "git_annotated_commit", "file": "git2/types.h", - "line": 198, - "lineto": 198, + "line": 214, + "lineto": 214, "tdef": "typedef", - "description": " Annotated commits, the input to merge and rebase. ", - "comments": "", + "description": " Annotated commits are commits with additional metadata about how the\n commit was resolved, which can be used for maintaining the user's\n \"intent\" through commands like merge and rebase.", + "comments": "

For example, if a user wants to conceptually "merge HEAD", then the commit portion of an annotated commit will point to the HEAD commit, but the annotation will denote the ref HEAD. This allows git to perform the internal bookkeeping so that the system knows both the content of what is being merged but also how the content was looked up so that it can be recorded in the reflog appropriately.

\n", "used": { "returns": [], "needs": [ @@ -24561,12 +25078,12 @@ "decl": ["GIT_APPLY_CHECK"], "type": "enum", "file": "git2/apply.h", - "line": 61, - "lineto": 67, + "line": 72, + "lineto": 78, "block": "GIT_APPLY_CHECK", "tdef": "typedef", - "description": " Flags controlling the behavior of git_apply ", - "comments": "", + "description": " Flags controlling the behavior of `git_apply`.", + "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the hunk will not be applied, but the apply process continues - returns 0, the hunk is applied, and the apply process continues.

\n", "fields": [ { "type": "int", @@ -24588,8 +25105,8 @@ ], "type": "enum", "file": "git2/apply.h", - "line": 127, - "lineto": 145, + "line": 148, + "lineto": 166, "block": "GIT_APPLY_LOCATION_WORKDIR\nGIT_APPLY_LOCATION_INDEX\nGIT_APPLY_LOCATION_BOTH", "tdef": "typedef", "description": " Possible application locations for git_apply ", @@ -24630,12 +25147,12 @@ "type": "struct", "value": "git_apply_options", "file": "git2/apply.h", - "line": 77, - "lineto": 91, + "line": 95, + "lineto": 109, "block": "unsigned int version\ngit_apply_delta_cb delta_cb\ngit_apply_hunk_cb hunk_cb\nvoid * payload\nunsigned int flags", "tdef": "typedef", - "description": " Apply options structure", - "comments": "

Initialize with GIT_APPLY_OPTIONS_INIT. Alternatively, you can use git_apply_options_init.

\n", + "description": " Apply options structure.", + "comments": "

When the callback: - returns < 0, the apply process will be aborted. - returns > 0, the hunk will not be applied, but the apply process continues - returns 0, the hunk is applied, and the apply process continues.

\n\n

Initialize with GIT_APPLY_OPTIONS_INIT. Alternatively, you can use git_apply_options_init.

\n", "fields": [ { "type": "unsigned int", @@ -24655,12 +25172,12 @@ { "type": "void *", "name": "payload", - "comments": " Payload passed to both delta_cb \n&\n hunk_cb. " + "comments": " Payload passed to both `delta_cb` \n&\n `hunk_cb`. " }, { "type": "unsigned int", "name": "flags", - "comments": " Bitmask of git_apply_flags_t " + "comments": " Bitmask of `git_apply_flags_t` " } ], "used": { @@ -24681,8 +25198,8 @@ "type": "struct", "value": "git_attr_options", "file": "git2/attr.h", - "line": 142, - "lineto": 159, + "line": 154, + "lineto": 171, "block": "unsigned int version\nunsigned int flags\ngit_oid * commit_id\ngit_oid attr_commit_id", "tdef": "typedef", "description": " An options structure for querying attributes.", @@ -24722,8 +25239,8 @@ ], "type": "enum", "file": "git2/attr.h", - "line": 82, - "lineto": 87, + "line": 86, + "lineto": 91, "block": "GIT_ATTR_VALUE_UNSPECIFIED\nGIT_ATTR_VALUE_TRUE\nGIT_ATTR_VALUE_FALSE\nGIT_ATTR_VALUE_STRING", "tdef": "typedef", "description": " Possible states for an attribute", @@ -24764,24 +25281,31 @@ "type": "struct", "value": "git_blame", "file": "git2/blame.h", - "line": 202, - "lineto": 202, + "line": 236, + "lineto": 236, "tdef": "typedef", "description": " Opaque structure to hold blame results ", "comments": "", "used": { "returns": [ "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline" + "git_blame_get_hunk_byline", + "git_blame_hunk_byindex", + "git_blame_hunk_byline", + "git_blame_line_byindex" ], "needs": [ "git_blame_buffer", - "git_blame_file", "git_blame_free", "git_blame_get_hunk_byindex", "git_blame_get_hunk_byline", "git_blame_get_hunk_count", + "git_blame_hunk_byindex", + "git_blame_hunk_byline", + "git_blame_hunkcount", "git_blame_init_options", + "git_blame_line_byindex", + "git_blame_linecount", "git_blame_options_init" ] } @@ -24802,8 +25326,8 @@ ], "type": "enum", "file": "git2/blame.h", - "line": 26, - "lineto": 77, + "line": 31, + "lineto": 82, "block": "GIT_BLAME_NORMAL\nGIT_BLAME_TRACK_COPIES_SAME_FILE\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES\nGIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES\nGIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES\nGIT_BLAME_FIRST_PARENT\nGIT_BLAME_USE_MAILMAP\nGIT_BLAME_IGNORE_WHITESPACE", "tdef": "typedef", "description": " Flags for indicating option behavior for git_blame APIs.", @@ -24862,82 +25386,23 @@ } ], [ - "git_blame_hunk", + "git_blame_line", { - "decl": [ - "size_t lines_in_hunk", - "git_oid final_commit_id", - "size_t final_start_line_number", - "git_signature * final_signature", - "git_oid orig_commit_id", - "const char * orig_path", - "size_t orig_start_line_number", - "git_signature * orig_signature", - "char boundary" - ], + "decl": ["const char * ptr", "size_t len"], "type": "struct", - "value": "git_blame_hunk", + "value": "git_blame_line", "file": "git2/blame.h", - "line": 145, - "lineto": 198, - "block": "size_t lines_in_hunk\ngit_oid final_commit_id\nsize_t final_start_line_number\ngit_signature * final_signature\ngit_oid orig_commit_id\nconst char * orig_path\nsize_t orig_start_line_number\ngit_signature * orig_signature\nchar boundary", + "line": 230, + "lineto": 233, + "block": "const char * ptr\nsize_t len", "tdef": "typedef", - "description": " Structure that represents a blame hunk.", + "description": " Structure that represents a line in a blamed file.", "comments": "", "fields": [ - { - "type": "size_t", - "name": "lines_in_hunk", - "comments": " The number of lines in this hunk." - }, - { - "type": "git_oid", - "name": "final_commit_id", - "comments": " The OID of the commit where this line was last changed." - }, - { - "type": "size_t", - "name": "final_start_line_number", - "comments": " The 1-based line number where this hunk begins, in the final version\n of the file." - }, - { - "type": "git_signature *", - "name": "final_signature", - "comments": " The author of `final_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." - }, - { - "type": "git_oid", - "name": "orig_commit_id", - "comments": " The OID of the commit where this hunk was found.\n This will usually be the same as `final_commit_id`, except when\n `GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES` has been specified." - }, - { - "type": "const char *", - "name": "orig_path", - "comments": " The path to the file where this hunk originated, as of the commit\n specified by `orig_commit_id`." - }, - { - "type": "size_t", - "name": "orig_start_line_number", - "comments": " The 1-based line number where this hunk begins in the file named by\n `orig_path` in the commit specified by `orig_commit_id`." - }, - { - "type": "git_signature *", - "name": "orig_signature", - "comments": " The author of `orig_commit_id`. If `GIT_BLAME_USE_MAILMAP` has been\n specified, it will contain the canonical real name and email address." - }, - { - "type": "char", - "name": "boundary", - "comments": " The 1 iff the hunk has been tracked to a boundary commit (the root,\n or the commit specified in git_blame_options.oldest_commit)" - } + { "type": "const char *", "name": "ptr", "comments": "" }, + { "type": "size_t", "name": "len", "comments": "" } ], - "used": { - "returns": [ - "git_blame_get_hunk_byindex", - "git_blame_get_hunk_byline" - ], - "needs": [] - } + "used": { "returns": ["git_blame_line_byindex"], "needs": [] } } ], [ @@ -24945,7 +25410,7 @@ { "decl": [ "unsigned int version", - "uint32_t flags", + "unsigned int flags", "uint16_t min_match_characters", "git_oid newest_commit", "git_oid oldest_commit", @@ -24955,16 +25420,16 @@ "type": "struct", "value": "git_blame_options", "file": "git2/blame.h", - "line": 86, - "lineto": 123, - "block": "unsigned int version\nuint32_t flags\nuint16_t min_match_characters\ngit_oid newest_commit\ngit_oid oldest_commit\nsize_t min_line\nsize_t max_line", + "line": 91, + "lineto": 128, + "block": "unsigned int version\nunsigned int flags\nuint16_t min_match_characters\ngit_oid newest_commit\ngit_oid oldest_commit\nsize_t min_line\nsize_t max_line", "tdef": "typedef", "description": " Blame options structure", "comments": "

Initialize with GIT_BLAME_OPTIONS_INIT. Alternatively, you can use git_blame_options_init.

\n", "fields": [ { "type": "unsigned int", "name": "version", "comments": "" }, { - "type": "uint32_t", + "type": "unsigned int", "name": "flags", "comments": " A combination of `git_blame_flag_t` " }, @@ -24996,11 +25461,7 @@ ], "used": { "returns": [], - "needs": [ - "git_blame_file", - "git_blame_init_options", - "git_blame_options_init" - ] + "needs": ["git_blame_init_options", "git_blame_options_init"] } } ], @@ -25011,8 +25472,8 @@ "type": "struct", "value": "git_blob", "file": "git2/types.h", - "line": 133, - "lineto": 133, + "line": 138, + "lineto": 138, "tdef": "typedef", "description": " In-memory representation of a blob object. ", "comments": "", @@ -25054,8 +25515,8 @@ ], "type": "enum", "file": "git2/blob.h", - "line": 102, - "lineto": 123, + "line": 111, + "lineto": 132, "block": "GIT_BLOB_FILTER_CHECK_FOR_BINARY\nGIT_BLOB_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_BLOB_FILTER_ATTRIBUTES_FROM_COMMIT", "tdef": "typedef", "description": " Flags to control the functionality of `git_blob_filter`.", @@ -25101,20 +25562,28 @@ "type": "struct", "value": "git_blob_filter_options", "file": "git2/blob.h", - "line": 132, - "lineto": 149, + "line": 144, + "lineto": 176, "block": "int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", "tdef": "typedef", "description": " The options used when applying filter options to a file.", - "comments": "

Initialize with GIT_BLOB_FILTER_OPTIONS_INIT. Alternatively, you can use git_blob_filter_options_init.

\n", + "comments": "

Initialize with GIT_BLOB_FILTER_OPTIONS_INIT. Alternatively, you can use git_blob_filter_options_init.

\n\n

[version] GIT_BLOB_FILTER_OPTIONS_VERSION [init_macro] GIT_BLOB_FILTER_OPTIONS_INIT [init_function] git_blob_filter_options_init

\n", "fields": [ - { "type": "int", "name": "version", "comments": "" }, + { + "type": "int", + "name": "version", + "comments": " Version number of the options structure. " + }, { "type": "uint32_t", "name": "flags", - "comments": " Flags to control the filtering process, see `git_blob_filter_flag_t` above " + "comments": " Flags to control the filtering process, see `git_blob_filter_flag_t` above.\n\n \n\n[flags] git_blob_filter_flag_t" + }, + { + "type": "git_oid *", + "name": "commit_id", + "comments": " This value is unused and reserved for API compatibility.\n\n " }, - { "type": "git_oid *", "name": "commit_id", "comments": "" }, { "type": "git_oid", "name": "attr_commit_id", @@ -25134,8 +25603,8 @@ "type": "struct", "value": "git_branch_iterator", "file": "git2/branch.h", - "line": 90, - "lineto": 90, + "line": 97, + "lineto": 97, "tdef": "typedef", "description": " Iterator type for branches ", "comments": "", @@ -25155,8 +25624,8 @@ "decl": ["GIT_BRANCH_LOCAL", "GIT_BRANCH_REMOTE", "GIT_BRANCH_ALL"], "type": "enum", "file": "git2/types.h", - "line": 215, - "lineto": 219, + "line": 231, + "lineto": 235, "block": "GIT_BRANCH_LOCAL\nGIT_BRANCH_REMOTE\nGIT_BRANCH_ALL", "tdef": "typedef", "description": " Basic type of any Git branch. ", @@ -25198,8 +25667,8 @@ "type": "struct", "value": "git_buf", "file": "git2/buffer.h", - "line": 33, - "lineto": 52, + "line": 36, + "lineto": 55, "block": "char * ptr\nsize_t reserved\nsize_t size", "tdef": "typedef", "description": " A data buffer for exporting data from libgit2", @@ -25253,14 +25722,12 @@ "git_diff_stats_to_buf", "git_diff_to_buf", "git_email_create_from_commit", - "git_email_create_from_diff", "git_filter_list_apply_to_blob", "git_filter_list_apply_to_buffer", "git_filter_list_apply_to_data", "git_filter_list_apply_to_file", "git_filter_list_stream_data", "git_message_prettify", - "git_note_default_ref", "git_object_short_id", "git_packbuilder_write_buf", "git_patch_to_buf", @@ -25285,8 +25752,8 @@ "type": "struct", "value": "git_cert", "file": "git2/types.h", - "line": 262, - "lineto": 262, + "line": 278, + "lineto": 278, "block": "git_cert_t cert_type", "tdef": "typedef", "description": " Parent type for `git_cert_hostkey` and `git_cert_x509`.", @@ -25510,8 +25977,8 @@ ], "type": "enum", "file": "git2/checkout.h", - "line": 214, - "lineto": 245, + "line": 224, + "lineto": 255, "block": "GIT_CHECKOUT_NOTIFY_NONE\nGIT_CHECKOUT_NOTIFY_CONFLICT\nGIT_CHECKOUT_NOTIFY_DIRTY\nGIT_CHECKOUT_NOTIFY_UPDATED\nGIT_CHECKOUT_NOTIFY_UNTRACKED\nGIT_CHECKOUT_NOTIFY_IGNORED\nGIT_CHECKOUT_NOTIFY_ALL", "tdef": "typedef", "description": " Checkout notification flags", @@ -25591,12 +26058,12 @@ "type": "struct", "value": "git_checkout_options", "file": "git2/checkout.h", - "line": 282, - "lineto": 345, + "line": 317, + "lineto": 391, "block": "unsigned int version\nunsigned int checkout_strategy\nint disable_filters\nunsigned int dir_mode\nunsigned int file_mode\nint file_open_flags\nunsigned int notify_flags\ngit_checkout_notify_cb notify_cb\nvoid * notify_payload\ngit_checkout_progress_cb progress_cb\nvoid * progress_payload\ngit_strarray paths\ngit_tree * baseline\ngit_index * baseline_index\nconst char * target_directory\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_checkout_perfdata_cb perfdata_cb\nvoid * perfdata_payload", "tdef": "typedef", "description": " Checkout options structure", - "comments": "

Initialize with GIT_CHECKOUT_OPTIONS_INIT. Alternatively, you can use git_checkout_options_init.

\n", + "comments": "

Initialize with GIT_CHECKOUT_OPTIONS_INIT. Alternatively, you can use git_checkout_options_init.

\n\n

[version] GIT_CHECKOUT_OPTIONS_VERSION [init_macro] GIT_CHECKOUT_OPTIONS_INIT [init_function] git_checkout_options_init

\n", "fields": [ { "type": "unsigned int", @@ -25631,7 +26098,7 @@ { "type": "unsigned int", "name": "notify_flags", - "comments": " see `git_checkout_notify_t` above " + "comments": " Checkout notification flags specify what operations the notify\n callback is invoked for.\n\n \n\n[flags] git_checkout_notify_t" }, { "type": "git_checkout_notify_cb", @@ -25724,8 +26191,8 @@ "type": "struct", "value": "git_checkout_perfdata", "file": "git2/checkout.h", - "line": 248, - "lineto": 252, + "line": 258, + "lineto": 262, "block": "size_t mkdir_calls\nsize_t stat_calls\nsize_t chmod_calls", "tdef": "typedef", "description": " Checkout performance-reporting structure ", @@ -25742,7 +26209,6 @@ "git_checkout_strategy_t", { "decl": [ - "GIT_CHECKOUT_NONE", "GIT_CHECKOUT_SAFE", "GIT_CHECKOUT_FORCE", "GIT_CHECKOUT_RECREATE_MISSING", @@ -25764,34 +26230,29 @@ "GIT_CHECKOUT_DONT_WRITE_INDEX", "GIT_CHECKOUT_DRY_RUN", "GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3", + "GIT_CHECKOUT_NONE", "GIT_CHECKOUT_UPDATE_SUBMODULES", "GIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED" ], "type": "enum", "file": "git2/checkout.h", - "line": 106, - "lineto": 198, - "block": "GIT_CHECKOUT_NONE\nGIT_CHECKOUT_SAFE\nGIT_CHECKOUT_FORCE\nGIT_CHECKOUT_RECREATE_MISSING\nGIT_CHECKOUT_ALLOW_CONFLICTS\nGIT_CHECKOUT_REMOVE_UNTRACKED\nGIT_CHECKOUT_REMOVE_IGNORED\nGIT_CHECKOUT_UPDATE_ONLY\nGIT_CHECKOUT_DONT_UPDATE_INDEX\nGIT_CHECKOUT_NO_REFRESH\nGIT_CHECKOUT_SKIP_UNMERGED\nGIT_CHECKOUT_USE_OURS\nGIT_CHECKOUT_USE_THEIRS\nGIT_CHECKOUT_DISABLE_PATHSPEC_MATCH\nGIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES\nGIT_CHECKOUT_DONT_OVERWRITE_IGNORED\nGIT_CHECKOUT_CONFLICT_STYLE_MERGE\nGIT_CHECKOUT_CONFLICT_STYLE_DIFF3\nGIT_CHECKOUT_DONT_REMOVE_EXISTING\nGIT_CHECKOUT_DONT_WRITE_INDEX\nGIT_CHECKOUT_DRY_RUN\nGIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3\nGIT_CHECKOUT_UPDATE_SUBMODULES\nGIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", + "line": 113, + "lineto": 206, + "block": "GIT_CHECKOUT_SAFE\nGIT_CHECKOUT_FORCE\nGIT_CHECKOUT_RECREATE_MISSING\nGIT_CHECKOUT_ALLOW_CONFLICTS\nGIT_CHECKOUT_REMOVE_UNTRACKED\nGIT_CHECKOUT_REMOVE_IGNORED\nGIT_CHECKOUT_UPDATE_ONLY\nGIT_CHECKOUT_DONT_UPDATE_INDEX\nGIT_CHECKOUT_NO_REFRESH\nGIT_CHECKOUT_SKIP_UNMERGED\nGIT_CHECKOUT_USE_OURS\nGIT_CHECKOUT_USE_THEIRS\nGIT_CHECKOUT_DISABLE_PATHSPEC_MATCH\nGIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES\nGIT_CHECKOUT_DONT_OVERWRITE_IGNORED\nGIT_CHECKOUT_CONFLICT_STYLE_MERGE\nGIT_CHECKOUT_CONFLICT_STYLE_DIFF3\nGIT_CHECKOUT_DONT_REMOVE_EXISTING\nGIT_CHECKOUT_DONT_WRITE_INDEX\nGIT_CHECKOUT_DRY_RUN\nGIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3\nGIT_CHECKOUT_NONE\nGIT_CHECKOUT_UPDATE_SUBMODULES\nGIT_CHECKOUT_UPDATE_SUBMODULES_IF_CHANGED", "tdef": "typedef", "description": " Checkout behavior flags", - "comments": "

In libgit2, checkout is used to update the working directory and index to match a target tree. Unlike git checkout, it does not move the HEAD commit for you - use git_repository_set_head or the like to do that.

\n\n

Checkout looks at (up to) four things: the "target" tree you want to check out, the "baseline" tree of what was checked out previously, the working directory for actual files, and the index for staged changes.

\n\n

You give checkout one of three strategies for update:

\n\n
    \n
  • GIT_CHECKOUT_NONE is a dry-run strategy that checks for conflicts, etc., but doesn't make any actual changes.

  • \n
  • GIT_CHECKOUT_FORCE is at the opposite extreme, taking any action to make the working directory match the target (including potentially discarding modified files).

  • \n
  • GIT_CHECKOUT_SAFE is between these two options, it will only make modifications that will not lose changes.

    \n\n
                     |  target == baseline   |  target != baseline  |    ---------------------|-----------------------|----------------------|     workdir == baseline |       no action       |  create, update, or  |                         |                       |     delete file      |    ---------------------|-----------------------|----------------------|     workdir exists and  |       no action       |   conflict (notify   |       is != baseline    | notify dirty MODIFIED | and cancel checkout) |    ---------------------|-----------------------|----------------------|      workdir missing,   | notify dirty DELETED  |     create file      |      baseline present   |                       |                      |    ---------------------|-----------------------|----------------------|\n
  • \n
\n\n

To emulate git checkout, use GIT_CHECKOUT_SAFE with a checkout notification callback (see below) that displays information about dirty files. The default behavior will cancel checkout on conflicts.

\n\n

To emulate git checkout-index, use GIT_CHECKOUT_SAFE with a notification callback that cancels the operation if a dirty-but-existing file is found in the working directory. This core git command isn't quite "force" but is sensitive about some types of changes.

\n\n

To emulate git checkout -f, use GIT_CHECKOUT_FORCE.

\n\n

There are some additional flags to modify the behavior of checkout:

\n\n
    \n
  • GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates even if there are conflicts (instead of cancelling the checkout).

  • \n
  • GIT_CHECKOUT_REMOVE_UNTRACKED means remove untracked files (i.e. not in target, baseline, or index, and not ignored) from the working dir.

  • \n
  • GIT_CHECKOUT_REMOVE_IGNORED means remove ignored files (that are also untracked) from the working directory as well.

  • \n
  • GIT_CHECKOUT_UPDATE_ONLY means to only update the content of files that already exist. Files will not be created nor deleted. This just skips applying adds, deletes, and typechanges.

  • \n
  • GIT_CHECKOUT_DONT_UPDATE_INDEX prevents checkout from writing the updated files' information to the index.

  • \n
  • Normally, checkout will reload the index and git attributes from disk before any operations. GIT_CHECKOUT_NO_REFRESH prevents this reload.

  • \n
  • Unmerged index entries are conflicts. GIT_CHECKOUT_SKIP_UNMERGED skips files with unmerged index entries instead. GIT_CHECKOUT_USE_OURS and GIT_CHECKOUT_USE_THEIRS to proceed with the checkout using either the stage 2 ("ours") or stage 3 ("theirs") version of files in the index.

  • \n
  • GIT_CHECKOUT_DONT_OVERWRITE_IGNORED prevents ignored files from being overwritten. Normally, files that are ignored in the working directory are not considered "precious" and may be overwritten if the checkout target contains that file.

  • \n
  • GIT_CHECKOUT_DONT_REMOVE_EXISTING prevents checkout from removing files or folders that fold to the same name on case insensitive filesystems. This can cause files to retain their existing names and write through existing symbolic links.

  • \n
\n", + "comments": "

In libgit2, checkout is used to update the working directory and index to match a target tree. Unlike git checkout, it does not move the HEAD commit for you - use git_repository_set_head or the like to do that.

\n\n

Checkout looks at (up to) four things: the "target" tree you want to check out, the "baseline" tree of what was checked out previously, the working directory for actual files, and the index for staged changes.

\n\n

You give checkout one of two strategies for update:

\n\n
    \n
  • GIT_CHECKOUT_SAFE is the default, and similar to git's default, which will make modifications that will not lose changes in the working directory.

    \n\n
                     |  target == baseline   |  target != baseline  |    ---------------------|-----------------------|----------------------|     workdir == baseline |       no action       |  create, update, or  |                         |                       |     delete file      |    ---------------------|-----------------------|----------------------|     workdir exists and  |       no action       |   conflict (notify   |       is != baseline    | notify dirty MODIFIED | and cancel checkout) |    ---------------------|-----------------------|----------------------|      workdir missing,   | notify dirty DELETED  |     create file      |      baseline present   |                       |                      |    ---------------------|-----------------------|----------------------|\n
  • \n
  • GIT_CHECKOUT_FORCE will take any action to make the working directory match the target (including potentially discarding modified files).

  • \n
\n\n

To emulate git checkout, use GIT_CHECKOUT_SAFE with a checkout notification callback (see below) that displays information about dirty files. The default behavior will cancel checkout on conflicts.

\n\n

To emulate git checkout-index, use GIT_CHECKOUT_SAFE with a notification callback that cancels the operation if a dirty-but-existing file is found in the working directory. This core git command isn't quite "force" but is sensitive about some types of changes.

\n\n

To emulate git checkout -f, use GIT_CHECKOUT_FORCE.

\n\n

There are some additional flags to modify the behavior of checkout:

\n\n
    \n
  • GIT_CHECKOUT_DRY_RUN is a dry-run strategy that checks for conflicts, etc., but doesn't make any actual changes.

  • \n
  • GIT_CHECKOUT_ALLOW_CONFLICTS makes SAFE mode apply safe file updates even if there are conflicts (instead of cancelling the checkout).

  • \n
  • GIT_CHECKOUT_REMOVE_UNTRACKED means remove untracked files (i.e. not in target, baseline, or index, and not ignored) from the working dir.

  • \n
  • GIT_CHECKOUT_REMOVE_IGNORED means remove ignored files (that are also untracked) from the working directory as well.

  • \n
  • GIT_CHECKOUT_UPDATE_ONLY means to only update the content of files that already exist. Files will not be created nor deleted. This just skips applying adds, deletes, and typechanges.

  • \n
  • GIT_CHECKOUT_DONT_UPDATE_INDEX prevents checkout from writing the updated files' information to the index.

  • \n
  • Normally, checkout will reload the index and git attributes from disk before any operations. GIT_CHECKOUT_NO_REFRESH prevents this reload.

  • \n
  • Unmerged index entries are conflicts. GIT_CHECKOUT_SKIP_UNMERGED skips files with unmerged index entries instead. GIT_CHECKOUT_USE_OURS and GIT_CHECKOUT_USE_THEIRS to proceed with the checkout using either the stage 2 ("ours") or stage 3 ("theirs") version of files in the index.

  • \n
  • GIT_CHECKOUT_DONT_OVERWRITE_IGNORED prevents ignored files from being overwritten. Normally, files that are ignored in the working directory are not considered "precious" and may be overwritten if the checkout target contains that file.

  • \n
  • GIT_CHECKOUT_DONT_REMOVE_EXISTING prevents checkout from removing files or folders that fold to the same name on case insensitive filesystems. This can cause files to retain their existing names and write through existing symbolic links.

  • \n
\n", "fields": [ - { - "type": "int", - "name": "GIT_CHECKOUT_NONE", - "comments": "

default is a dry run, no actual updates

\n", - "value": 0 - }, { "type": "int", "name": "GIT_CHECKOUT_SAFE", - "comments": "

Allow safe updates that cannot overwrite uncommitted data.\n If the uncommitted changes don't conflict with the checked out files,\n the checkout will still proceed, leaving the changes intact.

\n\n

Mutually exclusive with GIT_CHECKOUT_FORCE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", - "value": 1 + "comments": "

Allow safe updates that cannot overwrite uncommitted data.\n If the uncommitted changes don't conflict with the checked\n out files, the checkout will still proceed, leaving the\n changes intact.

\n", + "value": 0 }, { "type": "int", "name": "GIT_CHECKOUT_FORCE", - "comments": "

Allow all updates to force working directory to look like index.

\n\n

Mutually exclusive with GIT_CHECKOUT_SAFE.\n GIT_CHECKOUT_FORCE takes precedence over GIT_CHECKOUT_SAFE.

\n", + "comments": "

Allow all updates to force working directory to look like\n the index, potentially losing data in the process.

\n", "value": 2 }, { @@ -25899,7 +26360,7 @@ { "type": "int", "name": "GIT_CHECKOUT_DRY_RUN", - "comments": "

Show what would be done by a checkout. Stop after sending\n notifications; don't update the working directory or index.

\n", + "comments": "

Perform a "dry run", reporting what would be done but\n without actually making changes in the working directory\n or the index.

\n", "value": 16777216 }, { @@ -25908,6 +26369,12 @@ "comments": "

Include common ancestor data in zdiff3 format for conflicts

\n", "value": 33554432 }, + { + "type": "int", + "name": "GIT_CHECKOUT_NONE", + "comments": "

Do not do a checkout and do not fire callbacks; this is primarily\n useful only for internal functions that will perform the\n checkout themselves but need to pass checkout options into\n another function, for example, git_clone.

\n", + "value": 1073741824 + }, { "type": "int", "name": "GIT_CHECKOUT_UPDATE_SUBMODULES", @@ -25936,8 +26403,8 @@ "type": "struct", "value": "git_cherrypick_options", "file": "git2/cherrypick.h", - "line": 26, - "lineto": 34, + "line": 29, + "lineto": 37, "block": "unsigned int version\nunsigned int mainline\ngit_merge_options merge_opts\ngit_checkout_options checkout_opts", "tdef": "typedef", "description": " Cherry-pick options", @@ -25977,8 +26444,8 @@ ], "type": "enum", "file": "git2/clone.h", - "line": 33, - "lineto": 53, + "line": 37, + "lineto": 57, "block": "GIT_CLONE_LOCAL_AUTO\nGIT_CLONE_LOCAL\nGIT_CLONE_NO_LOCAL\nGIT_CLONE_LOCAL_NO_LINKS", "tdef": "typedef", "description": " Options for bypassing the git-aware transport on clone. Bypassing\n it means that instead of a fetch, libgit2 will copy the object\n database directory instead of figuring out what it needs, which is\n faster. If possible, it will hardlink the files to save space.", @@ -26030,18 +26497,18 @@ "type": "struct", "value": "git_clone_options", "file": "git2/clone.h", - "line": 103, - "lineto": 164, + "line": 110, + "lineto": 171, "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint bare\ngit_clone_local_t local\nconst char * checkout_branch\ngit_repository_create_cb repository_cb\nvoid * repository_cb_payload\ngit_remote_create_cb remote_cb\nvoid * remote_cb_payload", "tdef": "typedef", "description": " Clone options structure", - "comments": "

Initialize with GIT_CLONE_OPTIONS_INIT. Alternatively, you can use git_clone_options_init.

\n", + "comments": "

Initialize with GIT_CLONE_OPTIONS_INIT. Alternatively, you can use git_clone_options_init.

\n\n

[version] GIT_CLONE_OPTIONS_VERSION [init_macro] GIT_CLONE_OPTIONS_INIT [init_function] git_clone_options_init

\n", "fields": [ { "type": "unsigned int", "name": "version", "comments": "" }, { "type": "git_checkout_options", "name": "checkout_opts", - "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`." + "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE`\n or `GIT_CHECKOUT_DRY_RUN`." }, { "type": "git_fetch_options", @@ -26097,8 +26564,8 @@ "type": "struct", "value": "git_commit", "file": "git2/types.h", - "line": 136, - "lineto": 136, + "line": 141, + "lineto": 141, "tdef": "typedef", "description": " Parsed representation of a commit object. ", "comments": "", @@ -26142,10 +26609,6 @@ "git_diff_commit_as_email", "git_email_create_from_commit", "git_merge_commits", - "git_note_commit_create", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_commit_remove", "git_odb_set_commit_graph", "git_repository_commit_parents", "git_revert", @@ -26161,8 +26624,8 @@ "type": "struct", "value": "git_commit_graph", "file": "git2/types.h", - "line": 109, - "lineto": 109, + "line": 114, + "lineto": 114, "tdef": "typedef", "description": " A git commit-graph ", "comments": "", @@ -26175,8 +26638,8 @@ "decl": ["GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE"], "type": "enum", "file": "git2/sys/commit_graph.h", - "line": 102, - "lineto": 108, + "line": 93, + "lineto": 99, "block": "GIT_COMMIT_GRAPH_SPLIT_STRATEGY_SINGLE_FILE", "tdef": "typedef", "description": " The strategy to use when adding a new set of commits to a pre-existing\n commit-graph chain.", @@ -26199,8 +26662,8 @@ "type": "struct", "value": "git_commit_graph_writer", "file": "git2/types.h", - "line": 112, - "lineto": 112, + "line": 117, + "lineto": 117, "tdef": "typedef", "description": " a writer for commit-graph files. ", "comments": "", @@ -26214,8 +26677,8 @@ "type": "struct", "value": "git_commitarray", "file": "git2/commit.h", - "line": 588, - "lineto": 591, + "line": 655, + "lineto": 658, "block": "git_commit *const * commits\nsize_t count", "tdef": "typedef", "description": " An array of commits returned from the library ", @@ -26237,8 +26700,8 @@ "type": "struct", "value": "git_config", "file": "git2/types.h", - "line": 157, - "lineto": 157, + "line": 162, + "lineto": 162, "tdef": "typedef", "description": " Memory representation of a set of config files ", "comments": "", @@ -26280,6 +26743,7 @@ "git_config_set_int64", "git_config_set_multivar", "git_config_set_string", + "git_config_set_writeorder", "git_config_snapshot", "git_repository_config", "git_repository_config_snapshot" @@ -26294,8 +26758,8 @@ "type": "struct", "value": "git_config_backend", "file": "git2/types.h", - "line": 160, - "lineto": 160, + "line": 165, + "lineto": 165, "tdef": "typedef", "description": " Interface to access a configuration file ", "comments": "", @@ -26313,8 +26777,8 @@ "type": "struct", "value": "git_config_backend_memory_options", "file": "git2/sys/config.h", - "line": 129, - "lineto": 143, + "line": 148, + "lineto": 162, "block": "unsigned int version\nconst char * backend_type\nconst char * origin_path", "tdef": "typedef", "description": " Options for in-memory configuration backends. ", @@ -26344,15 +26808,14 @@ "const char * backend_type", "const char * origin_path", "unsigned int include_depth", - "git_config_level_t level", - "void (*)(struct git_config_entry *) free" + "git_config_level_t level" ], "type": "struct", "value": "git_config_entry", "file": "git2/config.h", - "line": 79, - "lineto": 106, - "block": "const char * name\nconst char * value\nconst char * backend_type\nconst char * origin_path\nunsigned int include_depth\ngit_config_level_t level\nvoid (*)(struct git_config_entry *) free", + "line": 103, + "lineto": 124, + "block": "const char * name\nconst char * value\nconst char * backend_type\nconst char * origin_path\nunsigned int include_depth\ngit_config_level_t level", "tdef": "typedef", "description": " An entry in a configuration file", "comments": "", @@ -26360,17 +26823,17 @@ { "type": "const char *", "name": "name", - "comments": " Name of the configuration entry (normalized) " + "comments": " Name of the configuration entry (normalized). " }, { "type": "const char *", "name": "value", - "comments": " Literal (string) value of the entry " + "comments": " Literal (string) value of the entry. " }, { "type": "const char *", "name": "backend_type", - "comments": " The type of backend that this entry exists in (eg, \"file\") " + "comments": " The type of backend that this entry exists in (eg, \"file\"). " }, { "type": "const char *", @@ -26380,17 +26843,12 @@ { "type": "unsigned int", "name": "include_depth", - "comments": " Depth of includes where this variable was found " + "comments": " Depth of includes where this variable was found. " }, { "type": "git_config_level_t", "name": "level", - "comments": " Configuration level for the file this was found in " - }, - { - "type": "void (*)(struct git_config_entry *)", - "name": "free", - "comments": "" + "comments": " Configuration level for the file this was found in. " } ], "used": { @@ -26411,10 +26869,10 @@ "type": "struct", "value": "git_config_iterator", "file": "git2/config.h", - "line": 127, - "lineto": 127, + "line": 145, + "lineto": 145, "tdef": "typedef", - "description": " An opaque structure for a configuration iterator", + "description": " An opaque structure for a configuration iterator.", "comments": "", "used": { "returns": [], @@ -26443,8 +26901,8 @@ ], "type": "enum", "file": "git2/config.h", - "line": 42, - "lineto": 74, + "line": 49, + "lineto": 98, "block": "GIT_CONFIG_LEVEL_PROGRAMDATA\nGIT_CONFIG_LEVEL_SYSTEM\nGIT_CONFIG_LEVEL_XDG\nGIT_CONFIG_LEVEL_GLOBAL\nGIT_CONFIG_LEVEL_LOCAL\nGIT_CONFIG_LEVEL_WORKTREE\nGIT_CONFIG_LEVEL_APP\nGIT_CONFIG_HIGHEST_LEVEL", "tdef": "typedef", "description": " Priority level of a config file.", @@ -26453,55 +26911,59 @@ { "type": "int", "name": "GIT_CONFIG_LEVEL_PROGRAMDATA", - "comments": "

System-wide on Windows, for compatibility with portable git

\n", + "comments": "

System-wide on Windows, for compatibility with "Portable Git".

\n", "value": 1 }, { "type": "int", "name": "GIT_CONFIG_LEVEL_SYSTEM", - "comments": "

System-wide configuration file; /etc/gitconfig on Linux systems

\n", + "comments": "

System-wide configuration file; /etc/gitconfig on Linux.

\n", "value": 2 }, { "type": "int", "name": "GIT_CONFIG_LEVEL_XDG", - "comments": "

XDG compatible configuration file; typically ~/.config/git/config

\n", + "comments": "

XDG compatible configuration file; typically\n ~/.config/git/config.

\n", "value": 3 }, { "type": "int", "name": "GIT_CONFIG_LEVEL_GLOBAL", - "comments": "

User-specific configuration file (also called Global configuration\n file); typically ~/.gitconfig

\n", + "comments": "

Global configuration file is the user-specific configuration;\n typically ~/.gitconfig.

\n", "value": 4 }, { "type": "int", "name": "GIT_CONFIG_LEVEL_LOCAL", - "comments": "

Repository specific configuration file; $WORK_DIR/.git/config on\n non-bare repos

\n", + "comments": "

Local configuration, the repository-specific configuration file;\n typically $GIT_DIR/config.

\n", "value": 5 }, { "type": "int", "name": "GIT_CONFIG_LEVEL_WORKTREE", - "comments": "

Worktree specific configuration file; $GIT_DIR/config.worktree

\n", + "comments": "

Worktree-specific configuration; typically\n $GIT_DIR/config.worktree.

\n", "value": 6 }, { "type": "int", "name": "GIT_CONFIG_LEVEL_APP", - "comments": "

Application specific configuration file; freely defined by applications

\n", + "comments": "

Application-specific configuration file. Callers into libgit2\n can add their own configuration beginning at this level.

\n", "value": 7 }, { "type": "int", "name": "GIT_CONFIG_HIGHEST_LEVEL", - "comments": "

Represents the highest level available config file (i.e. the most\n specific config file available that actually is loaded)

\n", + "comments": "

Not a configuration level; callers can use this value when\n querying configuration levels to specify that they want to\n have data from the highest-level currently configuration.\n This can be used to indicate that callers want the most\n specific config file available that actually is loaded.

\n", "value": -1 } ], "used": { "returns": [], - "needs": ["git_config_add_file_ondisk", "git_config_open_level"] + "needs": [ + "git_config_add_file_ondisk", + "git_config_open_level", + "git_config_set_writeorder" + ] } } ], @@ -26516,8 +26978,8 @@ "type": "struct", "value": "git_configmap", "file": "git2/config.h", - "line": 142, - "lineto": 146, + "line": 160, + "lineto": 164, "block": "git_configmap_t type\nconst char * str_match\nint map_value", "tdef": "typedef", "description": " Mapping from config variables to values.", @@ -26544,8 +27006,8 @@ ], "type": "enum", "file": "git2/config.h", - "line": 132, - "lineto": 137, + "line": 150, + "lineto": 155, "block": "GIT_CONFIGMAP_FALSE\nGIT_CONFIGMAP_TRUE\nGIT_CONFIGMAP_INT32\nGIT_CONFIGMAP_STRING", "tdef": "typedef", "description": " Config var type", @@ -26586,8 +27048,8 @@ "type": "struct", "value": "git_credential", "file": "git2/credential.h", - "line": 84, - "lineto": 84, + "line": 87, + "lineto": 87, "tdef": "typedef", "description": " The base structure for all credential types", "comments": "", @@ -26618,8 +27080,8 @@ "type": "struct", "value": "git_credential_default", "file": "git2/credential.h", - "line": 92, - "lineto": 92, + "line": 95, + "lineto": 95, "tdef": "typedef", "description": " A key for NTLM/Kerberos \"default\" credentials ", "comments": "", @@ -26633,8 +27095,8 @@ "type": "struct", "value": "git_credential_ssh_custom", "file": "git2/credential.h", - "line": 107, - "lineto": 107, + "line": 110, + "lineto": 110, "tdef": "typedef", "description": " A key with a custom signature function", "comments": "", @@ -26648,8 +27110,8 @@ "type": "struct", "value": "git_credential_ssh_interactive", "file": "git2/credential.h", - "line": 102, - "lineto": 102, + "line": 105, + "lineto": 105, "tdef": "typedef", "description": " Keyboard-interactive based ssh authentication", "comments": "", @@ -26666,8 +27128,8 @@ "type": "struct", "value": "git_credential_ssh_key", "file": "git2/credential.h", - "line": 97, - "lineto": 97, + "line": 100, + "lineto": 100, "tdef": "typedef", "description": " A ssh key from disk", "comments": "", @@ -26688,8 +27150,8 @@ ], "type": "enum", "file": "git2/credential.h", - "line": 27, - "lineto": 79, + "line": 30, + "lineto": 82, "block": "GIT_CREDENTIAL_USERPASS_PLAINTEXT\nGIT_CREDENTIAL_SSH_KEY\nGIT_CREDENTIAL_SSH_CUSTOM\nGIT_CREDENTIAL_DEFAULT\nGIT_CREDENTIAL_SSH_INTERACTIVE\nGIT_CREDENTIAL_USERNAME\nGIT_CREDENTIAL_SSH_MEMORY", "tdef": "typedef", "description": " Supported credential types", @@ -26748,8 +27210,8 @@ "type": "struct", "value": "git_credential_username", "file": "git2/credential.h", - "line": 89, - "lineto": 89, + "line": 92, + "lineto": 92, "tdef": "typedef", "description": " Username-only credential information ", "comments": "", @@ -26886,8 +27348,8 @@ "type": "struct", "value": "git_describe_format_options", "file": "git2/describe.h", - "line": 91, - "lineto": 111, + "line": 100, + "lineto": 120, "block": "unsigned int version\nunsigned int abbreviated_size\nint always_use_long_format\nconst char * dirty_suffix", "tdef": "typedef", "description": " Describe format options structure", @@ -26930,8 +27392,8 @@ "type": "struct", "value": "git_describe_options", "file": "git2/describe.h", - "line": 43, - "lineto": 61, + "line": 47, + "lineto": 65, "block": "unsigned int version\nunsigned int max_candidates_tags\nunsigned int describe_strategy\nconst char * pattern\nint only_follow_first_parent\nint show_commit_oid_as_fallback", "tdef": "typedef", "description": " Describe options structure", @@ -26977,8 +27439,8 @@ "type": "struct", "value": "git_describe_result", "file": "git2/describe.h", - "line": 134, - "lineto": 134, + "line": 146, + "lineto": 146, "tdef": "typedef", "description": " A struct that stores the result of a describe operation.", "comments": "", @@ -27003,8 +27465,8 @@ ], "type": "enum", "file": "git2/describe.h", - "line": 30, - "lineto": 34, + "line": 34, + "lineto": 38, "block": "GIT_DESCRIBE_DEFAULT\nGIT_DESCRIBE_TAGS\nGIT_DESCRIBE_ALL", "tdef": "typedef", "description": " Reference lookup strategy", @@ -27095,7 +27557,6 @@ "git_diff_tree_to_tree", "git_diff_tree_to_workdir", "git_diff_tree_to_workdir_with_index", - "git_email_create_from_diff", "git_patch_from_blob_and_buffer", "git_patch_from_blobs", "git_patch_from_buffers", @@ -27119,8 +27580,8 @@ "type": "struct", "value": "git_diff_binary", "file": "git2/diff.h", - "line": 544, - "lineto": 556, + "line": 553, + "lineto": 565, "block": "unsigned int contains_data\ngit_diff_binary_file old_file\ngit_diff_binary_file new_file", "tdef": "typedef", "description": " Structure describing the binary contents of a diff.", @@ -27166,8 +27627,8 @@ "type": "struct", "value": "git_diff_binary_file", "file": "git2/diff.h", - "line": 521, - "lineto": 533, + "line": 530, + "lineto": 542, "block": "git_diff_binary_t type\nconst char * data\nsize_t datalen\nsize_t inflatedlen", "tdef": "typedef", "description": " The contents of one of the files in a binary diff. ", @@ -27207,8 +27668,8 @@ ], "type": "enum", "file": "git2/diff.h", - "line": 509, - "lineto": 518, + "line": 518, + "lineto": 527, "block": "GIT_DIFF_BINARY_NONE\nGIT_DIFF_BINARY_LITERAL\nGIT_DIFF_BINARY_DELTA", "tdef": "typedef", "description": " When producing a binary diff, the binary data returned will be\n either the deflated full (\"literal\") contents of the file, or\n the deflated binary delta between the two sides (whichever is\n smaller).", @@ -27373,8 +27834,8 @@ "type": "struct", "value": "git_diff_find_options", "file": "git2/diff.h", - "line": 749, - "lineto": 803, + "line": 774, + "lineto": 828, "block": "unsigned int version\nuint32_t flags\nuint16_t rename_threshold\nuint16_t rename_from_rewrite_threshold\nuint16_t copy_threshold\nuint16_t break_rewrite_threshold\nsize_t rename_limit\ngit_diff_similarity_metric * metric", "tdef": "typedef", "description": " Control behavior of rename and copy detection", @@ -27446,8 +27907,8 @@ ], "type": "enum", "file": "git2/diff.h", - "line": 658, - "lineto": 727, + "line": 683, + "lineto": 752, "block": "GIT_DIFF_FIND_BY_CONFIG\nGIT_DIFF_FIND_RENAMES\nGIT_DIFF_FIND_RENAMES_FROM_REWRITES\nGIT_DIFF_FIND_COPIES\nGIT_DIFF_FIND_COPIES_FROM_UNMODIFIED\nGIT_DIFF_FIND_REWRITES\nGIT_DIFF_BREAK_REWRITES\nGIT_DIFF_FIND_AND_BREAK_REWRITES\nGIT_DIFF_FIND_FOR_UNTRACKED\nGIT_DIFF_FIND_ALL\nGIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE\nGIT_DIFF_FIND_IGNORE_WHITESPACE\nGIT_DIFF_FIND_DONT_IGNORE_WHITESPACE\nGIT_DIFF_FIND_EXACT_MATCH_ONLY\nGIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY\nGIT_DIFF_FIND_REMOVE_UNMODIFIED", "tdef": "typedef", "description": " Flags to control the behavior of diff rename/copy detection.", @@ -27615,8 +28076,8 @@ ], "type": "enum", "file": "git2/deprecated.h", - "line": 311, - "lineto": 318, + "line": 325, + "lineto": 331, "block": "GIT_DIFF_FORMAT_EMAIL_NONE\nGIT_DIFF_FORMAT_EMAIL_EXCLUDE_SUBJECT_PATCH_MARKER", "tdef": "typedef", "description": " Formatting options for diff e-mail generation", @@ -27654,8 +28115,8 @@ "type": "struct", "value": "git_diff_format_email_options", "file": "git2/deprecated.h", - "line": 323, - "lineto": 346, + "line": 338, + "lineto": 361, "block": "unsigned int version\nuint32_t flags\nsize_t patch_no\nsize_t total_patches\nconst git_oid * id\nconst char * summary\nconst char * body\nconst git_signature * author", "tdef": "typedef", "description": " Options for controlling the formatting of the generated e-mail.", @@ -27720,8 +28181,8 @@ ], "type": "enum", "file": "git2/diff.h", - "line": 1128, - "lineto": 1135, + "line": 1156, + "lineto": 1163, "block": "GIT_DIFF_FORMAT_PATCH\nGIT_DIFF_FORMAT_PATCH_HEADER\nGIT_DIFF_FORMAT_RAW\nGIT_DIFF_FORMAT_NAME_ONLY\nGIT_DIFF_FORMAT_NAME_STATUS\nGIT_DIFF_FORMAT_PATCH_ID", "tdef": "typedef", "description": " Possible output formats for diff data", @@ -27784,8 +28245,8 @@ "type": "struct", "value": "git_diff_hunk", "file": "git2/diff.h", - "line": 576, - "lineto": 583, + "line": 590, + "lineto": 597, "block": "int old_start\nint old_lines\nint new_start\nint new_lines\nsize_t header_len\nchar [128] header", "tdef": "typedef", "description": " Structure describing a hunk of a diff.", @@ -27852,8 +28313,8 @@ "type": "struct", "value": "git_diff_line", "file": "git2/diff.h", - "line": 631, - "lineto": 639, + "line": 650, + "lineto": 658, "block": "char origin\nint old_lineno\nint new_lineno\nint num_lines\nsize_t content_len\ngit_off_t content_offset\nconst char * content", "tdef": "typedef", "description": " Structure describing a line (or data span) of a diff.", @@ -27926,8 +28387,8 @@ ], "type": "enum", "file": "git2/diff.h", - "line": 602, - "lineto": 618, + "line": 621, + "lineto": 637, "block": "GIT_DIFF_LINE_CONTEXT\nGIT_DIFF_LINE_ADDITION\nGIT_DIFF_LINE_DELETION\nGIT_DIFF_LINE_CONTEXT_EOFNL\nGIT_DIFF_LINE_ADD_EOFNL\nGIT_DIFF_LINE_DEL_EOFNL\nGIT_DIFF_LINE_FILE_HDR\nGIT_DIFF_LINE_HUNK_HDR\nGIT_DIFF_LINE_BINARY", "tdef": "typedef", "description": " Line origin constants.", @@ -28248,8 +28709,8 @@ "type": "struct", "value": "git_diff_options", "file": "git2/diff.h", - "line": 376, - "lineto": 464, + "line": 383, + "lineto": 471, "block": "unsigned int version\nuint32_t flags\ngit_submodule_ignore_t ignore_submodules\ngit_strarray pathspec\ngit_diff_notify_cb notify_cb\ngit_diff_progress_cb progress_cb\nvoid * payload\nuint32_t context_lines\nuint32_t interhunk_lines\ngit_oid_t oid_type\nuint16_t id_abbrev\ngit_off_t max_size\nconst char * old_prefix\nconst char * new_prefix", "tdef": "typedef", "description": " Structure describing options about how the diff should be executed.", @@ -28354,8 +28815,8 @@ "type": "struct", "value": "git_diff_parse_options", "file": "git2/diff.h", - "line": 1294, - "lineto": 1297, + "line": 1322, + "lineto": 1325, "block": "unsigned int version\ngit_oid_t oid_type", "tdef": "typedef", "description": " Options for parsing a diff / patch file.", @@ -28374,8 +28835,8 @@ "type": "struct", "value": "git_diff_patchid_options", "file": "git2/diff.h", - "line": 1431, - "lineto": 1433, + "line": 1459, + "lineto": 1461, "block": "unsigned int version", "tdef": "typedef", "description": " Patch ID options structure", @@ -28402,8 +28863,8 @@ "type": "struct", "value": "git_diff_similarity_metric", "file": "git2/diff.h", - "line": 732, - "lineto": 742, + "line": 757, + "lineto": 767, "block": "int (*)(void **, const git_diff_file *, const char *, void *) file_signature\nint (*)(void **, const git_diff_file *, const char *, size_t, void *) buffer_signature\nvoid (*)(void *, void *) free_signature\nint (*)(int *, void *, void *, void *) similarity\nvoid * payload", "tdef": "typedef", "description": " Pluggable similarity metric", @@ -28441,8 +28902,8 @@ "type": "struct", "value": "git_diff_stats", "file": "git2/diff.h", - "line": 1341, - "lineto": 1341, + "line": 1369, + "lineto": 1369, "tdef": "typedef", "description": " This is an opaque structure which is allocated by `git_diff_get_stats`.\n You are responsible for releasing the object memory when done, using the\n `git_diff_stats_free()` function.", "comments": "", @@ -28471,8 +28932,8 @@ ], "type": "enum", "file": "git2/diff.h", - "line": 1346, - "lineto": 1361, + "line": 1374, + "lineto": 1389, "block": "GIT_DIFF_STATS_NONE\nGIT_DIFF_STATS_FULL\nGIT_DIFF_STATS_SHORT\nGIT_DIFF_STATS_NUMBER\nGIT_DIFF_STATS_INCLUDE_SUMMARY", "tdef": "typedef", "description": " Formatting options for diff stats", @@ -28518,8 +28979,8 @@ "decl": ["GIT_DIRECTION_FETCH", "GIT_DIRECTION_PUSH"], "type": "enum", "file": "git2/net.h", - "line": 31, - "lineto": 34, + "line": 32, + "lineto": 35, "block": "GIT_DIRECTION_FETCH\nGIT_DIRECTION_PUSH", "tdef": "typedef", "description": " Direction of the connection.", @@ -28644,13 +29105,7 @@ "comments": " The \"re-roll\" number. By default, there is no re-roll. " } ], - "used": { - "returns": [], - "needs": [ - "git_email_create_from_commit", - "git_email_create_from_diff" - ] - } + "used": { "returns": [], "needs": ["git_email_create_from_commit"] } } ], [ @@ -28660,15 +29115,23 @@ "type": "struct", "value": "git_error", "file": "git2/errors.h", - "line": 74, - "lineto": 77, + "line": 125, + "lineto": 128, "block": "char * message\nint klass", "tdef": "typedef", "description": " Structure to store extra details of the last error that occurred.", "comments": "

This is kept on a per-thread basis if GIT_THREADS was defined when the library was build, otherwise one is kept globally for the library

\n", "fields": [ - { "type": "char *", "name": "message", "comments": "" }, - { "type": "int", "name": "klass", "comments": "" } + { + "type": "char *", + "name": "message", + "comments": " The error message for the last error. " + }, + { + "type": "int", + "name": "klass", + "comments": " The category of the last error. \n\n git_error_t " + } ], "used": { "returns": ["git_error_last", "giterr_last"], "needs": [] } } @@ -28716,7 +29179,7 @@ "type": "enum", "file": "git2/errors.h", "line": 21, - "lineto": 66, + "lineto": 73, "block": "GIT_OK\nGIT_ERROR\nGIT_ENOTFOUND\nGIT_EEXISTS\nGIT_EAMBIGUOUS\nGIT_EBUFS\nGIT_EUSER\nGIT_EBAREREPO\nGIT_EUNBORNBRANCH\nGIT_EUNMERGED\nGIT_ENONFASTFORWARD\nGIT_EINVALIDSPEC\nGIT_ECONFLICT\nGIT_ELOCKED\nGIT_EMODIFIED\nGIT_EAUTH\nGIT_ECERTIFICATE\nGIT_EAPPLIED\nGIT_EPEEL\nGIT_EEOF\nGIT_EINVALID\nGIT_EUNCOMMITTED\nGIT_EDIRECTORY\nGIT_EMERGECONFLICT\nGIT_PASSTHROUGH\nGIT_ITEROVER\nGIT_RETRY\nGIT_EMISMATCH\nGIT_EINDEXDIRTY\nGIT_EAPPLYFAIL\nGIT_EOWNER\nGIT_TIMEOUT\nGIT_EUNCHANGED\nGIT_ENOTSUPPORTED\nGIT_EREADONLY", "tdef": "typedef", "description": " Generic return codes ", @@ -28725,37 +29188,37 @@ { "type": "int", "name": "GIT_OK", - "comments": "

No error

\n", + "comments": "

No error occurred; the call was successful.

\n", "value": 0 }, { "type": "int", "name": "GIT_ERROR", - "comments": "

Generic error

\n", + "comments": "

An error occurred; call git_error_last for more information.

\n", "value": -1 }, { "type": "int", "name": "GIT_ENOTFOUND", - "comments": "

Requested object could not be found

\n", + "comments": "

Requested object could not be found.

\n", "value": -3 }, { "type": "int", "name": "GIT_EEXISTS", - "comments": "

Object exists preventing operation

\n", + "comments": "

Object exists preventing operation.

\n", "value": -4 }, { "type": "int", "name": "GIT_EAMBIGUOUS", - "comments": "

More than one object matches

\n", + "comments": "

More than one object matches.

\n", "value": -5 }, { "type": "int", "name": "GIT_EBUFS", - "comments": "

Output buffer too short to hold data

\n", + "comments": "

Output buffer too short to hold data.

\n", "value": -6 }, { @@ -28767,13 +29230,13 @@ { "type": "int", "name": "GIT_EBAREREPO", - "comments": "

Operation not allowed on bare repository

\n", + "comments": "

Operation not allowed on bare repository.

\n", "value": -8 }, { "type": "int", "name": "GIT_EUNBORNBRANCH", - "comments": "

HEAD refers to branch with no commits

\n", + "comments": "

HEAD refers to branch with no commits.

\n", "value": -9 }, { @@ -28980,11 +29443,11 @@ ], "type": "enum", "file": "git2/errors.h", - "line": 80, - "lineto": 118, + "line": 79, + "lineto": 117, "block": "GIT_ERROR_NONE\nGIT_ERROR_NOMEMORY\nGIT_ERROR_OS\nGIT_ERROR_INVALID\nGIT_ERROR_REFERENCE\nGIT_ERROR_ZLIB\nGIT_ERROR_REPOSITORY\nGIT_ERROR_CONFIG\nGIT_ERROR_REGEX\nGIT_ERROR_ODB\nGIT_ERROR_INDEX\nGIT_ERROR_OBJECT\nGIT_ERROR_NET\nGIT_ERROR_TAG\nGIT_ERROR_TREE\nGIT_ERROR_INDEXER\nGIT_ERROR_SSL\nGIT_ERROR_SUBMODULE\nGIT_ERROR_THREAD\nGIT_ERROR_STASH\nGIT_ERROR_CHECKOUT\nGIT_ERROR_FETCHHEAD\nGIT_ERROR_MERGE\nGIT_ERROR_SSH\nGIT_ERROR_FILTER\nGIT_ERROR_REVERT\nGIT_ERROR_CALLBACK\nGIT_ERROR_CHERRYPICK\nGIT_ERROR_DESCRIBE\nGIT_ERROR_REBASE\nGIT_ERROR_FILESYSTEM\nGIT_ERROR_PATCH\nGIT_ERROR_WORKTREE\nGIT_ERROR_SHA\nGIT_ERROR_HTTP\nGIT_ERROR_INTERNAL\nGIT_ERROR_GRAFTS", "tdef": "typedef", - "description": " Error classes ", + "description": " Error classes are the category of error. They reflect the area of the\n code where an error occurred.", "comments": "", "fields": [ { @@ -29215,43 +29678,99 @@ "GIT_FEATURE_THREADS", "GIT_FEATURE_HTTPS", "GIT_FEATURE_SSH", - "GIT_FEATURE_NSEC" + "GIT_FEATURE_NSEC", + "GIT_FEATURE_HTTP_PARSER", + "GIT_FEATURE_REGEX", + "GIT_FEATURE_I18N", + "GIT_FEATURE_AUTH_NTLM", + "GIT_FEATURE_AUTH_NEGOTIATE", + "GIT_FEATURE_COMPRESSION", + "GIT_FEATURE_SHA1", + "GIT_FEATURE_SHA256" ], "type": "enum", "file": "git2/common.h", - "line": 134, - "lineto": 157, - "block": "GIT_FEATURE_THREADS\nGIT_FEATURE_HTTPS\nGIT_FEATURE_SSH\nGIT_FEATURE_NSEC", + "line": 138, + "lineto": 177, + "block": "GIT_FEATURE_THREADS\nGIT_FEATURE_HTTPS\nGIT_FEATURE_SSH\nGIT_FEATURE_NSEC\nGIT_FEATURE_HTTP_PARSER\nGIT_FEATURE_REGEX\nGIT_FEATURE_I18N\nGIT_FEATURE_AUTH_NTLM\nGIT_FEATURE_AUTH_NEGOTIATE\nGIT_FEATURE_COMPRESSION\nGIT_FEATURE_SHA1\nGIT_FEATURE_SHA256", "tdef": "typedef", - "description": " Combinations of these values describe the features with which libgit2\n was compiled", + "description": " Configurable features of libgit2; either optional settings (like\n threading), or features that can be enabled by one of a number of\n different backend \"providers\" (like HTTPS, which can be provided by\n OpenSSL, mbedTLS, or system libraries).", "comments": "", "fields": [ { "type": "int", "name": "GIT_FEATURE_THREADS", - "comments": "

If set, libgit2 was built thread-aware and can be safely used from multiple\n threads.

\n", + "comments": "

libgit2 is thread-aware and can be used from multiple threads\n (as described in the documentation).

\n", "value": 1 }, { "type": "int", "name": "GIT_FEATURE_HTTPS", - "comments": "

If set, libgit2 was built with and linked against a TLS implementation.\n Custom TLS streams may still be added by the user to support HTTPS\n regardless of this.

\n", + "comments": "

HTTPS remotes

\n", "value": 2 }, { "type": "int", "name": "GIT_FEATURE_SSH", - "comments": "

If set, libgit2 was built with and linked against libssh2. A custom\n transport may still be added by the user to support libssh2 regardless of\n this.

\n", + "comments": "

SSH remotes

\n", "value": 4 }, { "type": "int", "name": "GIT_FEATURE_NSEC", - "comments": "

If set, libgit2 was built with support for sub-second resolution in file\n modification times.

\n", + "comments": "

Sub-second resolution in index timestamps

\n", "value": 8 + }, + { + "type": "int", + "name": "GIT_FEATURE_HTTP_PARSER", + "comments": "

HTTP parsing; always available

\n", + "value": 16 + }, + { + "type": "int", + "name": "GIT_FEATURE_REGEX", + "comments": "

Regular expression support; always available

\n", + "value": 32 + }, + { + "type": "int", + "name": "GIT_FEATURE_I18N", + "comments": "

Internationalization support for filename translation

\n", + "value": 64 + }, + { + "type": "int", + "name": "GIT_FEATURE_AUTH_NTLM", + "comments": "

NTLM support over HTTPS

\n", + "value": 128 + }, + { + "type": "int", + "name": "GIT_FEATURE_AUTH_NEGOTIATE", + "comments": "

Kerberos (SPNEGO) authentication support over HTTPS

\n", + "value": 256 + }, + { + "type": "int", + "name": "GIT_FEATURE_COMPRESSION", + "comments": "

zlib support; always available

\n", + "value": 512 + }, + { + "type": "int", + "name": "GIT_FEATURE_SHA1", + "comments": "

SHA1 object support; always available

\n", + "value": 1024 + }, + { + "type": "int", + "name": "GIT_FEATURE_SHA256", + "comments": "

SHA256 object support

\n", + "value": 2048 } ], - "used": { "returns": [], "needs": [] } + "used": { "returns": [], "needs": ["git_libgit2_feature_backend"] } } ], [ @@ -29260,8 +29779,8 @@ "decl": ["GIT_FETCH_DEPTH_FULL", "GIT_FETCH_DEPTH_UNSHALLOW"], "type": "enum", "file": "git2/remote.h", - "line": 717, - "lineto": 723, + "line": 760, + "lineto": 766, "block": "GIT_FETCH_DEPTH_FULL\nGIT_FETCH_DEPTH_UNSHALLOW", "tdef": "typedef", "description": " Constants for fetch depth (shallowness of fetch). ", @@ -29300,8 +29819,8 @@ "type": "struct", "value": "git_fetch_options", "file": "git2/remote.h", - "line": 733, - "lineto": 785, + "line": 776, + "lineto": 828, "block": "int version\ngit_remote_callbacks callbacks\ngit_fetch_prune_t prune\nunsigned int update_fetchhead\ngit_remote_autotag_option_t download_tags\ngit_proxy_options proxy_opts\nint depth\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", "tdef": "typedef", "description": " Fetch options structure.", @@ -29369,8 +29888,8 @@ ], "type": "enum", "file": "git2/remote.h", - "line": 676, - "lineto": 689, + "line": 719, + "lineto": 732, "block": "GIT_FETCH_PRUNE_UNSPECIFIED\nGIT_FETCH_PRUNE\nGIT_FETCH_NO_PRUNE", "tdef": "typedef", "description": " Acceptable prune settings when fetching ", @@ -29411,8 +29930,8 @@ ], "type": "enum", "file": "git2/types.h", - "line": 222, - "lineto": 229, + "line": 238, + "lineto": 245, "block": "GIT_FILEMODE_UNREADABLE\nGIT_FILEMODE_TREE\nGIT_FILEMODE_BLOB\nGIT_FILEMODE_BLOB_EXECUTABLE\nGIT_FILEMODE_LINK\nGIT_FILEMODE_COMMIT", "tdef": "typedef", "description": " Valid modes for index and tree entries. ", @@ -29468,8 +29987,8 @@ "type": "struct", "value": "git_filter", "file": "git2/filter.h", - "line": 100, - "lineto": 100, + "line": 109, + "lineto": 109, "tdef": "typedef", "description": " A filter that can transform file data", "comments": "

This represents a filter that can be used to transform or even replace file data. Libgit2 includes one built in filter and it is possible to write your own (see git2/sys/filter.h for information on that).

\n\n

The two builtin filters are:

\n\n
    \n
  • "crlf" which uses the complex rules with the "text", "eol", and "crlf" file attributes to decide how to convert between LF and CRLF line endings * "ident" which replaces "$Id$" in a blob with "$Id: $" upon checkout and replaced "$Id: $" with "$Id$" on checkin.
  • \n
\n", @@ -29504,8 +30023,8 @@ ], "type": "enum", "file": "git2/filter.h", - "line": 41, - "lineto": 58, + "line": 47, + "lineto": 64, "block": "GIT_FILTER_DEFAULT\nGIT_FILTER_ALLOW_UNSAFE\nGIT_FILTER_NO_SYSTEM_ATTRIBUTES\nGIT_FILTER_ATTRIBUTES_FROM_HEAD\nGIT_FILTER_ATTRIBUTES_FROM_COMMIT", "tdef": "typedef", "description": " Filter option flags.", @@ -29552,8 +30071,8 @@ "type": "struct", "value": "git_filter_list", "file": "git2/filter.h", - "line": 112, - "lineto": 112, + "line": 121, + "lineto": 121, "tdef": "typedef", "description": " List of filters to be applied", "comments": "

This represents a list of filters to be applied to a file / blob. You can build the list with one call, apply it with another, and dispose it with a third. In typical usage, there are not many occasions where a git_filter_list is needed directly since the library will generally handle conversions for you, but it can be convenient to be able to build and apply the list sometimes.

\n", @@ -29587,8 +30106,8 @@ ], "type": "enum", "file": "git2/filter.h", - "line": 31, - "lineto": 36, + "line": 37, + "lineto": 42, "block": "GIT_FILTER_TO_WORKTREE\nGIT_FILTER_SMUDGE\nGIT_FILTER_TO_ODB\nGIT_FILTER_CLEAN", "tdef": "typedef", "description": " Filters are applied in one of two directions: smudging - which is\n exporting a file from the Git object database to the working directory,\n and cleaning - which is importing a file from the working directory to\n the Git object database. These values control which direction of\n change is being applied.", @@ -29637,8 +30156,8 @@ "type": "struct", "value": "git_filter_options", "file": "git2/filter.h", - "line": 63, - "lineto": 80, + "line": 69, + "lineto": 86, "block": "unsigned int version\nuint32_t flags\ngit_oid * commit_id\ngit_oid attr_commit_id", "tdef": "typedef", "description": " Filtering options", @@ -29667,8 +30186,8 @@ "type": "struct", "value": "git_filter_source", "file": "git2/sys/filter.h", - "line": 95, - "lineto": 95, + "line": 109, + "lineto": 109, "tdef": "typedef", "description": " A filter source represents a file/blob to be processed", "comments": "", @@ -29686,8 +30205,8 @@ ], "type": "enum", "file": "git2/sys/hashsig.h", - "line": 25, - "lineto": 45, + "line": 35, + "lineto": 55, "block": "GIT_HASHSIG_NORMAL\nGIT_HASHSIG_IGNORE_WHITESPACE\nGIT_HASHSIG_SMART_WHITESPACE\nGIT_HASHSIG_ALLOW_SMALL_FILES", "tdef": "typedef", "description": " Options for hashsig computation", @@ -29728,8 +30247,8 @@ "type": "struct", "value": "git_index", "file": "git2/types.h", - "line": 148, - "lineto": 148, + "line": 153, + "lineto": 153, "tdef": "typedef", "description": " Memory representation of an index file. ", "comments": "", @@ -29772,6 +30291,8 @@ "git_index_iterator_free", "git_index_iterator_new", "git_index_iterator_next", + "git_index_new", + "git_index_open", "git_index_owner", "git_index_path", "git_index_read", @@ -29819,8 +30340,8 @@ ], "type": "enum", "file": "git2/index.h", - "line": 139, - "lineto": 144, + "line": 162, + "lineto": 167, "block": "GIT_INDEX_ADD_DEFAULT\nGIT_INDEX_ADD_FORCE\nGIT_INDEX_ADD_DISABLE_PATHSPEC_MATCH\nGIT_INDEX_ADD_CHECK_PATHSPEC", "tdef": "typedef", "description": " Flags for APIs that add files matching pathspec ", @@ -29865,8 +30386,8 @@ ], "type": "enum", "file": "git2/index.h", - "line": 126, - "lineto": 131, + "line": 142, + "lineto": 147, "block": "GIT_INDEX_CAPABILITY_IGNORE_CASE\nGIT_INDEX_CAPABILITY_NO_FILEMODE\nGIT_INDEX_CAPABILITY_NO_SYMLINKS\nGIT_INDEX_CAPABILITY_FROM_OWNER", "tdef": "typedef", "description": " Capabilities of system that affect index actions. ", @@ -29907,8 +30428,8 @@ "type": "struct", "value": "git_index_conflict_iterator", "file": "git2/types.h", - "line": 154, - "lineto": 154, + "line": 159, + "lineto": 159, "tdef": "typedef", "description": " An iterator for conflicts in the index. ", "comments": "", @@ -29942,8 +30463,8 @@ "type": "struct", "value": "git_index_entry", "file": "git2/index.h", - "line": 53, - "lineto": 70, + "line": 58, + "lineto": 75, "block": "git_index_time ctime\ngit_index_time mtime\nuint32_t dev\nuint32_t ino\nuint32_t mode\nuint32_t uid\nuint32_t gid\nuint32_t file_size\ngit_oid id\nuint16_t flags\nuint16_t flags_extended\nconst char * path", "tdef": "typedef", "description": " In-memory representation of a file entry in the index.", @@ -29989,8 +30510,8 @@ ], "type": "enum", "file": "git2/index.h", - "line": 116, - "lineto": 123, + "line": 132, + "lineto": 139, "block": "GIT_INDEX_ENTRY_INTENT_TO_ADD\nGIT_INDEX_ENTRY_SKIP_WORKTREE\nGIT_INDEX_ENTRY_EXTENDED_FLAGS\nGIT_INDEX_ENTRY_UPTODATE", "tdef": "typedef", "description": " Bitmasks for on-disk fields of `git_index_entry`'s `flags_extended`", @@ -30030,8 +30551,8 @@ "decl": ["GIT_INDEX_ENTRY_EXTENDED", "GIT_INDEX_ENTRY_VALID"], "type": "enum", "file": "git2/index.h", - "line": 87, - "lineto": 90, + "line": 95, + "lineto": 98, "block": "GIT_INDEX_ENTRY_EXTENDED\nGIT_INDEX_ENTRY_VALID", "tdef": "typedef", "description": " Flags for index entries", @@ -30060,8 +30581,8 @@ "type": "struct", "value": "git_index_iterator", "file": "git2/types.h", - "line": 151, - "lineto": 151, + "line": 156, + "lineto": 156, "tdef": "typedef", "description": " An iterator for entries in the index. ", "comments": "", @@ -30087,8 +30608,8 @@ ], "type": "enum", "file": "git2/index.h", - "line": 147, - "lineto": 167, + "line": 170, + "lineto": 190, "block": "GIT_INDEX_STAGE_ANY\nGIT_INDEX_STAGE_NORMAL\nGIT_INDEX_STAGE_ANCESTOR\nGIT_INDEX_STAGE_OURS\nGIT_INDEX_STAGE_THEIRS", "tdef": "typedef", "description": " Git index stage states ", @@ -30135,8 +30656,8 @@ "type": "struct", "value": "git_index_time", "file": "git2/index.h", - "line": 26, - "lineto": 30, + "line": 31, + "lineto": 35, "block": "int32_t seconds\nuint32_t nanoseconds", "tdef": "typedef", "description": " Time structure used in a git index entry ", @@ -30155,8 +30676,8 @@ "type": "struct", "value": "git_indexer", "file": "git2/indexer.h", - "line": 17, - "lineto": 17, + "line": 27, + "lineto": 27, "tdef": "typedef", "description": " A git indexer object ", "comments": "", @@ -30189,8 +30710,8 @@ "type": "struct", "value": "git_indexer_options", "file": "git2/indexer.h", - "line": 62, - "lineto": 86, + "line": 73, + "lineto": 100, "block": "unsigned int version\ngit_indexer_progress_cb progress_cb\nvoid * progress_cb_payload\nunsigned char verify", "tdef": "typedef", "description": " Options for indexer configuration", @@ -30234,8 +30755,8 @@ "type": "struct", "value": "git_indexer_progress", "file": "git2/indexer.h", - "line": 24, - "lineto": 48, + "line": 34, + "lineto": 58, "block": "unsigned int total_objects\nunsigned int indexed_objects\nunsigned int received_objects\nunsigned int local_objects\nunsigned int total_deltas\nunsigned int indexed_deltas\nsize_t received_bytes", "tdef": "typedef", "description": " This structure is used to provide callers information about the\n progress of indexing a packfile, either directly or part of a\n fetch or clone that downloads a packfile.", @@ -30337,13 +30858,14 @@ "GIT_OPT_SET_SERVER_TIMEOUT", "GIT_OPT_GET_SERVER_TIMEOUT", "GIT_OPT_SET_USER_AGENT_PRODUCT", - "GIT_OPT_GET_USER_AGENT_PRODUCT" + "GIT_OPT_GET_USER_AGENT_PRODUCT", + "GIT_OPT_ADD_SSL_X509_CERT" ], "type": "enum", "file": "git2/common.h", - "line": 188, - "lineto": 234, - "block": "GIT_OPT_GET_MWINDOW_SIZE\nGIT_OPT_SET_MWINDOW_SIZE\nGIT_OPT_GET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_SET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_GET_SEARCH_PATH\nGIT_OPT_SET_SEARCH_PATH\nGIT_OPT_SET_CACHE_OBJECT_LIMIT\nGIT_OPT_SET_CACHE_MAX_SIZE\nGIT_OPT_ENABLE_CACHING\nGIT_OPT_GET_CACHED_MEMORY\nGIT_OPT_GET_TEMPLATE_PATH\nGIT_OPT_SET_TEMPLATE_PATH\nGIT_OPT_SET_SSL_CERT_LOCATIONS\nGIT_OPT_SET_USER_AGENT\nGIT_OPT_ENABLE_STRICT_OBJECT_CREATION\nGIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION\nGIT_OPT_SET_SSL_CIPHERS\nGIT_OPT_GET_USER_AGENT\nGIT_OPT_ENABLE_OFS_DELTA\nGIT_OPT_ENABLE_FSYNC_GITDIR\nGIT_OPT_GET_WINDOWS_SHAREMODE\nGIT_OPT_SET_WINDOWS_SHAREMODE\nGIT_OPT_ENABLE_STRICT_HASH_VERIFICATION\nGIT_OPT_SET_ALLOCATOR\nGIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY\nGIT_OPT_GET_PACK_MAX_OBJECTS\nGIT_OPT_SET_PACK_MAX_OBJECTS\nGIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS\nGIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE\nGIT_OPT_GET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_ODB_PACKED_PRIORITY\nGIT_OPT_SET_ODB_LOOSE_PRIORITY\nGIT_OPT_GET_EXTENSIONS\nGIT_OPT_SET_EXTENSIONS\nGIT_OPT_GET_OWNER_VALIDATION\nGIT_OPT_SET_OWNER_VALIDATION\nGIT_OPT_GET_HOMEDIR\nGIT_OPT_SET_HOMEDIR\nGIT_OPT_SET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_GET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_SET_SERVER_TIMEOUT\nGIT_OPT_GET_SERVER_TIMEOUT\nGIT_OPT_SET_USER_AGENT_PRODUCT\nGIT_OPT_GET_USER_AGENT_PRODUCT", + "line": 214, + "lineto": 261, + "block": "GIT_OPT_GET_MWINDOW_SIZE\nGIT_OPT_SET_MWINDOW_SIZE\nGIT_OPT_GET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_SET_MWINDOW_MAPPED_LIMIT\nGIT_OPT_GET_SEARCH_PATH\nGIT_OPT_SET_SEARCH_PATH\nGIT_OPT_SET_CACHE_OBJECT_LIMIT\nGIT_OPT_SET_CACHE_MAX_SIZE\nGIT_OPT_ENABLE_CACHING\nGIT_OPT_GET_CACHED_MEMORY\nGIT_OPT_GET_TEMPLATE_PATH\nGIT_OPT_SET_TEMPLATE_PATH\nGIT_OPT_SET_SSL_CERT_LOCATIONS\nGIT_OPT_SET_USER_AGENT\nGIT_OPT_ENABLE_STRICT_OBJECT_CREATION\nGIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION\nGIT_OPT_SET_SSL_CIPHERS\nGIT_OPT_GET_USER_AGENT\nGIT_OPT_ENABLE_OFS_DELTA\nGIT_OPT_ENABLE_FSYNC_GITDIR\nGIT_OPT_GET_WINDOWS_SHAREMODE\nGIT_OPT_SET_WINDOWS_SHAREMODE\nGIT_OPT_ENABLE_STRICT_HASH_VERIFICATION\nGIT_OPT_SET_ALLOCATOR\nGIT_OPT_ENABLE_UNSAVED_INDEX_SAFETY\nGIT_OPT_GET_PACK_MAX_OBJECTS\nGIT_OPT_SET_PACK_MAX_OBJECTS\nGIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS\nGIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE\nGIT_OPT_GET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_MWINDOW_FILE_LIMIT\nGIT_OPT_SET_ODB_PACKED_PRIORITY\nGIT_OPT_SET_ODB_LOOSE_PRIORITY\nGIT_OPT_GET_EXTENSIONS\nGIT_OPT_SET_EXTENSIONS\nGIT_OPT_GET_OWNER_VALIDATION\nGIT_OPT_SET_OWNER_VALIDATION\nGIT_OPT_GET_HOMEDIR\nGIT_OPT_SET_HOMEDIR\nGIT_OPT_SET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_GET_SERVER_CONNECT_TIMEOUT\nGIT_OPT_SET_SERVER_TIMEOUT\nGIT_OPT_GET_SERVER_TIMEOUT\nGIT_OPT_SET_USER_AGENT_PRODUCT\nGIT_OPT_GET_USER_AGENT_PRODUCT\nGIT_OPT_ADD_SSL_X509_CERT", "tdef": "typedef", "description": " Global library options", "comments": "

These are used to select which global option to set or get and are used in git_libgit2_opts().

\n", @@ -30617,6 +31139,12 @@ "name": "GIT_OPT_GET_USER_AGENT_PRODUCT", "comments": "", "value": 44 + }, + { + "type": "int", + "name": "GIT_OPT_ADD_SSL_X509_CERT", + "comments": "", + "value": 45 } ], "used": { "returns": [], "needs": [] } @@ -30629,8 +31157,8 @@ "type": "struct", "value": "git_mailmap", "file": "git2/types.h", - "line": 366, - "lineto": 366, + "line": 382, + "lineto": 382, "tdef": "typedef", "description": " Representation of .mailmap file state. ", "comments": "", @@ -30662,8 +31190,8 @@ ], "type": "enum", "file": "git2/merge.h", - "line": 334, - "lineto": 363, + "line": 347, + "lineto": 376, "block": "GIT_MERGE_ANALYSIS_NONE\nGIT_MERGE_ANALYSIS_NORMAL\nGIT_MERGE_ANALYSIS_UP_TO_DATE\nGIT_MERGE_ANALYSIS_FASTFORWARD\nGIT_MERGE_ANALYSIS_UNBORN", "tdef": "typedef", "description": " The results of `git_merge_analysis` indicate the merge opportunities.", @@ -30713,8 +31241,8 @@ "type": "struct", "value": "git_merge_driver_source", "file": "git2/sys/merge.h", - "line": 41, - "lineto": 41, + "line": 49, + "lineto": 49, "tdef": "typedef", "description": " A merge driver source represents the file to be merged", "comments": "", @@ -30732,8 +31260,8 @@ ], "type": "enum", "file": "git2/merge.h", - "line": 109, - "lineto": 139, + "line": 115, + "lineto": 145, "block": "GIT_MERGE_FILE_FAVOR_NORMAL\nGIT_MERGE_FILE_FAVOR_OURS\nGIT_MERGE_FILE_FAVOR_THEIRS\nGIT_MERGE_FILE_FAVOR_UNION", "tdef": "typedef", "description": " Merge file favor options for `git_merge_options` instruct the file-level\n merging functionality how to deal with conflicting regions of the files.", @@ -30785,8 +31313,8 @@ ], "type": "enum", "file": "git2/merge.h", - "line": 144, - "lineto": 181, + "line": 150, + "lineto": 187, "block": "GIT_MERGE_FILE_DEFAULT\nGIT_MERGE_FILE_STYLE_MERGE\nGIT_MERGE_FILE_STYLE_DIFF3\nGIT_MERGE_FILE_SIMPLIFY_ALNUM\nGIT_MERGE_FILE_IGNORE_WHITESPACE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_CHANGE\nGIT_MERGE_FILE_IGNORE_WHITESPACE_EOL\nGIT_MERGE_FILE_DIFF_PATIENCE\nGIT_MERGE_FILE_DIFF_MINIMAL\nGIT_MERGE_FILE_STYLE_ZDIFF3\nGIT_MERGE_FILE_ACCEPT_CONFLICTS", "tdef": "typedef", "description": " File merging flags", @@ -30875,8 +31403,8 @@ "type": "struct", "value": "git_merge_file_input", "file": "git2/merge.h", - "line": 32, - "lineto": 46, + "line": 35, + "lineto": 49, "block": "unsigned int version\nconst char * ptr\nsize_t size\nconst char * path\nunsigned int mode", "tdef": "typedef", "description": " The file inputs to `git_merge_file`. Callers should populate the\n `git_merge_file_input` structure with descriptions of the files in\n each side of the conflict for use in producing the merge file.", @@ -30925,8 +31453,8 @@ "type": "struct", "value": "git_merge_file_options", "file": "git2/merge.h", - "line": 188, - "lineto": 218, + "line": 195, + "lineto": 225, "block": "unsigned int version\nconst char * ancestor_label\nconst char * our_label\nconst char * their_label\ngit_merge_file_favor_t favor\nuint32_t flags\nunsigned short marker_size", "tdef": "typedef", "description": " Options for merging a file", @@ -30987,8 +31515,8 @@ "type": "struct", "value": "git_merge_file_result", "file": "git2/merge.h", - "line": 238, - "lineto": 259, + "line": 248, + "lineto": 269, "block": "unsigned int automergeable\nconst char * path\nunsigned int mode\nconst char * ptr\nsize_t len", "tdef": "typedef", "description": " Information about file-level merging", @@ -31042,8 +31570,8 @@ ], "type": "enum", "file": "git2/merge.h", - "line": 68, - "lineto": 103, + "line": 74, + "lineto": 109, "block": "GIT_MERGE_FIND_RENAMES\nGIT_MERGE_FAIL_ON_CONFLICT\nGIT_MERGE_SKIP_REUC\nGIT_MERGE_NO_RECURSIVE\nGIT_MERGE_VIRTUAL_BASE", "tdef": "typedef", "description": " Flags for `git_merge` options. A combination of these flags can be\n passed in via the `flags` value in the `git_merge_options`.", @@ -31100,8 +31628,8 @@ "type": "struct", "value": "git_merge_options", "file": "git2/merge.h", - "line": 264, - "lineto": 313, + "line": 274, + "lineto": 323, "block": "unsigned int version\nuint32_t flags\nunsigned int rename_threshold\nunsigned int target_limit\ngit_diff_similarity_metric * metric\nunsigned int recursion_limit\nconst char * default_driver\ngit_merge_file_favor_t file_favor\nuint32_t file_flags", "tdef": "typedef", "description": " Merging options", @@ -31172,8 +31700,8 @@ ], "type": "enum", "file": "git2/merge.h", - "line": 368, - "lineto": 386, + "line": 381, + "lineto": 399, "block": "GIT_MERGE_PREFERENCE_NONE\nGIT_MERGE_PREFERENCE_NO_FASTFORWARD\nGIT_MERGE_PREFERENCE_FASTFORWARD_ONLY", "tdef": "typedef", "description": " The user's stated preference for merges.", @@ -31266,8 +31794,8 @@ "type": "struct", "value": "git_midx_writer", "file": "git2/types.h", - "line": 100, - "lineto": 100, + "line": 105, + "lineto": 105, "tdef": "typedef", "description": " a writer for multi-pack-index files. ", "comments": "", @@ -31281,27 +31809,14 @@ "type": "struct", "value": "git_note", "file": "git2/types.h", - "line": 169, - "lineto": 169, + "line": 174, + "lineto": 174, "tdef": "typedef", "description": " Representation of a git note ", "comments": "", "used": { "returns": [], - "needs": [ - "git_note_author", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_committer", - "git_note_foreach", - "git_note_free", - "git_note_id", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_message", - "git_note_next", - "git_note_read" - ] + "needs": ["git_note_iterator_free", "git_note_next"] } } ], @@ -31312,19 +31827,14 @@ "type": "struct", "value": "git_note_iterator", "file": "git2/notes.h", - "line": 35, - "lineto": 35, + "line": 37, + "lineto": 37, "tdef": "typedef", "description": " note iterator", "comments": "", "used": { "returns": [], - "needs": [ - "git_note_commit_iterator_new", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_next" - ] + "needs": ["git_note_iterator_free", "git_note_next"] } } ], @@ -31335,8 +31845,8 @@ "type": "struct", "value": "git_object", "file": "git2/types.h", - "line": 124, - "lineto": 124, + "line": 129, + "lineto": 129, "tdef": "typedef", "description": " Representation of a generic object in a repository ", "comments": "", @@ -31366,6 +31876,8 @@ "git_object_type", "git_object_type2string", "git_object_typeisloose", + "git_odb_hash", + "git_odb_hashfile", "git_odb_open_rstream", "git_odb_open_wstream", "git_odb_read_header", @@ -31474,6 +31986,8 @@ "git_object_rawcontent_is_valid", "git_object_type2string", "git_object_typeisloose", + "git_odb_hash", + "git_odb_hashfile", "git_odb_open_rstream", "git_odb_open_wstream", "git_odb_read_header", @@ -31491,10 +32005,10 @@ "type": "struct", "value": "git_odb", "file": "git2/types.h", - "line": 85, - "lineto": 85, + "line": 88, + "lineto": 88, "tdef": "typedef", - "description": " An open object database handle. ", + "description": " An object database stores the objects (commit, trees, blobs, tags,\n etc) for a repository.", "comments": "", "used": { "returns": [], @@ -31503,6 +32017,9 @@ "git_odb_add_alternate", "git_odb_add_backend", "git_odb_add_disk_alternate", + "git_odb_backend_loose", + "git_odb_backend_one_pack", + "git_odb_backend_pack", "git_odb_exists", "git_odb_exists_ext", "git_odb_exists_prefix", @@ -31510,6 +32027,7 @@ "git_odb_foreach", "git_odb_free", "git_odb_get_backend", + "git_odb_new", "git_odb_num_backends", "git_odb_object_data", "git_odb_object_dup", @@ -31517,6 +32035,7 @@ "git_odb_object_id", "git_odb_object_size", "git_odb_object_type", + "git_odb_open", "git_odb_open_rstream", "git_odb_open_wstream", "git_odb_read", @@ -31531,7 +32050,8 @@ "git_odb_write", "git_odb_write_multi_pack_index", "git_odb_write_pack", - "git_repository_odb" + "git_repository_odb", + "git_repository_wrap_odb" ] } } @@ -31543,8 +32063,8 @@ "type": "struct", "value": "git_odb_backend", "file": "git2/types.h", - "line": 88, - "lineto": 88, + "line": 91, + "lineto": 91, "tdef": "typedef", "description": " A custom backend in an ODB ", "comments": "", @@ -31553,6 +32073,9 @@ "needs": [ "git_odb_add_alternate", "git_odb_add_backend", + "git_odb_backend_loose", + "git_odb_backend_one_pack", + "git_odb_backend_pack", "git_odb_get_backend" ] } @@ -31572,8 +32095,8 @@ "type": "struct", "value": "git_odb_backend_loose_options", "file": "git2/odb_backend.h", - "line": 93, - "lineto": 119, + "line": 49, + "lineto": 75, "block": "unsigned int version\nuint32_t flags\nint compression_level\nunsigned int dir_mode\nunsigned int file_mode\ngit_oid_t oid_type", "tdef": "typedef", "description": " Options for configuring a loose object backend. ", @@ -31620,8 +32143,8 @@ "type": "struct", "value": "git_odb_backend_pack_options", "file": "git2/odb_backend.h", - "line": 28, - "lineto": 36, + "line": 24, + "lineto": 32, "block": "unsigned int version\ngit_oid_t oid_type", "tdef": "typedef", "description": " Options for configuring a packfile object backend. ", @@ -31648,8 +32171,8 @@ "type": "struct", "value": "git_odb_expand_id", "file": "git2/odb.h", - "line": 230, - "lineto": 245, + "line": 250, + "lineto": 265, "block": "git_oid id\nunsigned short length\ngit_object_t type", "tdef": "typedef", "description": " The information about object IDs to query in `git_odb_expand_ids`,\n which will be populated upon return.", @@ -31704,10 +32227,10 @@ "type": "struct", "value": "git_odb_object", "file": "git2/types.h", - "line": 91, - "lineto": 91, + "line": 96, + "lineto": 96, "tdef": "typedef", - "description": " An object read from the ODB ", + "description": " A \"raw\" object read from the object database.", "comments": "", "used": { "returns": [], @@ -31731,8 +32254,8 @@ "type": "struct", "value": "git_odb_options", "file": "git2/odb.h", - "line": 42, - "lineto": 50, + "line": 46, + "lineto": 54, "block": "unsigned int version\ngit_oid_t oid_type", "tdef": "typedef", "description": " Options for configuring a loose object backend. ", @@ -31759,8 +32282,8 @@ "type": "struct", "value": "git_odb_stream", "file": "git2/types.h", - "line": 94, - "lineto": 94, + "line": 99, + "lineto": 99, "block": "git_odb_backend * backend\nunsigned int mode\nvoid * hash_ctx\ngit_object_size_t declared_size\ngit_object_size_t received_bytes\nint (*)(git_odb_stream *, char *, size_t) read\nint (*)(git_odb_stream *, const char *, size_t) write\nint (*)(git_odb_stream *, const git_oid *) finalize_write\nvoid (*)(git_odb_stream *) free", "tdef": "typedef", "description": " A stream to read/write from the ODB ", @@ -31819,8 +32342,8 @@ "decl": ["GIT_STREAM_RDONLY", "GIT_STREAM_WRONLY", "GIT_STREAM_RW"], "type": "enum", "file": "git2/odb_backend.h", - "line": 155, - "lineto": 159, + "line": 182, + "lineto": 186, "block": "GIT_STREAM_RDONLY\nGIT_STREAM_WRONLY\nGIT_STREAM_RW", "tdef": "typedef", "description": " Streaming mode ", @@ -31850,8 +32373,8 @@ "type": "struct", "value": "git_odb_writepack", "file": "git2/types.h", - "line": 97, - "lineto": 97, + "line": 102, + "lineto": 102, "block": "git_odb_backend * backend\nint (*)(git_odb_writepack *, const void *, size_t, git_indexer_progress *) append\nint (*)(git_odb_writepack *, git_indexer_progress *) commit\nvoid (*)(git_odb_writepack *) free", "tdef": "typedef", "description": " A stream to write a packfile to the ODB ", @@ -31884,8 +32407,8 @@ "type": "struct", "value": "git_oid", "file": "git2/oid.h", - "line": 99, - "lineto": 108, + "line": 103, + "lineto": 112, "block": "unsigned char [20] id", "tdef": "typedef", "description": " Unique identity of any object (commit, tree, blob, tag). ", @@ -31906,7 +32429,6 @@ "git_commit_tree_id", "git_index_checksum", "git_indexer_hash", - "git_note_id", "git_object_id", "git_odb_object_id", "git_oid_shorten_new", @@ -31945,7 +32467,6 @@ "git_commit_lookup", "git_commit_lookup_prefix", "git_diff_patchid", - "git_email_create_from_diff", "git_graph_ahead_behind", "git_graph_descendant_of", "git_graph_reachable_from_any", @@ -31956,20 +32477,16 @@ "git_merge_base_octopus", "git_merge_bases", "git_merge_bases_many", - "git_note_commit_create", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_create", "git_note_foreach_cb", "git_note_next", - "git_note_read", - "git_note_remove", "git_object_lookup", "git_object_lookup_prefix", "git_odb_exists", "git_odb_exists_ext", "git_odb_exists_prefix", "git_odb_foreach_cb", + "git_odb_hash", + "git_odb_hashfile", "git_odb_open_rstream", "git_odb_read", "git_odb_read_header", @@ -31980,6 +32497,10 @@ "git_oid_cpy", "git_oid_equal", "git_oid_fmt", + "git_oid_fromraw", + "git_oid_fromstr", + "git_oid_fromstrn", + "git_oid_fromstrp", "git_oid_is_zero", "git_oid_ncmp", "git_oid_nfmt", @@ -32039,8 +32560,8 @@ "type": "struct", "value": "git_oid_shorten", "file": "git2/oid.h", - "line": 320, - "lineto": 320, + "line": 317, + "lineto": 317, "tdef": "typedef", "description": " OID Shortener object", "comments": "", @@ -32056,8 +32577,8 @@ "decl": ["GIT_OID_SHA1"], "type": "enum", "file": "git2/oid.h", - "line": 24, - "lineto": 33, + "line": 23, + "lineto": 32, "block": "GIT_OID_SHA1", "tdef": "typedef", "description": " The type of object id. ", @@ -32080,8 +32601,8 @@ "type": "struct", "value": "git_oidarray", "file": "git2/oidarray.h", - "line": 16, - "lineto": 19, + "line": 23, + "lineto": 26, "block": "git_oid * ids\nsize_t count", "tdef": "typedef", "description": " Array of object ids ", @@ -32108,8 +32629,8 @@ "type": "struct", "value": "git_packbuilder", "file": "git2/types.h", - "line": 172, - "lineto": 172, + "line": 177, + "lineto": 177, "tdef": "typedef", "description": " Representation of a git packbuilder ", "comments": "", @@ -32208,8 +32729,8 @@ "decl": ["GIT_PATH_FS_GENERIC", "GIT_PATH_FS_NTFS", "GIT_PATH_FS_HFS"], "type": "enum", "file": "git2/sys/path.h", - "line": 34, - "lineto": 41, + "line": 44, + "lineto": 51, "block": "GIT_PATH_FS_GENERIC\nGIT_PATH_FS_NTFS\nGIT_PATH_FS_HFS", "tdef": "typedef", "description": " The kinds of checks to perform according to which filesystem we are trying to\n protect.", @@ -32244,8 +32765,8 @@ "type": "struct", "value": "git_pathspec", "file": "git2/pathspec.h", - "line": 20, - "lineto": 20, + "line": 27, + "lineto": 27, "tdef": "typedef", "description": " Compiled pathspec", "comments": "", @@ -32283,8 +32804,8 @@ ], "type": "enum", "file": "git2/pathspec.h", - "line": 30, - "lineto": 73, + "line": 37, + "lineto": 80, "block": "GIT_PATHSPEC_DEFAULT\nGIT_PATHSPEC_IGNORE_CASE\nGIT_PATHSPEC_USE_CASE\nGIT_PATHSPEC_NO_GLOB\nGIT_PATHSPEC_NO_MATCH_ERROR\nGIT_PATHSPEC_FIND_FAILURES\nGIT_PATHSPEC_FAILURES_ONLY", "tdef": "typedef", "description": " Options controlling how pathspec match should be executed", @@ -32343,8 +32864,8 @@ "type": "struct", "value": "git_pathspec_match_list", "file": "git2/pathspec.h", - "line": 25, - "lineto": 25, + "line": 32, + "lineto": 32, "tdef": "typedef", "description": " List of filenames matching a pathspec", "comments": "", @@ -32379,8 +32900,8 @@ "type": "struct", "value": "git_proxy_options", "file": "git2/proxy.h", - "line": 44, - "lineto": 79, + "line": 50, + "lineto": 85, "block": "unsigned int version\ngit_proxy_t type\nconst char * url\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\nvoid * payload", "tdef": "typedef", "description": " Options for connecting through a proxy", @@ -32425,8 +32946,8 @@ "decl": ["GIT_PROXY_NONE", "GIT_PROXY_AUTO", "GIT_PROXY_SPECIFIED"], "type": "enum", "file": "git2/proxy.h", - "line": 20, - "lineto": 36, + "line": 26, + "lineto": 42, "block": "GIT_PROXY_NONE\nGIT_PROXY_AUTO\nGIT_PROXY_SPECIFIED", "tdef": "typedef", "description": " The type of proxy to use.", @@ -32461,8 +32982,8 @@ "type": "struct", "value": "git_push", "file": "git2/types.h", - "line": 253, - "lineto": 253, + "line": 269, + "lineto": 269, "tdef": "typedef", "description": " Preparation for a push operation. Can be used to configure what to\n push and the level of parallelism of the packfile builder.", "comments": "", @@ -32492,8 +33013,8 @@ "type": "struct", "value": "git_push_options", "file": "git2/remote.h", - "line": 814, - "lineto": 853, + "line": 860, + "lineto": 899, "block": "unsigned int version\nunsigned int pb_parallelism\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers\ngit_strarray remote_push_options", "tdef": "typedef", "description": " Controls the behavior of a git_push object.", @@ -32553,8 +33074,8 @@ "type": "struct", "value": "git_push_update", "file": "git2/remote.h", - "line": 479, - "lineto": 496, + "line": 490, + "lineto": 507, "block": "char * src_refname\nchar * dst_refname\ngit_oid src\ngit_oid dst", "tdef": "typedef", "description": " Represents an update which will be performed on the remote during push", @@ -32591,8 +33112,8 @@ "type": "struct", "value": "git_rebase", "file": "git2/types.h", - "line": 204, - "lineto": 204, + "line": 220, + "lineto": 220, "tdef": "typedef", "description": " Representation of a rebase ", "comments": "", @@ -32630,8 +33151,8 @@ "type": "struct", "value": "git_rebase_operation", "file": "git2/rebase.h", - "line": 172, - "lineto": 187, + "line": 174, + "lineto": 189, "block": "git_rebase_operation_t type\nconst git_oid id\nconst char * exec", "tdef": "typedef", "description": " A rebase operation", @@ -32672,8 +33193,8 @@ ], "type": "enum", "file": "git2/rebase.h", - "line": 120, - "lineto": 156, + "line": 119, + "lineto": 155, "block": "GIT_REBASE_OPERATION_PICK\nGIT_REBASE_OPERATION_REWORD\nGIT_REBASE_OPERATION_EDIT\nGIT_REBASE_OPERATION_SQUASH\nGIT_REBASE_OPERATION_FIXUP\nGIT_REBASE_OPERATION_EXEC", "tdef": "typedef", "description": " Type of rebase operation in-progress after calling `git_rebase_next`.", @@ -32737,7 +33258,7 @@ "value": "git_rebase_options", "file": "git2/rebase.h", "line": 32, - "lineto": 115, + "lineto": 114, "block": "unsigned int version\nint quiet\nint inmemory\nconst char * rewrite_notes_ref\ngit_merge_options merge_options\ngit_checkout_options checkout_options\ngit_commit_create_cb commit_create_cb\nint (*)(git_buf *, git_buf *, const char *, void *) signing_cb\nvoid * payload", "tdef": "typedef", "description": " Rebase options", @@ -32767,7 +33288,7 @@ { "type": "git_checkout_options", "name": "checkout_options", - "comments": " Options to control how files are written during `git_rebase_init`,\n `git_rebase_next` and `git_rebase_abort`. Note that a minimum\n strategy of `GIT_CHECKOUT_SAFE` is defaulted in `init` and `next`,\n and a minimum strategy of `GIT_CHECKOUT_FORCE` is defaulted in\n `abort` to match git semantics." + "comments": " Options to control how files are written during `git_rebase_init`,\n `git_rebase_next` and `git_rebase_abort`. Note that during\n `abort`, these options will add an implied `GIT_CHECKOUT_FORCE`\n to match git semantics." }, { "type": "git_commit_create_cb", @@ -32802,8 +33323,8 @@ "type": "struct", "value": "git_refdb", "file": "git2/types.h", - "line": 103, - "lineto": 103, + "line": 108, + "lineto": 108, "tdef": "typedef", "description": " An open refs database handle. ", "comments": "", @@ -32826,8 +33347,8 @@ "type": "struct", "value": "git_refdb_backend", "file": "git2/types.h", - "line": 106, - "lineto": 106, + "line": 111, + "lineto": 111, "tdef": "typedef", "description": " A custom backend for refs ", "comments": "", @@ -32841,8 +33362,8 @@ "type": "struct", "value": "git_reference", "file": "git2/types.h", - "line": 189, - "lineto": 189, + "line": 194, + "lineto": 194, "tdef": "typedef", "description": " In-memory representation of a reference. ", "comments": "", @@ -32915,8 +33436,8 @@ ], "type": "enum", "file": "git2/refs.h", - "line": 661, - "lineto": 690, + "line": 663, + "lineto": 692, "block": "GIT_REFERENCE_FORMAT_NORMAL\nGIT_REFERENCE_FORMAT_ALLOW_ONELEVEL\nGIT_REFERENCE_FORMAT_REFSPEC_PATTERN\nGIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND", "tdef": "typedef", "description": " Normalization options for reference lookup", @@ -32957,8 +33478,8 @@ "type": "struct", "value": "git_reference_iterator", "file": "git2/types.h", - "line": 192, - "lineto": 192, + "line": 197, + "lineto": 197, "tdef": "typedef", "description": " Iterator for references ", "comments": "", @@ -32985,8 +33506,8 @@ ], "type": "enum", "file": "git2/types.h", - "line": 207, - "lineto": 212, + "line": 223, + "lineto": 228, "block": "GIT_REFERENCE_INVALID\nGIT_REFERENCE_DIRECT\nGIT_REFERENCE_SYMBOLIC\nGIT_REFERENCE_ALL", "tdef": "typedef", "description": " Basic type of any Git reference. ", @@ -33027,8 +33548,8 @@ "type": "struct", "value": "git_reflog", "file": "git2/types.h", - "line": 166, - "lineto": 166, + "line": 171, + "lineto": 171, "tdef": "typedef", "description": " Representation of a reference log ", "comments": "", @@ -33058,8 +33579,8 @@ "type": "struct", "value": "git_reflog_entry", "file": "git2/types.h", - "line": 163, - "lineto": 163, + "line": 168, + "lineto": 168, "tdef": "typedef", "description": " Representation of a reference log entry ", "comments": "", @@ -33081,8 +33602,8 @@ "type": "struct", "value": "git_refspec", "file": "git2/types.h", - "line": 235, - "lineto": 235, + "line": 251, + "lineto": 251, "tdef": "typedef", "description": " A refspec specifies the mapping between remote and local reference\n names when fetch or pushing.", "comments": "", @@ -33098,6 +33619,7 @@ "git_refspec_rtransform", "git_refspec_src", "git_refspec_src_matches", + "git_refspec_src_matches_negative", "git_refspec_string", "git_refspec_transform" ] @@ -33111,8 +33633,8 @@ "type": "struct", "value": "git_remote", "file": "git2/types.h", - "line": 241, - "lineto": 241, + "line": 257, + "lineto": 257, "tdef": "typedef", "description": " Git's idea of a remote repository. A remote can be anonymous (in\n which case it does not have backing configuration entries).", "comments": "", @@ -33176,8 +33698,8 @@ ], "type": "enum", "file": "git2/remote.h", - "line": 696, - "lineto": 714, + "line": 739, + "lineto": 757, "block": "GIT_REMOTE_DOWNLOAD_TAGS_UNSPECIFIED\nGIT_REMOTE_DOWNLOAD_TAGS_AUTO\nGIT_REMOTE_DOWNLOAD_TAGS_NONE\nGIT_REMOTE_DOWNLOAD_TAGS_ALL", "tdef": "typedef", "description": " Automatic tag following option", @@ -33232,14 +33754,15 @@ "git_transport_cb transport", "git_remote_ready_cb remote_ready", "void * payload", - "git_url_resolve_cb resolve_url" + "git_url_resolve_cb resolve_url", + "int (*)(const char *, const git_oid *, const git_oid *, git_refspec *, void *) update_refs" ], "type": "struct", "value": "git_remote_callbacks", "file": "git2/remote.h", - "line": 557, - "lineto": 658, - "block": "unsigned int version\ngit_transport_message_cb sideband_progress\nint (*)(git_remote_completion_t, void *) completion\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\ngit_indexer_progress_cb transfer_progress\nint (*)(const char *, const git_oid *, const git_oid *, void *) update_tips\ngit_packbuilder_progress pack_progress\ngit_push_transfer_progress_cb push_transfer_progress\ngit_push_update_reference_cb push_update_reference\ngit_push_negotiation push_negotiation\ngit_transport_cb transport\ngit_remote_ready_cb remote_ready\nvoid * payload\ngit_url_resolve_cb resolve_url", + "line": 572, + "lineto": 698, + "block": "unsigned int version\ngit_transport_message_cb sideband_progress\nint (*)(git_remote_completion_t, void *) completion\ngit_credential_acquire_cb credentials\ngit_transport_certificate_check_cb certificate_check\ngit_indexer_progress_cb transfer_progress\nint (*)(const char *, const git_oid *, const git_oid *, void *) update_tips\ngit_packbuilder_progress pack_progress\ngit_push_transfer_progress_cb push_transfer_progress\ngit_push_update_reference_cb push_update_reference\ngit_push_negotiation push_negotiation\ngit_transport_cb transport\ngit_remote_ready_cb remote_ready\nvoid * payload\ngit_url_resolve_cb resolve_url\nint (*)(const char *, const git_oid *, const git_oid *, git_refspec *, void *) update_refs", "tdef": null, "description": " The callback settings structure", "comments": "

Set the callbacks to be called by the remote when informing the user about the progress of the network operations.

\n", @@ -33318,6 +33841,11 @@ "type": "git_url_resolve_cb", "name": "resolve_url", "comments": " Resolve URL before connecting to remote.\n The returned URL will be used to connect to the remote instead.\n\n This callback is deprecated; users should use\n git_remote_ready_cb and configure the instance URL instead." + }, + { + "type": "int (*)(const char *, const git_oid *, const git_oid *, git_refspec *, void *)", + "name": "update_refs", + "comments": "" } ], "used": { @@ -33341,8 +33869,8 @@ ], "type": "enum", "file": "git2/remote.h", - "line": 463, - "lineto": 467, + "line": 466, + "lineto": 470, "block": "GIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR\nGIT_REMOTE_COMPLETION_DOWNLOAD\nGIT_REMOTE_COMPLETION_INDEXING\nGIT_REMOTE_COMPLETION_ERROR", "tdef": "typedef", "description": " Argument to the completion callback which tells it which operation\n finished.", @@ -33383,8 +33911,8 @@ "type": "struct", "value": "git_remote_connect_options", "file": "git2/remote.h", - "line": 879, - "lineto": 897, + "line": 928, + "lineto": 946, "block": "unsigned int version\ngit_remote_callbacks callbacks\ngit_proxy_options proxy_opts\ngit_remote_redirect_t follow_redirects\ngit_strarray custom_headers", "tdef": "typedef", "description": " Remote creation options structure", @@ -33514,8 +34042,8 @@ "type": "struct", "value": "git_remote_head", "file": "git2/net.h", - "line": 40, - "lineto": 50, + "line": 41, + "lineto": 51, "block": "int local\ngit_oid oid\ngit_oid loid\nchar * name\nchar * symref_target", "tdef": null, "description": " Description of a reference advertised by a remote server, given out\n on `ls` calls.", @@ -33612,8 +34140,8 @@ "type": "struct", "value": "git_repository", "file": "git2/types.h", - "line": 118, - "lineto": 118, + "line": 123, + "lineto": 123, "tdef": "typedef", "description": " Representation of an existing git repository,\n including all its object contents", "comments": "", @@ -33646,7 +34174,6 @@ "git_attr_get_ext", "git_attr_get_many", "git_attr_get_many_ext", - "git_blame_file", "git_blob_create_from_buffer", "git_blob_create_from_disk", "git_blob_create_from_stream", @@ -33707,15 +34234,6 @@ "git_merge_commits", "git_merge_file_from_index", "git_merge_trees", - "git_note_commit_create", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_create", - "git_note_default_ref", - "git_note_foreach", - "git_note_iterator_new", - "git_note_read", - "git_note_remove", "git_object_lookup", "git_object_lookup_prefix", "git_packbuilder_new", @@ -33801,6 +34319,7 @@ "git_repository_state", "git_repository_state_cleanup", "git_repository_workdir", + "git_repository_wrap_odb", "git_reset", "git_reset_default", "git_reset_from_annotated", @@ -33811,6 +34330,7 @@ "git_revparse_single", "git_revwalk_new", "git_signature_default", + "git_signature_default_from_env", "git_stash_apply", "git_stash_drop", "git_stash_foreach", @@ -33873,8 +34393,8 @@ ], "type": "enum", "file": "git2/repository.h", - "line": 236, - "lineto": 282, + "line": 249, + "lineto": 295, "block": "GIT_REPOSITORY_INIT_BARE\nGIT_REPOSITORY_INIT_NO_REINIT\nGIT_REPOSITORY_INIT_NO_DOTGIT_DIR\nGIT_REPOSITORY_INIT_MKDIR\nGIT_REPOSITORY_INIT_MKPATH\nGIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE\nGIT_REPOSITORY_INIT_RELATIVE_GITLINK", "tdef": "typedef", "description": " Option flags for `git_repository_init_ext`.", @@ -33936,8 +34456,8 @@ ], "type": "enum", "file": "git2/repository.h", - "line": 291, - "lineto": 307, + "line": 304, + "lineto": 320, "block": "GIT_REPOSITORY_INIT_SHARED_UMASK\nGIT_REPOSITORY_INIT_SHARED_GROUP\nGIT_REPOSITORY_INIT_SHARED_ALL", "tdef": "typedef", "description": " Mode options for `git_repository_init_ext`.", @@ -33981,8 +34501,8 @@ "type": "struct", "value": "git_repository_init_options", "file": "git2/repository.h", - "line": 315, - "lineto": 374, + "line": 328, + "lineto": 387, "block": "unsigned int version\nuint32_t flags\nuint32_t mode\nconst char * workdir_path\nconst char * description\nconst char * template_path\nconst char * initial_head\nconst char * origin_url", "tdef": "typedef", "description": " Extended options structure for `git_repository_init_ext`.", @@ -34057,8 +34577,8 @@ ], "type": "enum", "file": "git2/repository.h", - "line": 492, - "lineto": 509, + "line": 512, + "lineto": 529, "block": "GIT_REPOSITORY_ITEM_GITDIR\nGIT_REPOSITORY_ITEM_WORKDIR\nGIT_REPOSITORY_ITEM_COMMONDIR\nGIT_REPOSITORY_ITEM_INDEX\nGIT_REPOSITORY_ITEM_OBJECTS\nGIT_REPOSITORY_ITEM_REFS\nGIT_REPOSITORY_ITEM_PACKED_REFS\nGIT_REPOSITORY_ITEM_REMOTES\nGIT_REPOSITORY_ITEM_CONFIG\nGIT_REPOSITORY_ITEM_INFO\nGIT_REPOSITORY_ITEM_HOOKS\nGIT_REPOSITORY_ITEM_LOGS\nGIT_REPOSITORY_ITEM_MODULES\nGIT_REPOSITORY_ITEM_WORKTREES\nGIT_REPOSITORY_ITEM_WORKTREE_CONFIG\nGIT_REPOSITORY_ITEM__LAST", "tdef": "typedef", "description": " List of items which belong to the git repository layout", @@ -34176,8 +34696,8 @@ ], "type": "enum", "file": "git2/repository.h", - "line": 109, - "lineto": 156, + "line": 110, + "lineto": 157, "block": "GIT_REPOSITORY_OPEN_NO_SEARCH\nGIT_REPOSITORY_OPEN_CROSS_FS\nGIT_REPOSITORY_OPEN_BARE\nGIT_REPOSITORY_OPEN_NO_DOTGIT\nGIT_REPOSITORY_OPEN_FROM_ENV", "tdef": "typedef", "description": " Option flags for `git_repository_open_ext`.", @@ -34236,8 +34756,8 @@ ], "type": "enum", "file": "git2/repository.h", - "line": 893, - "lineto": 906, + "line": 915, + "lineto": 928, "block": "GIT_REPOSITORY_STATE_NONE\nGIT_REPOSITORY_STATE_MERGE\nGIT_REPOSITORY_STATE_REVERT\nGIT_REPOSITORY_STATE_REVERT_SEQUENCE\nGIT_REPOSITORY_STATE_CHERRYPICK\nGIT_REPOSITORY_STATE_CHERRYPICK_SEQUENCE\nGIT_REPOSITORY_STATE_BISECT\nGIT_REPOSITORY_STATE_REBASE\nGIT_REPOSITORY_STATE_REBASE_INTERACTIVE\nGIT_REPOSITORY_STATE_REBASE_MERGE\nGIT_REPOSITORY_STATE_APPLY_MAILBOX\nGIT_REPOSITORY_STATE_APPLY_MAILBOX_OR_REBASE", "tdef": "typedef", "description": " Repository state", @@ -34478,8 +34998,8 @@ "type": "struct", "value": "git_revwalk", "file": "git2/types.h", - "line": 127, - "lineto": 127, + "line": 132, + "lineto": 132, "tdef": "typedef", "description": " Representation of an in-progress walk through the commits in a repo ", "comments": "", @@ -34515,8 +35035,8 @@ "type": "struct", "value": "git_signature", "file": "git2/types.h", - "line": 182, - "lineto": 186, + "line": 187, + "lineto": 191, "block": "char * name\nchar * email\ngit_time when", "tdef": "typedef", "description": " An action signature (e.g. for committers, taggers, etc) ", @@ -34542,8 +35062,6 @@ "returns": [ "git_commit_author", "git_commit_committer", - "git_note_author", - "git_note_committer", "git_reflog_entry_committer", "git_tag_tagger" ], @@ -34555,16 +35073,12 @@ "git_commit_create_buffer", "git_commit_create_cb", "git_commit_create_v", - "git_email_create_from_diff", "git_mailmap_resolve_signature", - "git_note_commit_create", - "git_note_commit_remove", - "git_note_create", - "git_note_remove", "git_rebase_commit", "git_rebase_finish", "git_reflog_append", "git_signature_default", + "git_signature_default_from_env", "git_signature_dup", "git_signature_free", "git_signature_from_buffer", @@ -34590,8 +35104,8 @@ ], "type": "enum", "file": "git2/sys/transport.h", - "line": 313, - "lineto": 318, + "line": 323, + "lineto": 328, "block": "GIT_SERVICE_UPLOADPACK_LS\nGIT_SERVICE_UPLOADPACK\nGIT_SERVICE_RECEIVEPACK_LS\nGIT_SERVICE_RECEIVEPACK", "tdef": "typedef", "description": " Actions that the smart transport can ask a subtransport to perform ", @@ -34677,8 +35191,8 @@ "decl": ["GIT_STASH_APPLY_DEFAULT", "GIT_STASH_APPLY_REINSTATE_INDEX"], "type": "enum", "file": "git2/stash.h", - "line": 129, - "lineto": 136, + "line": 137, + "lineto": 144, "block": "GIT_STASH_APPLY_DEFAULT\nGIT_STASH_APPLY_REINSTATE_INDEX", "tdef": "typedef", "description": " Stash application flags. ", @@ -34713,8 +35227,8 @@ "type": "struct", "value": "git_stash_apply_options", "file": "git2/stash.h", - "line": 180, - "lineto": 192, + "line": 192, + "lineto": 204, "block": "unsigned int version\nuint32_t flags\ngit_checkout_options checkout_options\ngit_stash_apply_progress_cb progress_cb\nvoid * progress_payload", "tdef": "typedef", "description": " Stash application options structure", @@ -34763,8 +35277,8 @@ ], "type": "enum", "file": "git2/stash.h", - "line": 139, - "lineto": 162, + "line": 147, + "lineto": 170, "block": "GIT_STASH_APPLY_PROGRESS_NONE\nGIT_STASH_APPLY_PROGRESS_LOADING_STASH\nGIT_STASH_APPLY_PROGRESS_ANALYZE_INDEX\nGIT_STASH_APPLY_PROGRESS_ANALYZE_MODIFIED\nGIT_STASH_APPLY_PROGRESS_ANALYZE_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_UNTRACKED\nGIT_STASH_APPLY_PROGRESS_CHECKOUT_MODIFIED\nGIT_STASH_APPLY_PROGRESS_DONE", "tdef": "typedef", "description": " Stash apply progression states ", @@ -34834,8 +35348,8 @@ ], "type": "enum", "file": "git2/stash.h", - "line": 25, - "lineto": 53, + "line": 30, + "lineto": 58, "block": "GIT_STASH_DEFAULT\nGIT_STASH_KEEP_INDEX\nGIT_STASH_INCLUDE_UNTRACKED\nGIT_STASH_INCLUDE_IGNORED\nGIT_STASH_KEEP_ALL", "tdef": "typedef", "description": " Stash flags", @@ -34888,8 +35402,8 @@ "type": "struct", "value": "git_stash_save_options", "file": "git2/stash.h", - "line": 81, - "lineto": 95, + "line": 86, + "lineto": 100, "block": "unsigned int version\nuint32_t flags\nconst git_signature * stasher\nconst char * message\ngit_strarray paths", "tdef": "typedef", "description": " Stash save options structure", @@ -34934,8 +35448,8 @@ "type": "struct", "value": "git_status_entry", "file": "git2/status.h", - "line": 295, - "lineto": 299, + "line": 298, + "lineto": 302, "block": "git_status_t status\ngit_diff_delta * head_to_index\ngit_diff_delta * index_to_workdir", "tdef": "typedef", "description": " A status entry, providing the differences between the file as it exists\n in HEAD and the index, and providing the differences between the index\n and the working directory.", @@ -34963,8 +35477,8 @@ "type": "struct", "value": "git_status_list", "file": "git2/types.h", - "line": 201, - "lineto": 201, + "line": 217, + "lineto": 217, "tdef": "typedef", "description": " Representation of a status collection ", "comments": "", @@ -35002,8 +35516,8 @@ ], "type": "enum", "file": "git2/status.h", - "line": 101, - "lineto": 208, + "line": 100, + "lineto": 207, "block": "GIT_STATUS_OPT_INCLUDE_UNTRACKED\nGIT_STATUS_OPT_INCLUDE_IGNORED\nGIT_STATUS_OPT_INCLUDE_UNMODIFIED\nGIT_STATUS_OPT_EXCLUDE_SUBMODULES\nGIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS\nGIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH\nGIT_STATUS_OPT_RECURSE_IGNORED_DIRS\nGIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX\nGIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR\nGIT_STATUS_OPT_SORT_CASE_SENSITIVELY\nGIT_STATUS_OPT_SORT_CASE_INSENSITIVELY\nGIT_STATUS_OPT_RENAMES_FROM_REWRITES\nGIT_STATUS_OPT_NO_REFRESH\nGIT_STATUS_OPT_UPDATE_INDEX\nGIT_STATUS_OPT_INCLUDE_UNREADABLE\nGIT_STATUS_OPT_INCLUDE_UNREADABLE_AS_UNTRACKED", "tdef": "typedef", "description": " Flags to control status callbacks", @@ -35181,8 +35695,8 @@ ], "type": "enum", "file": "git2/status.h", - "line": 73, - "lineto": 91, + "line": 72, + "lineto": 90, "block": "GIT_STATUS_SHOW_INDEX_AND_WORKDIR\nGIT_STATUS_SHOW_INDEX_ONLY\nGIT_STATUS_SHOW_WORKDIR_ONLY", "tdef": "typedef", "description": " Select the files on which to report status.", @@ -35377,8 +35891,8 @@ "decl": ["GIT_STREAM_STANDARD", "GIT_STREAM_TLS"], "type": "enum", "file": "git2/sys/stream.h", - "line": 91, - "lineto": 97, + "line": 99, + "lineto": 105, "block": "GIT_STREAM_STANDARD\nGIT_STREAM_TLS", "tdef": "typedef", "description": " The type of stream to register.", @@ -35407,8 +35921,8 @@ "type": "struct", "value": "git_submodule", "file": "git2/types.h", - "line": 267, - "lineto": 267, + "line": 283, + "lineto": 283, "tdef": "typedef", "description": " Opaque structure representing a submodule.", "comments": "", @@ -35467,8 +35981,8 @@ ], "type": "enum", "file": "git2/types.h", - "line": 331, - "lineto": 338, + "line": 347, + "lineto": 354, "block": "GIT_SUBMODULE_IGNORE_UNSPECIFIED\nGIT_SUBMODULE_IGNORE_NONE\nGIT_SUBMODULE_IGNORE_UNTRACKED\nGIT_SUBMODULE_IGNORE_DIRTY\nGIT_SUBMODULE_IGNORE_ALL", "tdef": "typedef", "description": " Submodule ignore values", @@ -35521,8 +36035,8 @@ ], "type": "enum", "file": "git2/types.h", - "line": 350, - "lineto": 354, + "line": 366, + "lineto": 370, "block": "GIT_SUBMODULE_RECURSE_NO\nGIT_SUBMODULE_RECURSE_YES\nGIT_SUBMODULE_RECURSE_ONDEMAND", "tdef": "typedef", "description": " Options for submodule recurse.", @@ -35681,8 +36195,8 @@ "type": "struct", "value": "git_submodule_update_options", "file": "git2/submodule.h", - "line": 128, - "lineto": 153, + "line": 135, + "lineto": 158, "block": "unsigned int version\ngit_checkout_options checkout_opts\ngit_fetch_options fetch_opts\nint allow_fetch", "tdef": "typedef", "description": " Submodule update options structure", @@ -35692,7 +36206,7 @@ { "type": "git_checkout_options", "name": "checkout_opts", - "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to\n `GIT_CHECKOUT_NONE`. Generally you will want the use\n GIT_CHECKOUT_SAFE to update files in the working\n directory." + "comments": " These options are passed to the checkout step. To disable\n checkout, set the `checkout_strategy` to `GIT_CHECKOUT_NONE`\n or `GIT_CHECKOUT_DRY_RUN`." }, { "type": "git_fetch_options", @@ -35727,8 +36241,8 @@ ], "type": "enum", "file": "git2/types.h", - "line": 295, - "lineto": 302, + "line": 311, + "lineto": 318, "block": "GIT_SUBMODULE_UPDATE_CHECKOUT\nGIT_SUBMODULE_UPDATE_REBASE\nGIT_SUBMODULE_UPDATE_MERGE\nGIT_SUBMODULE_UPDATE_NONE\nGIT_SUBMODULE_UPDATE_DEFAULT", "tdef": "typedef", "description": " Submodule update values", @@ -35778,8 +36292,8 @@ "type": "struct", "value": "git_tag", "file": "git2/types.h", - "line": 130, - "lineto": 130, + "line": 135, + "lineto": 135, "tdef": "typedef", "description": " Parsed representation of a tag object. ", "comments": "", @@ -35811,8 +36325,8 @@ "type": "struct", "value": "git_time", "file": "git2/types.h", - "line": 175, - "lineto": 179, + "line": 180, + "lineto": 184, "block": "git_time_t time\nint offset\nchar sign", "tdef": "typedef", "description": " Time in a signature ", @@ -35914,8 +36428,8 @@ "type": "struct", "value": "git_transaction", "file": "git2/types.h", - "line": 195, - "lineto": 195, + "line": 200, + "lineto": 200, "tdef": "typedef", "description": " Transactional interface to references ", "comments": "", @@ -35942,8 +36456,8 @@ "type": "struct", "value": "git_transport", "file": "git2/types.h", - "line": 247, - "lineto": 247, + "line": 263, + "lineto": 263, "tdef": "typedef", "description": " Interface which represents a transport to communicate with a\n remote.", "comments": "", @@ -35957,8 +36471,8 @@ "type": "struct", "value": "git_tree", "file": "git2/types.h", - "line": 142, - "lineto": 142, + "line": 147, + "lineto": 147, "tdef": "typedef", "description": " Representation of a tree object. ", "comments": "", @@ -36029,8 +36543,8 @@ "type": "struct", "value": "git_tree_entry", "file": "git2/types.h", - "line": 139, - "lineto": 139, + "line": 144, + "lineto": 144, "tdef": "typedef", "description": " Representation of each one of the entries in a tree object. ", "comments": "", @@ -36071,8 +36585,8 @@ "type": "struct", "value": "git_tree_update", "file": "git2/tree.h", - "line": 438, - "lineto": 447, + "line": 449, + "lineto": 458, "block": "git_tree_update_t action\ngit_oid id\ngit_filemode_t filemode\nconst char * path", "tdef": "typedef", "description": " An action to perform during the update of a tree", @@ -36104,8 +36618,8 @@ "decl": ["GIT_TREE_UPDATE_UPSERT", "GIT_TREE_UPDATE_REMOVE"], "type": "enum", "file": "git2/tree.h", - "line": 428, - "lineto": 433, + "line": 439, + "lineto": 444, "block": "GIT_TREE_UPDATE_UPSERT\nGIT_TREE_UPDATE_REMOVE", "tdef": "typedef", "description": " The kind of update to perform", @@ -36134,8 +36648,8 @@ "type": "struct", "value": "git_treebuilder", "file": "git2/types.h", - "line": 145, - "lineto": 145, + "line": 150, + "lineto": 150, "tdef": "typedef", "description": " Constructor for in-memory trees ", "comments": "", @@ -36162,8 +36676,8 @@ "decl": ["GIT_TREEWALK_PRE", "GIT_TREEWALK_POST"], "type": "enum", "file": "git2/tree.h", - "line": 387, - "lineto": 390, + "line": 398, + "lineto": 401, "block": "GIT_TREEWALK_PRE\nGIT_TREEWALK_POST", "tdef": "typedef", "description": " Tree traversal modes ", @@ -36192,8 +36706,8 @@ "type": "struct", "value": "git_worktree", "file": "git2/types.h", - "line": 121, - "lineto": 121, + "line": 126, + "lineto": 126, "tdef": "typedef", "description": " Representation of a working tree ", "comments": "", @@ -36274,8 +36788,8 @@ "type": "struct", "value": "git_worktree_prune_options", "file": "git2/worktree.h", - "line": 207, - "lineto": 212, + "line": 210, + "lineto": 215, "block": "unsigned int version\nuint32_t flags", "tdef": "typedef", "description": " Worktree prune options structure", @@ -36308,8 +36822,8 @@ ], "type": "enum", "file": "git2/worktree.h", - "line": 191, - "lineto": 198, + "line": 194, + "lineto": 201, "block": "GIT_WORKTREE_PRUNE_VALID\nGIT_WORKTREE_PRUNE_LOCKED\nGIT_WORKTREE_PRUNE_WORKING_TREE", "tdef": "typedef", "description": " Flags which can be passed to git_worktree_prune to alter its\n behavior.", @@ -36348,8 +36862,8 @@ "type": "struct", "value": "git_writestream", "file": "git2/types.h", - "line": 359, - "lineto": 363, + "line": 375, + "lineto": 379, "tdef": null, "description": " A type to write in a streaming fashion, for example, for filters. ", "comments": "", @@ -36418,12 +36932,16 @@ "blame", [ "git_blame_buffer", - "git_blame_file", "git_blame_free", "git_blame_get_hunk_byindex", "git_blame_get_hunk_byline", "git_blame_get_hunk_count", + "git_blame_hunk_byindex", + "git_blame_hunk_byline", + "git_blame_hunkcount", "git_blame_init_options", + "git_blame_line_byindex", + "git_blame_linecount", "git_blame_options_init" ] ], @@ -36581,6 +37099,7 @@ "git_config_set_int64", "git_config_set_multivar", "git_config_set_string", + "git_config_set_writeorder", "git_config_snapshot" ] ], @@ -36651,7 +37170,7 @@ "git_diff_tree_to_workdir_with_index" ] ], - ["email", ["git_email_create_from_commit", "git_email_create_from_diff"]], + ["email", ["git_email_create_from_commit"]], ["error", ["git_error_last"]], ["fetch", ["git_fetch_options_init"]], [ @@ -36720,6 +37239,8 @@ "git_index_iterator_free", "git_index_iterator_new", "git_index_iterator_next", + "git_index_new", + "git_index_open", "git_index_owner", "git_index_path", "git_index_read", @@ -36752,6 +37273,7 @@ [ "libgit2", [ + "git_libgit2_feature_backend", "git_libgit2_features", "git_libgit2_init", "git_libgit2_opts", @@ -36801,28 +37323,7 @@ "git_message_trailers" ] ], - [ - "note", - [ - "git_note_author", - "git_note_commit_create", - "git_note_commit_iterator_new", - "git_note_commit_read", - "git_note_commit_remove", - "git_note_committer", - "git_note_create", - "git_note_default_ref", - "git_note_foreach", - "git_note_free", - "git_note_id", - "git_note_iterator_free", - "git_note_iterator_new", - "git_note_message", - "git_note_next", - "git_note_read", - "git_note_remove" - ] - ], + ["note", ["git_note_iterator_free", "git_note_next"]], [ "object", [ @@ -36849,6 +37350,9 @@ "git_odb_add_alternate", "git_odb_add_backend", "git_odb_add_disk_alternate", + "git_odb_backend_loose", + "git_odb_backend_one_pack", + "git_odb_backend_pack", "git_odb_exists", "git_odb_exists_ext", "git_odb_exists_prefix", @@ -36856,6 +37360,9 @@ "git_odb_foreach", "git_odb_free", "git_odb_get_backend", + "git_odb_hash", + "git_odb_hashfile", + "git_odb_new", "git_odb_num_backends", "git_odb_object_data", "git_odb_object_dup", @@ -36863,6 +37370,7 @@ "git_odb_object_id", "git_odb_object_size", "git_odb_object_type", + "git_odb_open", "git_odb_open_rstream", "git_odb_open_wstream", "git_odb_read", @@ -36886,6 +37394,10 @@ "git_oid_cpy", "git_oid_equal", "git_oid_fmt", + "git_oid_fromraw", + "git_oid_fromstr", + "git_oid_fromstrn", + "git_oid_fromstrp", "git_oid_is_zero", "git_oid_ncmp", "git_oid_nfmt", @@ -37068,6 +37580,7 @@ "git_refspec_rtransform", "git_refspec_src", "git_refspec_src_matches", + "git_refspec_src_matches_negative", "git_refspec_string", "git_refspec_transform" ] @@ -37171,7 +37684,8 @@ "git_repository_set_workdir", "git_repository_state", "git_repository_state_cleanup", - "git_repository_workdir" + "git_repository_workdir", + "git_repository_wrap_odb" ] ], ["reset", ["git_reset", "git_reset_default", "git_reset_from_annotated"]], @@ -37203,6 +37717,7 @@ "signature", [ "git_signature_default", + "git_signature_default_from_env", "git_signature_dup", "git_signature_free", "git_signature_from_buffer", @@ -37385,34 +37900,34 @@ ] ], "examples": [ - ["add.c", "ex/v1.8.4/add.html"], - ["args.c", "ex/v1.8.4/args.html"], - ["blame.c", "ex/v1.8.4/blame.html"], - ["cat-file.c", "ex/v1.8.4/cat-file.html"], - ["checkout.c", "ex/v1.8.4/checkout.html"], - ["clone.c", "ex/v1.8.4/clone.html"], - ["commit.c", "ex/v1.8.4/commit.html"], - ["common.c", "ex/v1.8.4/common.html"], - ["config.c", "ex/v1.8.4/config.html"], - ["describe.c", "ex/v1.8.4/describe.html"], - ["diff.c", "ex/v1.8.4/diff.html"], - ["fetch.c", "ex/v1.8.4/fetch.html"], - ["for-each-ref.c", "ex/v1.8.4/for-each-ref.html"], - ["general.c", "ex/v1.8.4/general.html"], - ["index-pack.c", "ex/v1.8.4/index-pack.html"], - ["init.c", "ex/v1.8.4/init.html"], - ["lg2.c", "ex/v1.8.4/lg2.html"], - ["log.c", "ex/v1.8.4/log.html"], - ["ls-files.c", "ex/v1.8.4/ls-files.html"], - ["ls-remote.c", "ex/v1.8.4/ls-remote.html"], - ["merge.c", "ex/v1.8.4/merge.html"], - ["push.c", "ex/v1.8.4/push.html"], - ["remote.c", "ex/v1.8.4/remote.html"], - ["rev-list.c", "ex/v1.8.4/rev-list.html"], - ["rev-parse.c", "ex/v1.8.4/rev-parse.html"], - ["show-index.c", "ex/v1.8.4/show-index.html"], - ["stash.c", "ex/v1.8.4/stash.html"], - ["status.c", "ex/v1.8.4/status.html"], - ["tag.c", "ex/v1.8.4/tag.html"] + ["add.c", "ex/v1.9.1/add.html"], + ["args.c", "ex/v1.9.1/args.html"], + ["blame.c", "ex/v1.9.1/blame.html"], + ["cat-file.c", "ex/v1.9.1/cat-file.html"], + ["checkout.c", "ex/v1.9.1/checkout.html"], + ["clone.c", "ex/v1.9.1/clone.html"], + ["commit.c", "ex/v1.9.1/commit.html"], + ["common.c", "ex/v1.9.1/common.html"], + ["config.c", "ex/v1.9.1/config.html"], + ["describe.c", "ex/v1.9.1/describe.html"], + ["diff.c", "ex/v1.9.1/diff.html"], + ["fetch.c", "ex/v1.9.1/fetch.html"], + ["for-each-ref.c", "ex/v1.9.1/for-each-ref.html"], + ["general.c", "ex/v1.9.1/general.html"], + ["index-pack.c", "ex/v1.9.1/index-pack.html"], + ["init.c", "ex/v1.9.1/init.html"], + ["lg2.c", "ex/v1.9.1/lg2.html"], + ["log.c", "ex/v1.9.1/log.html"], + ["ls-files.c", "ex/v1.9.1/ls-files.html"], + ["ls-remote.c", "ex/v1.9.1/ls-remote.html"], + ["merge.c", "ex/v1.9.1/merge.html"], + ["push.c", "ex/v1.9.1/push.html"], + ["remote.c", "ex/v1.9.1/remote.html"], + ["rev-list.c", "ex/v1.9.1/rev-list.html"], + ["rev-parse.c", "ex/v1.9.1/rev-parse.html"], + ["show-index.c", "ex/v1.9.1/show-index.html"], + ["stash.c", "ex/v1.9.1/stash.html"], + ["status.c", "ex/v1.9.1/status.html"], + ["tag.c", "ex/v1.9.1/tag.html"] ] } diff --git a/vendor/libgit2 b/vendor/libgit2 index 6bfd2b901..2644628ed 160000 --- a/vendor/libgit2 +++ b/vendor/libgit2 @@ -1 +1 @@ -Subproject commit 6bfd2b9011897a30494451e75a95cff5b88b93b9 +Subproject commit 2644628edb8742338a952d40f5e9549b17480e3a diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index 36dc305e5..a155fb67f 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -83,9 +83,9 @@ "libgit2/src/libgit2/graph.c", "libgit2/src/libgit2/hashsig.c", "libgit2/src/libgit2/ident.c", - "libgit2/src/libgit2/idxmap.c", "libgit2/src/libgit2/ignore.c", "libgit2/src/libgit2/index.c", + "libgit2/src/libgit2/index_map.c", "libgit2/src/libgit2/indexer.c", "libgit2/src/libgit2/iterator.c", "libgit2/src/libgit2/libgit2.c", @@ -103,10 +103,8 @@ "libgit2/src/libgit2/odb_loose.c", "libgit2/src/libgit2/odb_mempack.c", "libgit2/src/libgit2/odb_pack.c", - "libgit2/src/libgit2/offmap.c", "libgit2/src/libgit2/oid.c", "libgit2/src/libgit2/oidarray.c", - "libgit2/src/libgit2/oidmap.c", "libgit2/src/libgit2/pack-objects.c", "libgit2/src/libgit2/pack.c", "libgit2/src/libgit2/parse.c", @@ -197,7 +195,6 @@ "libgit2/src/util/sortedcache.c", "libgit2/src/util/str.c", "libgit2/src/util/strlist.c", - "libgit2/src/util/strmap.c", "libgit2/src/util/thread.c", "libgit2/src/util/tsort.c", "libgit2/src/util/utf8.c", From c3ab6082b7c9a7478a3c382f881d4d0fe8654ead Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 16 Oct 2025 16:46:03 -0700 Subject: [PATCH 066/103] remove special-case for git_oid_fromstrp --- generate/input/libgit2-supplement.json | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/generate/input/libgit2-supplement.json b/generate/input/libgit2-supplement.json index d94be9ba0..f9de5700d 100644 --- a/generate/input/libgit2-supplement.json +++ b/generate/input/libgit2-supplement.json @@ -667,25 +667,6 @@ }, "group": "index_reuc_entry" }, - "git_oid_fromstrp": { - "type": "function", - "file": "oid.h", - "args": [ - { - "name": "out", - "type": "git_oid *" - }, - { - "name": "str", - "type": "const char *" - } - ], - "return": { - "type": "int" - }, - "isAsync": false, - "group": "oid" - }, "git_patch_convenient_from_diff": { "args": [ { @@ -1171,12 +1152,6 @@ "git_merge_file_result_free" ] ], - [ - "oid", - [ - "git_oid_fromstrp" - ] - ], [ "odb_object", [ From 6b546f47f025ccab591b1b16b675510369c7ac2b Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 17 Oct 2025 19:17:57 -0700 Subject: [PATCH 067/103] fix missing blame functions and struct --- generate/input/libgit2-supplement.json | 114 ++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 4 deletions(-) diff --git a/generate/input/libgit2-supplement.json b/generate/input/libgit2-supplement.json index f9de5700d..732f27923 100644 --- a/generate/input/libgit2-supplement.json +++ b/generate/input/libgit2-supplement.json @@ -216,7 +216,7 @@ ] } }, - "new" : { + "new": { "functions": { "git_libgit2_opts": { "type": "function", @@ -226,6 +226,33 @@ "isPrototypeMethod": false, "group": "libgit2" }, + "git_blame_file": { + "type": "function", + "file": "blame.h", + "args": [ + { + "name": "out", + "type": "git_blame **" + }, + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "path", + "type": "const char *" + }, + { + "name": "options", + "type": "git_blame_options *" + } + ], + "group": "blame", + "return": { + "type": "int", + "isErrorCode": true + } + }, "git_clone": { "isManual": true, "cFile": "generate/templates/manual/clone/clone.cc", @@ -1298,6 +1325,62 @@ } } ], + [ + "git_blame_hunk", + { + "type": "struct", + "fields": [ + { + "name": "lines_in_hunk", + "type": "int" + }, + { + "name": "final_commit_id", + "type": "git_oid" + }, + { + "name": "final_start_line_number", + "type": "size_t" + }, + { + "name": "final_signature", + "type": "git_signature *" + }, + { + "name": "final_committer", + "type": "git_signature *" + }, + { + "name": "orig_commit_id", + "type": "git_oid" + }, + { + "name": "orig_path", + "type": "const char *" + }, + { + "name": "orig_start_line_number", + "type": "size_t" + }, + { + "name": "orig_signature", + "type": "git_signature *" + }, + { + "name": "orig_committer", + "type": "git_signature *" + }, + { + "name": "summary", + "type": "const char *" + }, + { + "name": "boundary", + "type": "char" + } + ] + } + ], [ "git_blob_filter_options", { @@ -1383,7 +1466,7 @@ ], [ "git_commit_create_options", - { + { "decl": [ "unsigned int version", "unsigned int allow_empty_commit : 1", @@ -2138,5 +2221,28 @@ ] } }, - "groups": {} -} + "groups": { + "blame": [ + "git_blame_file" + ], + "note": [ + "git_note_author", + "git_note_commit_create", + "git_note_commit_iterator_new", + "git_note_commit_read", + "git_note_commit_remove", + "git_note_committer", + "git_note_create", + "git_note_default_ref", + "git_note_foreach", + "git_note_free", + "git_note_id", + "git_note_iterator_free", + "git_note_iterator_new", + "git_note_message", + "git_note_next", + "git_note_read", + "git_note_remove" + ] + } +} \ No newline at end of file From 4ce9820deeca62fb02bcf1cde3a8c13aecda97ef Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 17 Oct 2025 19:19:39 -0700 Subject: [PATCH 068/103] fix missing note functions --- generate/input/libgit2-supplement.json | 394 +++++++++++++++++++++++++ 1 file changed, 394 insertions(+) diff --git a/generate/input/libgit2-supplement.json b/generate/input/libgit2-supplement.json index 732f27923..09433e7fa 100644 --- a/generate/input/libgit2-supplement.json +++ b/generate/input/libgit2-supplement.json @@ -694,6 +694,400 @@ }, "group": "index_reuc_entry" }, + "git_note_author": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "note", + "type": "const git_note *" + } + ], + "return": { + "type": "const git_signature *" + }, + "group": "note" + }, + "git_note_commit_create": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "notes_commit_out", + "type": "git_oid *" + }, + { + "name": "notes_blob_out", + "type": "git_oid *" + }, + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "parent", + "type": "git_commit *" + }, + { + "name": "author", + "type": "const git_signature *" + }, + { + "name": "committer", + "type": "const git_signature *" + }, + { + "name": "oid", + "type": "const git_oid *" + }, + { + "name": "note", + "type": "const char *" + }, + { + "name": "allow_note_overwrite", + "type": "int" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_commit_iterator_new": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "out", + "type": "git_note_iterator **" + }, + { + "name": "notes_commit", + "type": "git_commit *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_commit_read": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "out", + "type": "git_note **" + }, + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "notes_commit", + "type": "git_commit *" + }, + { + "name": "oid", + "type": "const git_oid *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_commit_remove": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "notes_commit_out", + "type": "git_oid *" + }, + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "notes_commit", + "type": "git_commit *" + }, + { + "name": "author", + "type": "const git_signature *" + }, + { + "name": "committer", + "type": "const git_signature *" + }, + { + "name": "oid", + "type": "const git_oid *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_committer": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "note", + "type": "const git_note *" + } + ], + "return": { + "type": "const git_signature *" + }, + "group": "note" + }, + "git_note_create": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "out", + "type": "git_oid *" + }, + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "notes_ref", + "type": "const char *" + }, + { + "name": "author", + "type": "const git_signature *" + }, + { + "name": "committer", + "type": "const git_signature *" + }, + { + "name": "oid", + "type": "const git_oid *" + }, + { + "name": "note", + "type": "const char *" + }, + { + "name": "force", + "type": "int" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_default_ref": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "out", + "type": "git_buf *" + }, + { + "name": "repo", + "type": "git_repository *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_foreach": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "notes_ref", + "type": "const char *" + }, + { + "name": "note_cb", + "type": "git_note_foreach_cb" + }, + { + "name": "payload", + "type": "void *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_free": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "note", + "type": "git_note *" + } + ], + "return": { + "type": "void" + }, + "group": "note" + }, + "git_note_id": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "note", + "type": "const git_note *" + } + ], + "return": { + "type": "const git_oid *" + }, + "group": "note" + }, + "git_note_iterator_free": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "it", + "type": "git_note_iterator *" + } + ], + "return": { + "type": "void" + }, + "group": "note" + }, + "git_note_iterator_new": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "out", + "type": "git_note_iterator **" + }, + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "notes_ref", + "type": "const char *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_message": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "note", + "type": "const git_note *" + } + ], + "return": { + "type": "const char *" + }, + "group": "note" + }, + "git_note_next": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "note_id", + "type": "git_oid *" + }, + { + "name": "annotated_id", + "type": "git_oid *" + }, + { + "name": "it", + "type": "git_note_iterator *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_read": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "out", + "type": "git_note **" + }, + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "notes_ref", + "type": "const char *" + }, + { + "name": "oid", + "type": "const git_oid *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, + "git_note_remove": { + "type": "function", + "file": "note.h", + "args": [ + { + "name": "repo", + "type": "git_repository *" + }, + { + "name": "notes_ref", + "type": "const char *" + }, + { + "name": "author", + "type": "const git_signature *" + }, + { + "name": "committer", + "type": "const git_signature *" + }, + { + "name": "oid", + "type": "const git_oid *" + } + ], + "return": { + "type": "int" + }, + "group": "note" + }, "git_patch_convenient_from_diff": { "args": [ { From 676a56753dfc23dbf7221ac5e35530704a29bc25 Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 17 Oct 2025 19:22:13 -0700 Subject: [PATCH 069/103] fix odb.read mis-classification first parameter had it's name changed so it's no longer treated as an output parameter --- generate/input/descriptor.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index 3e305900d..889b792e7 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -2602,9 +2602,11 @@ "ignore": true }, "git_odb_read": { + "isAsync": true, "cppFunctionName": "OdbRead", "args": { - "out": { + "obj": { + "isReturn": true, "ownedByThis": true } } From 295bf46512c346e35ea0ffd13889aa92f30fd500 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 5 Nov 2025 21:02:13 -0700 Subject: [PATCH 070/103] don't run openssl workflow automatically --- .github/workflows/build-openssl-packages.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index f9b8ab7b0..426ca0652 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -2,9 +2,6 @@ name: Build and Publish OpenSSL Packages on: workflow_dispatch: - push: - branches: - - master jobs: build-openssl: From d8700c9777b4324cd06b9751aa446a4f278da244 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 9 Oct 2025 08:26:58 -0700 Subject: [PATCH 071/103] upgrade to openssl 3.0 --- generate/templates/templates/binding.gyp | 5 ++-- utils/acquireOpenSSL.mjs | 13 ++++++++--- ...01-linux-force_getentropy_dso_lookup.patch | 23 ------------------- 3 files changed, 12 insertions(+), 29 deletions(-) delete mode 100644 vendor/patches/openssl/001-linux-force_getentropy_dso_lookup.patch diff --git a/generate/templates/templates/binding.gyp b/generate/templates/templates/binding.gyp index 61cad0cb5..b5e189c32 100644 --- a/generate/templates/templates/binding.gyp +++ b/generate/templates/templates/binding.gyp @@ -160,9 +160,8 @@ "<(electron_openssl_root)/include" ], "libraries": [ - # this order is significant on centos7 apparently... - "<(electron_openssl_root)/lib/libssl.a", - "<(electron_openssl_root)/lib/libcrypto.a" + "<(electron_openssl_root)/lib64/libssl.a", + "<(electron_openssl_root)/lib64/libcrypto.a" ] }], ["<(is_electron) == 1 and <(electron_openssl_static) != 1", { diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index 1d83f540b..f16c62e15 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -14,7 +14,7 @@ const pipeline = promisify(stream.pipeline); import packageJson from '../package.json' with { type: "json" }; -const OPENSSL_VERSION = "1.1.1t"; +const OPENSSL_VERSION = "3.0.18"; const win32BatPath = path.join(import.meta.dirname, "build-openssl.bat"); const vendorPath = path.resolve(import.meta.dirname, "..", "vendor"); const opensslPatchPath = path.join(vendorPath, "patches", "openssl"); @@ -56,6 +56,8 @@ const makeHashVerifyOnFinal = (expected) => (digest) => { // currently this only needs to be done on linux const applyOpenSSLPatches = async (buildCwd, operatingSystem) => { try { + await fs.access(opensslPatchPath); + for (const patchFilename of await fs.readdir(opensslPatchPath)) { const patchTarget = patchFilename.split("-")[1]; if (patchFilename.split(".").pop() === "patch" && (patchTarget === operatingSystem || patchTarget === "all")) { @@ -66,6 +68,11 @@ const applyOpenSSLPatches = async (buildCwd, operatingSystem) => { } } } catch(e) { + if (e.code === "ENOENT") { + // no patches to apply + return; + } + console.log("Patch application failed: ", e); throw e; } @@ -121,7 +128,7 @@ const buildLinux = async (buildCwd) => { // dependency on the system libssl/libcrypto which causes symbol conflicts and segfaults. // To fix this we need to hide all the openssl symbols to prevent them from being overridden // by the runtime linker. - "-fvisibility=hidden", + // "-fvisibility=hidden", // compile static libraries "no-shared", // disable ssl2, ssl3, and compression @@ -259,7 +266,7 @@ const buildOpenSSLIfNecessary = async ({ const openSSLUrl = getOpenSSLSourceUrl(openSSLVersion); const openSSLSha256Url = getOpenSSLSourceSha256Url(openSSLVersion); - const openSSLSha256 = (await got(openSSLSha256Url)).body.trim(); + const openSSLSha256 = (await got(openSSLSha256Url)).body.trim().split(' ')[0]; const downloadStream = got.stream(openSSLUrl); downloadStream.on("downloadProgress", makeOnStreamDownloadProgress()); diff --git a/vendor/patches/openssl/001-linux-force_getentropy_dso_lookup.patch b/vendor/patches/openssl/001-linux-force_getentropy_dso_lookup.patch deleted file mode 100644 index 6802c7fa5..000000000 --- a/vendor/patches/openssl/001-linux-force_getentropy_dso_lookup.patch +++ /dev/null @@ -1,23 +0,0 @@ -openssl doesn't have any sort of guard around this section of code other than -checking if we're compiling an elf binary on gnu linux. the syscall wrapper -`getentropy` is only available on glibc >= 2.25 which is a problem if we want -to support platforms like centos7 which ships with glibc 2.17. Attempting to -load this code on centos7 causes a runtime "undefined symbol error since glibc -doesn't provide it. -luckily openssl provides a backup lookup method in form of a dlopen call but -theres no way to configure for it, hence this patch. -Note further that centos7 doesn't have this function or the syscall it wraps -so the symbol lookup will fail and it will fallback to reading from /dev/random. -hence this patch just fixes compilation. -author: JZA ---- crypto/rand/rand_unix.c -+++ crypto/rand/rand_unix.c -@@ -372,7 +372,7 @@ static ssize_t syscall_random(void *buf, size_t buflen) - * Note: Sometimes getentropy() can be provided but not implemented - * internally. So we need to check errno for ENOSYS - */ --# if defined(__GNUC__) && __GNUC__>=2 && defined(__ELF__) && !defined(__hpux) -+# if defined(__GNUC__) && __GNUC__>=2 && defined(__ELF__) && !defined(__hpux) && 0 - extern int getentropy(void *buffer, size_t length) __attribute__((weak)); - - if (getentropy != NULL) { From 453920ae867565fe7ba8ffeab1c515dac4082bef Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 16 Oct 2025 10:34:12 -0700 Subject: [PATCH 072/103] fix workflow matrix windows arm64 will be done in a follow-up pr --- .github/workflows/build-openssl-packages.yml | 24 +++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index 426ca0652..1ecb3366b 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -9,8 +9,15 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-13, windows-2022] - arch: [x64, arm64] + include: + - os: windows-latest + arch: x64 + # - os: windows-latest + # arch: arm64 + - os: macos-15 + arch: x64 + - os: macos-15-intel + arch: arm64 fail-fast: false steps: @@ -21,12 +28,23 @@ jobs: uses: actions/setup-node@v4 with: node-version: 22 - architecture: ${{ matrix.arch }} + + - name: Install Toolchain + if: matrix.os == 'windows-latest' && matrix.arch == 'arm64' + uses: msys2/setup-msys2@v2 + with: + update: true + install: > + mingw-w64-aarch64-toolchain + mingw-w64-aarch64-cmake + mingw-w64-aarch64-ninja - name: Install dependencies run: npm install - name: Build OpenSSL packages + env: + TARGET_ARCH: ${{ matrix.arch }} run: node utils/acquireOpenSSL.js - name: Push OpenSSL package to S3 From a83b09864c180433957fdcda403308ce088bc3cf Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 16 Oct 2025 10:57:55 -0700 Subject: [PATCH 073/103] woops --- .github/workflows/build-openssl-packages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index 1ecb3366b..6df004d63 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -14,9 +14,9 @@ jobs: arch: x64 # - os: windows-latest # arch: arm64 - - os: macos-15 - arch: x64 - os: macos-15-intel + arch: x64 + - os: macos-15 arch: arm64 fail-fast: false From 4c6a8a6ce0638d4cbb1a8711f140da2fb9ca6e0b Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 16 Oct 2025 11:48:42 -0700 Subject: [PATCH 074/103] downgrade runners for now --- .github/workflows/build-openssl-packages.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index 6df004d63..fb6613b9d 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -14,9 +14,9 @@ jobs: arch: x64 # - os: windows-latest # arch: arm64 - - os: macos-15-intel + - os: macos-13 arch: x64 - - os: macos-15 + - os: macos-14 arch: arm64 fail-fast: false @@ -45,11 +45,11 @@ jobs: - name: Build OpenSSL packages env: TARGET_ARCH: ${{ matrix.arch }} - run: node utils/acquireOpenSSL.js + run: node utils/acquireOpenSSL.mjs - name: Push OpenSSL package to S3 env: node_pre_gyp_bucket: ${{ secrets.node_pre_gyp_bucket }} AWS_ACCESS_KEY_ID: ${{ secrets.node_pre_gyp_accessKeyId }} AWS_SECRET_ACCESS_KEY: ${{ secrets.node_pre_gyp_secretAccessKey }} - run: node utils/uploadOpenSSL.js \ No newline at end of file + run: node utils/uploadOpenSSL.mjs \ No newline at end of file From f5e83808a440ecbd2eb23d757777ebe362952c71 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 16 Oct 2025 12:00:02 -0700 Subject: [PATCH 075/103] force build openssl package --- .github/workflows/build-openssl-packages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index fb6613b9d..bfb2e0088 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -45,6 +45,7 @@ jobs: - name: Build OpenSSL packages env: TARGET_ARCH: ${{ matrix.arch }} + NODEGIT_OPENSSL_BUILD_PACKAGE: 1 run: node utils/acquireOpenSSL.mjs - name: Push OpenSSL package to S3 From fc1aecff96465166ec8dc1fb8458a5fc4bf2d349 Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 24 Oct 2025 11:54:30 -0700 Subject: [PATCH 076/103] set macos deployment target --- .github/workflows/build-openssl-packages.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index bfb2e0088..b3d3cc67c 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -46,6 +46,7 @@ jobs: env: TARGET_ARCH: ${{ matrix.arch }} NODEGIT_OPENSSL_BUILD_PACKAGE: 1 + OPENSSL_MACOS_DEPLOYMENT_TARGET: "11.0" run: node utils/acquireOpenSSL.mjs - name: Push OpenSSL package to S3 @@ -53,4 +54,4 @@ jobs: node_pre_gyp_bucket: ${{ secrets.node_pre_gyp_bucket }} AWS_ACCESS_KEY_ID: ${{ secrets.node_pre_gyp_accessKeyId }} AWS_SECRET_ACCESS_KEY: ${{ secrets.node_pre_gyp_secretAccessKey }} - run: node utils/uploadOpenSSL.mjs \ No newline at end of file + run: node utils/uploadOpenSSL.mjs From 1689cb8aca22fab2464837e0702becdbbe8bac3e Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 5 Nov 2025 21:06:21 -0700 Subject: [PATCH 077/103] update macos runner images --- .github/workflows/build-openssl-packages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index b3d3cc67c..bd584002d 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -14,9 +14,9 @@ jobs: arch: x64 # - os: windows-latest # arch: arm64 - - os: macos-13 + - os: macos-15 arch: x64 - - os: macos-14 + - os: macos-15-intel arch: arm64 fail-fast: false From d51bb6f98f5f074d4299460c65ffa03f51524282 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 6 Nov 2025 10:00:44 -0700 Subject: [PATCH 078/103] disable ui on macos --- utils/acquireOpenSSL.mjs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index f16c62e15..bc6b93264 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -93,6 +93,8 @@ const buildDarwin = async (buildCwd, macOsDeploymentTarget) => { "no-ssl2", "no-ssl3", "no-comp", + // disable tty ui since it fails a bunch of tests on GHA runners and we're just gonna link anyways + "no-ui-console", // set install directory `--prefix="${extractPath}"`, `--openssldir="${extractPath}"`, From bfffac9f9dfdf3646d119961c81684a52ba5b094 Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 24 Oct 2025 12:09:03 -0700 Subject: [PATCH 079/103] update visual studio version selection --- utils/acquireOpenSSL.mjs | 65 ++++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index bc6b93264..dd76021a8 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -7,7 +7,6 @@ import tar from "tar-fs"; import zlib from "zlib"; import { createWriteStream, promises as fs } from "fs"; import { performance } from "perf_hooks"; -import { fileURLToPath } from 'url'; import { promisify } from "util"; const pipeline = promisify(stream.pipeline); @@ -168,18 +167,60 @@ const buildWin32 = async (buildCwd, vsBuildArch) => { throw new Error("Expected vsBuildArch to be specified"); } - const programFilesPath = (process.arch === "x64" - ? process.env["ProgramFiles(x86)"] - : process.env.ProgramFiles) || "C:\\Program Files"; - const vcvarsallPath = process.env.npm_config_vcvarsall_path || `${ - programFilesPath - }\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\Auxiliary\\Build\\vcvarsall.bat`; - try { - await fs.stat(vcvarsallPath); - } catch { - throw new Error(`vcvarsall.bat not found at ${vcvarsallPath}`); + const exists = (filePath) => fs.stat(filePath).then(() => true).catch(() => false); + + let vcvarsallPath = undefined; + + if (process.env.npm_config_vcvarsall_path && await exists(process.env.npm_config_vcvarsall_path)) { + vcvarsallPath = process.env.npm_config_vcvarsall_path; + } else { + const potentialMsvsPaths = []; + + // GYP_MSVS_OVERRIDE_PATH is set by node-gyp so this should cover most cases + if (process.env.GYP_MSVS_OVERRIDE_PATH) { + potentialMsvsPaths.push(process.env.GYP_MSVS_OVERRIDE_PATH); + } + + const packageTypes = ["BuildTools", "Community", "Professional", "Enterprise"]; + const versions = ["2022", "2019"] + + const computePossiblePaths = (parentPath) => { + let possiblePaths = [] + for (const packageType of packageTypes) { + for (const version of versions) { + possiblePaths.push(path.join(parentPath, version, packageType)); + } + } + + return possiblePaths; + } + + if (process.env["ProgramFiles(x86)"]) { + const parentPath = path.join(process.env["ProgramFiles(x86)"], 'Microsoft Visual Studio'); + potentialMsvsPaths.push(...computePossiblePaths(parentPath)); + } + + if (process.env.ProgramFiles) { + const parentPath = path.join(process.env.ProgramFiles, 'Microsoft Visual Studio'); + potentialMsvsPaths.push(...computePossiblePaths(parentPath)); + } + + for (const potentialPath of potentialMsvsPaths) { + const wholePath = path.join(potentialPath, 'VC', 'Auxiliary', 'Build', 'vcvarsall.bat'); + console.log("checking", wholePath); + if (await exists(wholePath)) { + vcvarsallPath = wholePath; + break; + } + } + + if (!vcvarsallPath) { + throw new Error(`vcvarsall.bat not found`); + } } + console.log('using', vcvarsallPath); + let vcTarget; switch (vsBuildArch) { case "x64": { @@ -401,7 +442,7 @@ const acquireOpenSSL = async () => { let macOsDeploymentTarget; if (process.platform === "darwin") { - macOsDeploymentTarget = process.argv[2]; + macOsDeploymentTarget = process.argv[2] ?? process.env.OPENSSL_MACOS_DEPLOYMENT_TARGET if (!macOsDeploymentTarget || !macOsDeploymentTarget.match(/\d+\.\d+/)) { throw new Error(`Invalid macOsDeploymentTarget: ${macOsDeploymentTarget}`); } From 424cad31238c1fafc9eb7d0386d5ce9a5e28ed72 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 6 Nov 2025 11:55:33 -0700 Subject: [PATCH 080/103] fix upload --- utils/acquireOpenSSL.mjs | 8 +++++--- utils/uploadOpenSSL.mjs | 17 +++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index dd76021a8..047b95cb7 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -382,7 +382,7 @@ const downloadOpenSSLIfNecessary = async ({ console.log("Download finished."); } -const getOpenSSLPackageName = () => { +export const getOpenSSLPackageName = () => { let arch = process.arch; if (process.platform === "win32" && ( process.arch === "ia32" || process.env.NODEGIT_VS_BUILD_ARCH === "x86" @@ -393,6 +393,8 @@ const getOpenSSLPackageName = () => { return `openssl-${OPENSSL_VERSION}-${process.platform}-${arch}.tar.gz`; } +export const getOpenSSLPackagePath = () => path.join(import.meta.dirname, getOpenSSLPackageName()); + const getOpenSSLPackageUrl = () => `${packageJson.binary.host}${getOpenSSLPackageName()}`; const buildPackage = async () => { @@ -416,7 +418,7 @@ const buildPackage = async () => { new HashVerify("sha256", (digest) => { resolve(digest); }), - createWriteStream(getOpenSSLPackageName()) + createWriteStream(getOpenSSLPackagePath()) ); const digest = await promise; await fs.writeFile(`${getOpenSSLPackageName()}.sha256`, digest); @@ -477,5 +479,5 @@ if (process.argv[1] === import.meta.filename) { catch(error) { console.error("Acquire OpenSSL failed: ", error); process.exit(1); - }; + } } diff --git a/utils/uploadOpenSSL.mjs b/utils/uploadOpenSSL.mjs index 784379cb6..86495e98e 100644 --- a/utils/uploadOpenSSL.mjs +++ b/utils/uploadOpenSSL.mjs @@ -2,26 +2,27 @@ import aws from 'aws-sdk'; import fs from "fs"; import path from "path"; -import pkgJson from './package.json' assert { type: "json" }; -import { getOpenSSLPackageName } from './acquireOpenSSL'; +import pkgJson from '../package.json' with { type: "json" }; +import { getOpenSSLPackagePath, getOpenSSLPackageName } from './acquireOpenSSL.mjs'; const s3 = new aws.S3(); -const uploadBinaryToS3 = (binaryName, bucketName, pathToFile) => +const uploadBinaryToS3 = (fileName, bucketName, pathToFile) => s3.upload({ Body: fs.createReadStream(pathToFile), Bucket: bucketName, - Key: binaryName, + Key: fileName, ACL: "public-read" }).promise(); export const uploadOpenSSL = async () => { - const binaryName = getOpenSSLPackageName(); - const pathToFile = path.join(import.meta.dirname, binaryName); - return uploadBinaryToS3(binaryName, pkgJson.binary.bucket_name, pathToFile); + const packageName = path.basename(getOpenSSLPackageName()); + const packagePath = getOpenSSLPackagePath(); + console.log(`Uploading ${packagePath} to s3://${pkgJson.binary.bucket_name}/${packageName}`); + return uploadBinaryToS3(packageName, pkgJson.binary.bucket_name, packagePath); }; -if (require.main === module) { +if (process.argv[1] === import.meta.filename) { uploadOpenSSL().catch((error) => { console.error('Push to S3 failed: ', error); process.exit(1); From c60718c1e22542ec056936ed6b15ba0a8730d9ee Mon Sep 17 00:00:00 2001 From: Bill Mill Date: Sun, 9 Nov 2025 09:37:24 -0500 Subject: [PATCH 081/103] fix: correct macos arch labels macos-15-intel is x64 and macos-15 is arm64, per the docs: https://github.com/actions/runner-images#available-images --- .github/workflows/build-openssl-packages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index bd584002d..79cd94ade 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -15,9 +15,9 @@ jobs: # - os: windows-latest # arch: arm64 - os: macos-15 - arch: x64 - - os: macos-15-intel arch: arm64 + - os: macos-15-intel + arch: x64 fail-fast: false steps: From 9bc5b39616e8180f96014645a68de556185e7589 Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 10 Nov 2025 20:55:51 -0700 Subject: [PATCH 082/103] fix missing git_email_create_from_diff not sure why this error only happened when building for electron --- generate/input/descriptor.json | 5 +++ generate/input/libgit2-supplement.json | 51 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/generate/input/descriptor.json b/generate/input/descriptor.json index 889b792e7..99837534d 100644 --- a/generate/input/descriptor.json +++ b/generate/input/descriptor.json @@ -1526,6 +1526,11 @@ } } }, + "email": { + "cDependencies": [ + "git2/sys/email.h" + ] + }, "email_create_options": { "hasConstructor": true }, diff --git a/generate/input/libgit2-supplement.json b/generate/input/libgit2-supplement.json index 09433e7fa..742216f03 100644 --- a/generate/input/libgit2-supplement.json +++ b/generate/input/libgit2-supplement.json @@ -294,6 +294,54 @@ "isErrorCode": true } }, + "git_email_create_from_diff": { + "file": "sys/email.h", + "type": "function", + "isAsync": true, + "group": "email", + "args": [ + { + "name": "out", + "type": "git_buf *" + }, + { + "name": "diff", + "type": "git_diff *" + }, + { + "name": "patch_idx", + "type": "size_t" + }, + { + "name": "patch_count", + "type": "size_t" + }, + { + "name": "commit_id", + "type": "const git_oid *" + }, + { + "name": "summary", + "type": "const char *" + }, + { + "name": "body", + "type": "const char *" + }, + { + "name": "author", + "type": "const git_signature *" + }, + { + "name": "opts", + "type": "git_email_create_options *" + } + ], + "return": { + "type": "int", + "isErrorCode": true + } + }, "git_diff_get_perfdata": { "file": "sys/diff.h", "args": [ @@ -2619,6 +2667,9 @@ "blame": [ "git_blame_file" ], + "email": [ + "git_email_create_from_diff" + ], "note": [ "git_note_author", "git_note_commit_create", From ad00c9a86319660a06f10d5da6b67b7c1f22a3d4 Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 16 Oct 2025 11:21:07 -0700 Subject: [PATCH 083/103] natively compile for arm64 --- lifecycleScripts/install.js | 4 ++- utils/acquireOpenSSL.mjs | 58 +++++++++++++++++++++++-------------- vendor/libgit2.gyp | 21 ++++++++++---- 3 files changed, 54 insertions(+), 29 deletions(-) diff --git a/lifecycleScripts/install.js b/lifecycleScripts/install.js index ddbb90e9c..e7f90ee90 100755 --- a/lifecycleScripts/install.js +++ b/lifecycleScripts/install.js @@ -30,7 +30,9 @@ module.exports = function install() { return new Promise(function(resolve, reject) { const gypPath = path.join(__dirname, "..", "node_modules", "node-gyp", "bin", "node-gyp.js"); - var spawnedNodePreGyp = spawn(nodePreGyp, args, { + + const nodePreGypPath = path.resolve(path.join(__dirname, "..", "node_modules", "@mapbox", "node-pre-gyp", "bin", nodePreGyp)); + var spawnedNodePreGyp = spawn(nodePreGypPath, args, { env: { ...process.env, npm_config_node_gyp: gypPath diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index 047b95cb7..124860506 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -19,6 +19,26 @@ const vendorPath = path.resolve(import.meta.dirname, "..", "vendor"); const opensslPatchPath = path.join(vendorPath, "patches", "openssl"); const extractPath = path.join(vendorPath, "openssl"); +const convertArch = (archStr) => { + const convertedArch = { + 'ia32': 'x86', + 'x86': 'x86', + 'x64': 'x64', + 'arm64': 'arm64' + }[archStr]; + + if (!convertedArch) { + throw new Error('unsupported architecture'); + } + + return convertedArch; +} + +const hostArch = convertArch(process.arch); +const targetArch = process.env.npm_config_arch + ? convertArch(process.env.npm_config_arch) + : hostArch; + const pathsToIncludeForPackage = [ "include", "lib" ]; @@ -82,8 +102,10 @@ const buildDarwin = async (buildCwd, macOsDeploymentTarget) => { throw new Error("Expected macOsDeploymentTarget to be specified"); } + const buildConfig = targetArch === "x64" ? "darwin64-x86_64-cc" : "darwin64-arm64-cc"; + const configureArgs = [ - process.arch === "x64" ? "darwin64-x86_64-cc" : "darwin64-arm64-cc", + buildConfig, // speed up ecdh on little-endian platforms with 128bit int support "enable-ec_nistp_64_gcc_128", // compile static libraries @@ -107,7 +129,7 @@ const buildDarwin = async (buildCwd, macOsDeploymentTarget) => { await applyOpenSSLPatches(buildCwd, "darwin"); - // only build the libraries, not the tests/fuzzer or apps + // only build the libraries, not the fuzzer or apps await execPromise("make build_libs", { cwd: buildCwd }, { pipeOutput: true }); @@ -123,8 +145,10 @@ const buildDarwin = async (buildCwd, macOsDeploymentTarget) => { }; const buildLinux = async (buildCwd) => { + const buildConfig = targetArch === "x64" ? "linux-x86_64" : "linux-aarch64"; + const configureArgs = [ - "linux-x86_64", + buildConfig, // Electron(at least on centos7) imports the libcups library at runtime, which has a // dependency on the system libssl/libcrypto which causes symbol conflicts and segfaults. // To fix this we need to hide all the openssl symbols to prevent them from being overridden @@ -146,7 +170,7 @@ const buildLinux = async (buildCwd) => { await applyOpenSSLPatches(buildCwd, "linux"); - // only build the libraries, not the tests/fuzzer or apps + // only build the libraries, not the fuzzer or apps await execPromise("make build_libs", { cwd: buildCwd }, { pipeOutput: true }); @@ -232,6 +256,11 @@ const buildWin32 = async (buildCwd, vsBuildArch) => { vcTarget = "VC-WIN32"; break; } + + case "arm64": { + vcTarget = "VC-WIN64-ARM"; + break; + } default: { throw new Error(`Unknown vsBuildArch: ${vsBuildArch}`); @@ -382,15 +411,8 @@ const downloadOpenSSLIfNecessary = async ({ console.log("Download finished."); } -export const getOpenSSLPackageName = () => { - let arch = process.arch; - if (process.platform === "win32" && ( - process.arch === "ia32" || process.env.NODEGIT_VS_BUILD_ARCH === "x86" - )) { - arch = "x86"; - } - - return `openssl-${OPENSSL_VERSION}-${process.platform}-${arch}.tar.gz`; +const getOpenSSLPackageName = () => { + return `openssl-${OPENSSL_VERSION}-${process.platform}-${targetArch}.tar.gz`; } export const getOpenSSLPackagePath = () => path.join(import.meta.dirname, getOpenSSLPackageName()); @@ -450,18 +472,10 @@ const acquireOpenSSL = async () => { } } - let vsBuildArch; - if (process.platform === "win32") { - vsBuildArch = process.env.NODEGIT_VS_BUILD_ARCH || (process.arch === "x64" ? "x64" : "x86"); - if (!["x64", "x86"].includes(vsBuildArch)) { - throw new Error(`Invalid vsBuildArch: ${vsBuildArch}`); - } - } - await buildOpenSSLIfNecessary({ openSSLVersion: OPENSSL_VERSION, macOsDeploymentTarget, - vsBuildArch + vsBuildArch: process.platform === "win32" ? targetArch : undefined }); if (process.env.NODEGIT_OPENSSL_BUILD_PACKAGE) { await buildPackage(); diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index a155fb67f..f141e4d2d 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -315,13 +315,22 @@ # Workaround of a strange bug: # TargetMachine + static_library + x64 = nothing. "conditions": [ - ["target_arch=='x64'", { - "VCLibrarianTool": { - "AdditionalOptions": [ - "/MACHINE:X64", - ], + [ + "target_arch=='x64'", { + "VCLibrarianTool": { + "AdditionalOptions": [ + "/MACHINE:X64", + ], + }, + }, + "target_arch=='arm64'", { + "VCLibrarianTool": { + "AdditionalOptions": [ + "/MACHINE:ARM64", + ], + }, }, - }, { + { "VCLibrarianTool": { "AdditionalOptions": [ "/MACHINE:x86", From cd1c5dba01b4e928d79c0225b844bc412ef943c8 Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 10 Nov 2025 19:16:38 -0700 Subject: [PATCH 084/103] better node-pre-gyp path detection --- lifecycleScripts/install.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lifecycleScripts/install.js b/lifecycleScripts/install.js index e7f90ee90..96e47afbe 100755 --- a/lifecycleScripts/install.js +++ b/lifecycleScripts/install.js @@ -2,6 +2,8 @@ var buildFlags = require("../utils/buildFlags"); var spawn = require("child_process").spawn; var path = require("path"); +const nodePreGypModulePath = require.resolve("@mapbox/node-pre-gyp"); + module.exports = function install() { console.log("[nodegit] Running install script"); @@ -31,7 +33,8 @@ module.exports = function install() { return new Promise(function(resolve, reject) { const gypPath = path.join(__dirname, "..", "node_modules", "node-gyp", "bin", "node-gyp.js"); - const nodePreGypPath = path.resolve(path.join(__dirname, "..", "node_modules", "@mapbox", "node-pre-gyp", "bin", nodePreGyp)); + const nodePreGypPath = path.resolve(path.dirname(nodePreGypModulePath), path.join("..", "bin", nodePreGyp)); + console.log("node-pre-gyp path", nodePreGypPath); var spawnedNodePreGyp = spawn(nodePreGypPath, args, { env: { ...process.env, From 4978cbb51646b8818d88a943fa31205b08a35534 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 12 Nov 2025 21:18:24 -0700 Subject: [PATCH 085/103] allow cross-compiling openssl for windows --- utils/acquireOpenSSL.mjs | 76 +++++++++++++++++++++++++--------------- utils/build-openssl.bat | 11 +++++- 2 files changed, 57 insertions(+), 30 deletions(-) diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index 124860506..6a3d26252 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -1,4 +1,5 @@ import crypto from "crypto"; +import { spawn } from "child_process"; import execPromise from "./execPromise.js"; import got from "got"; import path from "path"; @@ -19,6 +20,8 @@ const vendorPath = path.resolve(import.meta.dirname, "..", "vendor"); const opensslPatchPath = path.join(vendorPath, "patches", "openssl"); const extractPath = path.join(vendorPath, "openssl"); +const exists = (filePath) => fs.stat(filePath).then(() => true).catch(() => false); + const convertArch = (archStr) => { const convertedArch = { 'ia32': 'x86', @@ -186,13 +189,7 @@ const buildLinux = async (buildCwd) => { }, { pipeOutput: true }); }; -const buildWin32 = async (buildCwd, vsBuildArch) => { - if (!vsBuildArch) { - throw new Error("Expected vsBuildArch to be specified"); - } - - const exists = (filePath) => fs.stat(filePath).then(() => true).catch(() => false); - +const buildWin32 = async (buildCwd) => { let vcvarsallPath = undefined; if (process.env.npm_config_vcvarsall_path && await exists(process.env.npm_config_vcvarsall_path)) { @@ -243,34 +240,57 @@ const buildWin32 = async (buildCwd, vsBuildArch) => { } } - console.log('using', vcvarsallPath); - let vcTarget; - switch (vsBuildArch) { - case "x64": { + switch (targetArch) { + case "x64": vcTarget = "VC-WIN64A"; break; - } - case "x86": { + case "x86": vcTarget = "VC-WIN32"; break; - } - case "arm64": { + case "arm64": vcTarget = "VC-WIN64-ARM"; break; - } - - default: { - throw new Error(`Unknown vsBuildArch: ${vsBuildArch}`); - } } - await execPromise(`"${win32BatPath}" "${vcvarsallPath}" ${vsBuildArch} ${vcTarget}`, { - cwd: buildCwd, - maxBuffer: 10 * 1024 * 1024 // we should really just use spawn - }, { pipeOutput: true }); + let vsBuildArch = hostArch === targetArch + ? hostArch + : `${hostArch}_${targetArch}`; + + console.log("Using vcvarsall.bat at: ", vcvarsallPath); + console.log("Using vsBuildArch: ", vsBuildArch); + console.log("Using vcTarget: ", vcTarget); + + await new Promise((resolve, reject) => { + const buildProcess = spawn(`"${win32BatPath}" "${vcvarsallPath}" ${vsBuildArch} ${vcTarget}`, { + cwd: buildCwd, + shell: process.platform === "win32", + env: { + ...process.env, + NODEGIT_SKIP_TESTS: targetArch !== hostArch ? "1" : undefined + } + }); + + buildProcess.stdout.on("data", function(data) { + console.info(data.toString().trim()); + }); + + buildProcess.stderr.on("data", function(data) { + console.error(data.toString().trim()); + }); + + buildProcess.on("close", function(code) { + if (!code) { + resolve(); + } else { + reject(code); + } + }); + }); + + }; const removeOpenSSLIfOudated = async (openSSLVersion) => { @@ -314,8 +334,7 @@ const makeOnStreamDownloadProgress = () => { const buildOpenSSLIfNecessary = async ({ macOsDeploymentTarget, - openSSLVersion, - vsBuildArch + openSSLVersion }) => { if (process.platform !== "darwin" && process.platform !== "win32" && process.platform !== "linux") { console.log(`Skipping OpenSSL build, not required on ${process.platform}`); @@ -359,7 +378,7 @@ const buildOpenSSLIfNecessary = async ({ } else if (process.platform === "linux") { await buildLinux(buildCwd); } else if (process.platform === "win32") { - await buildWin32(buildCwd, vsBuildArch); + await buildWin32(buildCwd); } else { throw new Error(`Unknown platform: ${process.platform}`); } @@ -474,8 +493,7 @@ const acquireOpenSSL = async () => { await buildOpenSSLIfNecessary({ openSSLVersion: OPENSSL_VERSION, - macOsDeploymentTarget, - vsBuildArch: process.platform === "win32" ? targetArch : undefined + macOsDeploymentTarget }); if (process.env.NODEGIT_OPENSSL_BUILD_PACKAGE) { await buildPackage(); diff --git a/utils/build-openssl.bat b/utils/build-openssl.bat index 6e146cf89..af8063d7c 100644 --- a/utils/build-openssl.bat +++ b/utils/build-openssl.bat @@ -1,9 +1,18 @@ +rem Build OpenSSL for Windows +rem %1 - path to vcvarsall.bat +rem %2 - architecture argument for vcvarsall.bat +rem %3 - OpenSSL Configure target + @call %1 %2 perl .\Configure %3 no-shared no-ssl2 no-ssl3 no-comp --prefix="%cd%\.." --openssldir="%cd%\.." || goto :error nmake || goto :error -nmake test || goto :error + +if "%NODEGIT_SKIP_TESTS%" NEQ "1" ( + nmake test || goto :error +) + nmake install || goto :error goto :EOF From 972a08333578e8988a0badb91109310afa793bd9 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 12 Nov 2025 21:19:23 -0700 Subject: [PATCH 086/103] add windows arm64 to openssl package workflow --- .github/workflows/build-openssl-packages.yml | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index 79cd94ade..1437e6d91 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -10,10 +10,10 @@ jobs: strategy: matrix: include: + - os: windows-latest + arch: arm64 - os: windows-latest arch: x64 - # - os: windows-latest - # arch: arm64 - os: macos-15 arch: arm64 - os: macos-15-intel @@ -29,22 +29,12 @@ jobs: with: node-version: 22 - - name: Install Toolchain - if: matrix.os == 'windows-latest' && matrix.arch == 'arm64' - uses: msys2/setup-msys2@v2 - with: - update: true - install: > - mingw-w64-aarch64-toolchain - mingw-w64-aarch64-cmake - mingw-w64-aarch64-ninja - - name: Install dependencies run: npm install - name: Build OpenSSL packages env: - TARGET_ARCH: ${{ matrix.arch }} + npm_config_arch: ${{ matrix.arch }} NODEGIT_OPENSSL_BUILD_PACKAGE: 1 OPENSSL_MACOS_DEPLOYMENT_TARGET: "11.0" run: node utils/acquireOpenSSL.mjs From f856f0fde4d50a45e8a4d17ee1c78d866d1a9b72 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 12 Nov 2025 21:43:38 -0700 Subject: [PATCH 087/103] fix package upload --- .github/workflows/build-openssl-packages.yml | 1 + utils/acquireOpenSSL.mjs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-openssl-packages.yml b/.github/workflows/build-openssl-packages.yml index 1437e6d91..7b7a5dea3 100644 --- a/.github/workflows/build-openssl-packages.yml +++ b/.github/workflows/build-openssl-packages.yml @@ -41,6 +41,7 @@ jobs: - name: Push OpenSSL package to S3 env: + npm_config_arch: ${{ matrix.arch }} node_pre_gyp_bucket: ${{ secrets.node_pre_gyp_bucket }} AWS_ACCESS_KEY_ID: ${{ secrets.node_pre_gyp_accessKeyId }} AWS_SECRET_ACCESS_KEY: ${{ secrets.node_pre_gyp_secretAccessKey }} diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index 6a3d26252..9eb4c73f7 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -430,7 +430,7 @@ const downloadOpenSSLIfNecessary = async ({ console.log("Download finished."); } -const getOpenSSLPackageName = () => { +export const getOpenSSLPackageName = () => { return `openssl-${OPENSSL_VERSION}-${process.platform}-${targetArch}.tar.gz`; } From abc5a6655968f5b3652b216d8b026128558bf1ac Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 13 Nov 2025 19:59:52 -0700 Subject: [PATCH 088/103] upload sha256 files aswell --- utils/uploadOpenSSL.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils/uploadOpenSSL.mjs b/utils/uploadOpenSSL.mjs index 86495e98e..5de760462 100644 --- a/utils/uploadOpenSSL.mjs +++ b/utils/uploadOpenSSL.mjs @@ -19,7 +19,9 @@ export const uploadOpenSSL = async () => { const packageName = path.basename(getOpenSSLPackageName()); const packagePath = getOpenSSLPackagePath(); console.log(`Uploading ${packagePath} to s3://${pkgJson.binary.bucket_name}/${packageName}`); - return uploadBinaryToS3(packageName, pkgJson.binary.bucket_name, packagePath); + await uploadBinaryToS3(packageName, pkgJson.binary.bucket_name, packagePath); + const sha256PackageName = `${packageName}.sha256`; + await uploadBinaryToS3(sha256PackageName, pkgJson.binary.bucket_name, `${packagePath}.sha256`); }; if (process.argv[1] === import.meta.filename) { From 637d2eb53ff9c21533ad3c3566a15ebd490e50df Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 14 Nov 2025 11:33:43 -0700 Subject: [PATCH 089/103] readd openssl fixes missing from PR - give full path to openssl package hash - fix package download url --- utils/acquireOpenSSL.mjs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index 9eb4c73f7..044454026 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -436,7 +436,11 @@ export const getOpenSSLPackageName = () => { export const getOpenSSLPackagePath = () => path.join(import.meta.dirname, getOpenSSLPackageName()); -const getOpenSSLPackageUrl = () => `${packageJson.binary.host}${getOpenSSLPackageName()}`; +const getOpenSSLPackageUrl = () => { + const hostUrl = new URL(packageJson.binary.host); + hostUrl.pathname = getOpenSSLPackageName(); + return hostUrl.toString(); +}; const buildPackage = async () => { let resolve, reject; @@ -462,7 +466,7 @@ const buildPackage = async () => { createWriteStream(getOpenSSLPackagePath()) ); const digest = await promise; - await fs.writeFile(`${getOpenSSLPackageName()}.sha256`, digest); + await fs.writeFile(`${getOpenSSLPackagePath()}.sha256`, digest); }; const acquireOpenSSL = async () => { From 3806c58561103dffb3c9b3909cecbabbe53072fb Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 14 Nov 2025 15:36:00 -0700 Subject: [PATCH 090/103] add arm64 to test/release workflow --- .github/workflows/tests.yml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3a2f8cc7a..444a3e960 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -123,7 +123,7 @@ jobs: strategy: matrix: node: [20, 22, 24] - arch: [x86, x64] + arch: [x86, x64, arm64] exclude: - node: 24 arch: x86 @@ -141,16 +141,27 @@ jobs: - uses: actions/checkout@v4 - name: Use Node.js + if: matrix.arch == 'x86' uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} check-latest: true - architecture: ${{ matrix.arch }} + architecture: x86 + + - name: Use Node.js + uses: actions/setup-node@v4 + if: matrix.arch != 'x86' + with: + node-version: ${{ matrix.node }} + check-latest: true - name: Install + env: + npm_config_arch: ${{ matrix.arch == 'x86' && 'ia32' || matrix.arch }} run: npm install - name: Test + if: matrix.arch != 'arm64' env: GIT_SSH: ${{ github.workspace }}\vendor\plink.exe run: | @@ -170,7 +181,7 @@ jobs: - name: Deploy (Package) if: startsWith(github.ref, 'refs/tags/v') - run: node-pre-gyp package + run: node-pre-gyp package --target_arch=${{ matrix.arch }} - name: Deploy (Publish) if: startsWith(github.ref, 'refs/tags/v') @@ -178,4 +189,4 @@ jobs: node_pre_gyp_bucket: ${{ secrets.node_pre_gyp_bucket }} AWS_ACCESS_KEY_ID: ${{ secrets.node_pre_gyp_accessKeyId }} AWS_SECRET_ACCESS_KEY: ${{ secrets.node_pre_gyp_secretAccessKey }} - run: node-pre-gyp publish + run: node-pre-gyp publish --target_arch=${{ matrix.arch }} From 03b3c8844c3092cad9a7c79ddb1038bb2c3fedba Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 14 Nov 2025 18:42:03 -0700 Subject: [PATCH 091/103] bump to v0.28.0-alpha.35 --- CHANGELOG.md | 16 ++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12d3a9dce..57d0616de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Change Log +## v0.28.0-alpha.35 [(2025-06-03)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.35) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.34...v0.28.0-alpha.35) + +#### Summary of Changes + - Bump libgit2 to 1.9.1 + - Bump OpenSSL to 3.0 + - Move OpenSSL Packaging to Github Actions + - Add arm64 build Support + +#### Merged PRs into NodeGit +- [Bump libgit2 to 1.9.1](https://github.com/nodegit/nodegit/pull/2025) +- [Bump OpenSSL to 3.0, Move OpenSSL package generation to Github Actions](https://github.com/nodegit/nodegit/pull/2026) +- [fix: correct macos arch labels](github.com/nodegit/nodegit/pull/2027) +- [Add Ability to compile for arm64](https://github.com/nodegit/nodegit/pull/2028) + ## v0.28.0-alpha.34 [(2025-06-03)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.34) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.33...v0.28.0-alpha.34) diff --git a/package-lock.json b/package-lock.json index 25edeaf61..64454026d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.34", + "version": "0.28.0-alpha.35", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.34", + "version": "0.28.0-alpha.35", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index fe1273285..ca97223da 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.34", + "version": "0.28.0-alpha.35", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From c2962d5d3080c4e16cb107021daae7c0a6e9640d Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 19 Nov 2025 11:30:24 -0700 Subject: [PATCH 092/103] always use custom openssl for linux electron builds --- generate/templates/templates/binding.gyp | 29 +++++++++++++++--------- guides/install/from-source/README.md | 2 +- utils/acquireOpenSSL.mjs | 29 ++++++------------------ vendor/libgit2.gyp | 7 +++--- 4 files changed, 29 insertions(+), 38 deletions(-) diff --git a/generate/templates/templates/binding.gyp b/generate/templates/templates/binding.gyp index b5e189c32..741d964cc 100644 --- a/generate/templates/templates/binding.gyp +++ b/generate/templates/templates/binding.gyp @@ -155,21 +155,28 @@ "-std=c++<(cxx_version)" ], }], - ["<(is_electron) == 1 and <(electron_openssl_static) == 1", { + ["<(is_electron) == 1", { + "conditions": [ + ["<(electron_openssl_static) == 1", { + "libraries": [ + "<(electron_openssl_root)/lib/libssl.a", + "<(electron_openssl_root)/lib/libcrypto.a" + ] + }], + ["<(electron_openssl_static) != 1", { + "library_dirs": [ + "<(electron_openssl_root)/lib" + ], + "libraries": [ + "-lcrypto", + "-lssl" + ] + }] + ], "include_dirs": [ "<(electron_openssl_root)/include" ], - "libraries": [ - "<(electron_openssl_root)/lib64/libssl.a", - "<(electron_openssl_root)/lib64/libcrypto.a" - ] }], - ["<(is_electron) == 1 and <(electron_openssl_static) != 1", { - "libraries": [ - "-lcrypto", - "-lssl" - ] - }] ], }], [ diff --git a/guides/install/from-source/README.md b/guides/install/from-source/README.md index eadd8306d..64bfce18b 100644 --- a/guides/install/from-source/README.md +++ b/guides/install/from-source/README.md @@ -65,7 +65,7 @@ npm install nodegit --msvs_version=2013 ``` ### Electron and OpenSSL ### -A local version of OpenSSL is required when building for Electron on Windows and macOS. This is due to Electron using BoringSSL, as we are not able to link to it like we are OpenSSL in Node. Additionally, OpenSSL can be statically linked on Linux by setting the `NODEGIT_OPENSSL_STATIC_LINK` environment variable to `1`. +A local version of OpenSSL is required when building for Electron. This is due to Electron using BoringSSL, as we are not able to link to it like we are OpenSSL in Node. `acquireOpenSSL.js` will attempt to download OpenSSL prebuilts from S3. If preferred, it can also be built locally by setting the environment variable `npm_config_openssl_bin_url=skip`. On macOS, this should Just Work(tm). On Windows, things are a little trickier. diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index 044454026..c8be56060 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -152,20 +152,13 @@ const buildLinux = async (buildCwd) => { const configureArgs = [ buildConfig, - // Electron(at least on centos7) imports the libcups library at runtime, which has a - // dependency on the system libssl/libcrypto which causes symbol conflicts and segfaults. - // To fix this we need to hide all the openssl symbols to prevent them from being overridden - // by the runtime linker. - // "-fvisibility=hidden", - // compile static libraries - "no-shared", - // disable ssl2, ssl3, and compression - "no-ssl2", + // disable ssl3, and compression "no-ssl3", "no-comp", // set install directory `--prefix="${extractPath}"`, - `--openssldir="${extractPath}"` + `--openssldir="${extractPath}"`, + "--libdir=lib", ]; await execPromise(`./Configure ${configureArgs.join(" ")}`, { cwd: buildCwd @@ -175,11 +168,13 @@ const buildLinux = async (buildCwd) => { // only build the libraries, not the fuzzer or apps await execPromise("make build_libs", { - cwd: buildCwd + cwd: buildCwd, + maxBuffer: 10 * 1024 * 1024 }, { pipeOutput: true }); await execPromise("make test", { - cwd: buildCwd + cwd: buildCwd, + maxBuffer: 10 * 1024 * 1024 }, { pipeOutput: true }); // only install software, not the docs @@ -341,11 +336,6 @@ const buildOpenSSLIfNecessary = async ({ return; } - if (process.platform === "linux" && process.env.NODEGIT_OPENSSL_STATIC_LINK !== "1") { - console.log(`Skipping OpenSSL build, NODEGIT_OPENSSL_STATIC_LINK !== 1`); - return; - } - await removeOpenSSLIfOudated(openSSLVersion); try { @@ -396,11 +386,6 @@ const downloadOpenSSLIfNecessary = async ({ return; } - if (process.platform === "linux" && process.env.NODEGIT_OPENSSL_STATIC_LINK !== "1") { - console.log(`Skipping OpenSSL download, NODEGIT_OPENSSL_STATIC_LINK !== 1`); - return; - } - try { await fs.stat(extractPath); console.log("Skipping OpenSSL download, dir exists"); diff --git a/vendor/libgit2.gyp b/vendor/libgit2.gyp index f141e4d2d..aff29d76a 100644 --- a/vendor/libgit2.gyp +++ b/vendor/libgit2.gyp @@ -11,7 +11,6 @@ "is_clang%": 0, "is_IBMi%": " Date: Wed, 19 Nov 2025 11:32:44 -0700 Subject: [PATCH 093/103] cross-compilation fixes for openssl and libss2 --- utils/acquireOpenSSL.mjs | 32 ++++++++------------------------ utils/buildFlags.js | 22 ++++++++++++++++++++++ utils/configureLibssh2.js | 23 +++++++++++++---------- 3 files changed, 43 insertions(+), 34 deletions(-) diff --git a/utils/acquireOpenSSL.mjs b/utils/acquireOpenSSL.mjs index c8be56060..930b5ab33 100644 --- a/utils/acquireOpenSSL.mjs +++ b/utils/acquireOpenSSL.mjs @@ -10,6 +10,8 @@ import { createWriteStream, promises as fs } from "fs"; import { performance } from "perf_hooks"; import { promisify } from "util"; +import { hostArch, targetArch } from "./buildFlags.js"; + const pipeline = promisify(stream.pipeline); import packageJson from '../package.json' with { type: "json" }; @@ -22,26 +24,6 @@ const extractPath = path.join(vendorPath, "openssl"); const exists = (filePath) => fs.stat(filePath).then(() => true).catch(() => false); -const convertArch = (archStr) => { - const convertedArch = { - 'ia32': 'x86', - 'x86': 'x86', - 'x64': 'x64', - 'arm64': 'arm64' - }[archStr]; - - if (!convertedArch) { - throw new Error('unsupported architecture'); - } - - return convertedArch; -} - -const hostArch = convertArch(process.arch); -const targetArch = process.env.npm_config_arch - ? convertArch(process.env.npm_config_arch) - : hostArch; - const pathsToIncludeForPackage = [ "include", "lib" ]; @@ -172,10 +154,12 @@ const buildLinux = async (buildCwd) => { maxBuffer: 10 * 1024 * 1024 }, { pipeOutput: true }); - await execPromise("make test", { - cwd: buildCwd, - maxBuffer: 10 * 1024 * 1024 - }, { pipeOutput: true }); + if (hostArch === targetArch) { + await execPromise("make test", { + cwd: buildCwd, + maxBuffer: 10 * 1024 * 1024 + }, { pipeOutput: true }); + } // only install software, not the docs await execPromise("make install_sw", { diff --git a/utils/buildFlags.js b/utils/buildFlags.js index 3c3d9d9b2..7ea87428b 100644 --- a/utils/buildFlags.js +++ b/utils/buildFlags.js @@ -10,7 +10,29 @@ try { isGitRepo = false; } +const convertArch = (archStr) => { + const convertedArch = { + 'ia32': 'x86', + 'x86': 'x86', + 'x64': 'x64', + 'arm64': 'arm64' + }[archStr]; + + if (!convertedArch) { + throw new Error('unsupported architecture'); + } + + return convertedArch; +} + +const hostArch = convertArch(process.arch); +const targetArch = process.env.npm_config_arch + ? convertArch(process.env.npm_config_arch) + : hostArch; + module.exports = { + hostArch, + targetArch, debugBuild: !!process.env.BUILD_DEBUG, isElectron: process.env.npm_config_runtime === "electron", isGitRepo: isGitRepo, diff --git a/utils/configureLibssh2.js b/utils/configureLibssh2.js index 95328ebdb..95fd5d364 100644 --- a/utils/configureLibssh2.js +++ b/utils/configureLibssh2.js @@ -2,6 +2,8 @@ var cp = require("child_process"); var fse = require("fs-extra"); var path = require("path"); +const { hostArch, targetArch } = require("./buildFlags"); + const opensslVendorDirectory = path.resolve(__dirname, "..", "vendor", "openssl"); const libssh2VendorDirectory = path.resolve(__dirname, "..", "vendor", "libssh2"); const libssh2ConfigureScript = path.join(libssh2VendorDirectory, "configure"); @@ -19,20 +21,21 @@ module.exports = function retrieveExternalDependencies() { } // Run the `configure` script on Linux + let cpArgs = ` --with-libssl-prefix=${opensslVendorDirectory}`; + + const archConfigMap = { + 'x64': 'x86_64-linux-gnu', + 'arm64': 'aarch64-linux-gnu' + }; + + cpArgs += ` --build=${archConfigMap[hostArch]}`; + cpArgs += ` --host=${archConfigMap[targetArch]}`; + return new Promise(function(resolve, reject) { - var newEnv = {}; - Object.keys(process.env).forEach(function(key) { - newEnv[key] = process.env[key]; - }); - - let cpArgs = process.env.NODEGIT_OPENSSL_STATIC_LINK === '1' - ? ` --with-libssl-prefix=${opensslVendorDirectory}` - : ''; cp.exec( `${libssh2ConfigureScript}${cpArgs}`, { - cwd: libssh2VendorDirectory, - env: newEnv + cwd: libssh2VendorDirectory }, function(err, stdout, stderr) { if (err) { From 9977abb761c1a251176b81825ffc65e97ee6556e Mon Sep 17 00:00:00 2001 From: John Alden Date: Thu, 20 Nov 2025 10:56:29 -0700 Subject: [PATCH 094/103] fix ssh-key-related tests - replace private.ppk since github killed it - encode private.ppk so github won't flag it again - drop win32 sha1 rsa test since we don't a have a key that github allows this - update pageant because why not - add docs on test keys because I just had figure all this out myself --- .github/workflows/tests.yml | 7 +++- .gitignore | 1 + test/README.md | 19 ++++++++-- test/index.js | 2 ++ test/private.ppk.enc | 47 +++++++++++++++++++++++++ test/tests/clone.js | 58 ------------------------------- vendor/pageant.exe | Bin 679128 -> 0 bytes vendor/pageant/pageant_arm64.exe | Bin 0 -> 900696 bytes vendor/pageant/pageant_x64.exe | Bin 0 -> 936024 bytes vendor/pageant/pageant_x86.exe | Bin 0 -> 850520 bytes vendor/pageant_sha1.exe | Bin 147456 -> 0 bytes vendor/private.ppk | 26 -------------- 12 files changed, 73 insertions(+), 87 deletions(-) create mode 100644 test/private.ppk.enc delete mode 100644 vendor/pageant.exe create mode 100644 vendor/pageant/pageant_arm64.exe create mode 100644 vendor/pageant/pageant_x64.exe create mode 100644 vendor/pageant/pageant_x86.exe delete mode 100644 vendor/pageant_sha1.exe delete mode 100644 vendor/private.ppk diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 444a3e960..218fca650 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -161,11 +161,16 @@ jobs: run: npm install - name: Test + # need arm64 runners or an emulator to run tests if: matrix.arch != 'arm64' env: GIT_SSH: ${{ github.workspace }}\vendor\plink.exe run: | - powershell -command "Start-Process ${{ github.workspace }}\vendor\pageant.exe ${{ github.workspace }}\vendor\private.ppk" + $encodedKey = Get-Content -Path test\private.ppk.enc + $finalPath = Join-Path -Path $HOME -ChildPath .ssh_tests\private.ppk + mkdir ~\.ssh_tests + Set-Content -Value $([System.Convert]::FromBase64String($encodedKey)) -Path $finalPath -AsByteStream + powershell -command "Start-Process .\vendor\pageant\pageant_${{ matrix.arch }}.exe $finalPath" node utils/retry npm test # You're probably wondering why this isn't a single `run: |` step, it certainly is for *nix, diff --git a/.gitignore b/.gitignore index feb22eaa2..7d1f15f04 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ jsconfig.json test/id_rsa test/nodegit-test-rsa +test/private.ppk diff --git a/test/README.md b/test/README.md index e96c79217..e6bdccbc4 100644 --- a/test/README.md +++ b/test/README.md @@ -17,5 +17,20 @@ Unit tests for NodeGit. Test utilities with garbage collector, index, and repository setup, that can be used in tests. -## Note -\*.enc are encrypted in base64 and unencrypted before the test suite runs as \*. +## Keys + +Note: all files are encoded in base64 in `\*.enc` and decoded before the test suite runs. + +### encrypted_rsa + - passphrase "test-password" + - registered as deploy key on [nodegit/test](https://github.com/nodegit/test) repo named "Encrypted test key" + +### id_rsa + - registered as deploy key on [nodegit/test](https://github.com/nodegit/test) repo named "Unencrypted Test Key" + +### private.ppk + - same key as id_rsa + - ppk format is used by putty/pageant and converted/generated by puttygen + +### nodegit-test-rsa + - registered as deploy key on [nodegit/private](https://github.com/nodegit/private) repo named "Tests" diff --git a/test/index.js b/test/index.js index b138525e1..abd2fc217 100644 --- a/test/index.js +++ b/test/index.js @@ -40,6 +40,8 @@ function unencryptKey(fileName) { .toString('ascii'); fs.writeFileSync(path.join(__dirname, fileName), asciiContents, 'utf8'); } + +unencryptKey('private.ppk'); unencryptKey('id_rsa'); unencryptKey('nodegit-test-rsa'); diff --git a/test/private.ppk.enc b/test/private.ppk.enc new file mode 100644 index 000000000..c388d98d8 --- /dev/null +++ b/test/private.ppk.enc @@ -0,0 +1,47 @@ +UHVUVFktVXNlci1LZXktRmlsZS0zOiBzc2gtcnNhCkVuY3J5cHRpb246IG5vbmUKQ29tbWVudDog +bm9uYW1lClB1YmxpYy1MaW5lczogMTIKQUFBQUIzTnphQzF5YzJFQUFBQURBUUFCQUFBQ0FRQ3dP +Y0VONis1Vkx2VXBQSGp3WnNiMHZIUEJBRzcxUmV5YwovQzAyMkhDWENJV05mOUwxSWduR25nSWU0 +OXdxdGUvWXFyYm5xMHVqOXlrSjE4Nm1GZHdoeUtBNUR2dm5SM1FmClQ5OG12VE94bnpDTUJ1QlU3 +M002UEpDYTZVekpoeXhtTjNVTU1uanEvU25oN3hycVdkYW1YQ2ROS3hRL0QxUlkKVXEzVGdLbnBI +bGxhSEI0dnoydHZvRXpBY0dzZ014aFZ4NWdoZ1YxT1Y1NzNYNFVDRXA1UVJNNHJ2WE9KMDRDLwpn +Mzl5KzFNQnladUpveno4OHBaUFg4UFVISGJOemFWd2JCeDFVRnVJdFVGeGo3WkRGK3hubDdTTDBl +RW0vc0dxClh3akhVenJlSmgwQXpZQUNYRVYwd3czZ0xSQ1pmSDEwa3RLMVlTcTFhQ0Vld1Z3MHNu +TUl3cjNSMkFjZkR5K0QKM1dhMXd0WGxNb3lDaTFhRUhwdmd1OFVOQWhteDdJVy9pcEdEZHcyaGQ0 +OVh1ZUh2MjVwaHI4S1ROdVRnWmdMNgpXYkVQckFSM3dieHp6QXJ5dmJEbWJ4N1RSbUNRQVJxZlA5 +MTlDQmF5MmwyUGgvNDFDNFJZV3pPeUxHS1F3bzFXCnRwbk9FVnBPRTRLYmRNK3g5dzBxQndEdTVa +TnRqcGd6WlBrbVBSSzhZU2NtUkRkSDRmNU1lT1dPd3Y3YTVoTUgKZHg2Q0JheGF3bUt1VFZLL2Q3 +VU9wRmRQRnhLbjJzU0l1RzZwWUlyOHJFTHF0ZU1EUnRVa2ZYUUtBWFl4NlJRVAphYmgvSlZ3ODB2 +OFJkaEs1YVRQTld3dlZ6RFpHek9VcTBjQkV2dmdjbG5PQzFqYnE4bEFyMzJlZzQvWXkyRWJpCjV2 +MkoydVBlNlE9PQpQcml2YXRlLUxpbmVzOiAyOApBQUFDQUYvalRSU1NKK0RaNkRSRDMxcVAwZm9o +QUtzbjNUaEFqL3Jyakg2blRyd2Z1dXUvZmI0OGd5MDdsTlBTCkVGNTlHTURBUXozVGl4and4N2Uv +WVlZbHB0NExHSU56ajhYTXIzYktNeFlWSlNlbEF2bHVWR3BpMEVRRDZIc2kKTHRJSlp6TkhRYjBk +U1lZenNySnBOREFJS2kvalBNOVVmWFBDbDVabmhvWHJJSWprSnFKTlltK0pZV0FmelNONQpDQkZC +UENDUXRrcWs1V3hYYVB3WlVYcExQekZWL3dqMTBRUlJ2V0IzNE1WajAwckp0SVF6K2w5NGNDbEla +bm5uCjh3MFF0TkJ6UXhqaVhLd0tWRTNDY040WkNsMWp3cTNCeWMwNkdZN21ueFEyU1hYUEwwRGNr +S2E0Sm1MZUw1S24KY3J6UmJFSWVFZUQzdWhGelUzSTByRU5RUmg2NjlJcHJhamZSekxjRnhuQzcz +QlMxUlR5Y2ZwZFNHRk9QWFQvMgpOZDM2MlhTZXA2Vk54U3Q1YTZ3a1dnSEpoMkg4ZFBjbmlESDFE +bXJBZFA5N0FrZWkxbG1YcWJ6Q0lWOXBpZDNtCmZNQUpiSm00UmhRcFREdmV1RThOaUJnSTYyVGt3 +dWNvVzJ5M0xkU3YxMzdpSkJuSlNjMTFHOUE1YkcyeVFYRTIKYWlYUXhIeW9UMlF0VmY1WklYUmFW +THViUW5jU2dMQmpnQ2QxQ2xqQjVqbFJZTXRTYzhiRmEvVEo1b1hPVk10QwpYNHhhcVo3Z3JHS05C +cUJsRFRXblRnWk1tdndQVnVjbGU3MjgzNk9KUFhvMUxqM0sza21yeEMxdU5HMDc2My96CmJLOWl2 +QWF1SFRMMnQ0cHkra0k0NC9ZcERvR2sybnhsV01kRDNMM0pVeDNRejlMeEFBQUJBUURiVG94anFO +UHIKRk9aYlg5M3g2TjU1SVdOQ1VLdXFMMVZLNjFESGFLWGZpaXdIRHlRYjEzUnhPREk2RlNXMElI +eVpqMDh5ZjBTVApJRjlzWU1BcDcvRktRTkRJalVWcjFSNmdERWdBdytjeS9naXlqMFVscUhNc2dU +UnNnSmEvSjJQYnViRDRWMzdZClJEOHpwdmtLZjhTSjBiUWpRMGlMdGFDVWJvQVA1ZmFhWGxJS3Zl +Mnh6S3VYM09Jdk0zTyt1UTBJMDZqZGtMc2IKQUcxL2dBOXpiZmltcEx3SUJCZFVJenY3aEUyajhi +aGpPR201U0lOa3M0WWVUTlRWV2R4ZnI3Yi8wVlFPSXJDdwpEUCsrQmhjOTdkK1g3WVVVZFFIM1Bw +U1dyVm9KTnNITXB1VFpoaXdDZ0ZNTU9UWEhHVmxqRThyZ2RlU2xQc2dCCjFzUWh4clJTTUIrZkFB +QUJBUUROdGU0KzFubFlLVjZFUVl4cnlKVUFLT3RNS0pmQTVYUlRzc1hoc0V5UjAwcS8KV2N3dHJm +ZjM1dzdmQVhCVndlTnplZWl5cGV2SnNZZ1JwQXU5T01ZdHdYRUJWNUYreUlCUWtpRzE3YlNlei9z +YgpueW9pV1U2QkFYR2JkQ2pmYTRlVUVURnpiY2xqdEtsZ0FCUkdqV0Q3UEZPNldmcEFqUXBjamFR +cElUNlh6WGZ1CmZXZ3RsbkZrV3lQZFd6Skw0MldZQ3pjYVNySlNGS2Z6TkR2bVIzc25ZTmRwdWxN +WlBLZUZ2bWUyVFpqdVRSUkUKN3U4S1pGeFBqUGQrQThHYW5Cck5QaWpQY0lxNUphQ1p6TDM1ZGhp +WHBiQkMyUzJYeXJLcG1jK1hKUTgycWVPdwpkNmU5b0pWMTNQN0pTc1lhRWp2UVR5TnI2QTZuNDgy +L3FtUmR1MVIzQUFBQkFRQ1c4emFSOU9lTzFwM1hpMTRYCjkwM245Y2NjUlVwZEw4RlJQNnkxaStU +WmY3ZFJaZWt5bVg2Rm1Pam0wL25vVzNIcGVaMmJiRGlBUERadVc0ZlEKbWdaMGd6bG9kRENlSnZQ +cXZTUXNRZUhKNGMyR3NUbjFUczMzWFNUVnhVS3d3amxGdkxqbzJCQXZpQWhmd2FDdwpSbFRoaWtH +L0J0LzBtWE5tMXpwcVlucUFzWldvcmo5VVZBNjJPVzgxQ1VYMS9kVTFrY1JBaWNjbFFsak5TRFhi +CnppYlU3am91enNDM0VVRURwbUdkbVRRWHhYc0I1MVVOaHl5VmgyZ0FWcUMwMDJtSndnRVVzanBx +c2FMNk03M2EKejgzODhvRHBYYnAxQ0tMRHloOHZKcElOSDBqTk5kRDF3V29BUlFlSHMvTmJRRktR +OElOSXZQc1p6MFpHZkc3Lwp1UytKClByaXZhdGUtTUFDOiBmMjY3ZTM0MzYwOTViZDc5OWYwNzQw +NDExZmJhMDM0YzZjOWNiN2VhYzk1ZDg4NDk3ZGVlYmMxNGZjZWQ0ZDU2Cg== diff --git a/test/tests/clone.js b/test/tests/clone.js index 4f2b58d27..f256e85f5 100644 --- a/test/tests/clone.js +++ b/test/tests/clone.js @@ -3,8 +3,6 @@ var assert = require("assert"); var fse = require("fs-extra"); var local = path.join.bind(path, __dirname); var _ = require("lodash"); -const util = require("util"); -const exec = util.promisify(require("child_process").exec); const generatePathWithLength = (base, length) => { @@ -237,62 +235,6 @@ describe("Clone", function() { }); }); - if (process.platform === "win32") { - it("can clone with ssh using old agent with sha1 signing support only", - async function () { - var pageant = local("../../vendor/pageant.exe"); - var old_pageant = local("../../vendor/pageant_sha1.exe"); - var privateKey = local("../../vendor/private.ppk"); - var test = this; - var url = "git@github.com:nodegit/test.git"; - var opts = { - fetchOpts: { - callbacks: { - certificateCheck: () => 0, - credentials: function(url, userName) { - return NodeGit.Credential.sshKeyFromAgent(userName); - } - } - } - }; - - try { - await exec("taskkill /im pageant.exe /f /t"); - } catch (e) { - try { - await exec("taskkill /im pageant_sha1.exe /f /t"); - } catch(e) {} - } - try { - await exec(`powershell -command "Start-Process ${old_pageant} ${privateKey}`); - } catch (e) { - try { - await exec(`powershell -command "Start-Process ${pageant} ${privateKey}`); - } catch (e) {} - return assert.fail("Cannot run old pageant"); - } - - try { - const repo = await Clone(url, clonePath, opts); - test.repository = repo; - } catch(e) { - return assert.fail("Clone error: " + e.message); - } - - try { - await exec("taskkill /im pageant_sha1.exe /f /t"); - } catch(e) {} - - try { - await exec(`powershell -command "Start-Process ${pageant} ${privateKey}`); - } catch (e) { - return assert.fail("Cannot run pageant"); - } - - return assert.ok(test.repository instanceof Repository); - }); - } - it("can clone with ssh", function() { var test = this; var url = "git@github.com:nodegit/test.git"; diff --git a/vendor/pageant.exe b/vendor/pageant.exe deleted file mode 100644 index a57f2a466b1dd44a9b04d76714d305922da294b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 679128 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%0DK$gD?z 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 z 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⪼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%0DmLA?|7c{${9lA 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

E+h8Kxrg48 z2wMfQkG%@rTbekI#}V*Z+N+)L+5?U{@AkloSfAz9ja-sk5hmO({p)5UyjNIcTR8=v1 zAQD(Z=VMv7uwdyRKbpb!uP0000qLqkIV0AEz#F}%Rg22u}X7XsBq0L2Q3 zmmA(4`)Old8Y2>o-Cnqx>`ihRZzbXH-^};`0L{o45di=^SU+`|2%|~2@)F`NJRZab zDOa3_EkG);BE@W3mQ;RDa=2D3=MIcySu7t7a9~?3-^sFatNGZZZEZEq!f9JAZzao^ z$pbmQLIA@605c;1L`4AHUAfH2mU83&(e9t_Zu(p!$0i_z4U)F*64~$Da*ZS7 zxF!U_`I@#AaG(eSH{*nkIwLXRh(tK>2$N1ikluZLUvcwivA_4c8^_3d@2k&$f;WZb z8wmGm7PC77jVxdu_suEH#L2`~22Up0)?h)vT^u}*O#1^|6oRxO%ibc>J5`XsLJE%K zXeA|K6~<*}K@mM6u8d|s=uLGm41o5;oeQ#HN~$r4h>YGfULNQQkh9&SR63$RTyH5k zvEX(b*eQaE9w&I{WYcq^bAYM4qNhg+!Z&0|es#_TF&SYQG6cZhu+T<{40?RwM>2-y zXIlA2LW>8eDS#QpWUkEv@r?a7fBY9IVg=D==DKp@!cgIBA17dm*HibJd}!{F5hSih zAcaf>`OcZ5BVv;a%jl<(*s7C_$}}9Mgq#4MYH;dFQ0ntyvw$g(7CB#tM}`A;mWihq zYdHE-!<0_)*E03w&5jvKp~k+yskrB)qI@us;nre(I-XD#U>Y4XA}uizR_C#7i&3m$ zS|KG^IfiVVZ9;|A;3>GqZ7<^ zq-C=b5Jy3P%%(ah8wz$Y!effSs41AFtI=5T4qi`WgMunmsx#XwTSrTcgp9+ptTh4i zsW1F@j(_)gc+DUR9dsPIhMeIo*&0#2u}fcF<(m1*g=kh<1;>B@nz5`!ti%_RZ3>wZ zY6PoY%MU8TX|sS`RjsATF+y3zG%yQ+)rrF*&PBQJ{8^(uXxkFk_zBLjvw>!?Qb@p@ zvcQv+6}Akipwhy?D>EI`7n9M7iM9>DqBhGTs!>mFVe*-w-NK4p?qNSu5%X7iC)8!6 z8aAb_0gDGF`vti7aiA9I#OB-f?auHp{pk_XP2&O! zyF|lVLYxK{MbVQBq{|#@V5Yq0W3A3ExoRKaGE|KH$wlYa_1^2 zwK<>7_hDj!s#DD`h!x#_g&Z)j(TFp-74o^)NT-X@ADI880;cQ4$F>wcx=N+H|MH8`}P2mlz!7Jt%`|GQ#ZV z=S5FD4Z(g_)m=FDZz!6LaslS;6sn2xS`!)SkEpz?uVVKWN5Cp9q&MYrIW&P`#bB7L z*`<|JDO=~Lmih6!XZXiRtqkc z(V25<5JL{-F*@5=#A%d)740}`@JYUzPPf zypeoozj)McByqa)vScq@E7r!fh(JqWs;r5e8eE5}ViN;T_D@hqFv4|k^nEOZ(Z=(g z;dIU$-+SECb16IxZLJ=2DBgcXz zPO2~BY9)1XIl>Md>m3-Bf-p_)HoP~Ny716?$zD8FS9|)gtu^D#Evo~N!>mfWa2cuQ zQ$D;6hE;AAS|zoZ>G&2%a`-a$4A?!aTSjy)&?-hOJ^v z@aJsg=9BLrQspQGo1;F1LYyu00+PnFT2%kKPm%g>GSo;g>6T$-D# zl-OB7!Or%5b*jnJ0wmg(Gq7pEOn7+djCz26v(zOUV5<|!_BaYa%ZCm$JX?7va0|yA zl^xK(+PqB7jb`3p$1gE!<{Q(4twmvGh3Z;tigjU7qwQo)X+j-rMJAPD4X15^{R}e$ z&n(y~?W)Q5i^(0{pC0%iuXJ<(G#C(b=fITB4*AKg8B0or1+}!*#qk z?QSRa+u-u&XNxWEgvH2&(iJ|B;@IS(0=74b1-46_kqAyL8R}bwijMhkdGidzLJevk zl`{h`W^HzZZ<^Ckz}2nauY!+po}1v$>eyi)3$Mw4>4ksyBEmuVXOU0Sdv)NpbVYTi z&eua->~9t($aGSHkm1wJgJEwmYHhNW;e_RBE1TnC)ouhh5*CxFBXx|#Ob*LH1@)7H zq1z$``@2)91aJ~p9GeJQf!XO=`p zq1f|{4(WEQO$1GO?RY`QLn@CRZk&!oNH7IZ_VMpF3I-e8iDxoV4bwP%3Z~1jeGyBg zT8yrK{7BM&Ug_ltojEoM1`Hlf)&Oj9s1;K56=0R!x*{D6Y~Hpp3|D60zO5N@w*|Dw znqAFKC)1#rn9F(SkXQ`${31SrIvG)4!X9C=_ZdDQ%t$XPFQSs#J@MGY+QiD6kfiIK z!9I58x))@2dfiJJXiHv&j)~-OKn?b6Yx%TyxwJtKqnm>>DnO2Il*;N~(u?A!m*6!B>dLHVWIDH$RCE zbeF2o*aD6=Y*&mZf%%lBply)~YL)Pfs;qkuqq8b=)C%Lk2!F^j9XrWY9wo zI{1?M^l-#(rg_ojg=}bskGrBQ3vD)d2D)DLP9d3@547N z)20%sxMvAgYr*A-+v4S%leygg*pk$46YOucjmPQ3`ej|5WsKCF>+wd*tKIH~Iah6h zlP0X)&Cd2;Ct%JIJhVHwYC$hVy1=JAWnU)CU<2Mo zwK@xTNt>#!3U;>RX+B}&eG2<-Fwl-A|7eWw$v3kfGZQDmGe87yJ7SXRT+)oeB7baD zrl0E=lSnZ>t1oN`Br~P>|7h1MLOQz-Mwkx?331P=aoSW^YdsqB)Bo3cifz(ScFffFKUtsqr^rT%qL<%`FJ}Vu zQxcKB|Mvc1t1IR)U#tb9&919>3%Quv0Q`H0cMZi?J}z8tWU)B^wJWFbz{$_Z-t+nV z;#jtwOC02!-?tdY=7h@eNX@>+J%4uCQizb`u)l2#O?TGyyc`&R@w_p zBP+gK7C0}_^6$F3QAyu32R2WxyjAHJ(m0R%$irmb?{M|-Pw%DziAT+Gc1)n3 z1!fy&;$&hggC`Sg>#(3HFRr~oHTc2O0*EOZh(Mu6%8cHsg4-3e1d?%zlCrQM;~JFI z+3AXn1GU>qN~9ytp+-$QOf9@KH)_y~k~q|Hj<~H_Y}Lt6WdlYEWNs+qQK*1Nqah7I zDOMXiv6Tt(ATPPL|gJ`9Am zYJfp4$Ob4ELFzx@h#-m`%^V7bbjrK_ z+xx*0qitXkj8-gh0B;HLT)f;$Kc}zLQW!3Ylk^|u$b%w1`cZ;UNPDkH+b(&mPyqcE zh=YP+ve)L9Q+}|7n9K-)3>I8#XtNfw`;2~xGb?dc%7nIdu0{kvpjDM|%7PRc%|jd4 z`GU4A3p$9(U$ltU#lyXw&Ct03$EHp>@!ni)HEHPufC>mLwPum+5qzB>nXe#skxo}Es0!7DW#wf0 ze++!{d3FG(M3U@Bb*m7tWHFL1XI8;vh4JR{qI1YH0Mlsa?|RJ~7#r|($S&p5)5-T~ zy>r>N_!!K9J7!M-c~<#M0ia@AwysWK-Q9ijr55!egR8_6Mu~Ff;kO2pi0BQ_lQ`R) zUH?>QU2{T5EznP9Zpkm`fDxfrQxj$)1Bx-IW7()9rdTN@CRB!*skmz?i$;+uv`mSu zAUDF(6^VkAtOA363CwGDCe8qDtc2?wU_f(}yPrMNPoi309X>)gLHXd;w1AE^PWVoe zp6MUL3N-FQ>rF}%E)W85WULPAGMOLC#{zd?To|pY<4-65>$6d}JF)f0l?A3XHk&uz zpko|aBYdfSerkFtf00JzM`I=Af7s1*1cI2O!fa;0C4#%9&428vxP%6y5aUyoT1dRX z)iHTunB?Xbj8Uw(Iv04(Y?~^bZ=28*kFo?;*{4iXL@RO;lS?AyP#a4{5W}Qp`gD=O z4~X49ob24F!{#gMoLhT{Fw;}(5^1`IzDhq2o?*ImWvcACb@98zd8-6I{#f;`M5Q}d zr4RoJoPwwo32KV9kiU*0D(4j`)32%VP`3TB#GSiL(|EHUC?yG!zUeeXZPgbB9I&n> z3codE*&LcvwO?z7L z;94@wr(a=i2{PbR#e1xE+DaWP@Xp))0(3*VWXMj<@6p?ah^IJqu|nqGE|#fmBH+WiS5Qzhc;@&xTVh55#*^?w|VN61Wvz$RWinm2qsn~%o| z?UFR+o4qyElT;IMdJc%zp*nZ*c^DrBaTi*Ms@t&xO*M?5P_x{^OaJYKGC>v8IJ-qCzpwM|9p1pFq4nqsU!mZD;Ml9ljEQ9a4o=Ifsb@lG6Rn8dRq)1XpR>aQpfT=E#Y7Nz! zY#Grlc)X2cE^miybRCv2P}*;QAGgkm&WY?**6hPwBJJ-NqdZ)q?~w>%2>5kGNoE=E zPeIbuF6J1dH5^V8Ch@wXFV*Ic{+9*&&#FuU#_wHQ=_uPik7QQ*b7~7J(&AyXqtX#|Vi>zHtbMJH^h= z%i1odCp{aRey$-+avG@3hC`dn2S&kG&E8?t+lN%zRGEtDfXvmS1W6%c?_f|hWermv zl=T6yA!o_{c`E_)QS>^Rhs)FpfCxF}&I!;QsoE9Yu|CfNT}VTi4Xpq+^m>5{ zInO+V`hU3O;>}~S?=$f(H-?r{qiliQ+dk7~ZcaYgrRY3qVct7`&vXuP<)NXK0e=DV zFdrC8=<&#xhS@-Gy6vS&Jl6Uj2F3%$NYQMrT~UV^{7EVT(v5JLf-_%@m(H$6YF@10 zKY5YG>Q@~ei0B|p_;po#E(_Fm^9I@ZM61OiEUwU$R!ptWD08QWFy%l@68mt|7;k%{ z(x18`EV>hA$OE`drw2T@;6G!G#i+MoJ$*U6DMgB zTkke-GAGKT7dA!|eV zQj**lMYkO~+}T*|y3?Pos>RCB^~rFs+RH{w+aK5V7o;ivaiF|3$*0zG-lA{a@)BMO zfR(CYsA5&|tciBo2g4sa=c1OSJtf1G^>tR!F`Yug_j_M4;i%H~q18dqrcX0Fq(cTl zTGvZ!<9<)lZX93ek#U|*_?#cwB%E8TB`XPjLjEW_13BN^>6Q0WYx_@A+Ad)VkK3hm zkS`b5Qo9IFVol5IIj`pGR&0@18ks$4y0^M+|U{5+AdHmd0*!{H_3Kk?NQIodOFz8TRpl(X1 zadw=9USA@>0fr;&tv1nO~=S_@IsP# zkxEuX09;z;qPE;D6bsFfl3&r*3ZZ-c4me$>0e#GYfuR-6T8o_p2 zx*SFl)-PQnvU_WK8lF?gB_||jWyPcVFU7jZT1d;Mi**C6-AGsA?=1y$NNOe{6O?2 zTq05(1Rv|#Zkc<;S72_z(CxFnrX>5|qW5{xl6gSZz3urA;5e`#92=64{Eqzj@0#h> z@9`3Nu2eh-SdV6W!bPEFEjm*WoY*Z(ev10ph4hye>Y#a0+mhLcP_iMqmp7cJz(?>H zYvX7-yG}iabEB*F9CeG6aM;s1+?_77w`$ofDtIsddV7k$E4=9*{Qlt|g8A^Wm3CqI zuu(=PRWe@wW=>TG*zacX_ua1 z0002fPL(U=%4KD}bXHDfmzCZ_$nO3l?ZcIFX*M$Lwk~dW_N{gX1_A;GQW8=ERuV!& z78V9p5>i$MR#HL&Rz?B>0tONQQW=2E3{}wpm;e~*(^Kw~Zuc3IYZe)wneeLtJp8O- zU~`xtc{vZIg}iRf!RT#u-6%oG;MeUd!K5ncZ7R}I^{Yh1(NdM7R6){7x8}?*Ju(;d zQmXZ?UQ_0reMw7c>$uS=vjB_Xe*ge60Gb&9gEuSOyz06l+b5N`{kAzY=Vbpyw#XpX z1WPj9cDlxt#X28!Ub@kbFw_+znSDuwC38NcCwL_FqD%bW5dz1 zW`i@^>j(5Z3bDUPvP#L|Fvt^UFxU3Cndu9CRzaSVvlwA5#$uME5TqoSV+Z}mnb^T> z<$sXnUVCblhZUOq1u$cbmWz*v?Md*Y<0GYhKY3yjMj~ub+8^cRxcqr$8;opdB&FOo z+sH+Ow2P1j`NH;s>Bs5wz&TNqE;y%ojpQFJ$YA8=Ak!O83aKTT82*m?U)P&Pab%=_*9dy?`$ zfuo>@?B{w@BQfrsJ3N7-L=bhv zH%@2!NV6Xu&?(FkP@nn(|Kj+cozIh#;K}y}CoeVC+afFc;X?eReU_9zc@AxPPT|Ce zU|?Hti2m62c0Ie#eK-89{A`?^tYa#fr~FxL{O^Q&=Y_r&>HZ1k^buP4?2hMIjfwo$ z+5WVlV+FfHqIT@Rh)7s4#-C>1N4?E;um0IpcRTjsLEP@0yAOgP{bt1g(R%w}m6gsP z)?kh|!pS(J#{Bw#uJU8OF`wb>lFXNr;IPCaW#OO=%^k9t&7)aw#ygFp6+fly%yRMA zdFME`_Vnl0j~p!wQbt;^M{4bt&Dw0VXaA5!Wi(G(_F7>iBs3UflzbSTgq1D6ljceK zk*E`r>%k9F`u)-6EcP6tNZBtN()J$tli3nYUH$ihTiK>q8VD>{Ic`0Gpy2Qnfa^tL#m+cm%an^@a31T?f|K;Yii|u)lgu$RW1RyW{Jh9& z^b3sYsdn+SSZwqw7k?CF!c80|FUdY==LYG=(e#4IO3jW$e?|pWeiCF8eYn>(@ zYT4&2D-s55aoLz>mm-eI14V@hjC#BpunxuqhggpHY zh40WkYRR##XhT1CEJ9M#j)rpLXwU6Va7Mz%%pOET&qV8O_BR*oqBwf}jFc_U-nP}h z`p8)F_CLqqc-F^qIwz7J3UkiwGn!BTIIpv`88Wm;q}N*|zsqKVbt-ueW=R>wMMS60 z!&5s(_j`$G8MmNlL1gc6vy|iT_|biG6VFN)DM+JZk9Sz}P?s=6k>uI^J9NB+9IKQZ zJ@~Ap#i|_l=d(?D#D_devL0tT#xRx2RLV{=Mr_fBeIRwg^J^nZ8h&H^g(lgvQHt1; zOL}(6`(r+*(5Y#{8ZT1%JTSAfqY3j?39wY&9ERK=4WIsOnX?}r*o*D#ED3s$Fhx>?>M-Ekfl4Izzc-XeKE$Yi7E-X(uhR;Nbh3$3{70`yXMdOn2^kb-VCKMl)G68&vQQ z%NPEKHj~kZj_Jq-C!ZUp`bhH<{rGlFBBE);R`&nQPaxe=+VisiiJ0kXs-g`?mP=^d zw?V|s&t;Ptpi`X2SpBk=<+M;aM4usNbMC2j({!F4*w<&9uxSa*gQ2X7=feGKDbqzXifGGldtJvQ{JrOYm<(v#rdln ziTc#u$0=!hMt|;K%V!*wANgngz&`yOwP}a?HAu7mL(3=W|C!&B=Fe(!V%|{F%@ux- zvyS{Mrfg>Xa=yot=Or{8gJ2mDtGZ8l_1kRNBX;OXh?ejcTB#=Ys3;L?76 zl3D5Z9HxBQNck7$`bIXUGUYBDJ+}*`H%zFX8!gD+r0x$Ah0R_*m1t>=rD-mvF6-%k z?=OhJj&;to(d(s#xzyJeHy(5UwF3XUzeFj-O76t`$@38JMm-~8YT_*JFJ9hpmh-1x z>KA9h97R09fBHfQpVDGT-pllVS&-7Omx&F-dgFjDIMZtr2!s|Z3D}TWa!uC1;C*h*_{~2y~i8|W9_^)89 z!K|;e+uVnDW*=?0&|el7`7zEKi{Cle?(*cGGq`b~JwwN!w2V^P(|S9z&Y+{qzuyaJ z3FF}oAo4@m>dt>%aWcCQ%oVb3@ z_op+5BW4=a`K*+GB!QE%>|ljoi3$h9;BjfA^=&*3mO?Jp$95LFF)L0|MkhBTC1BxN z&U6j@mAf^ zh$&&1N0?iAn*vOaXixbY0y~r`4{t?L(`P%D{Lg#>K8a&eUab6B=DLS|AVg?L?LYLj z(A+zH+oa!x<2--84}Y&IZdr`PZcS->U&t_wbw!?S{@5SbxB=Z6KgYqyMP)I=q3=DR z%!i#&n19lOqtaY&461bXYEHpRY5xi;F-vy}-OPTR#Xhb7DcNb|mf0l5b2eC-=)O<7 zJJv)YVP`fJ2CQ@(^Z3HN6xaw!pEN9DN%X` zyE>1wmw+|!=b#U8I`-M+lJ-UYIcmqWNTAPL?1O9?8Y2VE@%c}`ab!lG`mgm&Tsmew zB+`qjyi0T2$Mbh%3#Kx{eg}JA`u7fb(DGnMdVh~Uq{~+tn%Q3%?sT)c(dYN&xXUt@ zk;QBtIm7`!_EZTO_3xYYpi7UnQkzdP!SYly8GA{jbmf1qJ)9qZbhKzp`QzU#9p`cK z={>|L7bPP*BP#uCagip>)vdPuQ(quQ`yynRr@5ArCdawKIDCzb% zRx`1HQH=d2j!s&#pvRxz$qW9i-SzC-oagE`W?8pbaT4s^dJk&!O5gWCvaMUaW7>n3 zt1UKI9BOl7t~7ljj@HuOffdPjG=K8#-5F9-FOTZLb<#hi!j0x7i=#bUZ#Za~w#j)- zR;v@ura$pheRO0Xhe&sCs?t9Ezxo&nnM%nSbKQT4Y2&vEM#me}zrB?UXC~#pRiHz; z{ilAEqfGBhbG2=F_Si@MNKDFoE|R6>f8zX0b@L&saJ)4AXKvWb9errn+&@`!R+^F; z9qmueg*Yo`R-a#4%;RX@|A(e|QGT4KfReHDv_Fa?OQ)P302k9oJ6w>KrH|)OIZo>T z*TGXH-CYf${{KvYUQ7DO1k#`Nn?QfYnVKLGwsQQ~uT5rzfM{H@o z-HoM>lxYP47f;;r?|*q*Vm_qLU(S$l={bTvJg46Bus3?Md-@q~pT^+p*8WVr!PL*y zf7Y5#)4qJPQ_4??IrHDf1wUoKo;|0U8|Y1;{)b>YAKrf0|L<>ltM} zPv3);tbpl)oF4H1J!I<{V{}NRe>p(`|NjLJ2$Zxw@}JeRpMXfWHdUX4(U}Id_XS2nbg8nz`lP?Nlw@ zPHwq%Fg}`l&Up5ow9$&Mn|{=9;NXNpoJ&0yyz=o3QfU~8W$jdZ6!Sc|G%lCc)6Y#F zxgr1mE3D_GBzh_C*M*m~kyy9oUjK<$wDuwH+ON=Ca(uhJwzw1RLyNj(;;+g7U%9%W z%BH5DOw(d%lfKE&MTt#Q&59jpWB2Jv7~M3VQYO>Gz)dF9wI&m&sEJJ_UX^%P;$De( zCE}HdS0!GRcvs?HiFhUAmCt|hzo}vXXvw4#pMPp5?V92rq2~WW^;C6yKE1Uzrk!an zfTOMzkh>oLmo%A%#yXqaw6%`3x6S64IMV=6!_*}~AD8shpjsPGhp0D&opLN4wLtC9}3j2KT_COOrwg8eKHi_692y7TyWFQ-aYzm51xX8!>Dc5d8=z+*T8-W=U_Vyr3^b^d_(M`p!{_2j;f8%`lZA@k!zv1Z{Xym;fO!cR4=^6!mqXqrc`OWKK_Di=B9AQ3`8D-wj!4Fg5W)z?O%>&v z8n&ji<4;Xt7??WkCLS%0-i~azBm!AU$o#lRhvAYR-b}YKXiS}bQ@nb-w`Xf5jV$2k@3Ll2NkAbAk-5St|X-n|tAk`KPzmRe|4XEvoSOz%zEB#Gn?cOE8}O!C0xfq@B7 z3yE3}h8`-9R7fb4^6Bzxx;w7xLdDp1uG3nAc5jD`Z{eFkEQY>D`sRVm z1J)A27814|;5=j|$=3WlNp8}`nk?Vu%QrOD=_bF{$-M<^0Hr`$zipGY8w_vwedN<} za8nK$I^cPT7>K71&doNjADg#A&8^~=`Ax6MkvS(H$bkZPC!3b5mpTicht5r%8rt64 zwztV!!8ZqFNCf(RUPhsD&cO|?);H$Y2=~I-1`_}m6Sy7_Ja`}R)7;*~Ykrc?Jp_6H zLIT8vBrf5bR&rC}*K~Hws*fIHb%qprpxxW0iQdt(+7cia61g7aJ&Z0H!{H1Eze$ow zq!&LVt9^KIxzMZ5Y?`r~?+w{XNa^SPriSL>a=3>;91tNv=t4pl@l7E)Byr=wezc6g zX?p3^WRou4^xmHBmYllK)P*3I0rd&$4|g6?m!#srii6!GB-><{quJqEh+BuoovNu` zPBz`2#Ex6s7H1Gh1LGu&T`2Cta7bbG$?C>8h2)aPj`RD{F$M$cCf2&i^6CDTUZ@H( zn((W5Y>v9)zIh-&{y3S)k!J(u92)9`6Xbq<#Qy%&gp_>hvbR_4;pmZFAY2`6htO3Fn>xn8RpnDSPbI zeUtiZChxzdU$!^NNso{f{x*M2=99jV*&G|n?H0;}tr^K09Cdp2NV+rzhqASS>)f_t7ni3L-zB3Oq& z9Y7%g+(WsCI3yu-lF%5$!7!kapnF93hqVv8OLlvJ_rSV@5Qc;>2fYuyOL}|w_u#_B zzXyH~yh+w9Hx;$r@<>e#KJZ`Xt^?*=AR(H5gXm47mXE%-XA303VNeW%K}Lh{65$`x zJ`61x(ZNQCyh%wu=`ii5)1I+j(xI+SHj%GR?(MUcCZ#?Qd?0>8yi1- zDZb+tCbW#jX?*e3WRq{g;^R5~zb>&dL1W=F)W_BDjb_H@!pFi|6`))KOam|tb(5+Y z=8G(7nqKz#rbTQ1hioX&2IehzG&scP*aP-vi=X<_R_C$*FZIu@n6F>@Q07owGSpBD z`g}_%QG3*E5=oF6L}~|*e&G9jS_NvDfn@#c#&4;HwK~j4U6|S%W~)o8Kgjum!7m1@ zOsr}ctKkrnz#0T=J%1D9rc^|#)|<6v``0YehqJG+en4vL6*=sW5%M zu;eMf>T0=$T9D`CR?+tM*}9Uh8t7~Ayu=2CphG?%7Qy5LqzbC)e?IEY{Pn+HYd&XR z)emEQonQl7PUhQ5+sTp>6}YNUypmuQ5~~}+YzUJi5C|oKHmKMjZ;6ZzGByKU4P=*) ztB_oU;Fkrgm|)p3WkVn)U^a-^ef}n%nt~*PK?oUyLm>@kkesyP&;}4o1VS1iWCbKE zt(#U&j;J;Hy1aR-Sd|8C-6k08a>ZA5KOeQ3z479-p7wIN!I?(l8`S1g#6Gq+&9;xM z=;vr^fL!W@xH^|D2KPGI$F_XTy``JsF+4*ehr=X?S9rQYa7h923E~ZHHndIBny8gg z-F2tDrxt?vRGNtj1%a$!Ym<;Ng0j}@tAqAmVQlJb`C5ASZ-K=w>#kXsIF-DRz8C0Y z^p<2ZBQduEd;$6HZJRT62371`R$b*mv6aLqJ%aO>d0h4K>7u*BsZQ{G_e0$LQBB`+b zO`Ra8FRjIsNM4aVv>#be@(Gg%CJ*)bYnjS>c{W8ts0BnV9%MXJEve-p%Y)n!TpqbR zVJ-`6FIm0;_y*`pp>LDE9t1pKFu`o$VGH~wQ_f`GxtG0)7-v)S&8vMrtJ3YQv-u=` zTR_@E&`87IB!6(Qzya72Y#!M>AubDUE^+6<&I4}}$${8CfdCn zY;Tdb8~IJlO~FKP;F}%tlEIGI+SM`EPQnqc>+?g@;CgV`Xe8iy#Pbi99zK(NgMMDI zl7K9Fxy(Z2I^!>{Fqt>JR=5<-(3c_fN$3xP9z>Xkxp2q@$dBsmM{npgoXB7}iQx}i z9!Qmtx!}x&5SF3zN$JBkBjqE97cJW!cq?JTgVtNB$ zhtnpfE);d4MI~$>>P@{SDnaUD)I$i8pg4%)E~IwBNF<8jTp)Ct{ zF1hMK)x++RXdI+*2fh!iOjuqB@B%PQ!Eq7Cq4Z5m&Bx?%4uCm8LIUIkBrhCVa)^o~ zNDd-7@=bqvWO8G|ueHW$Q!n(Y{P|qM+#6@3ODJ-v%Axds_a;V%n&CfRKHxsXX> zg7!H_!C=z%*@_G(3Ib>Rr`a;qdgIf-omuU7d z>;ZTQVh_X~(3b_jnE2)(o5LI?z&Qx#Qv9ZVQ})PS!ig9DSMr?$bPnK^gXbllIfUo% zH_6L@0E1ObYqLGZ>YQ)(c%K&6wD z-9x*F*d^dS!h6GB7zkiO-UGdd6ejRJ;(Pl|xc`4Ivp_QSQzw}17RF(9K3`Sr_r`3% z1o#K9kVO|Ac27w8sNNZT@YOM2v-AvmhS{(s5I!P&LtKa9B*RDF(KSl;-uC3fhlQQ% z3SKUFI*`mqhkbN!ovkJ*B>u$L8K6};n_7?&N94SqH4N#Lnje6}vsHHm8Vcyzt;lqvbbxKugx(}Q5`+5BqFxM#`>TITlof;oQTU?{s zsAjNBp=y$<5BC1xy-90Y>{iK_^3~Ns_2;HxV{v!&))-bNP_Yc{y`5}Q5~&)vYsjx8 zvWNTBzay#T(oC>MxGSqBgYj2v3F5#{rx`wbz!D|w)5cU8808BDfszUg5 zoH-;u^J`zLW2oZiHNe0&u-P~f1ShWKR0X6e1+OYtu*AZK2^+#BAOvbjhz%k(!&?nw zmyFp!WCP?S;VLCpEBIIe-Xt~4(6ZzU-|Q`MiJGb-Z+po5=q86MdfxNj=PDpn3i6>2 zRrI}iwzK4HhOisZBta0u2_Xt%%&DhgK6fQhynD>SNeP`A3t-u5=G30Jf?ZOsum zZ-rQGsJ-i-InK70{kUnl_j+MZ=IK10 zzvnU9cK7W%UAOy;znOD$NAAgW_uhZ5f4$GSoIm|r|I7p2!N2zZrOOMg7FaE;T2Qoz zY2ng>q=iKbh86@Z_*v1jLT3fe3!4@*EMi%_vS?+o$s&@)Ba1>7d@SHtp|JvEg~bbs z77{EVSU9j?V4=a{fkgp}{1xyk&{u)4!d?Zv3V9XqE8JJGu25WoxWaJ7--@~wY%9Q4 zVXcB%g|rH270oM_RwS%ASW&QIUq!r%bQRz#uvI~;LRJN=idGe?DpFOPsvuM$rvgod znTjqIP%4mA0ja`K1)~Z@6^JSfR1BvGPw}3jJjHg3=oH8)fK%b7f=xx5iZc{tDaKNS zrT9zHmO?89R0^aNKq+Wap`-#yo{mz(j%NlDUUK9 zBs|D>k?tegN3xDw9jQ7Za|Gsy$`Ozw7)Ke75**|=NNsAR;(KVThs-1R;n)5rQ8AKmLF8|JeSK{p0yZ z@Q>UdtUpM9asH$HhxiZhAKpK>erWx``eF2g=!eY@mLDWPIDS$5WB5n#kKZ4?K6ZWN z`?&T|>|@tQt&dh8q&_%(QTjvl$LEjEADTWed|3IQ@*(2`#)paz5FZ#mAbb({EY6Yq=!Zih8_ex z_<7OuW9LWCkDDGfJZ5>s@_6OZ%43s9C67iPggp3o(eY#BN5+qf9u+($ctG%Q;laW~ zg9if-0v`N#>F=}OC%?{po%%cTcjE87-f6wFc_;GDzPMhx$fHUUjW~P*NP}!)Fc9LrsIE*FAs{ z=}>1h!o33jbSP(>(6gbOn9^&{9MRIDm!Zg&4&_Fcy>!YMEgk0>$8dBgGrsi7XpIh4 z44AInU1RA`XOz-|m5P}T?~LMbL$$G{_nkEm4&@A+UG5zQr$e0)64webIUU*=!}OsN zxYOItjMIlw22ZYoVWa6#XY}f2#0Jx$o$*p{sxd(w>x`keP>&GmrOsK{btp3u^{OUA z)S;bGEG{To9(ATO2IE6n1F07}mvQP)W>nSdrH!dWIb$^LN^MOY=8Ryy)Y_an?EKr1 zIuse9rl-A?Bxn?VjbR$VY#ThjCJc~ z8<&UDV_9xDZ(tp28D_q?@eQp*n-Q*;>Kj^zZAN&#l;77nw;3aIP=8?SrOj~k9SV$Y zx!S;?b*N^%*vknHu0xwKu{RnVT!(Ci!!J;Tr0d0Ij?F_AqpsXF;ov%y8Si_q!y$F3 zX5jv^g*d$qYewi?^|^no+WC2|QLXDzX6(Wg2OWQ77SrThrshs+nVFZGN7z0%a6 zyp$OSd!wmQc&TO(0)q-L24297VSA-cap3ov7`HDK#spqxYT#b#84AIg5)6ZvGb4a* z6k!^?5i>^arMURux6Cj?UaA=o!IX84!b_D=y4NZd6JC=Uv3sRjSmBGz4c<$6!@}4x zhe7aCX2kD3Ax6VXF(de%RAM*0jT!NKQi|a4R?KV^UMh?pzQx!8yp%IO(GhA4h?g;A zf-mYZB3@M)g<+SHBZ;3dWC*;}GfMCUqQ!}qFyoAFlx0x70W%qgFLg#0U0~WEyi_t) z(*3E8#Y>m5#P?boi{Rs=tkqE%g9ZOsvD1&TSnouDZBo7-ZIA1 zrS1Xb$CkX&c_}gq)Y|d}TgV5Wf_h?O99czHkLT7FBOa@YOsRi@=|4ttc48@%1bCiA(bh@QhB*D zj;u=+qsm$<;n2L48Lw+whhy?m%D_y;3UOLqmyDfj`0nMYm9e^ZsMdL^GIrOh^@Yn* zD#HR$sr(4$n#wPzp6VH4*HEO!=Bdg!V2hd>nWs|*jFYDVqnTOH($~dfQDlloD zrHm1_s;j7ZB4uC%Je3*QY)J@1=Bbp?jBSc*Z=R!!LAF$dfb-hOHLg$9Mmeicr2@`V zC}SuaRIRM@1!WDhQ+dPA&?OE-=c&nv800F%g$c0aB2$4zIN~2S}6*qpMVGgn*r72I8sO5dlq-ZM2Ze zj1!cSy$u3VB!fmuso-b<63DorK&oV1tb|H#8IX^R4VF^PLj#K==tcpl$jET%Royxu zG%{|ykjji7p?mIz0;!P!c$EroB9M!W;kK&0j6hRljl@#vu>@9;H{M9K3=>0%@r?yi zkrCiF)i)GKd5jUaD!;Bk9Wo8MQvHJkks*KsfmCF4;xz(?0;!Pk%&kgrF_49f9$wieqsokP3`CZhzjxr}Lbh-@eus ztEl!s@-fBTTJ^&R)*OBjf>vV$c+>S4AZU4v!FVgF4nZ<9M&7NaK?Ey|zz{(zF&Y-# z)hUjk*)bSnXcfjJQ9Dy^+XjCh~GC|fcFksM%IZd&tT*HD^V|-+#RTwB}a}13~ zT6Iwh292d63R)av8n0C=tDxf;Mp>=AVFd<`4nqa4#)v?Q6=JfWzA+e)XqCn-Qa2Ps z1+9$1F{!JtdO@)<4ZT{4;|tOn8iNL{#u%76tH+2zRAX7tK`Swmm8LZrGH76og;}(s z;~CZ&mT`kt#z3%StIMiE?l29sTBTzRZy7cmXr;zBUNUVw&}tZNm&Rfn9JClCAn(;S zIA~&w5qT@O&OwSX#@?;oK?f_0+(@7m80~q(xFJESW8BFD$&C+Mj4_lKnj0RpFNQ;{ zR&?Zp{bEMtt?JPS&xnp^xaBth0scj zz`WJo454l@4YpeG5fN958=17~Mk2f{-_W6z7#DA|f5U`U#bC6B3UH3lSd8(vtH3-$ zQ(_!|v=U<^o)vIx&}tZxx2h2i5?YFpoVO|*CA8K~0&itFOK2y?=seZoFriK{j<;GN zQ4_a_E(Gs;Dd)jMRLuEY&(~1ULAY3b@PzfmU%(-j7(scTf8m8##R#95k{T$)5#vCw zH8oO*O$;Nhu>fca7s4qDA=WTX==B9g6=I1oL@#wURftFohFoF^krfw-7^8?qj8dBL*>7tggyJ7BQmqVx?mi91*QJg;-*gwR7Ge;?LDyJ^#DyJV zjKsu3MlL-e#4tjvG4AP6DaIFK5Q9-ytg!k*-7f~}vBdEUPlhp45UY&AaXubH46%nH zu&Y?IB!=x_hU#KXqZsZDS}a2>FdoM3vJ5iB1O{gBn*2xRFCFFk0l+;zkXz zhH*%aOK#Z^G>kF1ths1InqfEeh($(j+!@`VAyzQD%E{S{8)Am>tyj7mIK&tRW3O0v z6o-vr4a;KXV;md|-nb!_7|U~Edjp49#xVE_#W!?_0!DB>R^QSgx-jGQSbkiG6JZ;f z#QFw1R~Eq0Lo6`5=B@&V4zYvrU=JlYc!(6nh`rX}kXl~^ z*;D$9fYcF2(B4aG15)vesJ+(I2&9HEjKI_aqk%67DQu+HFb?f~1;#;YgE6@Gx*CGi z4~9c9wFJl@>%kbHsYQ$idmXNkNG&iv=ynxGLTU#CF&M3`N=R}rLicK=V?y2rR_sWv zFjn_&UW1TY!LSe})?qQEG8m)xwGfdZ4}&p$QY(xby&lE*NG)J+3cD3H52*`A0N+b& zA5w}KhUjWFF+^{DF@jR-7$RXSl7)%X0wV}t)?`YgPB3ElYSHmTSAsG|Qp*@9!y>wj ziq!w2knSsOD^ejCqjXwoY>|Cn2JyAl;Udg|+d!li7-4)Jwoyo}V8r8VxeZ2YfpN#T zdK-<@4hF*yg3FE61Ea<##kEFi0^ zPD8RAkJJL=JT2>PKvE7E8-3Kmqmb(y^hPALz*tgi+8dG70)~d4wfKl6 zTfiGr)apl)Zp1gJspZBcS_0pwq}DK){tN{;C#eBOu-aDOo}>vdj;m@3F-lf|IIyWT z3@KCr2!|!Lz(`peDjb#607juTEyG?(0x-wcwGM$L3Sr`yq!t&o*YNcZ$;FQ?-JY#= zTv6s}XL$<+%lp!@j+Omcq_P*vAo!X)J{jjwV^aZEOUHNeR=3oVCkmNvrGC6_M{3Z?5ZijvKX!M3inEJ{URhT*x?*eH9xjl*)S!cmp^w$Vy1FGBH} zZ3C2CzKGgZRxXgl8cL|x81%0O0Hg{apUqEs^s_L$Svz{tdh1D9EjusqO0%rI26ehi&t*i zf@76jUW{MW8XTeA;VY|pzX(e&F9N(3`U|l1>P0YKOKQW?(~FU}uc;7A zl3p;x(hG~mqS89WvGnN0W30Ubm@FE)YB1947s^JV5{$F-^CAQ0y$I1P$a${eOD``z zvN|dZwDjf$#-qKuC@tB%sfdEa^rGUqR`Hf`mtMR;utcxRs!I|t4YYctVqM6 zC~q}4ed)XlhFZPo$S=#gjmmn}qF>(bZdm%u@_`rg?{xw|mhQZtY*RqFRoN9@K8@Ul5*Qg@-QI{Q~q17eRShf8lzD z7a{XjQsa7tizB_O)Bv901&J=z0VDJb7foyWr z6b#WbU1ZTaB#hBBxo8ZR$Tgy8y7;75SQw*cbOD%)Vb_eF>7q(6VJeKC(ZzAN3|njT zT^9p!hF&&$Di;j8Gd#r63tbqAXNZxb4|Fk1&oFUE7jzh>XQ;uW>vPzso?)Vo-r8)S z&rsq=ujesR&#*B_w{tNR&+tM>7w2VR^b8k?dO4G!dWIK8;x?qk(lc8;#?`b8(lfb0 z?yB%INzZdpt2ay=_czm$Y&@#P=@~9I^JS4$g$PvPc4qE{zX5yNokRb@O^u(_Koh;{acs5jvcHcb znpOR2acuPGMkYLtwx&I5acp(qQoCd8)1BR`9FYv|RHtL>gPr@MIU?H4rlYa-Ud~d^ zA}6Pt;v|!UO_6%nf4yj+&hJoScT9S6KIgk5(1YUha63e6UF#|~GtbI@@5tOY>Mlhw zP&@jwqd4nI(Ln&kZC9;xMvf@roStrqaFMZ(MNUXJP?S-be;h64qdu&UYnnlH=xSF^ z0IF_^Vvp0WIO@ytkrADvuY&56H~!X~=93gvIo(`Me08;`!jD|lqU*1l<>$&$t%*#| z(L+-t(shfC=}_B_*EExk+mV~bO!!AmV{gb(P05&QvlB?kG-go=c9LwAZ5da#~P1sN5+k-nz=VMf=-|-cj{+=I9kWOvz@#ceS+#)}CzGc#WY?5v?LW zubZeN2097KZLPGJWaV{Jb;GXf<&FfkSr!yQHQ{uy6jgNHZ$pyIx+!X?P%p^oob72@ zG2JBI8F3U@ZruUn(LmQt8ZUNv-2F`v`PNtS^mYPwxYlgTN9XQpM^~kVAN>bDXQPPPR2!jTsQY?sr>KAH)yW>Zi?fu z%!etusk(jk?1k;9t+oD!Oc4|A-xZ3Um~MLwMI&1`rtU(MI&wGa(@gX(lUx536nz%X z=VBs}t(&%M^OcUS2HPSxH$^o}TSr0JW_C5UG^!KZaDP|HGyTYF7Q&`HOIL>BKzU`OYUXn*PONjKfAIZi-I1Cif9({@nPjvP)}% zbv_f80{Mz5OKZr_>!uoUYmQCPkk{Ai1oGn6f3>#y6vcDhIP=I1y(6yv!|Ns}xwZn` z&%36Gd+7^W#i$x@pu=3YwI*V+k^P$@7_R?iQ-r)cy2YZ2ubVN1tT{JD8ddX`%NEvz zrq=T#iY%*cWnJAb9LcS<`Dy9svJQW>CO`?dT`{Pl>!uiyu6%Ba5xV=6rsxiJ(ACJl z>k!NOE7Bn-=G*8YDLU}F+o_VfeLG!iEc4-xWu_wgk2}Gch|hcOdRb+TYr^JXeJ#=0 z)=k-;iuEIbjjC>I(PYWhs+f*0{@d*_tNGRSL! zKYLoMP9=~Bjv$lt={6nt zb;-+>=rV2ZNK-kvsvV;C&$aJ}t_@>4M^3?b_pn7`Qa6J`=*sJ+>&Ssh1RsaW?p5Zi-r^9@q%%HSfBv9dqM~Zl>z<*gM9| z6wpa`nldAZ9kvU3*x`bx6uun+))vpg?}#%k{A?+jrUWIMV=1Zi*kOOoQJC*5sIg%$6ydP`aKrNbT#U4aGBGrYL*sMjR1k*G)ATtn6-z zxVat#k&_tR^V*6)s%}J;Q=Z$AQFU73I&yGO1=QUXB5*UGrU;PhB&y1ctqH1uQ#|Hk z-E`G`6kByuGYR+srtEBY4B#TxtDC+)+m#b8gwH^r}7 z0^mW_)e*MFi4wP?oLOlO(NQ<^{O(i4S7a+gn<6i+>GjgguOn*hWS)grJ7X|=LA2cz zH9_{4bwoRX)7vH}bhPTlB7m)%ar8|T-4tVSJ|CMRYOm>?lvP<1_5ZZxiu$Tt(&d&{BlKhMmFaeB7bsgUlkY7iekEM zn+XIBd`GJq!^dB-W*U{#+EH$Y7RIBAO0}l5AE)t0s7WVj(f8^o1(R? zf31kh{pbXRPzG&HV)~KAo1#Cj|FHWk3EIr9K1_7bbyJnm%8=yf?)Y-oz_O}OGFzso zTVP_O0@)b$j-12v%!Dc0=DIwEiu$^4zEOQ<-4wf3L~N+f zz3AzQlqFjen1yD;6lHVWb|VO&>!#SHB$C2qR%>4SeqJehW4fiW%Z5yatyq+kiu$>3 zmLbaTJyXRD@?WMjUuvbUG_rJ4WUF>~j+`oynsIj&)&$YGb!27gGW+i+Gl9x{!s{KR zDV)0g$13IBGQXxMXzN>RGq;??`R6Q^!IB53SLo=Q$*2q-c^&b+mT@v z^apk1uzrH|j+~YAo`;}pt-cUeu`h0I0B8^(3jnbV08j@2B{6Vd008|@a=TsiO*1ze zxI}fEk&$GfjQwQY@AX%GUXRcF(tE|N>DFvCV>65?2s4do(bbo(6hd{8hK%Xr01zP> ztC;{eI0Bg;@fkJpp5|%L2#JkbJZ0pOmiYk;o!Z3o=Lgp1@S8qWB{bpoixA1iQ< zuqrF7I$W$^x`GY|E3S*6@Tf)F6oV_-Wrv6s(oY@kThJ}haH`_(#3`#eJpKw|et4yV z^Z3|@u8DN0{eYZ+zdR=0edK9|%K7j!NDPUvHQYS0EsK=RWfI)SQ8@*TK18e9)%g?j z_X&^bJmbN9{yDc$w4e2oOBVduJ0YK$VdvZU^YSdi;DT5m=}QU%x@tcGuKtiJM=KUR zUJwu$EM9|?iRDGkjPkU7-jrihbU#NWY2DE$l0T)61(iOj{>2;Dk8tM8z)>zi08q>g z&ON3oGAg)lp-K5@R-=+n-zzsg$UJ|31=1E2h%`z8 zazhWDIgnqnFU3}gNkS#r^TY}kI8hr>B}?C zP3BCH{7F$aL|@O_a)%;xE2H0V^n{Epk$`MV-H%ziCNJ6pDEG@G_}9FMpD+oaIX04& z#aiY#B*Tli?Ii`;6^7i~6T23|+Y<}HqP(=C7=rfmY7w*fPCi#)KJ^li-kVGSqWPZy zR|K}0#wunV#Xcd~COaqixHySYMfKxfQk5cf^TTpsJ5+z)94Y++jObCvpTJiTdY+Ow zE82pjqz(n%>s9WUG*13m$ID*gHiZb~R07E8&!JdFs?Sz@j*p2=3A`_2qLeXxqF`0Q zN+)M4M=0L5!XHsbnzSArbQ{8v_dQn?aQE#;Z36N3^x|Jdfb5dbBKpknC4P}kpA!eP zqU%Vbsz~*W{ODKqWq?%$Iy(%_v@0oVVCEULyoNmq*8&G*R$sqWiQp!h#<7DS}m zWRAl4^}Kb^L?<*V9d(__$#*9cIR4iELsB-H`oyIofkhlOs^utJPXQ%DmL#jgL*65lfM*)+y4p1n@;y6GfC@* zZQ^zJ@n^I`&~=mC6}yh_$tYhQ;qO22Y&pb6?b}7r6PviNO~RZWoQqkZcR$<`40EKD zGZviuu@g%cSom}%48wC=eGXWl0LjEMMB~c!B#%?6ZqkO1`_PvFLHSBXWOcv$81YHA zUeP!EBq%xPvLl26jrtxz2GUPf1=IL!B*O`|nvWeVf`X!S#j6FAHrOHXL&ATI zz!YaIGfVm8bHcdmPW)5Mcs>(AVnf%ADk^@-iXY{Eu?aCZ{#AT2%9JvUqmKF!lfVpQ zlCCW1g_OyLsZJLY1BX%b^)PePv?jkQLu59oKQRplUficZ^c*Mb&tUwz0c3GGNC)X9 zo(r*0((_JsjN^iIeUzsvXc$$#4SP}Ce7+_ZEtYj$NgFLXT+9g^h4S|=&s@ddkapBD zh@3y5!RwJaI%7Td024nWKIe{6Uois2Mrz}3wu;9mngFN()IWMpmn;}ar-|MPg)Xhh z9}8n4K54cn>)!H#*rK7upUheq;6I$8f)EZm;^bGw;l){+h<2g_{&GXfmP^U1D#$IEe2zv5&3 zIk{!QprcFlmFVeWCAO(%pAy2t>P{73?2nnaTa#B6#IBqCuz=D0CQK;)0|}%n!uoZl zHt>i}PFrwL_$9tm<~UnQ5+p}K@>4M3qw+JkD$#Mrn&_uM-X31qu>j=%OyZ!q#QKwi zZep3D@TbMs3F$57M2rRIj+S&qs*oh|je`59PqFa%P2g1w$lfvsf@&8pQimdJ{dXmx zS-i{sq6dXskahq9L6@X$RTy@YAIHVKY=V4F{#Cv>@JpVv5ZfZRj(~J!Pn8nIpd9~f zDsqKX!j>XwN5b*~hfh1kFeJ=}r->%6n@Fr+6tc-^ioDIc5}Sf>`vdi}?zp!A)YrO+UyP^hbj z(#rZ|?itC!GiV95Vxs*~31n|T)xI5*eTh_jZ3U6N1Tt%#K;iq)DGvdaS!zKOb@oiP zRYg5foL}z{Hb%xD3cN~M+UHAT%?kDXXHRk)KSs_vDZll}$bhVfQGqp;E{Mb4 z$}4-ilPX=PWu^*Rj#sP3u=R&(4^_AyDz3TD$teab7s!%T1&)YcZ}H_eBwU?Fz!a*> zy1LLQ$)0RNO~v~a7IctPZ_ag7XMbg)fx-(zyMp&`gi^+(Ul|d1LZ)?Ms^b>Tm?8la%2zF$Nnb|D&KQCMXth^CCKBPG(zQPCYY{05 z4uvko=a(tsRQ(z)gz4hG#ZCg0P~%J8P~Y2IKLQXm`!efq5CyH;Os$YM!b_?vR)ZGi zi|?p1&xKhApj_JEG`P9kOrUF+FFK)&Xc0Uh&CnFdok} z0gAp%%(_vhGF^wIX$P64IcrfgHe8F<&Lk89#GReu-MYmyX+%(geLD;^jn1XWteP*l z?dG<<5duqBdjO*pyuAqK$nqAne>>Zeg_Y1W!6{zstMm?fKuv|JOKrDkw5gY#z&t{*`}b2~LWYxwb~^5`inzl{v7_$^vZ3NB=Igp;N^cG;xeCsW}$4 zS|16vVsM*szL}R$be2_))GajM*@B+KRlYmld96e^U3WGx#90QiQHJ{*%;?jvT!{=A zWiqD9Gk5%gyv!P&hF8v635IE~-<2^bl1`y7f_SHvGtb(twHfOT#~|0Qr_QyJr8kC# zHTUYB7U46JrD=`!?K_?u72PWVOIfI$vLO5DPW$EJmOIcl!`9YmE1z*YSwUga1^qn> zfjcUXEHOh3J8SjRZ-5F`{{%cIAel_IL8+`fXJAym-6EMn1b@;ew17!4`XL15ebS9@ z>HxnonbWfJ=?MbZnZ2K5p-JO`S8=~swG}>W$0@F0rU3-U?Z_w0-Qujcq!NBY_VX9DZpkL5Sg<7EGdd&)3 zWCNK%15~)XC~#yRnJFnNXbN6e^vW<=9&7kkWk(z_kaU;;%XuUF|hN?-sp_PToiNFf_ zdrTiXk!v%W78vZ^udZlHj<{_P(dXVJqyI`=Tm>b=Ul!KbSzfIQ(~5^h5BiCZ0b#pr zS5Y(}N&3CD-odqtK0$J$iu2LUylm*q8KCc4-lv~-k~5%RIBD|!`)5iz2Mkh=_M`5* z9CrFr&c%+8L61<$jxQ>dm_(5HT$v3l^esG$wjyoG(4c8%4jFc43RJzJBQ*pgBBRSi zGCj_uXaDI?Y1}hu+1RBxe}c_`Vc!$Jn8K%L`vo`YI<&IM?UsE{_mgz(pbB?ViaU~8 ztm_0#0xVxb4OiU5I6(2v1rM znFgaM1Vb%}{nVOX-%}r-0v7k2rj*>u*ubqMF+ir6G59-0g(lCRQ_U7pVh5hmL1&Xq z0;c9$o$_V&1#L)dVd& z;srzN?qLYK78hrM#3Y)-`RG)|Q#3=Ibq`+(TjGop*z^&0nfSt0MT^s&@bpZf!mQc_X$-*&mc)&35D#&1bi`VJ&fr@Dg7T$S-@Qc0J zC3rJZE!BfVGZLRP>4A72SP< zu-)@iEeIlmX{fHNI<w4(YkDhN$FB-#_) zupEQ7VyxC(*8kpPX>y>Hsb9u>xHioC01E2m_^jACibV-Vh3&!nf;J+nIYy4X$EY*W zXrf*$YMXeNKY@m+E%&N&o+I9dy&f$OkySm)#m6!rUtX3~!2FW)UIjEBU-jW9QWV$% z4Q$U@=lUS^_}JAw^N7FoLkIp5ONfK5zx!b!1o zp;$UaECq5Hy&h9z$I)OV+PA)RmLxB9R)Pt84x(T`}w7bn%Z%X`V_NR`JEYw@bySPQ7$ z9T?S+DCcQi(}!;EUtu5KMp4#}crN}5HYOECPy=ch^Zakx23pgMf8~wTkx4dC8W8>3 z6uOpodsR&sT3HLS6H7Rap-p{Q^nrRYHd}9Im@A6Q!a=ySTr;kJQE_Vp?QI{MdkBUx z%+nUV4rL?Lz$(%`tgs%`&#*x2*ImsFMCQF|H%Jy9n{5hj@prd5sHN_fabsU4bl?RI zp1b0)L5rtW1$l9;TvP;6g8P5jqBklITtU_DsYcdEO>t}rcFwmldG0h|nHSmc*O=9t zbV9XtQ=NRVu;iH=`>V%0J|%}LQiW(r_+ROTcyLPePTL%QIanDvmd&TV%r6QI_@P^w zNz8$vMp>|a^6fBYCMa~&D>LlPkrAVyISKbM3if`?ODVVF<+{6vR^)+^TWY{sa@d2g z;_@4)VX{9gB8p_7CH$=696pSA!3p4&tZ-RBsP-{=LoJdqxRC&Stavk zn?b0s@+s{j_i}EI(fY2_dLcjuuHEbRl5FJrjqTU?7E~cEB1^A@v&Jj(@Ma63&K}85 zf{u-DK9m-y4-DAxKT@!O#2F5>eNtz z+l=>8+UL=wTu295&l_uTLD{J%Z9RPZt<41O8OyDQwpMr6p^`1NG4FOVTJ_T$`3Jz|$!mei;N=bQ_w_YM&NV<7DJK?WePVqWM*sO2aIhO9g zPodok+vw=-f+{UE_Fdny`BNrYT!D3}5yNQyFcquQu470W&i((2g3fV0#NHJNtkd<9 z?91KWn+(MX*(P3cndoTo>l9mih>>Dbp58MU!`+RCp$Hjzl}y6%*6RYz6QZ?D=OSwM z5Ul-5J$IFJq0>i4i`VjwkGu$dZ-p8x8z;YSe`ea6wf{KM$E|eY3QD7Axa%yU?+&7h zQ%|36wd)CtXJM;M72R6?mdIA~scxxpSQPsNZF5uCEefKdhxK)FTu1Z-pJq%8pF9Oc zM1~zzzkb@}Ye`CsRcraR!7?4%FN70c@;QjH*d{W@T3@gH7*1Df0~Py9@^b%|WW(^l zYG7$MM~4f{W+6VjuiZzGg~zubu~>iCJxV0U|8g<rZST_q6uRW+PX2)eS>4+2&f1WjFBv6gJk&7jC2~(L#8?s~2wc zic3FX=hj|tM~taAHHNz7diN8Ekdh`Q{LHcATp9vU;`4X@@sA1&Mo@r!#;l6}ortC}}XZFT^EX6A0m&sqLLXQL+ z`(ZO~U-96RIhflmc6RsMPLd#%;`QbIn%`2;ZRB4zFW^MaBd{t7c9dNI87F!enBDrI z-VztMcPOuCSSx}JObZKOq|P8WY>4N;M`0oUk5N#QJT*?9#l;XI(51eaM?Qi>}b z6CEcqX9a-^-E^KHB-s0tRsP@7vk26Zv8!3nd?MGB9&xEB#7hBw?v(u)e(Q+QAl-2-^P8^)a0-VD`iX+NnA0&wb=B*ld)!w_ee3#vF_871DX>< zjvnfbW7L&K*{4#)jjzGc5-2U8iy}G>pIgTRR)pGvbZmXDFO&x-VgZni1N@eF`-p4m zGS}!iBBZq`!;{v?&H7WE)`5wgzjkTFOnEIe7uh0f=?Or|Pcky4KS~fo0qd%1WUaQP zGq9jimmm1Ny4<)<96!h0+CI4%lk~{)VgakEXwABVJ6U+BK*OMnvC<)-&V5SR7PQC7K*sFAk3Ru$vx+CyKQY|fr=JMWYg5)pz!9Uf*J2MItJDRt4-s?ZJ zK5=Y)1zc6ny7p|4Zk0|2rKLL+r6fg3Y3Y`3RHREKq`RaAB&1QgyF$hP}@SHJPpxqJ{0G-Q+q)t?lWA_R!IuVo(35^4&ART`?6V z4q@HzRxFt)w8mF5rLBZ43;Ei{x^mRDUygzgs`bP-PBz`s1tg0uKclzVM7|IdQH`rP ziulVSni%-YRNF#3>P_6i-g#YLfsXY9j6#*j@J#pb?Fx3&xLZ$WlvjQHZciVik_fL$ zjt3Mx%N*9aKUm|B`$$JDS4L_W7dK4#jt(*3GdH~y45jqWCp$P9EYJVy>zI=89XOJW z&XBdc@Tx|K`^J=&SK18XhV1$?-e1elZ}?ks_nek8AtwTRjh=It#Wmt=ggtMvegB}u z%0b!XJHER7km`mBbCwTcFAlrGDaRXiOp+cFI7yIOH@zq*6s>ZkIJ41r0NmW8wBC2Iiu)y zbDZQ(0pcJLt6GV?Yb;&$0&}r#HNnW&ePeoSe7Uin_UmrugAGlF>WKIV<6p@t~}{g9V?^N z_Tz6lPYh;B$o5fw1y$JWe`4j_LGNu)t2%_#CG^~r_=iIf99N?Nbtz)~Q-*oG!tbZd zwg*INNjWG6>3Sz2Mw-+)tSMzKy%t1>m*IyFwror+-!263zV3F3@B}>I;h1$^^F|kq zb1G#QqwpMW8*F-M-FA8OsKgPAT28~ttFI8t*<56nML@+`?c)TkDTGU z4+}Hzh?n^DPHDPb<7aLNE;=|p9W0?Z8+}a~d%wSUqBo{yZtd$cPEumY+<$*(^8vMkrhStX&Xf**WrM) zPuU__=o=Q=?Q|mH#4^&)rU^O1=u2FBGZSyANF1ggs$ClNZxjRvsaxqB&{^iJloRxf!291s0j5(e@G5U4GLq;7LA#~MaCv?P-I-7*5%#^EC2To~q=j5~; z3Oxw}jVXx=$&qu1Vjz2r%rO0qeB~N>Lx+`F2j6}8@F%(N1QA-JIR{<68(MvXf%j;I zV(?hj=%dBL17%4EHru^wmdfMF4`HS@_Q zQ{I^1x)Rz@LHknDP|evMC{=V+88tt*-cA=7794#nqVG_f#3({eawCIypC_1CCShrfEqn>qmshmJP?A18rwtuKUmjflHNSVu@mLlff;Z5x&nf+VWo=9TD-drmF;e{nUAp(L%F>v1lmYke0ph+7)`_W3EbOOaZYl2F z;YwfLgtZ&thv8U^2x^I>4KD3GEb1pWy|+w-(63Le=4*aq_#>&y^-)av(6Lz&Ti_2N z(d93P2<(-z#sc9o&Dz%eY*zV%l_bYw(quNDPR%m4S&1{gRQJ+3nN=Yxri09UiJXrr zQ(ukU^uyOa^F^G8_dNP6^m=)xqYIrZKJ=(PGeRfs>Ih+K;qS8e=tZWP06iNX-tV)d z$b^P!D*3j%$NN`a#_bJ}!f#d4*PMluoK*|hKM2lRTyIn5hQx$wh{~@H?o&jJuu$&s&Otst6yMIHg zUJ0}11?L#NY|V)rmz<3B(7~VKAMwz$WH-*V=k)$Q5jW2oI}iIL6(6P6j0e3meplW{ zHhBQ=PlK^AjrHII(!M`rbrenmY8yhP?LK&Y+4Q$n~>P>hFGPa&s?seO5xvWP{6->Bs4x{y2XLt6E!d!foZ;Oxo?2qbl>0P%~1b-JH+; zraZG-X-i$v{y|}!f_H(6ccg*4#>=b@H<5*+Nlz!BkCuWe;Fqe}u=*Vr+}XHPA;H}8 zju6^;w|KXYE#u5+PskXT+_gXI4 z$Ly10cKKEK!QHdn{y?{aQ)MB`v~xjo9QlG}nTtciTZjK;0B#{X5$wC0Pp1E`E{mZ| zT}uGs?A_`Aj_-48O57e?@4_kv8YF?_e>fRQ#HCQ0T^d;bzbQr$nB(qNzifg&Tjzj^8kQ~I=^Vzk+?X6`8gYbfX=#r4!iKX&kVT8 z#C`DJ&4jg4h_Dvb0NHIKm=2C&ICjLEE2 z>8cv5NMWrIX&v4`#-1Z31t183V|--3Bc~I-=WP>a0N?`so6&4S*j2OU6@YD}$*V0~Z2q65X%?WRCra6$!aam${2LNvO0r zu%T^{HQh$&M~C`CnT1TZ`5Sl`n zfZH&ZJl(IpIKI9tUSSxh?@tN91PYiRu_%g&EatmR?sJMQN5;G05(m+|C)|`%UcV3DX2q&ehuIj0KNqHVEn~_8y%Fw5p)THIAqIuT}he%2>`CB=zc&Q zaIQm)D6)@Ttb8>VL9!zGXIuA5#+6A-Q<%Z6A0)L%cyH#UB6B}g9!k>|l|Rv1MESr_HqiK*u+ffX_=evMJ6%MioQJy$Sir|`{ms_wS=u593t zL_mqaLRBAn#7kv&U;xPn$Gk5J9RL_$pwbN$+4A}GM|iM2eymAAmc+PnR1PagnmZ;w=dP)_*W0i2*Sb7v&ezH8gt;r*46mL<5oxXaJMpijc;g z4kfu8aebhB>q4DBlG>UT*^5w-^qfx{3mO}-8@}D;!S-$Oa|S@DUfg(>U$FM4VK=5< z3;+TEcGkuL_>d`DeL108Pyt`W*Xum!iU#DKUMc37pfn*{;p^kjt&xM9~|H=K->&_NN07$?Yn%6eUOd$Go~BKZ6OyG`2J@<*&q-A zR^X?jA)igvlmbuyn8hd>S{RfBklX;@E6wZkz9Wq_;71MV8i18LRx@`4OQdv>lx!jT z%GJLjwo#z`(7}&-l+vGFm>>#9NC;I4s@8odHzZHCX&-eGLf4dief>Bg8et$h2!`Ku zhDr%?JYK2!K9_+&zHv!D0gbrCli3+4aN5*Cs_? ze~^}FX1o%iVD+)m$GBJ}0L(yAcA&`zSx1?aOx;ErY6>Q9+}gL@MfeorH62%GP3qKpelxM4h#S=jW!-U zLWbm1C>gD(=oldmbs^MZ1j6!C)R+)TDFW6`>fnj{T0Ji;PtbM|$oGSk z)n);*Yy?0lJDG24u}DBt9LhQB-@1A;&J8V8*%hO{AIgW`?**~r57~5V;3tdy4z%x{ zl}Z`FMXs(xlp}iZG3! zI@ko@9tKf>T@iO%=^C;yF%)pA6uf{yws{&h@G}}_&NDj7g*82I9w9qBmqRo0LZ4Cz`&d% zrC^_8Ke7kbPW>-MvMZk~t{F3}M~=fFO@cy;5Up+o{m3%^&D_m6z+gD_H@c3N#Qga@ zVb46W6?~8(lT;&U{<_4uflzAjeUkAsf3bfYjgTLzJop5=??*=lSA@ekFQ%~D+TlR* z7=Sm2;{v=c+OauBBT(fbnfj?Np3(xT8l)o#=hn3YQQjCRYaju3lGdU4=m61hTAL!n z+k*@h0Rxa!;ehL{nE8e%9e!|)tj8&1>y>jDZ{I|A>JEyZBv>ziXz{!Vm^~gAV-6Q_ z`DSJ~CFu=u3t-#!{O1i!lQiu}*)K6mIu&PpuJu-zC}OI0fLjtOp%^?`$ekHfTwX)^ z8bMQv!)@v~h)jS7Dd)CAbzisA8PwaTpegx{B_O?yg@R(R~a=Yj?t%9d zALHkV=jWqm2?dW11k5FU0qEj#D)!&1hJKhLxq_5%M1#lXt}YC+d??^T)dPktGqQ*b zKX(UiNJcImb{Mp)klX@BnD+Of$sN z8Z8PBFTwa*DIj-vikxDF10Wf7_liE;2OYg}e03f(?*mPyM%f_Y4`e!|T&a-Recs)D zwo3#P$b&b7Ef^r*t#UfXv@I-eX=($29Ka@MjBApR?dVTkzg|h|>-S55S_sope>;X8 z3yNW&)Y}3QD2R$|>T6CUBgEisHfzk8uOxIm2k@IpxYwA#3=ZT)&MTJ0V;?)9W}M=pm(~x-4y06&@**uimXvncoURH7X{8Qo5ZiSqYYo>p2kQYw*eMB8gB!P7DZ&wK+?*?DT&lP&9jU@S#$6f z(6j;*^+uH20`UVnXqM`YohO#__LTaE-!*c)MsJeU zFKzb&0QA8M8_gfc4hv|z%4@d#=z~@Oz!`-croEE8viXO&>#QA04v8X`3gW=7nmw78 z1}2HD?SMoi8te*qLbCQ>x`-hqVklZIjpxtKQm;Lt*l`61%@9#&z3zzm<Ug4joqJPLP_J55557A z45N`O_u|OfKLCG`eEdw%1d1D84WJ2XQzKP(Yo?HwoyK+lD<$#ypM+o?8Ru&E9xUGW zNQw?1M=*YBetEkkWO$y?57crME9P9D)`a&;lUXk3a@26aFKKsDK`lL{!w^g(HEj`(G6j4RQ?; zzL=K~w?MM@E+7hP3A}4hAmqw;dK%Xi_#*g=(I}aNA7qUHpd%tjk^BJHg~Nl?-(=la zn&ve~1;D{`?5Ek(ZXs1**V50t6tfc5J7g4m6?V zl|wSJR9oc!BwG4yM06F_gUDIp9LjE}dcZLphAOHt9;dHcOZmX7oa? z9#6r{BjjaUqd^+9QXyKB z6^kt5J920HNBSTJUjP+U)Dr`YW4(1N%I_@mPSE%Xl_<#rR5)L3C~NO2-P*Ow+?8ZX zWIPBa{Fn8`1dn4{Un18CuzGX>Nvs3AWg2KDh(8^7KRNl8r{|pOTgaZlz<_=cOlL>W z!LJP2zYXX?JXzgmwb1Mpq{5EZD*8FpMcI*7h(~`2v7^yXJ}nDLA5`|WJ2h-a@MgXa z%H|1J!=ZM8D_lf>tf2lC7@+n8;1U{Z`XnCFZ+%W#Vt1%J8*{8YY+RdOJ8Fm;MvlV3 z=(q2mk}8dEVyF)x9(K84K}$buboaa^0px=?YDY1V8<&IDm>`Il4-AFccxpgHII=#B z$5Wo(m$#sr5P&I3Sd5AF5+PVX`S&P+ls*j9^u=LDG>wE-p(TXD2?AMG z0y6+)%tws=XJ1e+6OS*^Xw@-k{}Lua1p{8xSAdPvUw?jnYQ8e>X{W}zm@hC80sBc) z8}c+M=_7dbA_0U+#cEz@A=2jxTy^W7RgseX>MD&Q*s zkpSrGVAy)FtR39RR=-Gc8Tg z01iKZcLzs4XvSZF?CX_fpqUkO*luHig-8=SaumZb7!oldgX#?RiQkSP+D42sC2}S? zkFiP{6Bm%Vq1`2TeitGfvJ=pH)al@bBy>Fw&JL9#177rzv_}bsfeU1hl!~ljRO0hh z60CtUq=taRTzxwNg2t*6lqeN&0gVWuv?=?=#3pWhMVa-)L&@{86<`5MM_P#;&gBQq zZ&P7Mw91Rz70wmw8^{b&!9l!W>b5hohkSh*>!80|%=$s$J}@*8V@SCHTp&3{?fbe_ z6J-af0`&BR8Zh0{G=?OJ>4rZvz(Ws7>dVLpIwC@bP12mN{x;fGSvw-$*KlA2Ks*dE zeL@j$Jmyn%~Zre{K1SJB5; zdzIA<28+nq57_*;PtJN{)m8dMVXdW9kC4`@tMU8=nG{l2$f0#pk@oEd`)G(;C~pNj z8*n`c-U3jDS{{?S1g#b!{yB^8!AzWBX%gTHlC4%6J8!&xo70bR?Z-%EQw9>sYCG+b z$gwz!F~;{n(t(0!GGr>Dc?-z$QVz>iWJUU@0r{fsaGE}nkqQ)4zxg=mSBucRp$8^! zy#AzmSQ3iU2vT=T;_4%&Qmjr^kGvpD1+^AxF)ugtEv0PqYSC*zeZ_5jV?sA9mJ$)qC9PaU-F;r8`d6~Q%!3ltv2L>6^P$s&co*C%VWMz=2m_jw&c{rwYG{%W(X$!XssYfw9v`ud6BEt|9bkOrbE7TqvEh~@Oj2r){ z%seeh)1p_3G*X^YeD8$-14!ox@cm}1b(nA_{k%6Yo(m%NY=s&&;D-+_-MeGkI=t63FX*i- zLWSDn(n4iBEr(U(DI)Qi;X&uQ>%nK$$F4$Jon(~**``TvMpNbA1Q&j{EQp=D9ryjt zlJ?4%SEG5f;a|S|tO|1_LO@Gf6qfs(-}qQgXW_|xy$?4nG6GH3n}qE#U~43OSAER?Bp@e)RkGUqf8+y{Pv0 z?ykSLFi$hCtHk2g3`4o^u9_EJ?nlz|8S8=BW4>-_Eo^yzt_*CCfB>V{9`TCrE3Bfr z2AFQ)ib^yW7Uj4g{pWZo&f#_u&sn3tG~xt=GNmzFb^yb9G*| z=2xR&Wl3hEKC?)Vd@j6Z)(xeXl=)$8)eGx!!Czbr8yO$A*p z7DbKH>Br7vwezOx%DXr301>0W zdk=!(epwE$BXF8$1oFEd2CJ+v-A?d&dfR}UJ)aScw}GyvRMK!`?D9pxdt5~ua>sX% zURR~cIk0oxx816KW5Zth-I^ad%z0S8LPhZn*|RQ39H9?vIwBIKw>{~kI48ywTJ^~6g*Ey!scok@NC1TC=KXu77CCwlG3Zua$TGGES z?P>QdwLR~d@_irW^brBq`*%j#LI#E&81oSgeLN z0$NdWxWSq^crpx*WMO<6ChD8`bJmKZpUrCE;q&LZd)XOU&WaJHIp>MgPQn) zr)ExmcSZEFbv8(JWz;`Y0aah*d5Vy`33dL~%ir`H>R-#9>o*udp8b5D$9_ zZ_UWM`S&E@YILk>YDDHCn&q^{UKBqsRWbF;DfQvoE|d6WUSx4S!ksd)3X;PQx?446 zOE7OuF^!G*C4GEA>HLH4iUaoW%UV99;%*@&6UC$9f*YlMAv+J+ z?5nIli2APPs2wpMp*G|QlSSCKj0gBIlNLrgb7AcSHEq|u6EZ4nS3_ZYxHb0NBZX>= zim-4gxBB^kxnl4%-@$?s4$p(pRk2Z;CHINCl%;1?WDm%d;d6e!PMRv4H8Ve7btV>& zFt|1<SG<^47&>tDOszL3+KkDkXRl|C<)+BG(eoPZd0CBkQ(wfnuzCC{k;N09b374HUT_~atZcX@z@snSA3g7{ z#3Sk~PnkynZ#Nlw*J5PsXZ<2h{Ov}ggO;^DKY#Rz^-I-ZxsQBLB_F&Snw>C}9q;M! zQj;|tJ4m}rWFjt@#kl=2(mK3a_o%jqWv~(Jo#h!CcFlaUw1t5mvnqnjfwwh+sA1`# z?&1uiZDW;YDdb%8?ZoRc>u(NviJ?A&3Zevex4tsUdZ(x7&21Y_UK^~(eCaTX*BdrV z+5SBG>w}y@*o7ergT_JWDQe|en($Vyo9QM>yQ@N7nK9Nv2O$d%v-idA8UxX4q2j($ z^y$CKiTe6-^sbX^X| zXC3=7bI>}>E8N%ZD)d$$K7r*~OF=8YskC}E7np8q$<_EUX(LXcA%I(D`4>y7B_%{j zm%DMgB8ai)mgL^wJT;A3CGQjS{-A1o zk74RKYm;!YW}+Umckc&K9&@OEdW4AgeP-s3aKBdom%^r|dZye<(oL{F^LZAKUAO`g$D7Aamxh}r6GDYj&?_j2)hfxvY zy1b=!=IjNhLv9Y-Pm-Q#k!QT&>YB3*^44bSgvWA{B+_nOABZGSZt$mmm2?Tur8J;I zt9Jj|mYe}1K7WlPR z_9k3%(bV+(jq>ct@Q|~3k03wlgAiMi!1TldMbTpup|`F%$-5E5#OK~o36Ap0Te6Df z&f_6eui~(C6o&Z)2-ANbAFboyi2t|~Ir-ZqJ=8gT@RhlZX%PI8(q~=O*f?Ej2Rw#S zUL2FUmwNM2R^4ba(^l1eq4}lJd`w^|1LGT_?zNHSH|rO zTk+p*o3o_V9kV&Lc(3O6#X@YFmFH0{VDo&z)@PlWq4c4Pa=+HeNsF;pe}3htrc^93 zCHq0^l{B9*@z$==jlOSM!@PB5E}q24$wk!&|6Ns_Ae`1?!vEL^#r!tyYKz0p^BtJ3 zcSCMWHa931{qS8JI!pe;9wASCi{mG%$S{N0h6jIYjj87=R5mn7g5tbINQdKe5TV5^ zatrhcf4h#K6;EFHg3m>1VOe+2GAwcmXsH_C!Qb=W6;07h(t4GYYT51iD@F~^)9wui zjz%CBKO1JKZ6~W{f~9t>^Rz2zy`w-9ek>o%hHV9NMBrJN+GGLA?&4ky4{=_J&o2l0 zQo}H&pU&T->q-}V<`zvP;~WmPE9(&s>UZSBM_J5M}ErErS$6c@jTWCX`o z1C1c`f{&jr1l2dxju_2W%^&6pXbD%LoU8MHbGGO_ni;%ep?&={9s=}<`rBWVT z?8M7!`$IlLbMVS{GtsEj&==YxNa^Up1((|qtL|l2cq>Fq-Dk^Uvu$w*wb@gY3}q8BsXe% z3{MM*rN~#DxV=Ppni^Y+NIN)`F2gzmI4L@wwd8(M_@?Dvv((a4x3yV6W4qdnF8P8+ z68}i#6p;{D>vcI>iof{DzWcXLX;#<1U{aZH7r*R$)B-e>+zZ(RYV;8%{NDbx3`e+P5NTjmtSs}8dT z>o{~hn!T;hb>)`cz{x=WHr@g8hPa3@BD}r|P3yX?eo0bin7d5%2Vn*;rRr^l+oCT> zTsbWHo`fF{mb3~`hk7qWcFXp+uzmZWO|me3$&22!QUBn(?TSFe>y==e zVwtCFp}QCThV@L9oZs`3JlDr&CM53+9lW=m+=Y9rJ&VTEvMzr(OwnbZ-DB%RnKeB5 z;;mhEemXXF&l3Huj&|Za3WDm$mku;q!k;yps7hOOIsU8m z(1J$LUELn7U2(?GB2GgqetzQ0DMnpl%)(m&MJguKqP2w-=}!hOBePm*ILm=u$z|8v z{^u#80gC|~+Mno)OG_oOU{L$@GLDM1I&QgheY39#F(_3N-eEYu?-fPVmNEOL) zI}UpofmSw)s>m((^Fh+6!4-&4JXK1dptd%-+c;N4_@nc)732DTy`yY?bC==FN| z`+2w4X%GIqcegCGy%jXdY~y(581jrG96vPBQYUv+yuRtGMaZ6z{X0{Xo%+*sLt+^P zE%!Ulu?dtFG4%bx4ig$X0j22Fs*jBnm||Ga@BNzS$Ba8Nx>NP-A@=x3ZljmWHbY+t zsm+7QQ4lWhWiyUTmEGiDE?w^v1}Eq{wmhv%$R$JC2gi5`LJG-`A2BTyi|ZFrX#Z6i z^dn=d75p;j{`n&vCfbv^@O7&hwwKnZEtOId&v}Ht3mw`frzodA7K-J5Wj>76uTs_H zVY|VTGX$S>oyos1-(V{25bSf(!4QV$$Z(v{M^EH2`=+bIVj+>UjOwF~`bhaw?$~9) zc6;dEfD*kjVrt`Vce4*~8>Q2#Ha}I6qnJCK^CpSsL=|mW+`UilsY0-*M&>G$be}8W z?Jzuptn!8EeHwfgMrBS)fdrr>0OrcSpM!tn*8wqwQ|6Z)>+n8n*0c*ZsUu zg|XgL8_ZWI1y5*#3G}lF`zm+d8%D++J`Z6dX!$TY#gRHNrS?|AS?^&_;p7a1CC~en zm?()KhrZ0kBwz4xp>=1QiR?oXxs!Uf)=PLvRJ z_VU4ZZw@$Mr`@$Q)tND`73j%DezAP?V%mAR(Z}X&Bry7px*B?$(Oy6X|YsV?t zo(BnPcwBa`6uoy1ojawQdORQ1Xsx&Ht>*5@spDQ}%>4J2#odW7=Y=V^^cATlE~#q| zTsBO^Uu(BcT$H*ejBNP!#1NK?hCTkZ609WaV_I-w;n1^}Z01--8qd|F@^-D1AAY6Pw59R)yEOgowxmA~oHMt6x?{_#^E69RZiY}f#w>vyE zi|uaYIgh7^v0-HwThMTwsaDONR_v?KBC8DDxOM%?@L5rR0AbXmGz%`-;rN0&YisGi zKoG01Nf&qWZ;dbHu=cNd-T7^eyH(~P%ZmXq2U3Nt8kT75vc^7WU!P zN6OqRt++N(724Pm14Ug*1t^Atn9PHhGrAi*`~y#A4UTh%SHfWW?0qF(5gbo%#Y4YFApA=OPw0IwWNKhwS;d`}uvLHN5*y1eMGSAHF`K zz!u1+Z`FBi6bak!eg3G4@L@)7jikN1WMS*K)~AkqoBUn@N8>ZOUga;zx;Lzn4;ExL zGorlO=b5I8O+9K=8h)&kC;yV77an@6ak1E}L08OF2)#2}2^%t?3fvR)pZMAN z?QZ3FXZIzUQcPLQNi)iZ=Um51;XV^uSBxx(0>iZp_jQtDpF5FmBq;kIXNA>xiVgM4 z&J<8K!=ayF%YW$TM*5ry9m)@1qpA4Je0aI9jAejM@>6)F`x zEZ=OGzVk%GJML~`F)qWHv89Moq}ks{$;LAM3#GJvO@i)5| zxLDPnTyHLW-69*NAdX)`5XPnFpq?3V#H!AbJ~Fd#*tOTC`L{&a_U?6-;12g?jka2S zy)9~4P2s0bM{sO;9iolWKOdF&%t5PD{|sm4eR$q4#Cox_SUc%Q{LVk&*6Ex%Yzl=h zQ6%Am%0H(5x-(6AbxLP-~(6uo3UhjTJ+NVg4%~G@AmNlZXA{e?TQIZK(5f4 z{?i*qjQg>bR8d${xv@r6)=Kj^GHF^=tQe$V$DLO*FuGdx%UyXb8}82>=3Frx*Sy8& z0_%aXkN!rne;42;WGh(xRPhSu`|}4mtTd*YN$o1!gPdc3$gpEcH1B+Ozq_+6qW^ll zl{6<}uKIhMgZ>G$dS|TdAPf=G? zucnn4)xG|FQfaKmA$Ker-p`@+z~9^Z6J?{OV^2Weuz` zVL>?JcE-1F3N;Rl-I5m>Dc=h(J6kOUEMkqiH_{1tI{Oq2`_yQNjQ0s&JB0-EB3Ad# z#hASsKHWF^T#0(<)8?QumqC6Ru;;=!B)%&k@foAP;ssqoGixiq#T1qq#_;}{MTNB* zk@1AoSN9IP-Y-uo52<}A#lDj#rasb-Hh%Ui@+#Riou-Me4)d11W&3uCm^sO=rA&2$ z0JW_smj!mHk{0}H`-4TO^K&fjeIEd?C88N+r{CLRMxlPG|eA`l|i>Cg(osH z_a>kJy!+*FR>~qn_`}pnJOk@*Cdn!19`qLMzx+uVbBN;L5ETl$nzcKoLFG$|v!9g- zC2MuPiI&;ls>G$m4Y1#-;Yw=VyZb4aA*hkNHxl)jtl?E7TiJYXLKWw?AW;o#m_99+ z`?FwOs^q@BT5jWjRfmC;gux#`-)d3zNrP9g;1vHW(uft2#24%DOzRMjH(VbOZ7)7M zVhJO(J>iY)rbt;hWwv{Hth!Ed#u|I}*roqq`xpB$E*ftN!Alm)$Is@Z&u(8aziY|x zt`BiHKFar&5;FMxnY(?wDuZc@<#octs9&Q#YevS=QWPWv(FM6n6LIsu^m#UoO=|W< z$QF}feC7kIj80u4jOtp$W)4|@ZV)`!&EML%=yr2F09pR>0O1Mvr z(;BXb>-NbHYjvKUC5v)}Bg6h}iVKTc3*z{h#y;w7EwQSY3-i9upqv1saxFg5-+s81 zM3CZM_&%(y{W^%GT#mCOHe(4_G55p;OQV{q2|8%-eaEMd18~JLUp~0dcT|RNYl5s1 zpD18nT{#Bo>qN#6dnQfA}u_HCG@$v#}v zP{()fFq`6JZ{A~KoMJ*pTVh)JqvJL6d{reKUrr7cSJSq*rn5-RyZ6oFs;MXGI23!o z{l`@si6~oKT1=roM>lvqm=>J5KS>Ht|BzMSkwZo5edn-%Bp-{33+{Joq4Vi5X_$Mp z%wyvCgwn4(BM&z(V!a+u_U2r+ohj`*ga*%xEL?7M{M~WnA2L^p z-A;F1?fc97l%X8E39iwIC0NxSGpYZ!U%r!?)mUvN-k(W1W!?@~+g$VPk@({!@!zfC zZ)PV#5p)km*}Cu@P4`AlV>Qae^PeVfANl_&ybSS<*CPKm1Rox*ILyCenyX#K@tXNc zW!U})58jG>PU ze0HBQiT%2V8o4MvKPf!4b@9gjZO`tQd+Pd|xO)<#W|4!5J0PSD* zk^6)G(~&&5@eMq?K{w+Y-1NFZ5@_cn()rijVD;1uWkT&5-r(Em8~l5DgA6pN|4RQt z;sy;&Zcrug2G>h(uw(27vCnT%`!;fK3;<6VZ_tSE1{-8=a9QI9YfWzO$J-lB^SeRL z@EcT5zQL)^8+6;e!Eb+W@b&HuHvNOPdpG`H|DezQjeqqYOgOml;~(DO#6Ku~bmPZ9 zzQND`pytVqzvmzHKfUpzoZVpcKY0KA#y|ECN?zRf(JyZ>;vdw$y771YgHiAsKkoGn z_WXmgh#UXrKPU_RMhEH0pgnR(7xWKGquls^{DUE=H~zb~Zg2$c1_4r7q1}9d4*I~5 zJE|b(_pk5&-xqWTdDGAD2B2@~5;Qe6L5REo?JL%ZK@0Q!b5p${_fABXY(+WQhf zsM_}L83sd&ETz?0BikTCwi2mS)>5f#!^k!FMcxp7;H~|L=Xj!_Irll|KKFgy*Y*2d_jW|WMuT~vLqm~~K@f?Y z4?q|g7>Jx=zSY(JHXNN8azD%HAc%w+rO1ZN7XHK5&IkDf9jpTVZ%1}GM&gEdc03c} zXp*e`8-&OXiz-n$5g=7#*g0}SQ2@^WxX~a1hy|IT0sO+@-;)zO{?|5CpokC=slp}% zf(#6Vlp77;7Y_eTdJgaTdmA5Hk6GHxwhl<* zr}$wt7W#}B32ew~;3gUp!ZsX_UW7zh(FlT#+CFpa@2B{ok%R&%>?e^RY+(2We3Vf+ zi9gc$oKBUOMLbaix5uhLQ07vadNB;L7vud2pB_K7y z#KXD{R%kR5BG17pR@Co7LmKI8>~l`YBqGlM$%L`O0T3;6 zj%*_#!ZX6K6JW=}KV&mTfB*P{J_ym0P!>s~0t5k+p?rAa*j;GUqu8oZCveyfviYC$ z|5*8@jeW)N87IG-2(UF8-_Wiq2-}gJ3xjQkihvyiLW7L`=?+a!q@s3kQbIxr*g+6N z?PxtCF~8anX(Jol`5)j%u;s-H{*YbB<{#pIj=-|Y0y+%t3S5K`6UqwFr;&Js2st65 z&_-~M@f{j^iiB!ILw!gHto@lCf@~07!v0%Acn_K`gvjeKe5_N{_>pr^fj`@5tP4Wy zkS!dkURanV3?UAq0G5Kq5D2WZZs>F2!Vrn9GctezH{1y*0{==NUpTmvbw-5ec;HU< z8MJZXW^@~iw>UJ8#=7*2U$}x?1ZN%%;1>@6o?ri8+|Cz%owFSl(&Rj7b5aSN#rVzTo`n+K1 zCZNKdt`N5z!eDqBk6D31)=t`B$PnWN{|L}w>IKiCxw1swAOIQ|1b4cE<%FZDA*mqi z|0wVtfA~j%r~S}l62wyB{RBvZl?wvKll?9vEhs5FO<^=m5}GD*1%shucCxQchiih6 z=Frei)+MAK(Q9IuxzLX@3C5zO8 z;K=~cA>_ydl?EBrr?GjJM)Tv2<_F0E1)f19he*H$j#+O<-i73hfc|oHl@pJ;m`WB9G(bbt?S>{EMoI4c{YJ0h{G8At1_|fm2kcke$C(**(z~;;BsT(Dr@6}6WHfC2(j#AP7nkB zA@T&3tt;-R26=&$mV#6ee1oqtq4yABpc4i(VV{Rtg!c35!H2G}pqaj)!bAvOBba80*3(#7|NN#udk-QDFN`eY(E?I*N2P$& zI0f(oK^J#;KO(U|#t|^NkTZ4A7+n}DR{={R!j62S^3U`F;km`IV?oQEAa#!PMl=!m zqt%EO+rm}EJMo9SA$m1Z@BH`@oW40pw-w2`5JzLbgzVX-g4$CpZQqEboT6e@x0OK|liIQaxq z$?!D6#ft>#5&}J_WCFza6Wlz!NXi5!e}ccSH;MC3e}b=@00G(7c=)*b2Kp16{LqWR z1b>o`zX#Q0D+x)NN+uCVK~64If}5|Ow-Z&B^^iGa77|5Mbc3t@1ZR?$Zy=h8n}@T% zDnUgBa_i*pPx5y53MN2l;Scmk2l)Bu`MZ!w-cJ51-X1P~zW%;$R23IrZ#^e}Z`G~p z(gbfO9}hQ@KXvtJ(TqxIsVm8c>Ol=gvN0?^qAL1N8i}O%`MQw&{eArw`nixjs3aF^ zfFHo!m)IK2$V@8cczhKo1{H4QYa!A(Dc=E6Lx*&x1mRsxh<-u(e%F zu(2^GI0b+#;N31x$OQtV;X~C|8+|YPVG79yGU*b`NsM()UC5RN8V#?37a^5t;p^l| zF!A;FhBQrleW-rEUj77af`^Yk6()E?EfKVkdT=LEk(#o%B>2Glw~|zlmyK**zP_Gl z<#ST-@IkB2#mfV-iByXdt4cVJ3|9?DpoGzq7@IgtYAZPPrOMVARaUN5IJrjU$w_}y z?P!mxosr9w0B0``m*u2jTVGESn1HsHu9ma*JoS0=TwL7LUEO|4&CAKhJpg3RsmW0Z z{aJ;xYZI#IS2ciC-PoE!YGX0U#S1Zn0Dna2&Lo2LV#}o}PJs|7JuE{QcP=)>@vS%9&nM$STsj0E;Ms?V3R9$?% z)ofNQRns66wba;^!byem4n&d&L z*QVE}H>J0ycc(Mc2huSa_zd9;i3~!9LIyEIC&M_yGJ}%A%oxZJ&XmX`WGZA5Gj%eJ zGtDzCGaWO@nUu`P%$Q7O=0GMU3!f#NC6PtQQpl>xs?B0%4P;qnQ?i4yY1xt4G1&>( z^lV0UNp^X5Rd#K5eRfkeCI_D*oFkD#$RXzFD4kM=| zr#z=Br#6R~GmwK};2FXU0z-j8WLPrn8IBAxgTe@6&=`@77)Anv&R{S~80Cz1MmK}W z7+_#>g>xlx3AsAC#<`Zc3ArV?Rk^jf?YT_&&>lWdI8P#vkf)Ppo<}JRDx?)g7RD4N z6w(VBg(ZdMg;j;Mh4qC^g_t6Ik#Lbj5uu1!q*LTrL@uHgMHbPE7)2#TGpI-I+;$P)98`(7&?PqLNBM+(%b3XbS8a(j!DC( z38zV<5z-XWh-o@$#%bnhl(e8UT3TdU4AeFQ>bn-|yD6>v7qxAkZkcYM?wC$ak4aBR zr>8U0OV}FFjn+PXRK1%+&D&=YB(prTDzi4TDYJc)eh{;CvW&CLvn;d7S(L1xELv7%R!mkx7CnoR zRgP*-eO6Oeca}o7akhE3Ww!mW4srCS9(1QYyPK^)i1rxgSmxOOR)6YqnsVB6x<~1e z1Y47gL6;mskABvoDn>1%p3yW)oA7LXQphEuI%N)8WuNPqOUb3>#^lmLzsgY!tIur$ zE$aq78yKZ&3VB4(He=8?%RKu$$2@W#B`+wCmKT{9lSj`h$*an%&uh=?&ST~cJzGc3BzGFT)pOPPxPs@+YkI7HSr{^>BOY+O}tMcpf+w+<5 z={Vs6i2_1_LIJTrr@*+tyuh-+zQD17TtF!ZDxeia7Q_@J6wnJ81tkUL1yu#L1@#3@ z1?>gh1QFgkXUG3XkKVpXkX}9NG_!O#xmLqy9=3x17j@2xX2Q0gi;iQT1iY% z!f!1_xLBf?P^>V)1cM#XZ#MV6(sgRL;x) zn5~0aiQ^b_t6Mf4rf z_8`#rNYHo$QR{O@v}m9J4;rKZI-~f@K)@<`J>VZwmzGeE3^t!B0DD;imNB3{>Vdx$P_A+umUMfD!Z1%& z0SeWlIMhANRT3yuAy^a%*i$l$JS^GbvxT!IvI*H72_rbZfQ%74MXVH&GaXo~9&8c=Y()gwvg8^AOjQL8g{kMkh(SBOJ#$0?!fduibdH6{ zEUo()l}9uW(K!rTG72CY7Ct*>lZP=n2GzuJHpe3<%^bz^I)KzHZFC&N^$fONvQQe) zOAN~O62SC2C_a<_!1Pss&+TlU$B#i~1eIBsoB*iIKykSqFd5-}VU+b1P%O3t9HsyQ z$K)jd0y6-E%K?L%0D&>TL|+PuyfI^Nw-%6>nLqF+$V(ZnL;4uRMQV{%hb&teL0nc% zmW=X1I94N!)+>Urh|Q2ultmD>1nRebln){ds7eG6#Io3)?STXVq9&joNc~vU*&8aA4SjWLXZ&Zbs_|o$UkGvss*( zJuuAV_JB~eQ1=Sp*_DH(5TWicz?3n0wNNLPz`um%iheS_e(u2UqLP}Q)Wn%)uSOOz3 z)9~OS8>2o_dphC~5m7&g0e;UwhB|bbV0!9wWu~p0C$t2l;vRY zc)(M8U}G9u+InDI0$4W%Y93Q84CQnL53>ZVS7byMhjOC=ortnw5S>n!0Nf;lZQR560G_@%_;?AxP~G6=>!6-}5b#k6ASMR9c}wup=xmSP7;K&l zN92 z;Ey^2*3m!$h#pr#I|k7J4Dc<1?T0!-8wSw^I$&BAsu4`kXklOoBCrF;*NkCHtsccN zq@_XthBan0ERF3?Rsp}V+AG4)Rw07-XbGMp3$y6MJ|hdS2;eCigBCf0WN9E%TGX&t`=IP-GBgi-~t7(1#>_>GU`7i0MD0$T_E1mKoK4|Kmo--duW3O zf$S2%R?68(IDlXwkr#spe*h2dP6Q3j0rkl!9wvZoun@5u+M9T2YbpTBn}ZKchIS^> zr@#OtsYP3u11MH1Ku>}>pb8m0&k)rbclMFI7R?ZF=o0$(iwZ70^E zZNz~rJa}me;02q5e?|uXEE4<=2B1?duuC^E3m&jp0eTnAp?ydO4>%I~6&Qfjwc!7D zgP(y1-%SC03@71H;9%i^zW(gcX z0Tze>Pp<^fupW4iS%`t&2?E#~r{zThE2Fc0f_CVWzyL=O*#3YcFd_|YU6lYU)&puX zi!sI=yAg)|2O_kiEP)p(X#0r{7>V$HJ8&ZgdL0PR<6w;X;1uX@h#Awjgn@n~0&t5l z>XTE@784!qT|j(uCU^zHD3cmPuYx164J{)ET16$mIrY#YVnS<37PiquPBK0w4TAE$D9>(___+_BLQBd>9&B!$S{`0?I^) ze??~Z?;uRX@;?wMccc9~_1O}julAs;381B{R1^@Og5BFd9@7G2pj=x8`dE+lI>fNs z_f6m*DHOts>tW6g1PCrl(2;}j?f-QN*tG{X z5+MIp!DymCjPfBPkI49^A@YwXH7Ze@Sjg7*y7f8odDPgqz1Jh2EO;BYU4tI3R6`8s zX(NVn*U-7Suv}ci*zexNZy7hO7&9tdCuwo35GM|287l~x+Zl;wmfH@;E6QbOqb^FE z%nK)YQGu1DK*BN@sUiidixEYTNIuaCtO$Y$j8du3CeB1+1w_SdVIa-U#?;!@+Rnz7 zu#!X#^!4+EaX)3`I=84Cdd)AupGvT{Sx7J;`B6RGIHL;-Vd%-%57Hyfo;p#TNYo(0 z53;SBI#E-HsIIP~p$Wq$y6gUvvKr1MJz9{ka+5opO9(WAO91}-FBU@+Ax+hubfp=8 zs=i>&#I0{`&v{@`Xt~SjSsq~pzltk=%bk6xbq2Y;pYB$-^gk$V*gjujveJ?#x-}Jg z(@t;7t_(Sz;j*Y~>$}_qN{0uY`PTPNA;j<-KI^95kT`w#p|fjqSO#x@q{QYJY5j^H zqRhQw+dn;*jDGmss%Emg8Q$vF9x+>^3e6v(UMWLUj!RTpMQdf}xYhc(H%qydK1>ec zuCmnYu4A@ToUr&&%yU#ra?QH4LwCLyoK-ISWZPQXC8D>Y$Rg^jL(=K91cRGl(({T! z7m(esi@UHZ&1{l29Y4oiw3#2{Z}MK_icMd0-Vf?ZkL#WX9FMeJy)O8)L!+qf$O5aN zc=!Ep4OagUtoIO_A@p8O-c!^2v(J)2f0GxXld{}O6?bUtcCp)cbz=1qTjDg)f(Ie< zb6#)I^U`u?Uf3w|BzNhAr%kjd{v*!OXWZ_}Mc&?BUTT!7EA*J_#A^|Y_#N*(d2%;S z*;QBW{;XT{c-{K&2NtK^tRHH7;a?!LKm~J2%Z|#wv}vjR^srd%msYWp-phx~Trsuc zMz4u{{iTJQjB^(+{*c(UX7340N%-Kr;diQwTB#+8|E2vRRg>u!rHbCuS3TXqi@BK#jueJ9~izUQeV?>1f6;!W1lU@1EzL)vI^oR7R*J{!CADcSyR3GzYZ1p>| z|A2P!rHMRuwj6w!?JMb(y~X)jQ~fSK!G8D2`vg-&E&S#^t$4KMY2KFBj&oiI^hGw1 zo>Z<8DKqgLdeOGRZL-zf#G>A*W!+m2A81?pqg885y7-*9nRlH!aQ z-8!8wB@km&-}0!};Njo}qq>L&->_Vjr{}mne>|3SM(fEH_maKKaurUA$?(I4S>h7%MvoY5N`JR5bdT>ZZ^L*i%^1daVmR+~VmOYAjquL1yalbX zClJr2$2r3JR3faK?0S|Xyf`x}S%q4JDS0O4PSGYxG zIae&vacmg6cO?;QJluVdQFv=#n4V!hPaA=24RxZX28_^h;946_)j4o&`&ZwqL{wzG zSNeDFHCafo*3>43W79_$5Jg@r{H2v}Y!p{Gb|)rT>A20HmQl1LugT`ByC1_o)!Nud z)ZTgE75dGdFMet;Npr&F*%&i3FOwkSTCS4V$CixMDrCsEsGAi%ck1R4r}(spvk{q}K72T`d5Y|17qxqrzO`*_6PACb9%QZ8@FcnKbN2>= zFct3-Ntx{*?Cv|u_WKQ;VMg^_dF!}EyD>$xpit_O+}>59&4w>!O&<$AI7&&Jb|i)S z-1odLm)o5|EgeQHVMyJnlqC?8KRmzMIFq94zqYSeMJ^ zFaBe8;LVL%pYohqNc5OQOnj4&+{w z9C9@K9BSOvYIbt1?|K&Ug=1ZzMjVNf2%O2_K<8*;8n0uMhO~~Ft0@>Sq7bwXJ4}su zISL+y=H4RgRVeTEH7`=K%~s5tnt5CBCwSb0x*;rh#1nY|9sv!BqR2bsaDqeuUOf0& zJUo2d+{773BmoDG3z3%>2ZtCUo|o5sry%%Y#O26EN!(&005si@uD?f*Jq^Ld&r8*x zWfiOm2&`k486Z}`HUh*3zyws`e&Tk{Td`Q2FVUN5#yKZ)jY^mLx6-A|cOl9Qr-R)y zm7PCd7k|p=ghpEehaGr_!aD+8w0*Xxi4&4Vhj2d<0v0=6SslOS-eIGNwAaSQrL_(1 ze%~W*y6WnGIk=quWN*>&GE4^VwF!;_N?n3m{IEi18+5adoRaaw%@9=HmK6Fbuk(m)PE)?zNe|Q0hn_52Mq6Qs|X;C#Jk_+EE%7-=LUeb+NKl zJ#XFd2Tz>^roAKFYI+`6df*K$sd+}$+7Ei74r|ZsTD<9V$@Fa@q>j5KEyRn`7Cf;7 z*VY8x?`*L4-)Fr${XFlf2Xgy$=6RdU(9K=ByX$gPVn0)UKk0?r_LSYK6Ak3o>Eo_f z+}AwY`%!<}{O3kb-x}mDu&ux;7Z|Hw_PS$nVqZ@F(F6*;AfTM;KVM4EcSfw@t-`3A z*$Nj|uI#D0_~4+({*BAzlVd(wyL)|o<(yN;_xP$}SnHFs0Vb4ZGkL)owN{CTSqHyIFIBu(eDdg>!ufYL$@L|?8x%c$>S4puo?AXdOH0>~ zo@&omR$@E2aI-AWs1-{*bSk}msBQ5f?ekCPdrq!ft*kY8&BN=PW0!67iMd*Fl7SB{ zt=3=LM1K8L0yA&BMazy&b)R@%4=z)x#&t9ezDkcO^WJ4qxlByKNH^Rs^z3r^!p+V7 zjVGFvnn;u{@o9x*!IfcZj}#u4ob#mZeLNG`!4TLXo5c>3F&Cp}MO?dYJ;Pgb{)q(< z*xa9VhWPJ+X@nf+5p^}@50e8N!s(xo!&IU;*dz`wILXAx+u6^<)t%%|_V6RAi=*a^ z6A%=%@jzyg**a0lPTrho?y=F}e*fMr&yIR!`S9r7gu+WNs%)=BEZ)ucN<(@x|1I6d z@>xlP#)a!AXsJ__7s{N{I~V(soM9Cy_G8ACg=>U2gjes`<3+gMI@t9#L1=^2rD=c;Hot1eJ-wSceCjN@fBa2{LL}3kwXg@IfUvH2fT6iCH(Q%rzvQu zoKXc-- zckqhj+fi?YU+rHbeb?sHk<5xg=KDA2uASjdEjzQ+>Eo6IgDPC}Yg}wiTrXrwt&6N) zpDpv)+$(kWTM7HgcaF`@dSO3th7<3^yEAwSrU^3mzcVL)x^CKS2wz6l_O_x6IW#}v zIbGas-1MY)`nrn-S3W<#BO$rwVAQ@_lG*jQg5OxpZ|d6n+<4o7=oxzBO`iV4dOu{b z#Qs~=@m@{m-(JZf-uqF0JNAkqZ(o)vPWXJ?Gds)&gYz#*r7Ku!^3$my5tGvd47 zotTz7!1b8a!*y`(dc`0^{AP{bvE;-@BMKt4g8J@U#6O{>Wh`1UAuc3p@d~270w>k6 zTv%={qTC4Lb77~Ti0_Zgj2lHqCYCm%SZpba#gIk@a2Q>0kIvs@F_VShP@xq4nyRTTe{5jh&<(?wrCmjVN?)dD?wmn`H8kY1eAu zb^WJwN)F(jVw+m>md$mfu8I_*4pl_xSMf*~oLd||Yg^SoRmd^@=!lLJGThb{59_%a z2_L*MD`TzWEaI9sY;4u7i+8wnCi%IV*^ksNo!vGeQy%x^WgRKDoc!3vZD4`xgX9U~ zk+!)LJi^Xqts+D<9NfEP)!JS6@gLP+rScO5J)+8?;T$1O$dTU(KSI<%_Z`XDb?ZCmWp}Xl0S)x5a6_ZhZ(JS|| z*FtrZ@+B-V$WCAo4|e;4YlkjYFlXHry)$no+D`iN;%5T+&+0+?xk)mn2kGC{6#7TJ zbFeE;L>ebcRUMil!xbALxJ1gqc}g^G8LY#<^WK*zTw2&{ zsQf%nqNIio8{ppN-Q(giTRY5S-^DyrL!Wh<4yCQXb)2||*v);)xMre|&TV&wP2^xX zku>Ogy=zwKE~Xm;vAwJ=Nu?t z+UQ2inACql6tt6T)2y9$tiL*aJ$Qdhhl1wpwl?%S z&0)WW+iqIwin;1`!jk_b#=Zh$pKy%obJa{n*2+ zqfhzzB|CUd@%wk}-!CV=m$AS0rX#fXP+KfBJhDQ!Vzszm{tI3E$d9Ytj_)_wWmOeG zjAneg8?o-x@@I!bTXuZ0%9fSwvD06fWP0J;)>c8y*cm52xiTB9R?1NViN`-3Zq#7- zCYPW8)E*^pVlXMxhkW$4@09#m+xrezsxpo?=XB!~Ps}`j0lUxhY{*Tlw^91uDQl`t zA26*=qg|tl&1XwqUiq|;ORJMx@buyfUYq9hiReV#&YaTk9b>beq#VCywe!mzEoO1C zHLv4*10)@?4r|p*3aneRH#t33%e}?f-A24zYi0ZnUP;s4$EIHGZZ1r+)YVS%Z4$jc zH@dECSKH>egrMfHJ&vzdIo>>;C;T$cr6+aHCZ>O6PT8AR{FALB7xTO%cNFdK*uJ<- zE0TCXD2eq3>&D)aZ^hQin zjU4(q!A|i9uf=Z97VNvyYmcu!ND`F=5())?aL*VJ7(y0Wt?i&zI7vj{FBQ3 zCyfpKqF-zb39b37{bD2ICqMOz*?PcQCmX7hH)TwR+&^NW$m31tOx=&qYVAHJzcb0! zwra;xp5(f9;zEz(gcqM)XuLB}EHU@t^R3FYc$nB z;T*kLd5Lvqcl1sq?9<=&R9Q4Vbbd$HqZ^OYu9x(;(>%HMU)X)GVD4Nz?%O$uE8FLi zC6Zp3hqV?cFq&)fq^#z29$C9D4*zBkcKdAopo`z)Ct?c%W0MNboC~bH+NwkLR#fnH z-QRh+$4c_fYoDHpwOfvEN?xJ#k%r6pF@2kK$Bpz-)$V1A^jVAMtqU92X0xHw*fc;s zKvcjdpdobK#UB#~=fzh)J?eW+Q18y1Z4J5kaYnUX>BikMB||q%%|8%v-<{9OZ@Aok zvP3%ZV?s;a&19>~*KQU?QD6Dow!GIGPrRzJzY#;L;rgVJ@--N&@ZIW-GAZ+kJ&SIX zOq&#YR!GHS?xFMK<%>Ukb+)K`|Ks3sr_ZbEvl6Rgr+V)fmA2P%+*>G+aPHK`x%>Qc z%`WGOCCK*D*O-cG=vzMKjiKJMBw8bk4cz^9F|{5)v<@?ay84^i=6Guc_AW_qw?;+vQM$ zbC>)LHBv_K_UIKChB{Fl zm8a{xTvmUF@#4a}3FmhwKT@^}JNI1sk&MA-_44(e3m;mTsXdhr2;lo?u~| zo;15{6L&QA_@_Ip?F!S; z$vs_sqC(@4jq~|aiq8^h>*j?TT)HpSeCPx$v62a!akI@;dLXnvtD@hv!z}q*{Gw&# zFQ5Bf@;T*n`#yB+tvFIBuXrN~n~Ym+zH-VdnNGe6{sT!%np;2gCn_rBc*M$9+BZvn z?}{t?;CXtdwE5xN@1HJz_(SfsMttd$hZn5YJTiLgJ-4@}j9=)@)7EtQYvm0--3n({ zCRC9c_p91ky7}t8d9l&K_zUw)>qA{V>rb>jUyeF$lU6h2=S~pfsrx!7B;Xul%LKlI zS67u@7YjUWFhz+dl5zNw5uxpF#u93T08hvK1Dd@}n3Qfs{znSW+TR_uGcW=c5`)3? zZ)_IYCR6mp#^b2a;aWq757#@5erBP68?^s|Q^t(7*!@*bQ6|m>rw_(>WPZyje{rzo zc0!ZM!hD}_rQT1Pq4M*d?>q3IPg;a#YuG1Wd|=YfU7hLDnlHaSebYv{P#vLUy?TCv zL*!G>tr=ypzUo+*!#frQ^yzVKpFL#pio`}^`zm!}t+LAU+ z^+7`Jp5tX9^E(wq#It<};s)ii`HCV(^b=NB2I~l{bu8u}x&yQ;?8me#ehJwl?TStI zZ!FZer8_M;XiYnR%IVm&bdBUcAUZPV<1Y-h{1VhHSWOF4B6M}pjpzn@7L00IjPBE7 zt08NM1#xURe$D7HmK~gC1T-rsL?7Z3&N=i?jU@b={;6Lj{I3kMh%{~|6i(8z7d)|Z zmYn@}3l(>2@pWf;sZVyc9yMuZd$z78Z;CWIX>8#>dxcBvp!po4V2#tvp5)qEKV55+ z%iewk*>fe-8}6it$5@AcZp%=hPpu7~ZuMiSEu&@2>(5sDmqJI3Nw{tY_ zmvh~@YbWDta=G@A>$;U4vEoZYZdLC%G_i~)=6pgDwsXn$Wvk7dKBdP$cFg8&FMAt1 z>3U|&(8IRyi%K>)`+)hFm#QKG!W(atU7F^ebh#_wv-j zjpdV1*LGUG+Q$8uDpcU0n7k$Be7Z&0GJWOq*A7eHGj37WCq7>rw0e-&tGX|V|yeXA2`>e=@*FZ`R}nKj6wuC6sa$fBu5gjMF8K^C8} ztS~aQYlV{!e5e2x;rsn&IslQV%A$%nzoiOfNEANFU=6SSM-7mJ_uM~JnTSKdnb#A$8{{!+bJuRd39$J!rjE6WmIu6CN6$#0d_pRFpoA(pYbT-~PJz^rsb z=f%#q`p$83+Sx5X0&T+U?irT`Y3Q36&NC6RF~}QSzT%kZG>85W`;$_7ljn=x?becZ z)zV9&OfK-!FlwO3ePlYFn=9kK{M^u{$OF~qF}wU^vTj|yI|<_|Pp;Y#eml}#TvW%f z)53P^%oSVc7hhG%ln)$!Q_(nkcHa=yJwEwJ>*0d4B2N=mK3!bJQ(f9BWaxO>@6|!s z#z``!U6<7jn_s&2mldrsbS^IAyL&F{P>fsHnF{k%858a@f*#*Y%krMi_Ajp{reB!1 zsN}SP#~s@I1BZR+2_@e7l-;_7hwo&Z{kgrgE>`gwOnJECRlM?ogSrRlj!^Gg#t9+{U3apg13*7txe+4iq<%>|dlf zPO|^}7)(iv>W#rw+7?l2pKh#r)F-h@GIdhTr5_^O9!JM&RPKKNr0>1grPR9FFMLkD zJXSqMsaBe?eB<+f3`svRAqp#-p)xvq*Tk zyPtwJ&yFQeVpJz?C@!v!#+#imI5tm6HM*f}&Rq5EJm1>IkNLyJ4(!+a7`f}v{5NMq zUoUjPyIsHRJhaOuS?arzshUGj5x2{er@ULPNqT+^jI>()X-%yhso>({MKAoLbte#u z?d0tqtX|ktt|st8m2cL9PneW#30vx_)wc&aczx4Ph{Im2~2b3TpY#)ho8l%!^FrRHjVrGD}3;>hF#6A)onWl=L(|-Kpp-0yRni zl^U!znyg_u87`a)Y9oggXK=D7427L!+adT4LvW9+mLJ!Kv1O9{LUl5y9WruN@! zjT@!j*$0L2GitEccMrI4uA8uB;=vxVq(dhr>pw7{O?h#3*PQjT&$qAkHM0%tzVg{l zc5_e0FN2NdV{dYDYI@pgN; z>QQib-GHe?6*ma^DX{7^-E8dJs~^U{ALW-6SDoCJ5EN;8|m#H$2VzM zH`lKooa`obta`acQU9{+yT^*S9-B!HX@!YA{x%RIV^l(FBPBn)d}PzkdA&a7n<()+ zzrC2jQ*kDca_RlLs)>%%r9B2$;UAagU0C>iNUaj{Y|nz1dY+r{WUm_g99jsuwIZP@ zymXc9vrZ{@8-oyBuIPcdbxS@*CtfU`HD7dRL#|eYgzJ?n+dTJ&)JRW!cJltYLE+`; z$GNX=4ch0C{ak9I`c9r+qEqc&f9xt%)g?Q=A4)ZCG*f?HAI9grp|-+Swsvm=vo#|) ze)Bu-wFg8DxtxO^e2$#9!g#Gnx>%L_C5yGGkB???O|>MyRVhwuC|6{I<;%oQL~qBchyK2;`d_TS@FbtIHq#R`J&%$^7T!ZzfY~K zaFI|`W+qbN9(CC$ZfwP^&zb)=X?k{QTDUg+g)Z*dBZ|ta9?mTUQ4?4O`R{S)xP*V@ zNILE@$C9{lTwFXDdN5I9Bv0Jx6NXRtu)i}&?R7+>;amA}>KZs=NVEolDV%HAb?eCF zp6Z=Ws+UBz(sX+IcDNkcbT27x_F=&jat~rs-I z6TD($n|znn@hjfkny`%b+qQiIiXjaLJT>ebTVuI>ho(GV*>k)2jDYp!z3Q*OOG>Gk zN%k|Mt7m@MoiC>B)W3ZtVQEQ)P0tV0m(P1PO|sLzRC)a9OtX0fT?>+g0-6s=`Gm^K z2tCfB9h03I?gIt*@+66ZxgOkrwAD(a79igEsKjV(~&igf6*58+OCL~Vu zI`cZYq9bGi&xQqr<@c7=o}F`W5m&F+^#hhz?HVV+FWE+c+$yG`5{r2!R)jZxc|R{# zM1IYc52epy886niFWX=4v>bCc`hp{$#9HI%`!7o7S!83%rCafudjvmsg;8fNrJo^& zYnqRsG!CmC4(m0-HRla$8nPxvQx2k}kTo$vhzfC(8Gx1;Jn}HCi}3`W`{&lhsQ;8O zj-Yo=pZjU=hJ6lB_pH*^eHXoly%)ZJ?&nC#YwnGU(h`Qo*U9`ZE$R73EyD42GUMxH z#@ES=uag;HCj)~rumJP7>vP7}$&9a)!HNBHrt;5I!v5mW&Gtv91^1tW{ z`)Q&4_&S;Kbu#1YWPZs$BLg+#>txhi{C+b?GinX#zdlAYzD{O*oyv&;=dQUweBtXCt2KW)rP`7;rTRZ|wdVLbnelZptx2)$#DM? z)W_G!jIWa!Unc|KPewmR{O_4oiGHba9?VW2UneuZPG)?a%-GMAjjxk|57&&Zllkvm zC&POc7GqZZFRzmsJCm6n4qxt`%qzh5|M{ok)Zt^^*ne{U3{2Ml{rVZT;R)6-m0uc1 zDBjyuynLvjgt_`=-D-nRU705FNr`rgS{MT-R^BK`p74KnEe*Htu?3&+s9R`d-#lSZ zT6Y$FUf5-!f$P>>6)Ogm9+kXamejChU;CPF zfyU5xZYErbChxz!;1bHaHaS&y&h#5s0wvs(@4B3ncjbLC=hGQ`!?*7batS_qR{r5? zUS(eupQ-2U`h=9CmriGTO_tNhSGM{1PT?z&GqinB^5qRZ#EZ`{1*h;K7bF1+#eVmucY z?Rtaw(P^9TvK^FG*J)D^MQym|@GN3B#cjO_Ph$LsQwb+0u0Q$ap7!pi7xzs6Fwk?q zt+h(Asd$Eij_~e{F0IPEigl{xd zHEH48(*G~5rGY<0@$*`m`Om*;)_d;r+x6zgvFHkge&a8VRqrbdl?F}frOv(EH8fFh!ejk`CNWa=#ZMU_{-%vDr$ke2xwj73+-VF*pvFtSnMZfM)?{Gu zMD2c`_f^SV6S++z&Y9kEbgNvZ^7W(es>bDy=XIscoc<+DO0F=3bVozqUnuXOq9bX; z>3hy0W?Qc=r$m46>}0oB8|)-Z6)d52{z5>mfy?l@sC`F?h@}jhgiI9Svc68B7Kc4dtYH#d49~GYFP42x^ zn`j*I^FHjJ+x@%`VJya iwut!VEAHcUe=F;T42i0WW7Q2MCNs~bO=i5ptRyj>$DnFH2De|glJjDQ`?{i7-KX`e6&r^M0+ow4%^4dP*XP$F$ zVD_9@XU~~>L15a{3oo1%4V*bWFsJ^)z&RHNs!ljLaKWszrXLdYcxuOZJZD|i*AwvG zb#|uuO`d%{JND}D@jT`Acn&PI$xl6$@9`Ad*Gl1O-+OsH1vaVc>8Ya}ojCB`{+?c* zx`mlSZdtcr*F(jfYW2pyEBbgA>)BA~F)z{nraqp7kKp^0BG055JS+QqUfo#$|M}nS z(+fNfq7Gc)m3=&OGsteI=poVRbEBj$d6G7Tkow+ZFajP=-63<%ni`$z@!Xk$3hRLR zoM$u7oPU*Id58n%Sv8c5mOcy+&wF_0{HrAAkl7BP?IV5llmoEr7jTt_l$K7Laki7~ zDP>Hcy~k_^?(De&^91(cPbF~s^8Eala8pjI3XKnWJd;7+Guy4NpEK5^*ngGk$DE7j zOykRr1!LlAp|Ab72RHrvSpeFxVT?QjDfD`gtta!R(&ITM^Zx%oyHj97xbch9aD03) z9En#2Ya{VUa8fwQr_xHy3*UG=;dom(QS{pv`gkHq@0b+@B&-NMTMVGV)vkZxr2kpOiIO+)C|f(GY;8Eb-x(BhU_uinOgtGJW`+~qC67~C z*+*dzsiVaqv>0w$>x=CN&xPBof&rnv{4D;2niDieU1|R`s%mPPKR3RzY;z}L!<8hKleoMLw8xaS*uGsyS*Q!W)BcXxyeErBQLo0QGLozcmYWy;=<#THB2TL(LM?wEr;*CFTW7EkN3T9iPeGN9R`sBb2DkTa#d*^R|sx=c`#4_qRUR z$CI};e_n8W-n&Cyj{BeHJ6`c5f15T(cT?L32nGMj0eu*Nw?M?ab4YI}F)vu|u>hy- zU;*y20Dlp{(*j5ook1l%hu|vmtJ_=C`se>0l<++hh4&IgWdcrAtN_{N(!A++!->6O z>VCX6{!RKV!JP_RU*MLX>i{@8>SkTI>|-E7F*G4G ze!|34P7W{pVv}ecf4wHYDja_+9DhBWcpj=~fV{mQr9JUtENFmA_}_X&2y8UR{Y3t) z;l!RR^>x7+^e=vAa04)c{fMWPgXJZ>F^=Z6Ey`JGe)Y4S`DPFM99?L3a$br}U*~0z z@i;Gmwy}fq661;+xAgMGeoHltTk?EO4-2oPckGvvzgTb$>EZTRa2-$00^!7t;l|cM z;pB}r%LM6LBv~;m53G}q1e*nteBQ+~6^?JKiElAe#K?)`3T?^w=jQ9L1@%bqK|#ke zP$L|uVizj4r=?IIUvXujZ$K<~tF3ymeVW&*RB|=qzTBgh7Y7&F>>F*%=BsUFH+>nM zPwnZOoMze?REu}lIfMN7+vBUf@YJ@)S4n{>Nvu!+*cg4=qaDN#s}-nmtWZyeo8}S1gWcqVYEQg zpW2Lhk~XJlp*2XYCysLow9P!IO5z`z+R43no`v`!;N?IJa)xMpu++qW2`BO`o{7tf zs}hyP;ROHnkGM2T`#aBvf=%h@sDy*&h_U^ClOG@3FPs=%xIOq*;Ip8`zZn=GTioHx zCKRe{A!WDQR#R@-fdU;E+T7NwKEU6+=pmpPaB%k*Z7uMaOFBKCwz0eAbqvhO>8G5@ z*UZGp($Mwo0%U_ z4Bpv)q^vVP)JmI#DPz@2rC!qhO&9j@l%=2Ly;s@#P`oAWA1kfV)Z&XdtkxDrX)?1h z8m>wXsGd?4m)@*I*)Er{7HS4xYW(>nO)k-bviHl<9U)hXrp`q#u8g;iDcihUV3P9s z@4zJ99!a3d;~TBQegd$jmgfNQgnd;XR{N@cruwvhcT0f?cr>kz7Nq@`&k~OBM+>D- zUQ<12v0Bk)X)>Qmx1h%+W%XDWWgMlZ`8yDQ-9)kXn1^@sb(?)(b@bgSS&g@)P#W*m zjJosg^`J}ASa1_r;kY|8Xcmc*{+W%vHSG<5;^{sfQ?qNHy2>p?D}Z*vO}h$67puWhYF`t*#9KMLqRjO6n(+S?4#)uiBZdD-RJ6ocL0bA=Gltg zo{k;E?cN`sa_mqk>O}xj&-8u{#!K`G?9gwc_JPFMvGR=Fv@;ue8pY=XAUR41yCYX23qN<9*>iCD!MbD?D z0DVnORL3`CVTRbG`kVMHTVE6Z2st$W!d?^D0)~%S<+hhZRxB)uLkX>@Y}tAg-U@Oe z$sz%m7F#IV&s@qB&~d$Qu#`Oo0=Wf#;}jUL0@t|(+PtwRu`N=kG1b%Bh&P?qN_b!W zU{1@WxfQJ-hn64bVa7TY6^5S9OYNdcTlt4z{g z_L*An?)B#aPs%U|k;M7InN@=@1$Tdxy zeX%TlmguVPw7#kmYMgO#2@`ThbE?+R{ny{r72noJul+miE6RpmuNLpIpIWmNBXl z7OHhMYo&-kN$v71Kg)TRx=*oKgF8445bbDMfoPX8)@5r$Xz;JW~pJ9rnazZ%^o&-a+_$SS0>g zxUoGi^unQlWc1Id$-ZY=LcXfiz8BZ1?dM1K#t`o#z*tND$JAQ%J+*2%k*T%Qd{`-K zt2K0fFEb*|OL~mN zR`c{ar)Rk%ad7TPobrVDa$9x0#hml0^se`JPihdDdQ%r8i6EoyJWADBe6o@=<$ohN zN$;}$LLwtA85WOOX@Ln}K`;DLG@d(4J@XEG!gA=NkLj!E0UmAM$N8IQcDRsQ6T=Uh zj(sNXBT{xnbnK_5N_p$!0Rkm4EZAq6BPx=qCf>s^hz}h|S-!hdB zHf{-AdQ93Mr0ekeZ!k-scVL-@<~?!8ai0j4Ht4knO2#rs=-E>6O8YmQNqI;ysRM0P z@d*n&k1vM8^^|R@=$k%ijFEH(b=d6|*_9yB=Xz_vAYObf6R52ikr-{gr zNEXe1NC>PjuYK(Cq^A5tUeep}I%$j-Ea}m>uQjv&1u*lvQly7&wa>ocM87wgoMZP$ zyqnf`%^+6HFuuOGGsw!+pSB9Gy^i^gx#oV}9etN5`s`s$wUZdZw7<7#6!%_0=faH@ z|02T^otF0hqs}Iuq2xr-2|Sn;lSmMp`7C)M$s|~&--#r=1|H>@-LKL*_Hkn z={;I0y4`_&f>uJ!wOz1RI_X#0^t!I}b9>fdmcp+n#yx4c#wqkXd=qM(?G*Aan_{U` z=H$Ic5$)Se9UoP`XV!!oThoc_Jm_?3lk}d--3AtT!$w}M{76#K*f{TnFBMeB_~! z&iaEAV}JLEg#Oe$Qn1h|+}=w0hP40D)3k{8HLVapqUbTe)BcvpeLN$*5Ai<#V0mwc zP6QL*VA`@kaWYu{H+!H>`fcW|krnevTJWj4n+2jZ`B>_gp^{_4r8EQVv)JEMe1y|l zYza8ZnwiDKASS4UUzC-uubAPRsqpz=T#|;!VtCCl7XpbProoa z#FqRADZXOwijN9BKD?RY;cppZeSfPl-avw^2BBds+FigF^_cdzo=SHL^_3_pqBW}s z@$b-D;}%TcFCh?KDD{5;m00&zlFZa!$f!@M3v9WA@b$n~;0pXY^8U$KWx&y2k;TjJ9d%#V!QpYlB!Z&rlQ)+kB zj%A1&u4sR~XXFJ#Vi)Ge{W&&=>n-YApw) zCz%J9znwwpf{7NTpSz)CglD2ic&7c&IUgVJK`o`DDJlB#$SQ`+Oq=#U0B|Zv7K15K zVKDclpgWjKF>j4=22&q)Fz*o@qx8-1X*KCB`n<;|No5Jxj#k=##{|GIt``iU`=gDu zd?!4hc`9S~-bSA~c5K{I>ASJj1g&Rbquf?oYNWVqd99@v2Q|lN4ZLoy{F$44CC;4W zD{&=)?d2{s$W;ttibLA$mkbnT>8#23;{{#GA>>E;QXHao{d`s&`y}c4ibcFz`6TO2u zs{IgX7vJWn^o)v6`|BW8P28|#wvz>_!kte(8;>ejou>)xQOtAnN-TIUy_ga5MO)~A zL+}~C=o>S9@2{ERd$+YBjkC_zbOa_&W_s#)=rz_B`K%$zwmJWw$@@k8-@yMj^8X&p z+8K*O_JMX(7k;7sMB;BS-Iw3MP&(7SbV%d2V|`7XyfiPbJ-#74qK~iXCBDLmON$fZ z3L9I}4WrP7O%E&0RW7_*=ANq;>)`Qr+>MDc*yBU(RmV4_{cpjN)`itB-$A%Bo#(rH z70_va96rHr`lPR2n*D@nj1{P**|NV-YrL)OeVn4qH)b8ykSI7;$^p-KokW5~Cd*mo z&2uHQjp<&#M&TZoi;QIu6?B?gD9D-(R#X4PYSS;VtOg^A4Ay(ju0l<`&E4ngf*fff zJLB)w#5bX%x|d+9`mK{$OHJ^|x#aA|ncZ-}TKCHjw)r+Q=`$3${4p#(p+UQL8PJQ{ z-(^@FY@iq`@NOFoH(@iV1}`-@hToHgmRzguW^Lz|Nc;Z=L#gLY1u%&9F{Shd{kl{S zH8YuHRp>#|JlL)Wu?Z>5Gwdw5tcPH*C2&jhC(|s(?As2j|1D*;vz|{bogVEBdK1yJ#q>grb zUpkR?hulD3F?m#<+5}H)Fx71>82qzNbgaN#>1!q<65p2gPjEASc3ODwVQP7qR#OuM z8Q*K{@7NOCG2HrbAnaofe=pp)qIWp%KZ0aD5kE3X4Abj~H5c#Hj*`M8O?Y=FrOo5* z*gqUE+FQAaqQN}y>q#Rfij=>c>e;paj1;V+O7P9fpDTUNQr`Q*wUlv0PmCB&;3xTi z=_8%|TPfe___~aLw2aO>OKSgJC-KTeU)ME7JWOummc06r;bb&e$Kvq@!6f!NNTm`L zi+T74S5ko!1kssh13bHyOTSCe=-)+ai#8Iq^Tqkv)>yboJfU($??yw+jMn^5Ug!)Qbj?pn+ZBPwtM2DN!*Y6HNZu6=JW|Y3jthu@f=cvt&cjDxdi)h|F z=AzZ2Q>|%vjc$Dzt!(^>cz|i*aA51eTv*|X{=+ZI_xMVnD+4SVcbj@Mysf7*w^V|yL;epE46(!Dp+$Y9n# zcx}q@WJ2~5*OcFueoHouW5!1r`5YS_I+Isf(4dkg}>Om(&PD?_~mV?M)SA@+biJT8cIeAOoEfj^;5#Hh{yXnhuvgJluNE*9wwTvmRX(9I zTg^8Z!(g%8z@;!Z>nBS#C&8>@X)Xi%RiIu{pF2(uB`ec2@J7t3m=S8+GCev`j~Vr& z#X=a@T?0b1J26ed^vAz~jzsZy+Qrs}<1kQn(LU8Jt~81lc8{R6fziHtsRkcL-QP_^ z0m3%;A#Y|NXeU53>dyW=mcPRvYwCPNz3Pe3v}!Z$|B?zi9%iV;KTs|@%%$2s4%O-p z1-qqSXS<*FuLj;Sf5)H@7MFUKcj=DqQe`RiqiV%_$eU`6i2vVZ&9Mr^oLH;Z{%Prb zxOJ6&4NXmT-`+i9k3K~2wLz$4QNiytgNJco%`FbMR}KPmzGnyM>w7n;H}sW$9zybR ztTJ&~+TVPva=a&s7}`)61k&uVf>)Qw*hngc?H%t2OS#tjnKOu&$mwEr1FHZDMl`Zhk$Zd%_^u<*Utzc1t#kz4?NLRyaOx zP{*U-KL{;kd6_z?n2d`2b7&AHrisAfiD%|w078EndpJvx_W?p zul>V``3%BV^AOH0?V#eOW#q$&`g z!v`>C?u@e?`w3x$dmMq?D@IXg`fdQN#%(7psI!Xye5|9!Z3p>cL%_6g+rhr3Ux8`3 z@rSc)r04hBEVj)AJA|6gXBIWD^k(C@#2cZXil-w&W;}l+x>LttgjWUU#m5z=m@}yD zWM52N>ZnLx>>&H@OfD|~koLbg7POoS&^ufB%4mZ+Tjf8U6lsI=(FS#BgR@+1Ff*eK z=AjLuztjeE(FU{sqc(Vx%1x}$j4^y83mZi_T z#KJL}x1yv&&GSW{hx2=T8W;5I?Q6Q3?jlVACTDn#Rm{>c6ki3w?ehE1#w|Ns+W*;0 zX~cJLtMAGm;04LezOXKoGrKwIJjTN^nVJLmEv3$9{;WjXUkrt4V_Lr%l;bbm9n=YmOBa{jK(RB>Q z`&E3!hcCX42N4^Lmz_LVQfw3)WI2aYq2|%_QnT>8K>1(HK>aei?ES`yOBM>D8(E)v ze_#v1sqmMejTJQj=Dz?r38@>?0l0Py{yq5KfcKL3N#Lt{z#X4K(9C@kN1tMA60?dM z|B=_s(0iWk&mUja8deDB&||Fn_{wCzFQJNk$09!=5PvW2KWj9Za&z(dIevBfiL1G@ zTOfCvh^8S|B=fOlc2c$I{alIsW{WbOts&whBGoXod2J&@P8db0>4>Dm$md6 zJ;(_)#>gjDfnWrpoUNhIX^vVcvW!NQ<`#RRc`_{d3&DUKv+ zx}){R;%vuc7+9){{G}p0&k{Y;{z}o6J^o2n`=1b~l5b)fxN7`xvEx^EKkzpqH+*a! zSBw>HT#1i}MV=rz^$sb?(bl~6HLg{5yLUKP=pUG-{ZT<_SA$sdWYJi5q{4}Tt?I-M zj8sZGBqQVT4f}yzx@zor`IC=~#>vZxr z>G-BlGBVT?8rkov`oY)|=SF?}ol#%RZ2KcRrK1loZ_Q*TXiGP3p4*4@Z2YH7+ju>6 zOw*_H4-BznR3#%vT~%KkYD~|lSAi#HWD4{RHU5|vivM`&I|^jE9hA+}uOY$<>4!^{ z{<(^;9y`+i=|UW7&*LZR%E|N8pP04s)muk%jmwa#kly~0RaCnEK(=x43^Nk*uJtmR z6&A+5E9SwZ6|~#Y4;(L)6MQh+!5ROQ?353ux;~RdVAgF(y<`f$+|gh&iRw4<|K_{0&AZ%R6GKVCt6^whLvsJ->Eiw_rp9a)YJ!Jhc>BzaS(2ZjkJO#w>s5d4y^JH zZ>YFVwfLHDqjzoID^*8B#W8x+qtg5#3%I_1Ove>)_tApoA9T*xDw`^`w>dxsdi3OG za?q7@=Et~NTOTb~2MHYQ{=bo{jQz#br0ry)=DnJ~o>U7-&U%lT z^8(w%+UWl@RGhPUxPZHq{0TJLLm zjApO|R`ZP|u#~TciZ%A5=}L>ib9}%N=-Fqr!IkzO#*jeav+?JHJ$jj4H=MQv!CNRc zI_anR>+{r$aha<;8>o=)0M(G!x|~O4$Qr@}H*t4}pKF`sg->u4z1|#r2rvX?Zy*~9;_q>HdItt zI8H8EZ`mYjl{X5vNA@31_z?hQQ=Ii;fYnP`OKkm1-UeA|Tb?_bZu+V=z~VdF+Sk_y z7=r8HM$nV~z&~V#2LLhqZPAL!|Ia4NBBA&eRtstW0?NRF(H*SUC7^X&+J7a9gd?)9 zlBX8oA#rL>PFL=Swz@ilFsVrW=h7)}S! zKkoTWRx-EH%4oNr8U{v@qksN7HMM02Sr!{ijWBsn@BIzwvHs!UK?2P;Ai# zQp`cZzumhglgn=0O)Vmp<3)zJe^MnodT-~keSPiv%qB$?lft%(boGr<3ORm{T4$I8 zG_GOZy+s_tFhkNJ&@M+tdY>_MnoCduEk2`W#r3OeV6SeHB%g|37q1c>ZHg^FJ@>%I^{Fq*ylD~mQS z%x8nrZSyFn%>}m2^VMdd+RVt}Xk6d$zMWq=FRC-jCCmUHEM%|0=~LTCsTw(tMif&P z_qLM7@iP)V%L|bq4c_T53Wb$UP(nb5yP)%_45z}+h96A~26XR=sm}7y);2Vb?vp^=)+@w0Ud;>kE5nvZ<^Jp_65iVAZQ}8p@NyqKK z#*SKrEfG_RHcB{E&VRIHl~hM~VXMlfzI(w@ZHdsJvb7_R8RWaWwOKslt7*;ZcEM-; zfl{!FnVhYdNrIWYb1uqCNVyml=h9>jQl2)FekM4=x)wd+hSLSW1!8ThZf{W=1dE&J zah1i}np&Jj!<(|+yO9&@!3<|Z1b;i@9LVbDVzVck{mUzDb*vw?^PgdmeQl4j^U*pL zO8W0w3Qcr2u*F>e21q!=-7deMkiuJe)$UEQ(MbBvv*qtMZnOkG<|tbic=4bo?t1vBFTMY`snN=k*A zPnqr|{?%GFY(TYC;@rd=aX}+%&;j@?p%Qygf5R}KwM z&GjH>jwTw`+`}=KF8Q_Ry&K4k#9yh3udcQecqDP3b8ac&9XKn?U2{Pw4}_}Yy@TPz zi5L>7p-}Tas`;m9#BJjOjdSsJ_b%JqF%{tNR%*wqu= zV3@Ma1e_10%o7cn22Kc=@2NEuZy%K(^^S?9>x<-1Fem+4o7j%md#+ZK*PrYjAyPM7 zLsgnk(8OvwCbfAuEet0*Seqo3httui0EVh!ilGXA1Ma`Eyb>^jvKS~X}++Q(S|Yacg==Ba!Eb#Lo9pbP(};Kj1d;9lvwsja%bcTjMtyGT{| zO#DrA5qQeq1np<&)jIXeX?nFZHnqG~mjAW>1_O&=#{sa!-PbxS@uGBAho6+*L>-C?Rj!eJgR;#!juQKv zcoQ2h#TcdjniG72{><28#GA{@51&WkFPp=qzG0?nYe-jZ?;jrFP)bas&Zn+*PF-W zaRQH%texWELCgl6A~w(>k>-df1D|R*=4kLibr4|4SomPQVzc*F<4AF($+R7;~NI&Sw2l0*lSD=fl1sj$1~_j*!kCj=TVL-hO6 znW;!^%8EhK+sScP#R)F6H4uo*Ge;3P!Gz)DVh133V{j<|CM{xG-lDpls4n(?^fLEs zS_1%fBSnAe^oKL=Zs;yq*^}&DWV7pV$iayP)_0~Cv{v*9&Pt%8y4yu|mu9ARf`v7h zhqAP{>)RA+mCi|PaG8fl`sq_7@a)HOT@Jyd|4bXW*J_U3nnK@_)3!*veY+2!Bev8J z#5#TXF8?iU2{kTYL7{#GXfo6TfX?EPTZUV&i~% zv6}H@liP=jqcFTMy@>4kzvzIpyQg}8M5egx5J_>)l@PMeYOQ_do!ZrMIGpGeP8`c* zLH&w2E0q|RP^&yo<$5}^3#V=>)xmlMRgHx;v6kD$w7jUz4F$3t&h&OBUEMSz+toTP zTeSwJK}L!Ydo^eq;%W7VXiyqqlH=+TmRdSZk$&7dwvxlgUZwzMdwxDK>acL)mKHG7 z6de$SDAj51We6M!t%O29SPHF&?LoRuNH-oQ3Mq)C+a)(W^xc*`={x4!x2tV{#?VX` zI6p;}wGWt+S-?~$jt_7%0mlj7j1xq&**#BVPQz6=Y6oBJcx=s4MeG{#6s**suSo$_ zqmGR3()jZM?BnvWC^oExigi6w$4axe3I}{m{mE%_aum4joWmd-dU3D~U;?0vsw_pK z-iUp^-%2oaON9-Fj^R$@%)|6KLywz&+0e1!XKU-nk3V(jDHqQO`z~zNA0nsEZ_TM~ z){XX@2i2}q)qR~RUsil|Bsp|FCaPQWVrt%QxuSo})c~pd`?j1d5WQlC@505wbq>l- zC)B_i3!D?cjaUzvfu>6C_4rvla7?B8i74?$Y&azx63wS+kePm^myjBmXcD&Ms9XRj zCf=RIgVE@KtDVB;p{F?hMh#TxseC3c10$X}fglSSop1?_O7-6Y2wqBmr?vwl&QGp|5Z=5pp6CZ+;#<{9Kvzi`ea zQ={k1x-iS5;pQ2`#j;p76(@f$G)w;rhO?ZvTx|CPC)Mg zBxv=P^v}mNEZ<>w*h7wZtUjVB~8OPYG^Pru`onB-rFmJ62Bx8|>3LIHbEzmh!DbM)vI5 zCi|iDg1pGGV1;G> zxLVkjy$OY)m)OvL=OUGCc)m$J3IKphY0iA04?C69kvHtempW&eGT&ftX&NomH2M!2 zU#w%u*=ROcODxM$gn-RWJ&qYnUMkL0G^rBi8k5WHm@tL6nq{PEK1`VzG=$@B(PT1B z{0TsHXI14ON}{F>aH4x7LfSA75%k4|@roZL*Z|IUv)LEhM@c!OHK&hLsz&L}(p6Q{ z=VbXOa@Zrmb|_QbceStSKtP1#-4tQc6PmlJ6v!q0lQ0N`?Ht1SV4R~#YQ0=Zoo0%Y zBwqR)C9R~0lf;U@(=5T(NWG5Ycuqsv;kAAN#{E+vP5x~1b1`ngMWlY-L6LBCXwKQQ zF8rUNHQ7;pc4*D?3ueu^%rd?7v}O7W0T%9@d2|STx=IW48{IoVTFoCIU`S?Dr}+^% z8^iK3cDTTD$Tiw+eDB=GYjYZ}oqF-bVksmp+ju8fsBx65)A&b1%V}H;ExPIAP`B{~ zna1Um%Wb^P>-7Bhq<5c>B;3;Jy)U*CfVZE0=FUe==K~@nKBf{ocBiR!2Z`@oB<^Qq zT_mE{@it@TvG#=ak&Ehp4ru#g_BUuHtePx12R>5w5+6QF^$`%teBf`1*|>6j1a!=-g$h7A8c8^l2DWM>-cf_1tblSgcv+ZJ z(Zg%PebjsCa~NnZ;uHwREnEM6r?%<~ncGwSN#iO2O+}vi-D+^w zgs~zl3Xr!HR7~EIJjDf0x+W5wxM&TyOsa|hjJ}=isXxs`(a@|rGp0u*ITPiaGGG2) z^h~L)rPOTx+V#Ci->>lk6?)t6C{ zS#IhT&h)F#%;7upJZ_hc8LWhf3?E}p8z)006@iB!W=QzkY zs|K%JRZxU=G=}ACA)i4eLt4x~2o;AMpw$n55*#o$_4n^3<|(s^CO~MQ5K@MCs+~Nm zT2ceHW=>pX{qNc@D0_d2^|$@u_vnNbWi1Wcc8Csd*j5y^J~^#e>Vpm2j*Rwi{NaG; z?u!QQt&3|qUNx5jKPpgP*w%Y*tZ~=5bWmtBkFPF@0f}=W>TYUWNu~6rpi;bOi$*ArM9f0?59NgTF-Jl2i3+F zraRt}|D6Rd9vOM6W>3nlKM`nRltaxsFe2uQ0k~U;rXPq#g!Ux_OV<}J{P`5W$1}%k zy@{flJ!e%@;X234t#{w`k7w?aaL#h|&1r^Mk!#^vf-P2u;)IpFKBnwb`F4kP?2*~8 z;{MC~m;oAB<&7EfqjN-39J~_8s;DK6w}2YtOgb841xu^(r^*GDoR|G5zkWp1m-C-5 z+uXI@2q*g;p`C-?$vm;^Zjos%$WF16LU&M0V_WYLU(MUtakc8Z`(C>?%4Zpr?csT& zGCl0JYG9Eezi-F88Aql2%+Oct1Br`tTGH8u?MC8wu|r~eimIexgya18#tU+r-ZV1P zv`bvt=&>F*P$J`*eV6urH^FVs(c;OFy?&#SDHQ?x8Gmp5$Lhuf#U5X*9uW$?G*IP} zk61Ti#}s?s=Y&E`)>A|qt}pf#=lg~@Zb)KJ%-*--+_7aCkvAU@%%NgH!cb2c6i(nd z-~>G9SyQvgBbr_9NmdZs)>IlIt{8$9zRH$ z@U>elnf7Ppmi7mFY?kw-V(?gFo$wWcj(1{pkazSmnp34AmP}V?4>~=?c%t;b1oxn5j+dhW}f=T zt1KP;%g`hoztP@&ta&}m_z4Fy6&cW#zWVSD$R`gLci^%x72RN%dwKwH2;A(}4aWMG zKT_McCHj{;p<)u_?&>93wC*oZGwC0}sw&iccP|iXev56$J$CLE)8o!3PUuI3`QeUF z(35b?QI0+9Y|U_U*%njAnFC3kyB%}G-*X(bO?=4a{T<2~FCdpQ;d0`42G|YjieZw9 z>!E){NOnNE3&^?zU(*h#j4@QvPA6qmQ43J!B<7aJE&0(IoJa6kC!7u)G#v(Xb>ftO z?xAvqzSH~}Gf&uj_NBUydp_Llb_$0ZZ z5TE2Ii>Y=KUJ~C{YNsLGvlpGxp`f=Ly|DX~t;+*yv5b9JjS$DLhSY& zz#X?PKJldj5LI8tb=F1I18q~8-f*J%i2KP-R)oN#j3!vOw=nm8a zs0mesVevyajz6u_oa{C)Z_8&)8+!WOmZjP^LrCCslg0-QL42_v=n6)^uF~)p|&b`1v584691OXe`|ci7#o&v{64^5cySgH0n(Bud(QXFjtyHU*Z;HO ziacg%H>Kl4_8+;#Sv@_+(siRlUpbfe79Wm<%I8*d zDIqqjgL+jZhgDWjd)-EFXf~Jy-7pVB&Gd*D)(mFU7>9ZM7-+tjWy9p~uja7l^MYU+ zS9|3NP3~916<~114_qVV0An=Z=iY>KnJ;Nk)Hzd3j90frr3cw=Z#BjCxzQBzWEadA z8w!V3$A<+|@?e?)HzS+4T$#i0D_D{A$bG+3e_qe}@PU#~=0>Ysn+L9fP{EXDq>2RiO1PP{YF0-av&fiuF@% zjp^R?pTK=u8NA!T-l+H#r_g(5x9ikK$7*MP4bU7ks1V zfmR*JYV$Q+NUt*#$Qh8>qrOj4z z6wjJz)=L$(;eU{KxkY26*_XV^Kj)>61#2_>21mB{WMQ6>?e3c>R`oq=_f*(uk%LdB zs`YDrhJ!(C{w2B)P1@xhZC}H|FWn>@9Zetr9{`G=!gI+UcK0n2)$eP%g>*rV$y6mv zUXsCmt})z#kV4dpm!??E^Kn99VnDd{lR((_GUJ{sy7mH55fZTQUGxT>VOIGu%nzho zxk4YA@!2D2>+bG#>2|=3ok2 z8vl<<%W>LjZY50y;YM>jO%Y+V$nQYMw?!aV*t~07?8e)^*ukI&*19vZ(&LMb=Ce9+ zT?-AGaUutdRLRx-sRPMy7u&K&-TQH5h&tQ&w~y;)cSe#I1=v~F4KW^BDTxVzaMFpJ zabxfuPp)Kuj;1CEt3H)anvzZg+20fd94CzG{^%JKO4o*;aSz+3G;Gy7=1e zt(MpbnC`6#@V~bDTZZ;U8ndl#q0>%Z@4UW8U$rhZyYy(a>C#_PSb+bv)xFeef!pep z*;e=O+3JpJbt#%9m%^vn^+NZ)3h=+S`Ue>2MX%dxzig|^kdJQT8c?eT_GtA-yL9Q^ zssR6Mt7U4HeIH9<9nf?re5BJV_kRTBR)v?B0%N8@V%_C0W<`9kzJ(i53w6~XP!eWS z;X*O_a-imN2V%n&4n%_>_HZE<@!^S1av&;f9c)9GAEm7k(Ybl`qny0kZE3}Te&ptH zDxqwNyc_p6cAvV_18I}8lbB?VwjLVaV8eHf^joG6jFUq;vvF^n} zJ=VG^tSkPhlsk3pJqqte63+)40Fr_H>UyhRqgB=%vyoR?Yz7pK9^b&th~`|TCiJem zs(=2ioK^kfe26gZAQ#`@`k{44O;-R^SNpZu2*yb|@8~!!`B9nm(LUAgsTZOZwd~2Y zr%d7+$0n(TL1mMKdCF<-#`7rk$mq^aJP#j>s)hw@Fi)E~Q6;h8b^T=<$+FV%@?e8U zg8R#iZaBr+GhJk#IeVtj^Z!@zJGPoxbg9!9+P&f z8N;@SY^3uvzs(g3xU?_{Oi+CF~55p176P0oO|o?SLqJR7Njbq*tJ)2P+g=`vto0{HE7;MLn?MH(K}d; zu|ZeaOO^3vUBfdes=eE}dRix|oQ4hdLptMPsF~RdQ#8M?>3`sB=_qanMN!!UI(MBY zm3F7Q6ji+5v58?ES-ZJ~dVD3WJ_8Rrz0qu<)9AA!a@S65D(J=q@GCcUOK@T&Phf@Q zufSU8$gEDL9C#HY@QkWRT&0>qzT)1&E|bNvexYf49p{L;D%;tu47XW;3io#^l!DpV zL?xW5UvO5#iyNrW6Fm(l^uMoGa-tD74bts$G)=;B>Nu8Xh7IF$t-qqk}t_5I}vsn1gB(@HC=b%9nK`7Nq#$%jDI*M`Nd4~-6V70SD_746Z+;}vUD1x$&0;|D&&vL zG0w<+G1(nC&F~sIozb{EMde9v<;5B$!69#9SwQZH+M$+Wx|tn7Z5y5jA1}|hr8k(V zZ1H8hSr&yl3*{^fvrr>@LLKQsX+*M6{+>_+T_}+}3-$Hl9xZ+~UwAFHVG3EOwLPKM zxKMZJ)^%@BsC!(fdvc+E(-Uf*3neF5w#A7(p(eOc59UIZ^@J*Qp&rhK+Oa3p4ldMV zf?`-1xeewY+L_6?DK-3`{zjv=^@$2|Y{D{v;_f=l1*kOn9`5INQyI zC7Dbuq-dU-9CCiq2thyedC9N;;6G?H>Q<2 zkiByZ)5X^wk7G1`I-(0>Q-?t$mqD_YI-FhLa$oUi>(*d{6R!z7(Iagu49!MUiouv| z?5#b2*%&;KbKcUdLj`FQ)U-P<#pXrlWsrGVFN{wk=d4o?@{!>p=R7Oqbs|(M>8SI| z59X6ARV3$Z;)%!QoK4(jj%mZ&qV0BjWuNxl%oN8Fk~#mh27yt9G;9X)q36N0ZKLkp zI}l~RG;ZBNmnVChCl`3)YhinR+$I?ObLvb0<5E9*qr>{FyJQdafYgm z#TORLf2_Pzm2aos+HAd5)Z34G3smnP(WFCAh3-L&ZG`Sxsqc0UBg3Eew`WqDaR9sY z(C-g-#oNr~>ZFXUT|X>KoY@>lT%iCOw#MTt%%zvn6S;zu-U-);R!p;^POU>LITiV; zb7?hoH1#B_f*dE%N=4>Y7p>-DX*#qzKRC+L>VE(?Z$C;4_<4(hd=WTO|Fi}3#VSxX zoDQ)kxWGXBiX|PFb*(5VvX$j0+k#SKk1f~Ot)u~8>>r?GhN2+3i>UF60QbA`>rcG# zbC>azzMEDg2Ob+vh6kD3=TgRo0K8|eyz8-MOKZ#N$yGDEOHbjqe0YIW@D#%JYb6kkd)x$dQ$p2XiLzF7IW zoVb=-BaWyKbX){l*GsUth43aJeXNk)546aSo=omwZipuLa+`aca{G|mQQkGUiZ4oD zu_^OA#cJ98$zraeWco`#Cl(#OiFX_6qG*;7FsE{l$IALuLX(LlwFTQEBM)8v3!-(H z@^ysl*0L<)&upl;jZ19^83nV#omVU zEI58*1bXy;BIP?x)RtdB`48(mQhxxNy{csl$OiUB=rX~StUN2lOjdD)fyjmqOKM=v zd7R@^e3q3;3>kB%%m)mTM6vxfcNtovUItGjh}TX{VC)of;gRu;T z-;Fj)txdvt5}xKsGm75!*8&kn}MtLjEbbo$u2RoHIq$#0|IRu&Xp>p%e(i zCx1hUBr*33k=SUyXx27JRSKa8IY?a;N08wq#5t$5Jw7e+&TxttV>o&iVFYceZAoD}J+9 zx+9TUf6wa;6@$6m%8|UUoSLWDnsuPXeDRnh?8y&^uj)j-yb6B3zsD;A&(%%0-Qe8>mw}VKEJN9IPLiH=nf9vek?_ zo{;pGm+NwbRYNb+uAb|+AP@lYZD1DEH6gLu(!1(e{XmAGl8ZWHJ){fXoc=r?GCUn2 zk#lL2kV8YPSG_#1!6XaE$CO)VEr?oYZS0OhQrS{d8`te%+qnMM*)}$#BK|+1#}t{f z1cixCPP6l!X8(AQnqnew`sB**M+e|JBgk1DZs_XpIUwUKi;h8)lJ}1;L~F>)5t)9b z-vx-wml7HDxgC_3ZJdvHL05%?DCCID>+G!~GNJhrnfvTGy8N%w|0n#fbv_n#o$Zxl z&AY3sV;_PD-Gsmcu(|j5RtP>v2sRzg_h_bLJ2@Q*PH=i-IX@bC2=90Z24xtKcpJxi z;r&WLFxO~|@hlyo&Ax|8syodvXsOYE{$fbKIxn@KRSw>YQ?p~dlOVEuv)Fdt{0@!N zl?cb0giUdH-Pz;1jnOpU%>sSecLp~xbC3vHe~dPHB@IH@!&535?^!Fi*!IZ?9K{Zetm?$j_##TWKu4$IlltC zu9of$eni#k+h`io^9RjoTAFl|3phgJczp@tIG=Y&^xT9j_Gj-$ZcpsLxloC@!gamZ zRuWMqf5VMLC7*PWU|%Y+t7#M7i2+<$4*&sQ_-&pjFmIn@+nm}3{%sIKJ|<_BJA`JT zZSW~)T+x1oblkjpiLTecr$A$C=4LPsF{n>afd*5dij&+Xdg4rRS1W;_Yi|bTzb-bCr{mE>~OKa?W>h z{`Je8lboE6U*?pPL-$@dM090l`em=YO}3Qf6KB%3y^_s)8fsV_yS{h#Fju}`$drlBNs zQlrIwDEM_>ZfzH0{Az~PhV{p3d&(Wh%^0L1Ugd788nyjE;N;HK9z_#6Jd+eY5zezAz1@Y z4VmD4#f$B)g!_izRnSVZPC3FWhB>{Ml^=GYfi3^ESq8ZV3ajJ?a#ZuzK@#d zG*?CS{3?u2YB~e)O-<#Gw(^<+Oj%Ynj*#&X&J2;u`=+K@1y{mdSLM*M)zsUHH=3Ws zAQ|ALN|g2)E}jhNv2;%zslzlU^H&66=HbxQ7~WH?r=A;3S6L^^ zQNQp_m98noLH5pcUK>}Y=Wv9s2A8<#lGWfhS`juo3C5njywgzuHd-_-U$$F&AQJ!5 zMzF?HPxLld0`J&6G_Cep&$8sZp^JRifxo?xYav{()%zigL@FvtL2~l29yI(Zh-OKM zU7j*~$f;<5kN%jUUEJ4dMvE5E;g$29($gRorJHuvbei;T`W3?aK&Gbc4@Qf8d$#Hw zyH#x}emz&#`%zX3Lv$TX>^chCrJ4XQ_pa z=C=q@YDe~uAVzO?hf~jU+4^=g*(--hXId(Xm{s`2wNell?4jE7t${W=&_huD<(V>~jUZ%smXKxvScsi{O~Yx`9u*#X|3w9w{G{T}dt>xs{Gv-|;=2S1xvbx~kD%*9~6OOVy{eTSfYWYzJ zPSONRsOFc7+Wb-3ns!G^N~LhaQn-g^>oD!Y43&a6&#IEUzq71%I;@uZ364n_85dc1Pl2gD!&bvDp_tXYR>{FiLuI-H%X)|;X{XUvY8Ne}I1(z` zTGpX8#Y5*grno(tOG~?4KuhoF5G3UNzc9uWYvhcMjI#Hiph8$@jEoD2*8z2KTAyI% zoRe!S#ZG6OIm&Z>26uDMAP^rV$4=7Q7y`Aw+Y*W30-Jd;JZ zjM$fPlD<}w_NOzYGxrC}!~evtWV%tRiC!b}>bV3|-dA67s8AC&@_3AW3CM~?*^Xz2 zqzIOduSDsWaee|ff(09EUvk0ziLDl2+0oDUyB6OwEy+DS*n(kZ0P6xj^~YXa!I(Ly zStOnN1iAmWCwBY&N4)CQU|Y7qVfrbXY=hrcC62~fvuR1WV$ zKyS>lSXD50_gkhsAew_T4_>#QNX;g+V~aqUoZat-ZUx5Gh0gAG9pEN^iFBcLQr6n< zyEJMFnK6T~tE7kq6KugrBG~{<)&e@d+(gb4824xCNjRA9j>dB!fAIiyOF^wOPwToS zF|&V(E84B<$V^pvPE`~jX5+i5&K_V6J$~=+PLEy=J)-A1V)Gy9u^{*#=yCfk!rYk~ z9D39OZoa)XOOHzXt*ODGN8vuUuetQ7N4-Oxax)6NMUP>6cBe<)w(ZeF_jSy)x%yI#(a78LM*M@MGE7nX)lEh__R*M4mW(QPtGkRAxPwu^$wG%Gp9kDbSqx9MhmdS1 z6y`s-5LXM^sr-*bvT8hw2yGZP;)eyhrsfO5MA0O*@k4?(R*v{#{`njhy$jjGUwm~v z0Y$qz=Oe}B6Ya#!{gFI@JjQCzqTMLYviIfNoY6vYe8?)IYQ+A!{)vO&{A%?M$gFwu z2KJF$O|s04Wa{epW0oO4*xbwhri%@Z$@v|E%m`)TgG#{n!2rvL^=9i0wm-g@B0TMp z4KOdfg%L>Z^;#6n_vzXWT|%*oD2Cm-f?^o=qC_33(@1rBevmYz!}G=B=~p@iXV0h5 z6V~?bI-(Cf5x_$Z)88wm7q{KsgX6Ce3)yY-l^OolOy>Av17IyKKXWpz{y)6E3wTu3 z_4l742}B`IP)1{`GTNvCX-z6>BBC>p%LFD66alRl6n_+pB4Q%oB?J?M<2XvKZMC&k zd(~=Nwbp{y1T+D!h*|-w;-z}VkqTM`yfFXIckgp%5~TM1J@5Pcd6=AY_FntG_S$Q& zz1G?&xNyYtURfa(K+>SQVS0!srYBNjo?LB0X1@9zckvAFvqV|?nkc??D9xcN-^;b# zjGz0>Yo%-5I+i9c0EYfsX%=Hc>7VP;5g#pF<(_&6g(iw8TbNHoBq3{OsgjA}lL$>e zU?_E;(!X+EkG|3~#?3Hy&+59?*Md~bF6whNH=zAw*gpD$Lk4h^ybnIb$2%&i@E-&; z^uS;0YolAcK_-Xon|J9_fYREIcbX@)XZp3op+!G}g>rv<3Rtwi_-z0Q9Bz(GR=HOZ z-r)2%SRouUnl%gl?Gc^6sx|Jt(~U?;e&Ce(d2#rPS(J|34GmD&?>xU&V9ZSSM^FTC z$M}Zv!~{-vo80_!dtCA1`%$U6ws51OSoS@@6Z^PvZ+#fTw-oy50#9Io@}_*MKm9bN zXlcVT06dyZe6n~x#~AK?lT2H*E$mM&sUvm70SPFF+_8u1&@8TT{uyceB!G_q^z73m zGndO28b4p<@lltRTzZbA1RRcgmZh9t6qJiciim@nCK?oRf6fTQ-?F8tD;kriDG%S- z4^6B)1Hqd*BOSONjTE`yJE*{p+Q_gjr`K>(A;=00(*y%PB z$mj(-UZS#w=xKC&enDF8IAjIKj-&EZJ2fHzspsoYS8$JeF{$xb(v9nWGgIWpKZ)0t zWa#1f8Q#f5iCk-l^#fTMnsJ z0C@?MzUhYU0Dqsftz~I>3(Y6WQ?79ruoq0)cT#5CmMH!ixj^P#P5Oe6pt+lO zH+taJ@Md9Jd84!0;Jo|pZN`y)^H4bH8&i*|E15i1sU@^mY7QE!I|-FN{IwI+DG2Y2 z%PG+#p|zB%i*vpy3|R1Jma2SdxTtMzh_)-si0#<^e7X{fnv7y4bXsu9?G$kT0C#wk zKqsKcV3hARxwrgI0jDBM;i~09X2iC+zacRso6`Qkm}v~J{=Ipo9wHkRHOt*R!Au~1 zl)FEgYJ($|HY~v}$g7A>-75%By&xefS~(GDhXp^MU}O55`l}JJ7C$hUm1V*GgH8L5 zm%aqWEbla>QL#%6(oK;kKf;lq$$t!3M$|M#QB!Um@#_3(AvKfBzb~hl7n{O(FiaCt z`DuFwBpYQ*el`v<7(!c8hY{c}jNWrM{gq`@Cu&q_XYB1!-j1?10{c#|cTZD|y4`)) z#o9GU7r*rHu4AG(bbWI4KGQY9TI~d@3-`JOhRZAiEko}QxQnThnkCn?km=x((aZ8Ytu zDR`)P0^-~aah_2UY~Mmidus*KuoQ2mTPM}v=LRQ#^jmpsSXV4xO%lC^&y0y^N8EwG z(R#kHKa~hncE%G|6k#WZXi|oEi^9V2+;u79TuOBBH}iOW(HN(u zGMtj~jvCuspo$xHz`TZ zZ$ptEl>5r$sH0=FulJR2DMtEpi$5^6H=Dj^`g_w7%fq&XMS13Wv$rJyONL6=`9)W} z4QJ&3Vkzo$Tm|1Y`fhf?48~__KWd_2LE-J+6uZbqqZ<)`?MuW3d_+8yE(KU9ozbA# zp@Mp9$g+yUX8a_7Mjf7O_3-;KKTOMRkp)3Abj<~-$u8AoKWdVN!q-J&FZue>*q1Bo z3Qg&`TC(`u>HZOR4D^ZQA%#ba8~tGEqi)Oyry_aHaGE>a3tkklh0c0$&)eHd-MgnjC)aWtYOEv@ZFUEB|87l!BUoyKSuO0v=YnQ1WS??u&A zlo+|4;vUn4^^UZ?6LHnh=u;R?VEu{cPlX82T;fa#;}U}^#wBVhiehMBE+1Hix9CdL?@amVvP3!KaXOx-k z&n{lEBeSbZMdhpBejH}r?@p1~@k{{~yg)}wkaw>)6{Y>iZoSFaQJvkgSg=-Oj*?w{ zQO%wkWp=@)QDl38RM7n|7H@&I^jV0@*?+LeG$8lS#fu|e>dMb+rr)4` zg+_Z~fV`{4-|j}}l^Oqhc|}!?^K=~l)V>1oOL6QVV`;ebpH`^S%g)f& z&fG^`r5h8cK{O)0>eRLn^|qjP1Je|ZxFwK*1@|&M&d<=wGp1R)jJ#ZW?(H*c4KAg{ zjhUN?7XOSn$LO0G?Cn7j;@iz=gbv@Z4}AhzFW21r(KV)lS|Cb=w-nu^1^?l9wBW0= zr%4E6vw#oo5~LX~CfHOwmsY=d6xbnh~Y zgjZa=Z*jTt6wwLe;J7cZ@QZP(br0k&IJhD>cy0;5Fuw{5HjPTDahDme)w{s}7eUSg z&8MTZa^$%O^C8@$7a3qB9d(OBE-iKYeI+VvqUK|^Fri9|$zJZiq5`h3vZcqo(syV* zbjF5}?USjy@rU}9icGLvr>7{x8(CFqdJ$}>?9Y68ry;raVxS?rvfUl)+XX)(cUGDI z)&-ZEN_>46Xbc+?$GHa>I*Eh+>8!r}8OTi2EX++z{ol&yBFZZ;#5m6VP{fDD${3tl zxT*$ckvha2nC<1h7E$HutK1rI*9s^OUhD=OElZtbxzcX0U&=~0C2x*7A~%}`B7ObxI<){d zFo>M*p!>7k}(^tE#qQkm5VJ?7% zv1{Vq9<>0(ie{QH_to@Px7yfJr2i}yo*?c+c6|0uss&a$YWW*$W71^Sc7%t)fHNbJt@!K_Y*yk>xE?d3K}*CoKvE`&u& z9jjd1F}}sQZnC&ky4lH)Yzm?)?p5mtE!5B*(sl*re~q?^Rc)h-2hg>KOWGt$FYI4U z3S<7aX@SiDP=!jKN}H@Z0L=e_9n}=oUAUf&aG-l^75t(TN_A+_QQmH>7kG|tF z$im1(BDzA`7I&Ut%yyE=(iz$FplD8{G!|T<+<;2Byvv(Ja;YwoYC4lqDi;G`Nnd82 zdp%Uu_jrTF(mrl-6y0R!Yd@whp5I0BV#%{BY@cZO$c?#TZ3DTklI&z1xYLblj1qMb zW+1ayn_vIkSO%`gK$9Sm17j>JVX63^S1m6WvlP?)+>pMW-3J)m`chO&UO+DGvwG&~ zpFcexOJ1^$m18R_#||+IQC#Y5_2>SLjb`+2;Ml>N`v=WeuYS$k=UmvEgQwcWrP*{3D-GvOOTGN+7M`=I;`99jYF^)jh)Q z41?iy<%yuPj|I^xQ|D=ENi0*(*qdLB`PrcjF;w-;i>X2Nj^@*F_|ZayJ+Rx4JG#Po zx`Kmo@2L-i7*u#-xjKf^vqo(#q z2tJgyd&&-t8Z8~64v8vyn>$F)>g~asjNXKy^&2;eU7(M0UN&+=n3ESYlv;toXDn)o z{wQBF@3>1ufo1LzHof|C?}^yhe%zhu#X>4Pg-+AHLU)Ch#cUNXCj~Qi3i54L@QNoy z6+Btl*~I1QqBnz29&?iS@9fykHBuxf3*+ItVkvy8L0Q5{iLD|hm0J9EKL$oz73;XC ztvBlmVnC*&68nrQYC*9EHT_{oU(7J`(xkO>x)L?H2Z2L?UP(@OC@1*YmF*-qA`3%_ z9vVlf$aVO}Pi)q1{k@6Ts9-71# znqx1IpBcKr&dmkc<5}N6)yVobf0XT?3TEEu3t57j3s`Q^0l^yGa-Rm@p>ZY9{t8Lg za>N7WI7l_bBRdZb(FikktThmgo$fELG(@9>caLb84d6AecpJc6#k^tcg-_Nd9`q@6 zf2UotKj;@g*s_D}!{auP8e$NhL>|e$`X)MsZ`a@!ht_qj8Q=EavQK5A{e)*j>~Dvk zw)=;+yaL0^oiW-Bp9EFOnfGFtV^qCO{-l>Zr0IRcZ`Y4TorJK2+_x==)|s$E?J_Iq!k2oj zpmrlBNzc!+@72iaHib8tYe>>Rc77o zfM51P;u?Jg*En^zdijk00w?*w8|!{!hf?c?hVqIN$Tm5llj*$%9gm`z!~eQ9M*7Vh z?uls3HI?p-QBcg8axV)_Nn7i0@>&|WsO46Zu6-4>;4&BK&-2Hlp##>8l#+6?Fq!YM zhi2zWFOU=E7un!RIc!*>T$@(FFaWs+P73&1!YUK14?(LnbWAWOTHR7w> zN%#{=T}`^|VDsYf1NOcXJJNS;$&PfDd)>*@(=qcJO6hy+V)<~dK8Bd&*&AYs)(!F| zaBggI_w7_SclZ_@8lgMtSvNbI(SMP*1>A6WyMJDo|Hf9nDEkWEHnG&b*_64{onB1| ziN_3S!L7#w+1=TZ>n%p@VZpZTp%2hZQp#f+JIj5gsu3)=ww>lNj(i8&UCp0 z4&SZCp|<$S_9rTs&8c^*{As~NGr)FLh-EhS?mW|fcE+R5^E|Wtq7SltR{^KD6*;4! zuZf9B(7NbBe>18c3|GL2*YBXw9tD{A!dI4!%Ff=@z(3ELYp8!=Che8hVcZ?KC$l(f zC1#~A7hw(k{ayedlFa-4Xi}_wSEjib@|y`gK+InPX`E;m|9Y!%_^C{2-JgJF|0kW& z>r9SffFD|C*rUZys8BkmZ+#5C@ckt%{$Li^oAtZfV7latTqUOytBC?v%98%WsA|iV zEt5G_LwoIqzmk4=w~le!cVwFX$KGIsl6pmh^P1L#+qGfm3~qWX@$C_R;d+*}GnaE$ z4tESSRBs4ga~}1J4%>i0s3HFV6%$r5w3a$@1F)Jc5fgOUzxKA&OgOKA5!R+VKqL)to;Zts+W z)h32j*9bN^Ek*8V)*C)b8l4t4+n5c25qz@=z}p*BFgq@(OCeP5J_ei>s7DS+ zUq$oM``G*K@IG6+WJ}8rdXKkcVJk#OB~Gu&ysQTAO?EY$B-St&B!s;Q!M*VVqcP|7 zb>2$jqZarHMOSo@Hwvv{WlZ~o79;)=|$dd;QF(?7(MD)j_)TCjU$&{8Ye^9dmi zrLwjG&VU-{C^{&0H&J2@L&q|%+$O|TW#^ZbThtVD)TL6apGUeX6Y9Q)fn&b5>#Cd` zf%(PC_wDdA>UZN5Zm`bVA8$?a>5X4qRdyf`L}9v|24v_6%RE{XcNhst}LhA zf+8hrN)5MvP$SNd&B<%(A*3N%HK7l8_Xkm0W6{JRv97o2k*AYmGowFeiJd=^Q>Frg zPf$!Pv87rGgu;?S${FMLDbOk_IPf@ZKpdp$5S@Bqw_YA3ch#d+DOvNGUUX84=ns^~ zkO?SH5_4gl|IKySt>kbs_|3ARdLK~5dB4W(_My)DBI(}jPJ%0b4p^##!}G* zWH>(`u2HHjF@xS9bJRq2tm{2m`26CGhWoOUVFtL~K;3{=4myO>?j%RH)0xmNl%04h zu{*)7BB`wKE50i(Mw@Kak=rMG3fS__`#_NHKrLcDb&vs-D}mLjC>MhL#%qC*M<|zu>Xl#N>DrPzg=gpiy^=g=sG_&kndlR2c(B9T^oO<^2^GYCC!I z#^0#eWN1A=nb0eONEGkTzR@WR_%I0z^N@l0i-ma!nDj)7Zr(-Fm)WAcUh>- zFZOCBa0>sTxJ2<221G8DlA#MshUeJ~?^c9Uc#{`@IPp_V{21cXrLmsEi-^)cUVq@d zN=vWs0wqZlkMmLnN!j$x{xqjZDf=0i(=5y(7ADv+4uk>jMCfQHwAqYWaX^ty;dgzQ zN(-~=eZf3pVP5;#!0hkClvfcG)RB#fQ1T!W_>oDigZZ!aQnWj`LxfEX-4;T?;JC zEf(e*KFskJCSzbGTbLFLvr7;4;UO00qW&7!3JWvI!o20f6k3>324;|j`L>1W_F>RY zQoHstFz%hE?R#06Klm^&T9}VNQM;b7F#p_U+J3zcBg#rXd+(?E+-_mIEX+I~<_-%} zWXAnU3-b#LGsTBlW?>Sp%9>_j7Fw7Se3*+Z%xinAtdSPxGz)Wx4>QHWobgZPQ(|E% zElfWj#>l*rp?yqQAN=05z1YIMtB3lz%;sb9XN`qPZ8dFw%7+d|KZ?iCWSeP4qn2i=@@O!HBnHJ_M3v-zd(`jLn?+B*K!klhl&hTN_pR26) z0`<=j3v;Z6Imw5)-onf_Fk63T+CJFA9OlF5hF0=9?Jbq{jD^{vU9D5t--kKV!jv1z zbSE&WxI%ggcL3-Sr%!UPALU*@%)Ne)drjqD-_56O9_xfP&^)I>CdvmXU%)S00_xk(X>u++ecX+Rc zSl`YE192CRnJfGC%Y=IVC1#_gIQU@UO$wCL-x?s6S_p>gw>gM;J_OEqL;qtS0)b4Z z-9l87N0WsJwBT&A_$WrrojHv`bPA6qLd&%L^Ui&Zb?ukmfj>(Y-?xMJ8+m``nRsGM z(F$>8@#<*NyaQG+`g!w9Oh~Nyg?ashKa~YzZV#0F;RmSPwSRW*{Go^gzB^F%JB33@ z)i7ho@_1lX<}HFdAlIu?i=`=)EIgL^Km`i-0uS|kkNK+SUh~=Xl|#dhLD+8n$}*`|#uPhWT~BR)%5w ze}Tz(@dJSUy1aVF1%W+)-%x%s>NuL;@%&EaSI=)Ezp4Dr;rD%h7xP1Ql3B!WDZd-| z{gmHr{C>~x&;0(z?{R)T{8ZNSJYVtN_5B9#?|I)J_6qM^um8W_w^I-Qe9F_Ssety2 zrLR3w6Q&38Sdpk6#!xK2#%0^!NNG<*!ZlB227&Jgc3WCA*j6=OkKXLkqxj+z0e3IU zDa-Ks(&%YMLVwb$Oh|kB)RYNrc)x$%;iS~HWr%C1=Db}eDadZ)R?fx^V-ohThYGVLEANC;WRvsI zqUM4K`Djb_3N&qBwm)&MB8^?J;n8b8`bMlPeW-JAJqc;c4I|0ks%IEgtER`1w5Zdj z*|SFVm@ofN1n~9f?8Bz8wLcJOIJ22BCsHWW6rPl#CNSpxbXZ}}qzc_bkI*1^CrLy2 zP=33~Yt}GQ(r48fvz7kcz0n&Iv^5nd7nbciGtGk$Weq(~TXb!N4p)JR)@eE!ibPik zZFJf<2LTqH5fRno)MUDPXByg+ftG!>l_`$RsGAk*+T1S|U?ZBSW8eAUG6Tw%DlyFK zN~B_>R-fucThj>pN{!8F%5)k+L@f|QbOeXWI;GI^{b~}k3ex*UjT4jfK$-LOk3LGZ zNK$;fY72G-FObDn%IsauSU=|~f`d#1PQi`^BHIqq1}iNw5GUT=Kd-H|DX)2$-!7hE z#@esgn@9?fJFSrZSSHj$hHb5rz7AY`MAWP+nNS_zGAXNSYdz)b(%2$26*HlINmJR` z)_Q8*quO}{Yg{A}2gLCkr2E@q$&Ru%p1Ra?uAae~9jNJK?I{J@GF(G0sNmoS%C6%% z6Wv^WACQLtnncdW=@C}Gq8R1V4{2K_bkcix(C;XdKE~tP(dzD&;BMwEg+^E&wfGjbkQrT-rvN`?8i(Uyp;}R5!mLr_ z%CQAV7QgTvYM2b2F;<72T!_rQaZ}B~JNG;1k!G}^SbpQh4I_0xyaZu;u1-0gHJ|wxBq^DB}Q|FGd2b3km zQN3E1fV>kx{?o6a|l)Utg+ z!2vBygB;ONrZo_Sku{QHR#6Mh()$UGt`OlAJyavo|6_WypDNuvoWe7qV*sWmHJTu$ zI-7Z)Vhy)rS)H5eYSI*2_$tAs<-(vvh_}{qu^8!0iQPobA?nUG#{DJ z0SfAJOYlJ>g0r~Wpf6Kto!ZP)`UyrUQWD>jAwZ&d1<5r9o5q6%cEaSftOPS!9?)W{ zL86OloR6@Ft>x5ZnGWNq(N7ql*y64Qv?$iTLXW)Wz1?vKL!?cZGk0suxxS6$sab+a z7WY4ml9HjPM~fWi6+(_*n#8p#$Nw;U=qY(?gR@TM(!XdF=!oI~3S4eBhE{)s!?WkO zdgil>#7W`=joUt+U_v4bj*A__V1UaajllPuvl}vRim&qjNgll-)@UTXN|@-lZoSnnL`| zN3!GWVGYd;4KBS$Jiy;L^DDlH zqc}x5GY29*@3zUkzh_UY#1(ty-Iz}O@LZHQdoBYTTfE95#DtP~Vz3UfH0R1$JnWib z7mR3TUt^C}M-6BjN&$4}1emwA&FGy)(TyThCcn_E>FEQ#`$1Sj+q(jzV&%c)uZVLd z%#y_YxKD6;1$a_HJ?TGa!AZ=C#hmRrCjxWbn|^F2dmt_F?P{%w-|1eVh=9w1Ve%3c zHe*LDaTy&0zoBdOt}8P`1WvE|i*OoaqR*_oqXt#0182bEfpu(2@8uC1H3Nej^>wC6 zkJ(~4tK5%pi44iQek!FznW$z(#f}{6V>Td}rjpc$mYSX@92OlLMx_3ri!J>t{>+u1 zOcTv>xxjed?mh42nXQX*J~0#e7L_pPWiVcYk-NRtKX3GBoOuL0uBNb=x(&Kt%YJRG zHF-EB;dspb0iLIDKyZ*(L8i|%5Q(D_R9n@@<4I;{K_ywGbl(h%R3u;*c+q4jfAqnn z&)k_$?g^Lv^FE+262%e+I?PYzXax=2Z7bj{`1?`aY3}RP-Cqk+zv|r^c4W-K*f8q7 zq;o;Fj*cU0(Ko0t9)!IHSFSg01qB#XIZe@!nuJ^bp@a*c$%OXjZM4{m=7_KbT38_c zkHmLC5VM4xDsI}VcG>)g? z5vpj0*5b>6OA8{IP=s1QmS{zu2vfQw6S_(pXj7x~a_uDh;H7EAQ6zF!`$&1#w?N8Q z7aZMuU=(eKUMT5&CVV_cWYmV*1F)u|)Of;>yHb$pfndi8e5bEvF5k*Ze=Vf*SORu> zPrd6`2lwT_@9DYYzr^n;P4BQDAyW~}g}aJXkHg8vjh!nf7R8~uUeY;lzl%MMIVFtP zE$*79JbKKAKAv2N>gwsWI$JJ}K0*$Q();C9SeA=%h~233zt)&_kjVh=4V6yU8hb#+ zmt)LssMjVlXsytpO-Kz|zJ)wMJk$o0UOE{%FRt8@%bxo-7OU2a8iHfL(CD#mifS`e zyNOYI(jT?oAIhk0X^o(&9m5r8uwy1^V#8j!?9dnv#M)QY!n^2f^TRHYtkzg+0`YeL z=ChKiQ3O?XF4?lMKj*OQ@zGqkxodQZSmhg6S==rSztA$oscU8}sWnT{NAAI=GS-Jd zUh~oiwYN?Vv}k8gWKcd6x|3{RQK4^ik7qb>9VTB|N+TX4eYU3;=dX{x{HNS#=yWJw>Id|J&Se?V)Czuda z4U2aYB;m#n$B0iskH_~dq&Bf~Ez_OO1>EJa46(2;Pm{8qVNyJG??Es!YKHr&hAugA zxqBlGAorh}+&^+JrOs$SwIOC%f#IfJGoi;`(ez%lPBN(K!~ltag6%s3i@q&ADXp9m z{zL^t6O8c3>Q@)KWu_~4x(Au(Huv9Zrx6B8?XN$fc0{t{VY~+E!l(9y&sZ~!^vUF# z47H9FGxe&NsiiUYw#nAzEC--?qqCL!&jZLiR_5Wxb#b?4%C=el4G_PhQUieU5FlHg zuZ{YAw!ABBdHb01(38n?4>0B3X7W{+ox?4nsN?jTCkqj`)>Q9}V^lrP^734_Uez04 zYqSuyx^KcvfG(YFi>M!}<{RA)Ay~1*{7!4n=y{0pD&{?`yv>eXwq|dhWQuAwMfGRv z;a){ipuVVdTWgf1)b=fo^b(Yz3E=r4P<|B*(&TQku#(R5s!0!VKJGlXY|=v=>sv-J zquRj4RZQBp)`w*zPJq~pBR$5+kbz9-+`ntL_OO|2<>I=-n7XK_ie5TdvBY9^SN4Dc zd|dp2+;>ukbx(SAuuk(?W=6DWS|kfUeOV10y`4wL`dF|Qo~VH;+*GD`EkPqP2e5K3 zQ$}`YtCd+(_MpLh#?rXS>9kLUEexva><|ji*(h>a zKaE)tgG$2Z5M$}8*0BoH#`+SX=mbU8N6a%BI_uws%(A`s65uN><_cEL!ZRYmoY2p| zty#E^c=x;-?2eN2n_|iNMck&n*F$G2^g1{~wODC(jWTJzZ_>P=*zb@g=6sG~(X^F( zcS3HtzgU-Le}Gn*bl#pOSmuVbIigLzsk<1ZQX-^33db0ODzZ2bsIMwwD~Oc1qCBs} zJi~fEl%H1=iLOu+qbu23fm}0}QX>aVRqdj=qHI34#Ph?IYt10ghlZ0n&;oG=5SmFU zkWp*y(~Tmm^%S`i(tQ>Y>BG?XT4t7!>y7ep@t_wA={M~eU9M?{w`Q{;6L9e6%-;)d zFs0X6wm*@*{LQCI_Xkqyb^o)k{J#Bz1qKPUkCZXbhg~$o5*Z}(r?dMy_6x9)ev^Zo zNIY@)RoAf7OpHE`NBUgp=l-V-?eBFcTRI%dd|hAW_32AFUXarcb>x|mPkRC_tW_LT za6x%!-4gNBEr-BQ)0H5@5a-F!2QYJ+2d3_!k*bfF*g5ROFwsf`3?X;DeaI=IC{8Mx zc_mdZ>JoZ^MsPc4$}N|QRkHZe=j~M8sofs<4j=0tY~~c1wRca`w&FtVO>wUSPJ}5D zI8+5ih49my*-snC^dLh0(Ru8*{frr?hNiFcy2W4qlVVyHr(ettjd_6|z^cpg16vJ0 zAP2KyqaEDfYRN8i-8d~t&c73M?TjT3zN-Tn%Zq$$Hh*`xvrH8xu5iz>FZU`LY}-~E zEcI#o^_ITu@s3oMj{%k%Q2vfA@z*!@2u6a7dzy+suGvpntai^_7BFi_m6yn~6`{WF zU`yI1G184;$5!ZHS93P@k1d z1uezULVe!0uYq@2ne=(U7BB1T$kn~q27ZX*kSXuYg&hN3M3&g0j?w;q0TTGa*VdbY zA6mmBShI#qUVGNSYjV!9Iecy_7x}lypQ+qwipX`|Oqy!P(b8*rILwrCzcW{K2^qjD z_b-yI+Z1P~y7$)AhS^2lCN+Qi$cx)QnAYe#t9vvPg{MA7OYPh=#vfRfkRL>gfhorh zK?uoI&{dQ%i;{+7Y;=D>S*)<}aKeku; znO&=jW-@%-tI8iw-jmB@c%MwX^q)MGD?j)YiAN|giV29a@_N-^%WYmm{2F-a|Jo~k zEcle6n98Bt@(I0ixVvu-p1ldX8FO8(Y(Or^6hM)BU^#2y^Y6$T-dt`$jv|a zfhg$eY#n|%(saVF56^bOcU6ZCUsDJ8rVYL7FuYG4a`VCW^z;6TY$sI26R3ZmQ6d4Z zKMDui3LKWJz+1Ff!@wXq>~jBr9rGt9Ll!|aGZlCeVL0G+wD~jju-RL|O zci{ITMgHt~<{4ed*PM?PlBsKTw4`P4o~TJpSR7)NY$ExjqUf~+c}j&fpHc*flUe^H z%3Kv||12=S$V)~>freyLKP4Iy{98d@*XEMonrwmpA$|Vt=_PN$UoIzuxwIlled|m4 zF;o74`Cq9vQ)3eM1H%&Z&SHw`z``2_c^z0#xi-zE&hwzar_ePo#D<|zvors)L*j|O z9fc=E(U>=0u8lpf7lQ9SVj44qzU9?t1=R-YsI*pNeHNil+RaG?@6xZ?s0 zK^KrMZ}rrhp^69o6(6>%(K)HXxeVK-t>Ron$5|zyhLTLYdi!O5K(PrJw!P6g9(P9cn9*djJ+@naf#xNZ zoekCN5I{Es$E*`lInmNAKC`}1?H6Lsy4dzN=a$8Te_q=dSTpaNX43(~+KG*#d&4xQ zID=Qnz?83ct2(mcGV$+9->`TGjMbv~gT$9Ds$3u4zEzeF@#;16${T}!?$VxMU(t@Z zm({)|D`oy&8`APGcXN9#U(FT$Gdq&h&rZoVvv)WBFv^C11>JC?M&CEGdDH&=??)RN zehJF)(G~xruAVcJ2J~QVii~-E!}fne@$nBO8a8bErAl%~iAi#jNithWMkz_+9&@G@ zAC@*yQ!P}ffx1voAwgB!*ijHQ*3Zw_GDKHgq}c7pAZiF~i4FTCc=h`PTx&1iYgqgR z=cRdcmLBS?e;YHA>L+1x+?ew*T6kFKycP?NeJxh~c`R7}MlA4g$J*v|vCNHae>>QA zADOXeGz9;w8?B5u1*zB?_g&6S2?%y9Hvss1`LuZsP&63M2?D*{JQ0(YsuGQ(TKqH1m-PCD%2^7q7 z7iRxhE>a#JHKqt9z6AgGa+mI&AdBukKb*J(;t%&xy$c2+9vssR?&zv7lRRdUx0Il~ zS-mUx(=M~u2#z&gxOx?B8j+KCv0Ba}!%K?h9b#nFFdTTe-#4D9roYtl+YqHt%08S3 zdGt+l_1*v$i_Kda0?g)<%w^$6O)P3~CKRPNs(>85vvy?W((zXy!|?>m=6OZqlOsmN zoqu8V*?KU~<-x~bj5fND-fzh*&RDt9p!#3)-fM8c_wBr1dN|Ks^chZWqnotwEx>c9 zTJ?wX-VSD}JVtqO*!R^L*so;_MKh@+##fbN2dJP}8m4Qvh8e9S9&nP}DI zybKCI?VWT~v?SWi=HcGJ>OLmewtuaFHA2qtP;RN=*U;`-K#zB793M0yC=_uW{0Sus z4*%_ddv@{j9V{!h*4 zp2`pOEq}s)FP{a8W`SNp{T*69*qZI{-Xz;>jt1SkO%|Tk@h|xhR_6X$`3k;1+PikR ziwtZISpc*6(zkzCu=WXalXLz4HRezbXI)Oc`WIe3)w4O`m?&xoWkNCi9mq%xOV6DLwg_$zh{fu?{cuIKLM;;Mv~)@x<2xu{Xzt^Q}p_;Zi-fBVzj>%Ul)%+>!b`?-hu?}oIu zn4G?*{ws{Gh9}BM-|)5d@4cTlD@=0I=4*|=N0*CGclc;xwr?KMT5HR9sry#$N!XF4 zTBq)?R7-pT{bf8$#1UBKW`j?!4Ttz#EE(Ml*>>^ivBMOg#rf{E`l*iG>&U%TxmUSA z`5x#K*g@Ft1j5n>H*`5CrN|_b#Y6roY3M5VZ7!^Ooew(X=`QMA9i0_=x5OJ zCyb*)SLjn(X0JY={0!f)++>M9;WqcLpD1_ykDKQP;j$GG*!o!d?+!I|Xn=pd)Lmb~ zR%L!^Z!(u#kA1)G_MjN{GmftI1|dbFu>W0Iv|1pEnbx`l2ODK;Sf~w;+ExfeGV}^7 zL3G6tq;j7c2D1n=HJlR|)0EH=SU71NEQR}JDtQW6)0sQ>W4k1=n(^#8jakDNYB%z& z5;Lk!lGZe78lK7IL3`>L6194X@KVO<6SHqmiHt+K>F(j0bExW@_D~SoZ=VJ`{y-XY zQjRKVu9CTm0EBpRGf!2UAj=2sik6Y8WMxbRD#Bj z!>fk&`l3L33>V%+#anG{NDPoqX-0tBu8~BeMO5#No@^$&L3nxe(}iV-F&5|`>{RR! zm?n##XrmMU!{!te_3+d8U*`{fEOF2p-H)uj#*%z9^#2&3p+AS*+~<$f0B>|*0ywTO z;kvZ8s&8XEk_){gK0dksmpXq=t0Ir^R}de9md*G*;z zhp~RB#mjS&$+KmzZjAp;hA}A_qM=1UwV${q4~E;){A}jDmbsAEAzk`;9njK_)b1w(Oelxq;t<#$+P`Fi*IR7`O{vgYE@PXZ-e$ zY)oE-ca>WFiGIqlXG^%Dr`AZrqdJBa=JX3*-NPH#-(2~5VIKDz$#p{FpdGgGa-h2F_#_wYpusw-j(VFQNP09eL)kxS6FC(tnJs-oc4 ztBE9))d z_cp%e5hd@-!1(?|yd6t>cj?2NF6TYElRxQwXD;tp-;7|4JsjPgM|TGwJfQ8f!&}_o zgA)Tt5Z(zsSlpgx_tkm!nBv?tyZ+f#) z{ZFs_%+fwUW3a);k!};FO<2(V!Je|sk}OcAm$X>tRe?SonxmI{xyy|{EPI5d_NBya zHP!Go3zzVb-OoLTTK;m6>EOs4yzMt!M4V%moo>BJCZ4LdsKV6A$_otbj5%C_rvsS{ z*zkEwXvD0|bSmmQQu(Yx86t2#YPH<%(5B$rX{@DB`U?#*hXCA%V>upfX@DL$I~`6< zJ5fl8$xbYutYcibRnB#P0*eWX{zZ#hM2p*HOT=_)zQxP|XikV|*Rv)M-4cZ(a&?WV zt`Su#TWR+qba_B8Oy4KVhy^|a3d1cQAk(USP1Ggg7$TD7c>GLQsSQyV)fGaCvw_I6 zBv{?&&^h#gDvSaI++5c~BHWqKUEgQIlx0E}{EyLPS%s<;^DOjdv#N_VUH+CZvA?XU z)K0d7C@GAeNnWOZ?Dr_|+g$ZK2U|Pa4^7^>>f=Wy^aBBU2kf!T;Xj(uUo;?#zwV8~ zhGgh%~q6h++u^AAO!|B_fb!8jvQf_<{f)LknH{>6AGLsc+Qd!KH9u>Jp^UV z=!8XF@j4u8qb*_9*+~{0o+hl{~ zPf1}Fgv}y|kK(5uP#8=j_`+pCFSwHyid4|Hjcy&U=^^yrx5WrJJ!Tno!{!4FxKh{+ z7NI~8bJ%&*lucW*rFlO$i1s+S?Y;Q9ya*b5#KQKX;zSlOmjj6~(|^HQq4ls{s*r|0u%1YnshmxK=6YBt z^{aK{lq~$wZ_sgDNyG4W#L>SQoYlMWW3zP7n<%{IRt>{uui4h(&vX-BNP`{kl7;hh z$NCjR*>FF8Ab-%P8FoF)j)th1$rb@=J#@$Gp$(!+B6zHTjG3QzNy{%P?Ffr9T>zL+hK-_O)|r!&_0vh1c<%yw0$5|%<{7I@i`3u}>H3vIc$|e5CGLeJWVyLlyVEq?M&RDbl^;vAe@YGRM)nK~)WAN9U zpDq4CylkWM4C9dKFxSGw5}`+K(OA3{b8a#u#$Pjny{wFulT6=j=4nilyse}$Q;Nt; z3BKQ&ZvtcJ-7=nX$vZgOeqvd_mc1KTu#lQ@R~b{ic_-`m2TY$OU$GN6eiZZ-SxI99q9d@~mE z=0hrNrJapBlVBxnR=Pzg&n#B4-}m zkAV5XXiq_zYDShVN2V)sV887R77-X&V5~|9N~^kqj|OJ|R#?_&XD8p9j{UEaX)~K? z4Y}P+3rUrp08>n7daW>|4}J4dM6UE2oR^Tf(36s6Flm4EQ*YARwdnsDqTFoiv$pww zXrdM))_%>?K#-Qb8j`gIx>9!rWE~70l*DV3!b32su;p)*{h`Wz&Qftid|! z`yIYj4Na&iTL9}OloP^!4TeqDssV{{dmwvAog6$pcsnuC% zUV6BPTR=2?1wy!$E)uN%X-E0mo1&~c-IsZq+VsY{S9im@<(K!yy52{VIfB$1-&QOb z%UXLasj!pfzApb*@41?5?4iOVCUB6hYtkhFQHtKBl{m zOaN`FcLc9FjOue&z%-LiaK- zX~d5H_sx9A64#Y!z(vif7TD!>@e@LrKKz9`e408^mEw`NQXdcbUDf)!y0*WpUXh3{ zv|V<3W4`QQYtBBC+5XXi@M6isS0g7z8)I|&%>R<(2%96}zcD$^T>7V{J`FU+u zR%MjqWc+!N<8iCSp4MzmtpJAabIqBghInJ#mVX`@ys70sc~A{nJ6wN`4S@KeX*u?6 zxiKMpi+zQ5J10ZBL?&b;GNEWs(jiH*s%;fjuU+QkW*-g|kQMy^p~W0zMFnW1>~!-D z)JAu_t<6}vICU-{gukXck{!i-b zyk-W;)YqKU?6JP58mNu#&&Q}TrDU8uvoz3hL+Y0>RXO^S-7m)4b-U{km0$5kjtq9t z4)=WZjN~|@T8rkrPmj7E{X^A|ECQiI>K(q6E9bwt%y|<();7B3_x-tdXW+Gkb9hNz z!yN4{JXc|Gl#A{{5LIggqJ>ikgW(Hyd{47E8ERvTVfLzxQ?ynUp5(`mQhcKL2=mPr z;vFGYG86$m6AD}41AX9qEbvZ=gtg!3w!nY+t$;s1&E))V6G_Q$Dl$=Q{2dDTP7A!R z0q(ZI&-=g+Sm4|IoUgUO%kEIlw^-mm_`pjo@H`9LJeT_J|0@B`wSbNVY(9_T8$F;I z0A2m0fW`xqo`Pq^lZetkMDHi?d3^5kC_XE4p9k?dEcaQ==V95;Wrc75mWGQXMpePF z@^X6q$DQeSdJkZ){RpeeW7m_$?&Er?oF@)`U3tml&=|VfEn-55et$|W+22lf_y9r5Pl7z9f@)qKTyixpT(djEY*CSCQV&XP{yxl%1X3ex-q~!C&}2fN{KgpC z)N$t?_BRv7jpFp=Rli*Ktc^M~=xOAVHB^>Xv9AM$OfQH#qc@Va65jap^uWqj)1#;m z9;{zAyT4B-QMQ`m34Pw>TSq~AL9W=xn3{RFJN}#!1Zp-;b8u*6GWffZlA>6-{Q7N9(}b5#6qz4!&r zJ!NeK!B~h#H@S3_-O8)}0eGDO#K)RG*&Bsd=JN(SfGCgi8)7lu+WGTBv-`bGKhgqO!}<^_rIvH#?S@n-bdLES+r#$U49 z%bpW0&8HM0NHO+ss;6hc4PRgb!zR$oerrr=hLr`s9*<+@EU=SmSb?ceg$;dQVAb8Z zhRL73bAx{?EWD$@ILEm#QTXZY1#-4Ci_lMamCKy-6NT^E(CIOYD;z6)atEcigxq(H z-cjLue42^;Cgl?Sx{033qW-dC$VFowBT_gK@t#%Qv%-6pd(W_*T0v*sAE5uu96vU$ zAqaN-gebfmQpVLPBe>*u2DY%}|E8Sjg*Q$mMiLJMu^dK>yjhFC-T>t{5i{bir$N%HQP!zf9{+Uxoyb3SV) zFGzll;|-8MW4%rjk7asMy%TZEJ^C7?L~mbdW+)b}zSJS-^JF<4WxS)rR(v*aP@XW= z9~cx}`A8I&ONP#1Er_isL??}0`LsDPAD8jz0dBudfVoN7B)L({m|L3(^St7d$Ihb* z7_=qrCVSaavF%%k+<2+t6UW}mBNN)2StQY^k;NHYP&31%A-L-yMi~iHA%8W)Uu0N@ zcNZo}$vJZFV&%q*WK*#CiB8}oA=k-5Bz-)U*vm|{*O=Li<8efrEygN$Aa_}tV-fmR zLqp|^9DcQ`lPuoKpi0j4z$?29KQm=T6CL7)D91V{dUz>tma4{xK{RqA>-CqvBy`DI z+&v_V_o4$`i6>|VE9+ZCAuat_Re*4v=$^ihqI45eaLHc??Yq1Ae7&h3615YZ{QyX0{+MGiY*0mCoo}k81Daiu;1d-YtiA*AztZ z(%<0T1OVYIE=G`RU|E*kQ$qMBqJFfX6@1sC9C2SWS8dmEuvPpGHIbgtF&*~T1YHMG z!dF6ox@Y@44)s=VeZxeca_y*o!P`8g)y6KLFnLRuf1c5|6Fz-`POuAA%#jwG?;e2j zGIJ08$d7{;N6WFG&R)rAr78Pn68$XYgcV01-> zez^`)znvt50Agu`HaC)oQ;U~be!XpZIpM3^0*_-%ztZ3G zF7L0?qlTugE!*_=ohUtCh-%qQiNu2%fwWe+o^<2CF`lAnpl!*Gr8CNr{+*l zpKBz>hN%j?M!h90V@K*UIQTeX?2?lh4{on*&W||7GV^Uthq%=<^ReorY7-;fE2LH)7TzkQrdA=I#7Yt>|C-;UCN)non0Bes+D>UDF!Y$qzv8#ld%JStQ2An+*C<$9i_!JDu;{3t(tzuD!a@1`@T^VcbEdFyvA z%hCY5sOF>HlzIf^@7(TG_KmDS%Pis6${p-jO$XKBzc3LUQ4{FQk5=SIspy`UY|O;2 zzY6%u&YJ2~SM4W%i0xfP=`(Tyzv%XLHGx$N&L+nZf(ZgplCIA7j~8DP$EIqX=c4WJvRr0bhDLRSBi+pBQ6iL_ z2(LQP6{Spc_n2MslKM_dK|H}qtJPT}5BEOJurzv$i>IsN{8UVW(Y2A?)$FLVCA$4J z#DHa0>7hRUFgi7;{cLo9)EoBX8s~j6?E?`q!t-&S%`Hr-)4C<=Taf8JQnrp!VI|+n zUr;(CW>7)QrPp}W%Fp3?UT7<_8?{zYm7fk<6I}KP;hOnW++xJt1SBpfPfQvSct3wq zMgAlYA2xX`oOyz{n>bUhUKPCl3gDep)$d=0ei@_D2OqY-9C&|0YvO_tMDIsrNqTe+ zS->9?e}3YE3NOAieehS~$B{4$ikS7;;KM-bM~XYrH}pEhUpL)yy}KXclX^F7!FxUBud4Nw znq(wUrYWl4CNp&I{4@H}j=ua;a2+ z8>8)SeSrcM{BR=PUY3ENCaBoI4A@?0O1+t&7tdFj1YDg_5G+`?J{Ct4Hea-QmX ze`w&T7d~^Q42jKH#Ua#c$p1 z&+S1+TFvS)?yw^D;|0Mv8KT zD_@0naBCmBTgY6sHl41si!h?i<)S1pvz6Xtlw(e2V}Z2eG@x}ZCJb$P74hehVA#G~ z;{x$IeM^>jUAB`M1A)6HmbjuQ-A0BY1V+`Z{VYwU4Q%zK>Xy|J(fL7EF5q5|<(Tx0 za%vn))-M>3DVln4^vBWQ#gYH8DQsw8U^az3&8Cp2*%Vf>UE1g`HF(> zZuA}7VkY7+x35BvWlM00Xk(=ghFgjn zW;{Xn_EbgNzkpW0%Q(ik6SHL~3~(fm%O2Yo6+vH{2XG4BYXSg7c*{To6%54A zN0Dp|288M7dKVvoaGym<%p!Y6gQyvIzpt5jhO%1*ZS?A=uH582zx|cKE5T*&uv<;k zj(7};lNY@&P~CH7Is4q6;Id8BGErOc7-T1p(0y$vu8G(Ru6>N{Ar5Ch8kacpWm{Ow zEj4J1j!V=$$@c;k{u2=~jiEn{u_R)Oo*D_3j4cWd9$Uh9Io~73B_=P{j)>wvU?Vzs!bT+$HkzlOcuD!N=TpCDGRKqS zBek%1uT*{-b+)SQ8kS(kbyUskgvGp$OT=G>Lr2G41IzxlsoXiWg7HdV!@QksDL4%9cm5C-e)~1p~Q-#w6$19fHLu85UiH84dBJ+_>6T8`1 z#B{syZp_4a>dM30yEzxxiZa&VTGYDtQsq;%AViJRIVKTbQXY7o!^8Ltm+EdQs!i4g z7+eN3F_y6z8>6en7JVFCG!}*%3p{6R1?}CUs7OqPfmqtX9Wa{ofZ7GvCB$AzE%BOx zhl0c;TFr2xY)Pz!K5=PP{;4DKPp!y5m9g3-?!gX~c^YnFj5B#jxjP&)eASBHW!iq9 z)}l)jpu@J{FC+fP5e(=b%egZnuxNn5q$<2tu~l0Bf*s;!6t2y1u;VD3yq^F{l)OU8 zM{wn8@cOHPtXylh{;U**W{(8ofn0``gKc&X`E}UV&|du&WMeq8TA#Bs^*QVafu5*EP@k@vE1~A zHvFKSHA}+8F-NLW2k@dhn4J$(-!frjfM`L83u@Mu3N=q-LK?&cFQbZ$S+uSV3$0HZ z>BqXiU^f84%&#raudT?hWjwDk%a(|{m1SOKmMy2|HgNKbz@iCg7O-jF?DI&;@ziSa z^Ho~pk3u&0MmfHf6V0zsmFDLmdp|9ACf`slsvy57?VlI4JZsKBVly_>BxlR7+8d_B zp@JX!RPfJsERf9Pwd~j6df#?W^=-47m7h07C-Ba%akV2V;h(2|Kh!ZaZI!_;8& zB`UA4e7;yT_vDPhH0Jom8Sm`Y-wlYN1M)o{SDV&04*?C|gWf#>_V#OeGx~_~W-X=S zJ*ML61A6D64G2`6J~>%}MF!#OSoMOUW|zMu&HJKBUA=(KF9dm8e)?tb!OY6^(`wpa zn$}<$tW*P7Wwy1xKKwMcc-G|j4;N=yt0sEg*zc77t5BTJIqzgSpDVZacSN7xH$5d@x-5{#ytouh$ISvEt7fv{&oHU_{jCnZMJFZ?k8E?|MyFOn8Z`|1sl0 z?l@#Z#;t>QGZuUtyDiVV+<`=jYx@jF%EqVmN14;^+C6;`dK&EcyQ=anj6!7hu+^Qb zLy$z_#txZrYhNf%%sBWrJehG2;GIWf^j_m&QEA!FhOj&NZ=i*A!N-T)s_zONP|M+c z1n*0>hz0~}o|hXLEy=@baI9seE_e27_qv0X zmwYFCL8;3Lv2D>`?|k9!O!Bb%c%^`4?3O)G@bzDwclVvZSq3#shR$5BG^xq%J3@ zv&{zm(*|LO9xC&o))Qn^#Csd<kAO|kwq-*Hk)J; zkWC1?-?ty27$0ZY4=5cUjrJpKZLIuJ%MDM~UIp9n=MW195@QOSD8-B`a-(Htw2F{g zm$)PC2W;I$t+dSp+`|ZAE$%b}ik#gYY(c2s#Bx`PyTnk7i52elZ z@hLGpM16!O>)}_;qn=3(q~m(kcenjO%(z$@14~qccr!5%N#HyxFvd*s2rgYpnQ88P z%7aTKUT*Q_dOH$WS_WKOq_9QbI)XfF_Vmn3_7;KgLkgo z?VsBhV$3{{0NH0G>wZ&B5N znD;i3CGPOuau}Y=p~j?Vu5WS+a_LX+m41NHwK4T!s@sZ%-6J0o8wN3_f=?f+k^Gnf z)sgv+ik{&zw$nZAUbz3@gUA!&$VM{Y*;QV=7$Z> zg^l#XST_A~!+sbWDnD$HAEpJ|YugSG(X^NAQT(uX{IH{QVe1IP7g3d#7~SfA@B-6o z?h1uNO4cFB(p)rilT-PMxG$f~YL8{CAD3=ITqzZuOyQy)UpCmb)3l9Q5?b z@QOYe?r>iu*`~P>?fK9+Nbs8$^ma8_!+=`SVh&wRg`=v9* zLM0=mG^4U4I2)RG!;S0WT!(W-X=PAub^U(-$N%y7@sOR*_xt&NZr`8x{rmm#?z~=)rc_kbza@9?Uc03MEVNJEFIS$_~r4-Su1cJJs$AYMU0-$&-3_2d=*$pZ6428T7{oRMcA8Wx4CriM{8p5q#4IrNNXy-_gIvVhs}6(hXM z^>M48cuK$v!!W`twNC*ab#@g@x}KhDpIZ4Sew9(XjPQC+H!Z;Wn7R@!sr#yZn(sfA zx`C(9*{6m6Q^TH&@V*b0U<|(Kn`Ty7NV9))Y@Bw*&FM9qZ7iMB%o@UsuozlH^F4pX zAtH~=U}Z5nO?RZs)d9cqF}g{d8F@f>g!ueFn*fKKt@TzPiLLx9*u_xzJF2vX)4j7V zq%pE4*wQdtA|nQD=aiBBkG|F)IX0i^4R?^D#6CDHZ9JU2T|kH z6t0?M&Or)h{CIEavg3oVR3NdnreUESB)2yBYH6K0R-y|Sly&K{>q@v{oeCH ztF;&z*!$^})GX8S+}9fockHFUi+)f$!yFQW8y1K)fICeuDy;7JfjA!KGr?jnW(({G zg}ZHmlS<)sTc|LFFWN$}DO_s{oQkQ%W*Vn!)aRR7U@B*4lIF>F^gwzu*vlm*&cD@S5fJTPqHe!J?hOEsqxQY{JV3> zKsMRkHT~>M*D{bC1tm>`p(qNX4P^Z4O;%h|OECrkf$Q`3S>9ZdT z-(Jij6BcKKF~Jxk2>0{7HS4wGfE~G&oVeMIc+R72#TB7@1!)(zJRnF*vbwK4N;Lh& zYk3TCZTGqXES<&BvFOFiEs!MzWJv>LZ@g-N>{eVUeIWbJ4uI_45BByhH$c{~n$FCvq2smmk{f|@RrJzFSyCZm+I^c?*a%H|b8z}mYi@7up-sSu@1 zvBIl2MTKR8h=PkezA%$p+QhG5AsEWXkPuJr0(Mwl{w@ByimZ2ECQAkzSrebi>RjJ0 zqWZ*jzGT?#m19RvC%F@Z75kg0Yk(00h}1{Ho<9#&WbYuW`ilf7y)`W{>N4#sVGvn2 zxWVUMbc*CM6(CHws~kO=Dk#@6pLg&*01X9@{hfIg%-pnm!&AK&}!nJ&HS?N@d%y04YN z*q*M)YR{{%1>5ZfwqUxoNV&UEj~edm%pr;=g|brPU+>K`Bn2{ho!Q{mbn@fZwdugU zWU+wXOblF~LU;IjG&gm>^mh7*X>Tki>#qtrw6wS)LyHN_@JxP0L=+@2dUM*mN5v&^ zfErqx)LYD?(>vn*8SqUGMt`q?i0fk~@43=v&Qcj7$pfF`r&=~+I@FR^JK|8wAl);( zuu1Pgos9%q=1M zp#zFn9{dcy|89?dD_#VN!QcC~UbaS0={|$A{C9KEb8iw-sFT~ybli7=v}>LdQg~C8 z=kBdg{?Os*Md4?W2zWX8tETe&L3Y$CQDSlZ+;zvIG z4StYSm&+!M;DZK599r8WtYB<~qNQ<4a0dNFrZ}&Ki&RNb$H~IOgnSjRN*{B4x)>01 zUBXG)hO4<1vT%rx7POI%Kg^K}oUn2~`lDWKgee_>cFcq*t-C@kb^<#_$V@3=ScG-k z%_2nBr7`0Ih_JVHWEz;*p%njM*&m%>&FGK_NW!@T=kGhnm_M8CF#bugxgg0ZiyLFp z=Q^>a^;%49I4Lq6EF0|B>i+BSV#AS!JNp7euyA4zFMIgw@z>*TCx1Kn+s5BE{w@v{ zPJ1X=_~}Q3g*Pk@p7vS(zvj{4Y3@V3Ukp+AaMn4VUP6SA6=gYqYBKF zoK}}BCEm>a`(+IEqMJG!Uc2%y_1?Qb7Svx&J6kp3YgNRVtIRx;+TW&n6RkX(cScYb zt2)c0V#9r%_R7KEZ8l51z%20>Xx}U9#D{0<;&5z8eCm=g%JTTsrToc{PkoR-!_xs_fars=8R>|lZiqzU&IH0UlEu>4vnStw1L6` zU&}lxiXhFfO3yioJ0FL;`RQDa5iuYYNqqZMGp8nSP!3X!$y~aQUtJY`ri!O-IXvDW z@?sxy0!Pq+)&SohzX~%(`5{clQ>$)ugWp(B5Wt%1TZ1pQVMxBZ>Q*OsFJRGARr{D0 zmT<+XY6-JQANx=^9%+0$7HLHLE1OtPVeRh8fcCO*{I=3Z!qD1B!??9P7G5sfEb_u= zsBsy=Y^9T9>*S9#DIOX7a%^+uj*>lRR|1sU+)X2`)s zH-KL&52fsb6XQ!Jv}r0{WqV2Il-!3WG*PN-4+mCM=gwMEH8J?)k_jt$6yCUkahswz z*NO4Q2`}=uI`&HC-jbIp_fF)~=Xj7ii(ZeJ!JEo2`<1)+8+)a?@|BXk{4+84!3mwJ zJ%iduH4RhQ^DAqlI6AyiUGj?RJ~rWX)zy5CYd!#Dg|qNP6Ay!nF7G=ZjkggTJcR)+ z=C3A3f~Hrh12puH3G#Br8>6vmV{15eEH$I0dK&-7ga^&rhbJuIZ*^s7?yP@Q1yOkkj+{Ou2Jj$*1`>Cd|u_=sZ%-;}@xY-bSe#c%q{8DuRo1zUt z;dj!8%3la7yD45?ky@9o1Mfs&TKhN~(V}9OE`WXo8ByBH#-}*ZD&2)vf8;nxf4epiB7Ni)m-mUsz0qhHSHgpZ+%+wM+T6gCHj@-S2H8E zl+b(CkjPd%`#D!Y5-$AsG8w|?O;Mw`&qYi6qW3D%kbEaL1_M9necaG_d;4g!<$oK% z31vun2D*3z<+KwD)SY4`5YKCtm63UHE6GMLUC|#l^9|)hzl1w%z&*TWGMFFN}oFfoH^IcvZZpvnDih!E?Cxr(OQ= z0MoPOD9rwm(GOP`{jg;?nARZUD}L^;&F;;F_Y5!pwRUf4`=FeL*8tLpTZo{k4&K7(- zn#}Y{ikcunOfN8RZ>pldUWQ*t-A@yVmqfVv!cE+Z9%FB=HIM3UnZ)?xjK2@G_INvg zC}`!}!=2mBmsa9auPD%_D9JgwZ8Sx@eLD;kx!x~G0; zg|qQh#5AA-=C!NGDJTl?a>l4Y>`492v8k6lQA0O{pMd8iQmcmZ({z*^!z)W#CX$m<_yRLw(}ub z-H0t1nVP@k<4^4{nTD)ipxe-^`5#JN53{fNe=0E^A-t751Y!ZIp`TBFAhyL$zJ{%4 z_Ner_dR*oieDeC<`Zf8?-0CIF)Da#UR$xMCJ>iD-)i#H@p;Ut1KId?|8)$_W$(xWE zZcq#BV83g4Qwve4yJ1ik_FITP{35=+;sxa>_0$hOvv1xhH(teMA8qrVWFxk-ri3UMUt91BfsNs3PN4yq(;!_Z&&hy}S-+Zbx0U7x8yxC7@k`{? z+qg#6IWE%ZOyhnj&RI))7de`EfJpqBe5c{^ z9NEY5u814g572ES(8OG8@KYjwYLMG-Bv2bz5njB`Y<{wEY4u{pNt^%|ETI*C!wH?j ztyQ!TiRZN?2j99BlvUYO6X*;Fze`rI4N;E3Ivnp%3Z+6pUf2>zctb`TV zjD8jMT$xvFl>Qm}>*F6&9jVMS7hnqheH))~9g&Y9{*T=gqROtgha^Y<{r7$^pdSK^ zdDUwL^m0BLzX$_r4tR1%8c&i5sUMz{iS(%lt#v+wCnZH*u$8Am_L!aSb6cC)RPLV2 zMvVr(-P~X}_{{JE=jJ1X&;IP0Th(Xz38!FvBr)~br>2+#G@B4NhJwWjQb2;YB2I zga2|h7N0G^&!9+XL+#(ghnfT2>=hs1F2=N@J9f;pvX0MNBf-gA-R9T0bYUH-2QcM0 z&AWxk7Aa@PQUywh@d( zmgBXw1aCpCPoe#&gXa&CDVQ$?>G{z-`+TjFD4Hqv%Oit=4>UOi?U6udie>T__u~He zEFUzyM)<6}Im|~sLOaDrXpZU^%**|3y+@8h!-ke(VYWFz;3 zP+!AFbTAvDxMYFc{*eum;q?v2x2C-Ls>G;Gyd}>p z_bJO~AQHe(boYKj%hzzyQSs`e!_lL{A6GHoaTCKouF(~x>ki+aEb#R^Y)PCOcw)m3 z%Zr8Vws+7>v$JvZVe^?NN$8XXKP0l|=Z4A5=9h@JMSa8>fMpo`iRv_VsL<8W@l)J* zQ7Ht7>*<=EP&UsqcJShkga>CUfX}$fU}lKN~LE7k=7S z>MVakqL>kW2!w~>+WI2ln!ZS>{3pfuvq9CwV_Yp~k2t;=)Rf@!C#w2_&lc|&6w>Oq z@0F=(+O_$t4X4<>i~;@SqkZH5`teI+V;jx%xj*wwk~-gO)B0i;krJ`#KYM%4ZC&WQ za9cPOy*l{hMgS90yO_Lg=KSfvGZh|Pea6Wme!BYui(hB`v$-F*6!ig@ywyGzdJv- zf_oQo-C*@*C-Id*JQ!5LdE7-i0SW;=uRfU7%zK=h_i9_GCB~0+8t6|dZA3i`1Uk;- zi%FiBX?`ia1z3G&Bk`(m8b>&^HQctdaaZ{7{LFDTzE%@^ucrLvy3OJGR|DZgTiu5D z^5+$iGID-3yBR6pIxR7Jq!ZdS|C2Q&qd$arP%#Cr7N}fNv9Y>%W5w3RMHST*D<&=; zm48)Y_<6d~NT4oD)rMp}lE6`#ESx`-*zX>CjKtn_8s6N;-O{an@0NBF*KvK_CbxNa zo(V?aJk~{GyPbwN(6Hm0aaAJkoXTyeGl!2PAKus&WyJPpZqiROL}4*~DTDwI^zS3ZmH-J02!Ab#%0wC_2~nNE_5X zsSUrs;C-VIe+ZCZ`Gbv%AuX7v^J@!gNcr2nhGJ|lCWi<>Ra{fPT^0(20KM$94AT-t zId1vB%wW4Qm z<)UXB#5#0%K0SjlsbUsAYqC_R7y}z=ypksi;|K3ZZvB4{DnCIMj5eqwFl^QrKL7XMeL$`*EWG&Z5PzySkz` zd7)4L)B9DPUNa~HIk<^Cl!nerb|c!t2tam)63g7gJ$?0C1IujzzvsSk+t=umbk)JeAJT)1 zDxr2L3DGKdC%;$|^Q7XT#BuzX){ew6S*{j_-UpvNL;5T!yWIE!u$1R3yM_dx{7hQi z!yJsZXO&TO(G=PquXcqY5~cb^+MZR?_LL`v?>2LlwujFe-jK4Vye2;Mzr(8E>W5Xu zalQ{$&0qlV>nQMRRQPqf)3H1DO2b=-1be}Z>(cmj0C{2kfcSM3=ciNnb$i1bw8Hhq zw33Zq2RvV^@UiN5zC3%r_ycZ5k~nU0t0ak4@`!@Qllae`u2vp;TEk|K+|DS2^86#W zDs#LzT3h*lIseafNL5yi?@OpH_;1o_hOrTh1fBr3511tvXL;>fpR<%pj6*?xXD>>n zIg+y7hv(l5-ronFgM27>j-Dr2uIHnH;W^E=?)acW$2g}a6IvhZ_Tks9-Xu0Q`*2?4 zpTiZx8AKBq|Im9+I)?8;ETrrlNZUUXtn6}4LQb?STbb?4mr`o>Igoj!^SaYB7-eSA z)raw3p)@=kRhSzkJ17j-lR9+qAyy;U_=?u#f2N-meLGn{`};OuKYJ&nY_RcE z(bE5kj<)-CcqaxmXx^}JJ^5dQiwpS_=V!s&NqaIIvip8}va(eTu_vVEqRlLL8gM_l zzeXj2%yrlM67kKFh!KEM8Wv@pe}hv)&CzNnG)VF;F3$1c&2EU>%8^G4m!fA4<^4%xZ#516!(s-)(gQ``y^Fl;Ham$=F(we>L_zzrS16pA{15^0buvoa%4t|Exdf z@aFgF@=4R>;~7hdJs?KEa+-wkTYQ^QB>q|MCSwdEjQ&?NB-9d};`cw#Ov}!e@>|#{L|^{cgTWOP!noK*slpr z?a*LuHYplpz8aHRe5;S1i2Z6*r*n8Cd_>?ddIcx&iqp^zEh2z8wz?*?HF{x9XiFUz zq+{8NkH?19xu7jM!pfUuyP)_K4gb@qE&C5h`yU9~Fpk3;pdmHfNhBpNiqZI3WR>2> z19`p9X-DZ8PeC|#ZdhyqI$>XHNWkKfL8CXp@Y)H}tu73z z=NVM_8U_i!4lfnx34T|GEig5j?8FrG>pP-XxTruvP13JxI%C@V>DLcw84hR}l+;7( zkeJ7g?OX6GbQZsJmCFX-UG!7MHKBHC+11MMcByytC7OBjB_CS-hV*-p_$iV2X*Hp> z44EC-str8HZ8#RF9cA=6;X^B!*l!tr_Y3^Pvu=F7nBWe#;ms4O(u+`R<@@*zES!?z zRKDXDbV`1Y;C6N^%%B@OT33umk`GbM3lKN6Woh%h;H$arO>-H2d{ir~IEg!$-%;(a zK8>!o#<0~c&geOZgL-*IqOlot!Td>bb%w@6K6nC_ADy@418CVLX@h=G-txlmM;IBPL7KcZ%!FMEok)`-gISQsRll_s=cfJ35jOk|_ zmFjKfU0M&kKkS{h7yY|gkH~k^>v0TkWjA&{e3D%c>&Y+zDc%?4{w5lvg7Co@* zF*CIulMO`p>v8Dh^=L}1M^x)EX0s>+O9H9^L+^89;LexKlKjfyW{Kp_EIVavAp{X+^11DZaEKnrmMS@d3yf7l6UHHxI!m~XRNWx!! z&J6|T%ht5xF|$PF-_a5smPM}fPmk|-bNb7G+!oD!v|LkDuYOtvuE`ev>iW`Ywt)nXT~t%j6w zc&dv&8E>X4=|*G^VEM~m!2j0?PLi|2^Hj-k1NfG##x>UoAy8`$PneW=8s}Jz0X1m# zb~A=K8bc@FaAhGrx5REVmNrpz5=%_qPU1ncYLP^vS)2&Z_1@cqmdog#GxgiecMqCn zQhiN3UH=(r#SnJO+)!R=u;Do^bm%xMyceG$U}XL%0AWRg0fb^AQo_ss&VG6?`~mH> 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 z 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

hba`CC{cEB_k%! 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 Bnr#38 literal 0 HcmV?d00001 diff --git a/vendor/pageant/pageant_x86.exe b/vendor/pageant/pageant_x86.exe new file mode 100644 index 0000000000000000000000000000000000000000..baaa76c7f35327e62d917d04c4100c1a14aefa89 GIT binary patch literal 850520 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

mU86qsa~B!N1T@YF_dx&~Wp7^>EG9 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 z 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≠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�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

#;J2OwSiCT~;W65o1 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%0DmLA?|7c{${9lAR*T8&zGO{* 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ê zGu&D8hFAdY-AaHsG!lH2i@Tn+)d&zRlQYmH07x4rf|EMiXMIVwwP@Dn*9NMww#t7aY0#z)`&_0}`+Dqcqq<06~~PLUg1F`cYdfufX#=*MD3zAYLMFHQ*QkNMX@~ z?J8LZY7X9o34nkn`LNBm_cgCVOtmIJ81#aDQKJNGe-dw*3BGhRKd5_KcYY^sj)1Kd ze8_PLbY8@d9NoMhcfL>=e^CkxF~GJD#`FA5VOR^`Ey6jHwS}79qf%1Rkw?>vcDne3$v($oVQZvnvM zdXbCWRV%5eat^FK*rr<51haa;t_JpzH<#XnD}MGwFl#^vILkN$&xZltI__GsB-zK_ zNBMv$uvH-fuP2Ec9Y3`>f!B9E?x=d7T_V{hmI|}aKz_o&VL2EUugBoE+gSmcC_dLR zGs6{OZ!oq1#Hl^!LkIOT(cru7SDR(r2~x>uI_jcFuk=o_3WFt70gRi)f2QSj58iv7 zKv$N-2f}19m;f@^IZtJqCPwA&!MhC!bY&_F{w#jqGhfgPON06Vcc&sm7s>zgU2upe ze?L7l4eY))8o;B@58{vB@&;H5FL^B27~H$)RP zu$vE-!sc8>v)p1o;`WY?0mcdJ<{$u|fWb^Oe#dVEc)N4?tR(>sSzs9kOx%b*W>A~p zI1aqs!dq}p{LvN$^IZgP?OL)j}iW<>izIRXn-FY8h8xcDA)k- z*_mSquQ^{C6;%y;Ue6_UefRzqD+&OFe_}q9NBO|ObT001z?B3N<*V0DqcyzKz1x){ zu3g;4h4=+J1XsyR_y1waSQ|A*o0P#Fyx%8JuMWt_c-mQiNIN?DoNn~1iNs8A?M z(hw;`vZ9iak%m$s$tWo$WZm!U9KPTB{(iszbKm!K-_Ps0U(fTY>v~_G{rGfnT?a) z>7e(}E%dzOoDP#NCfetv^sguKp(u4gsX%#A%P+FQ?AE(o25L*{Z}7i=k1u8VR8q?L$MM>Wr6IQ4znyYX_QtP{gJ z+~KNX-uo!1`qrrD9f&=VJOL)=ME{I3G#Z@vMBbViWiJiZ3otX7JR_nZk{N`_MkT%G z1sZLSODzfAx%Sf)ehc+tmg1eX;))<8nCGR@ds|z7PP{Au3q(P%5Tyo-US+3y4lTVCI)VD@S!G%l*_ELP zg4AJdlsc@^YNDF?Z8j;tQwKW$#7961W7c`4v-iD3^>8J02T>F;m>h5`P&qFzhfznd zZQw@F#Ec>PK-T`yMWGE$D^`KV+`}qsip`$sJ{}uK?gOD_B9^3C_&M?uOjW-V> zX9n(*4h!jsTY16okOVFq!i0qE54nEYWAlBnl!cKoSK7!`psPKP^A2lVo|tYBEH4 z6lja6KUsv#KVE)pk-He(PjP7IO!cv?;is*iOL~NYH9`>Vd?^9-L*u)~$HR>Fq%GHL zAz7v%h{wJc_v~Ny-;h04-E~$@*%;lI?8gYTU0Q2ot=GkUYZZ2&>{4OB7YLg9nu>{IdokPyVS3) zl%zNiF3z*Q!pOR~itXqg0aHASsxC6%_CXGIg7aF=EI)sK$G&~<{5-*)VUPxkOw7){ z-5#O0Q2v(83L~b~3>QN5ilkr$yK?K*j94nD6(U+Zo$NENmuk@h>4Ui^0+wR>X#98` zxz#GRHVW2-jLn&>kEdCTAq`7I5o8p6O&wQt#ivur9V#A0!!Nw@zL$2jbp0raX+pg) zV*N1W{mp#i8VTSb(4ilX3G2Ayvg>QGIs!SMQKf*b_DgNpVSq$-Z5$Ua}u2^ zaW#TSuKuBTc=)v7Xwu;5OnD<=`7h$~I{(TY2-7n_0HfE8neVzSTi=qS?Fg2W(5+gj8bQ>%+B zetw0akq{(nsBIwv0zUeUwR30BqrxmhhzQ}c4?(Q0N{h*-7stNw{LdWz`ez`-t)Q!d ziq?9eTba~Ajf8EFWPAJj(Y^Kp1WCdpg4l0DU%OwIj}G;Z39WD`lU{Gc#exnXh@J3- z3%Zu$;{)S0;nAz^&uatwI_7lDe(&nz{iPX>%rX_!iwRjiW!g#t&cKt(MvsM)wGdCKya`Vupjjv*s2cCt;q0qz38J`>lRnW(2gU&P>y6XyM*%Q zk@Lj5kYQ9qkfbXXZen7k`8Ne(43J;o5hCT2zhz0-`jay+6-zul-x{Bbv_Zcmd7@GH zP>63+FhAt=+X=Zox!pbJ04c~o0xjjU56YpC5XB<+yT#j3DBq8niNsmS^dP<<$AWcd zKi!RS166=ePnIG|%S>!Ql9c%Ln~4xtfTV7ZZpO|RU)j4P{p?{Ev;4F^X7I!~VvQgP z7)0r$0QF!($-?K0Q&Am^oL_JPrH)0u#_}X9Em-whU z^T>{`c?Bhw?P&Ca^d9*pwU%$y4eD8#ifma`)OuByj%=0Ofa;1A?3*&p7L>Th0&QVz z9XA(bq7m^#kXwQ|aVZ_JTLk*!GM8a&y)hTK$Qa00g`8XP+2HI{F)jDVi%)*+3;(q%G3W#gli;cr%jKOAIR%uuThDO^Y5pl~auwe`%)6NiUS z%*-nLj6rNW8;M!chEYCEaoNw~yp=jW&B;ggD2^y!=5NGo0!m=v^TEA>wJxT60}E66 z`610#d4aO_pkxhHo{~eBMIe@-b7J#C-xlmtn*Ay?xJPIU4b`*GrI?1$Ni^`O7Fk?2 zz}OQ6v8AK)MtzEHDpc9r+*{3v{pNGD1s&z1R1QYJzNb1uZ}l={4?2Fvs3WW7 zyg(Z&ZGol3_r828t;p%u^qZJH0Qw||1n;N3aq|Dxhw69W%<~~`lF$1-9OFm7{e#h! zlkdMm0Eb$E(VI6&C=`f(#ECst*es5T1b*KcG(M##Q1po_^Z2U$5qZ@|tBcZ-re(%V!9P3#(%V4v5W2 z9E?QF$dRd-mD6Qt&q?(Q3EvRx@e9vStqff$J_BvbA5lmkVtjSz#lwzThCiVAx3NZr zENZTNBPkn|=St_Mh$DZ`B0Qs5{{C`o%&a}gbFA>+{s`vFA*C}S%8+sswkcun=KRTFpI*DHrh{Wa1)Qd)oi&Xa2+ z1#Zm>=(>=}zwxS>P|{GmZ*V5WAlG3f*6thr(L;B77&bjjdxyY%Yo!Mw*jVh?sd zc#2PWBIv$sQTIVdhYL1Ec_IXp;{wYA46nxKgf6ZR(WBPp zfeE??bN9wni(!v!zRU^NHCH-mhLz#?}pf+$z81(h@`1s7Tn~RJZ2l3TIF?rUv?R!Kx!5Zr(s%WSj#Le98!0QuTeSa4N29vRlVit{3W8cP2dgQsUp?;C{8;0) zW4@Cd{++eSyr-s(Cn7Jl6As^(NLjS{gVztoASg^h=%d6=J=eg6&hT8%=uL8sD!#Gs7}ETvSgDb6I7VDDzD zTlKsc-Fo!k99Obf=F;rlm7Dk`WK&3{g(GS=*{t#l{OY|60g;}WchM& zTvCnW5KcXD_t39++W`J zGG7zuX45yKoXjj)e6Hk-0@LlM$yN9r9YcEc^9h1!QEZ>+&uuS=i;9!%~2Vyx{@z!2VxXsk`Ch!E~s2$MOIy_eQ8$Z z>RC+PHj~w=dh?pUmtB6s*sb!EsFF;&`>fmH_BlquERlkxlb62FbZRmF8bcw;W-ZGO9G=b<~?y)l`^h-4vejTIt2J&~ryt$@tvCj;Uc3j@(lyqx}3> zu_0dQ@(0uXOE~@!H=DDbN6~t+>mvGAJ#x=?KEw+7n7-}D>K}q7=?uve?&U9!?q9v+ zMzjxJq%W-ObI}31^^MAH0?G=XUTg_WmVF^Bexu_`!Il9B-S8IjK%3rd;;QE#+0W%V z0-B4GJ2vG@u9DIpe;4}TXIb8TlS`+@s**AmukzjeVC5x*Cklw{ZK z|DJ_SK3DtR=gPHMBkyL%3eP!%IV&ycw|_3&U3%b$OiX67lTgFDHKvMR#Cp0U_dPta z-f!9C6XF&k-)A=kFrMl;Z_-mai zy5ap$|Gh)2@6#H^2}jFeVqFPg?MYVaXYPja-1yQ*Nh1}{o_EjvU@^nw+3uj{wc86O z_Y`O1+Ik0fB(2#uo<7)oG$&&@rb*wbi%PW6sE=(utVd+|Y?iqyJzi=1^gy|_O{nwM zGaS#JQV&yScM2u;r}K8hCha5Sjq0loJbl}2r}eV7HfWoc)r)}(i{{&MXlaU{6{4M^ z3U>V{tXz8Wwug^HHuNVnp4u+5DFC zb&uUik^38USYnGlomJEdzIgHKyU$jyCM>(-PCvFz*xh8G{Q1=L2ZyvRkN>h-v(k7V zdq^;E_yXh86Mws2fl5D}qFXj1ZI8v*%w8S*Yr$PhRslV$E_+tX7yTp)3+$VnkDp~# zYc^AtX;!?-kSn^Bf5&E`vqJe7_pJYB^Xeqx3S0cadv8uTDTR%XuDaJXI#_YFuX~if zECIiOD(Nj1ar?RIC1v8mdz4oaRZo;ZhFx=$mg`_rdRjG#($!AwbbsN1R5Xzobv1r; zPijKqnoZ>y6%;!SqXInA@~HfZ@u62P95G|+oP4J*A{)w+BlLC=N?UTn2-TllWanCc z7uo$Tq~33y-pKw+|L(@i$btYd_?#Q>HKyZrQBVF5)+hD*%xsP4ob+v)`aTQ$U)YD& zUbS;xAme-H?iW^iOsudA`Kwh;=HiYNNBTvVP?wu?u-IKgH3yzDuh^Cv*L`^RD!k$X zAwpn++s`WeSQs-jV!5xdMV>10qh0Dqtdmsm^?fEbYt@%aknYG<92Bzidh3$-v&+^f z?(4EUi2e(YyUSB!`;NuL#m?Qo->bd-jp&J|_w|nnR2RNEetG=ftjwLwojc@7-iu_8 zCYKNlcZav)J{HfbI3IT%`*`a}pFuF2eH0sWogO>+dEOUITHcJ)QrES;I?LW(UG>S_ zpP2FNlA=6CCQ)pi-JXcnl}p{igN=-2;;|mv$Pvm%cfYrH_DZXf&z;E9cx||kJh188 z;{;!aC5>XAcAl8?Xj6>E7Ox|$PNlY4vI;+Qli7O$Cx80G36h4VtL(Y=Rg`9L5l^K_ z*$2wwx^p@Y#w|JCWziE5i+77J>McEb(lSbyK@RwJ<-R{DaLA_2;#y?bZ9>s)tg-NG z&WE8Dm&{d;rWM=7gfgxbnciG+S#=;z@Ml;`&0C+MgzUUz(`66Cl`<7#PH=XSvfUh1 zGKQY|dl1&2+hi)0x(8qV&M7R|Ou1@29=AA2{?o(&Gf}38l5$qvH|mOvrR>atfU~7n z;U(oOtDHvW_hBpNYH1LJl;}OFNfnlLb2O?Y-AG?^8q01VyrF;6NpYK1>Bry^kljyZs|C5$(j?c>o z*&Sy@({-9CRPl=s2Y+J$Eb|TnBs^;#bnpv~=(c9l%?I>2{7R(Q3T5l9AmtThUa6YV=;*lxd zb2REsYVtGLF27aJp7`U}E**;7*Gfx&XGl*)Ql0|`$E0yBx(#(&I z(~_4gFs~qdT5r%>U3aeA6L{3`>psHiY{I&Xi#AWsy}WiH<$Tt4-RA1l z1*xu_hmU&SE-85YHob7}j(6YK5ia-jTLm34t>kd$;i^lKDByBSJbr_J5)S-m#}!hx38h~yaV}XXyfvM&4&lA1soR0e=PUt z+tP>G6Nn4TdoTY6ypAY~CN+2ow*j&mtaHTxdK zZJWE#ZI9Y)<6|NeW#LHIs&{SQ1gXImXty61B{wkW%8|GRcu^)nvd&GL#TJ&YD^j(WZ|zE1KR6HcD&d%j_I z=5F2g+YzbZ2?dC8*sP2rCx6k5dba&gwEyU!aD{5h$QKwfqFncJtQsN?z4AYy`76A- zRw684IF}@=-`HL?_v)kfQqSZDc7*gMS!Y{?z!^aqFJJt)b|1UoiHeRVU1DjS>l&BO zd&f!`GIIszchr8}UE7{nZ11<0{qxqf!`lq4)P?$1*W}5WS6!*vVRKqg&Tx}QK|pe( zXv@2^atmw4&X<}6Hnq^%$(wV3`fs1yXJ_Ng)bQ}g{(yN*#YsQjRDR{8&UMp(yB+1V zMW1?$-?)CfKTCb9ocg>U%%RD|GlfB;Z?osMpLDNz=#rgQ{f&0+5>p^wzPlwYEBE88 z&EEEn>2@30N#7H+UyWR=&3w_;C-NlHGU?rhvxjdkc=Y0i`S;A+4$74Xt9=h&%$5zB zvHyEoN}uc5>bl)M8b%ANFLdI`B`NXL%Hn6cf4m!Ow;umE{=S&mJeq$0p2X3+p^Dv3 zRw9=L5)Jm)z1m*pqv`g&wo3ur;YfqM1$*5m!KSfC^*T#h*Na~2URR0wK#r6Qvp z;d(FjzdNM+ZhdsW$#zC^vqAUVx96I(zqu>biD(}0PTv$dyS#n*ZNd|S`6GA2+T0WT zMQl&8)E^n*>OapNkm%ts8Iw`P`7=!? z9u;?}?`$I6GQ1<6N|G^LuyO%w>ta7OC-VBJ!N!{vbd8t2c3s+rZQ+r@ZP7Ja_2tUf z51B1)YZ)cYD(fj;b=$R*dcwRj+$BqMV^?JVuX?Lur99m2tLOH0zj)KEzVPY5LFZTf zrq_vikXAAx+1}-vmS-u5G^L{W;Qobl~%x{d14s>MhSqp1mY;@Xn@wi9?lr ziY(_>ttKv2@8#h4YG}mHe6<^Eo>W|8yv-4C@i1w8(Plhz_5FiqYr2l)J>ncyN`LpW z(I_B0qa=WMWM36?mP#pk?dTVM5Te(&{&{2UoI^2bRW-|hCSTzGR5tv4l)gt_ zp)IP|*EsLYp>{!u%()+}58ij}$J6u8SRWG3nmuhZ4qLRV*0i6ac#7%$v@-i0i4YTF%&1&!HDEB@uQ&kkR zR-^b$L(Z0ivKK^j&MbAne$!2~yK()|iR%hoHCw4H_Nlt;yN_R|&!mzpV%)pW9r5m^ z#8$ozYl-;mvmvSOg2N`(#q#)!kowa%mQ|!Sq%hO`2ahYnc^jNgl-Ej=&Gf%Ge9+i= z#nF&QDrpZNX$1Osg^);}#0@VcSFs*$y|-4uZXG2DH?ypB=l7tE!Tt-EzYtim;$x+5 zggs|`3b`le%$(Suacc&n zjr)#f&su7@&RRz)Zq2M^51Q+R&-}1nn15YC^yLwP_4W@gPtS@kbqJRdnDib0V6Qf6 z(0~4cZ}q{%#^x1|KkakADWx7!+4zDa7I8yrP*tfdi(`=~ZT7{WF;r5ykaoH;;M5VU z@XYn^qPq9KQQqz>Sf00myM;)EN&0D?TaG{K*)*QIc$usZz`YDSYT0E%8n$mbtBT-S_X+dE27^C(1uknTf1=Yr*DFdW02kXztms3*nW_*oKe5UmF(LQ47 zPX;;TEa&0#=##tRA9l~pEHz}h87$0E3i5qKE>NFm`%GHaC%E9A_E(=J0&@GMzogDf z)fm3_woq1H)cJE-PZg}#M&D^?Yqe*t!U08b^WEXSotN0V?&)2-(MI}FB@khx zlGAu#&wv_csHRY^;8L8q&I&2!gEdEjl=`;!)G7N|a~tA@70&o-e^p@W9cPJz^sSe$ zpr-avuUlOF66=?p*jbxRTF(@iILyWI?ef8>goQk1;g*eme*Xy*LTUy{WbRsPJh-C(Qk0vEK)ON*wtuo z#UcmyoPw40VJ9~lHb#DX7Pq}xY4ge_rwiI&g~@Ck6S00YL0F92z0>^AP_o^gwDH21 z(vP-;(ToE}YdSLz`bEAQ!oFVD8dK`L`*ZNNfPJ`~0Yx^ezwB^a)O>p6M)C{`UD@W* zrG*2&J+>Tkvx??l*#U{qdO~XB#B*53*FESA*VEc>m+{NdqxS20d#_td67ZEJ7fu?v zF50gl;}pN!X)q&gZlKM!*GC$YPc%O3yCPKZ1Xn=2XK znfYte7Ps%;?c-}oi6aTpaV~3B*lossZwd@Ax9HXtr%C2T_RN^rVYMl<{-}7&D~&aC zB)`9GGg@1b-Ov!WHpI4?aQ>n3X(>$Q+1)kQ9+mdzJ4AeFKN>f%;YNkAQ|OB8k7L}o z4s>02ju;YbFYgT0!DsIcb5^r2$lAK_O=Qg?;lc|c4&zFRJH%|2mGIIx*4_x$KW({r zFFk)l=e*~gYgC$2RP_mKD(1Mv^QvK+k9)Oj3Z zp;C7<=!DwF{!2~97h1JCUhb7!x^GDK)cbW7g&6;ujIS14i;&(_xdLu|vv%l!M~|3N zUzWePaY)eZ`%jf|kuEB>&o+c42S#l-**y6%_`&VQO;=uuPn?rEasJs(YD)R>((VKO zX)h(;`;WP=D$x}6JR1DdYBNo!dFbYcwTp`VNeOvRe95;r^lLDPzv2aBBO*TE(HeOf zFtVK9HFvqUSl;TkLuXZ`MX8rpRO~djj>dd@vPHE_Tp{(!U3K>W^&1t}D>izOdnrLj zf4qEiB`9aRWKGZB^8;;~y{R!lm90vzv+M#34NC5GOPznPVFlx5LmT%>9MgWwodt&KES{-tX2wAm(dP4->bU5DDSpUK!;|wu$J&Edzq3g_(8p>{mrIhifbk_th#yv zx)*2dUl{GbSm4`{w~TGXEGvs!!#V=JQSkNa&4(U8Q47g9JS0mzqZQG1CAH+?oxyg^ zH%IHe3YA84R62)7O11nb<5%q6wwvB?i!EGlvD0`(l=)_DYxzW{2EWaz`4KHqiO+N% zuIkdF9A0$-J2`uAT;`qcl=(OGG8A%pD>W9bHx53tC@E{s$`>|HOucCP(WlYew;uX8 z_lobec>F$&v*7BdQ~Kn^ldsp_AI}WY^>x6E-}zjmvZOwitz>caQgOK1l3m?mPa6oU z-c=>eFi~?A?R1}OcvGft^@iPrHR)EPeGA-N89i}XbA7sZ1zgHFH}jLIqTHu7RZ>_T z)~cMX_G0sY3aTm@F)W$KH@(=}SKOqyWY4X@59IY9a(7|8*m-Ar33VI^QzuQIbX!3E9>0YE}%Z%sDDq^xWHk1ro@hw84?FA zE%%S>eo5_c9m?G9@N4OQ{M7}619Q%Z1j={XVyN0Td{&&?qbRgIK2J7A`cy88W0+BFWyUv#xFKmcspQG-v_3J`OAtW=_lS5+MXT_&=y+1XGk=SuBLgp@}G_j3wVnOQl>pFKm6l>If zr6%9LF`Fm%6g>j-ruzrsHQT zyXboNC3`>1YzXMXy|27CESA1vMER#@!PCUtGTrLh=F1Xackc7k_j|eUbbZsz5p1PW z#gDqKh>vQwB9jy34Wkw4n|_ScUH0`*-H>)Y{DR3H@w~7ZGK}WbOJ84Yxwq)__qQ7y zQyGU|cP6Y{`%p>!wNLG=a?vl8bE)qpv%(_`q}}dzEwl^E>Ck<9N?%;Pa98mB4=SDp zXD*y+P+52vf3D)|qLbk(!%7KHq6G&fOLmkh-)eo5n2)<2#xi!sSjgi8Hihq!JzsaV zkYIE4qenw>V&fgeVsE?F`jVh<+H1;=B_}$WNn5)Q*cDB#>+xGP|8x7MA8U?_yZ$6a z*GMO~4Xt+DK4{o2J-jx4c%5(kz~=`lgL7t*lEt>KaayC+nXM1`0K&-Zs(+r(~=UMv=yaiydAOzQ&+Vy}(u-EU0E_VXCB zL&HZ!@9GFeBhw~(kF+lfZt3^6ju-eYaLNuREJ(|odB{ZU$*FY?gWl%el%IsfkJE1puDsqwTYKW9 zG{!Ar;+K(b`g6LP%|*ipmh*Bq%(?w}(>1Sfp=-q6*#X<`NmXvl)9m@aU;)O-_S-ni zYG=s1@0X>2er*kGekt9&(~R4qal~t4b!&bemYkk0i!b}kG4WyEJ#g?o$1vsR#o5wd zA0B>bSUO*(+_&5g{v2Hrw5o;nX8Efn;};L5Wdx?nE(u=vJ!A1T5heV1=!~|ijZI6A z2NY7$Q^^}cyThPSe>Q7^3%Jvg3!tTJ}#;Tc04tF9$G zm7Y|zUU>nRmuR#>GyKSL_C9y>7N?<{kn0QcvwNS9yf5qhGJlsV?qG_OWR&*vmj?!; z-%I*Q_g4k%GF$%Pn@pryf1+RPWCtey>*^(kKZjoP-nREe;ib9nUuo-;9{agoak%^} zVX%Yqup(;D+vdng?5gL=)$_dUzCIg@H@?NWw(x){FqOLgbiAo4_xrVl zc2~^u)y!9q88kU>*SX9}F#bxstklcZ*Uv5IK9oPdUUO54>)T3+>Rl3dQf@dkY;|tf zG)`V*;O}$kdlXmV){g^R&kYxKKYvgtDz})K)4wcWme8zgfjgQ8vtZvR)==R>cci|Fltek6zVAFx#-%lm{eR6<*7GX>f3Ec-r0X5*uCj^9s z&=C?GwNU}M5g{UYc*4WKjZj8^s|4pc&~qYilE=(sg8;zk3l81z5}JpjTf9RtXzS@d zC97ug>e2H-zo*5k__>BneCTh(hrL03xEM}OqUmrE9~Qjk!!$S}k0t{N{>{QSo$m^i@C&->1Y%~Me0 z2R|=5$cLw4w@w4j2xQ6rl5uZKYwQmMhNori)QfQvzdH|pu!5L`4B8z z81zIHq)^`d-`$`Ftqcw21GvK@QdU+55UqeSM(`g_zwrUw;Snyha4HFfK?;R)pp%nf zVg68v=7$0L`T3z)WURLKzl6UJhPLM`9e^-6QHmz?wD7;AHX*TpfdiDv~M|F0<&27pqa2@k*>9{rEg<^l?erx!@ z{BfE$pb;T}5f?6bxWv#4%EZRtf|I@SaE1Jb%Ld8?;SvL}*OSA4{&ff0R%DJ&>RKR8JIy z4F5HOko#|#3Qhi1j<^r;rbKU`jnnE0oqsD269N`br=hpXGm%ZSr>(ffP*9|Ibn&DX)B*>c2suKY09G#sB2vpH^ymkbhXK zsbb+{u#D*@e?ea9B+sM%RR#}2=#u}PRhyjr+tB~fVOs2eFZ@6Ena}YlUjkH{&V$_q z+JN5&C^!W%QxFYm&~o@*2Oo0(hG;+d7Ar6A;la?UeAyIi0|@;l0ixsnFNKx-@eqhz z&~bV2D?oY34+BK!1H{pFOah|l`oJN8bKv8T!Zv6&4MV2#D4c|g4@0M5**{?0RDK$M z#i4z`$%OFXFpw6_qv>ym`WbP!uyA4EADYy8_kX?dIzq8LtVJGWz#K5jus&hjpO@Hg zT`^_9W#F+5X!E}={^R2t`sWmX<)-nSE&yE%6`DL$2Cxmi1Q1LcFajNb$^YF$6h)#zH@v}VT zNAn;8|0#v?E5xSY6migS4oxUK(ZuBgo)%3#{@(y7`A|as6aN495GW3GX#?7#5Ty|x zhEBn{51UUvxle^oCROZ5(hW~Q36fDAXqFv*A1V!2p~8dKj#2OK@eJk6@h=* zfY%IY$2KQ z0{x-o9?+bFywT86(C`1b!#rN_&mDSu@}6y>)Enly^TxF0 zjfvJE$OYuURGl=`&4Do|ClBzeP(JeN79nfkbDVjQM{Tk`q5v!5Cw{%bRJ{PNUI9KB zM(JY1TiaB_zv#%P>n}u)SMjfO+z7q?rrR_%xAE5J33dN7bo}@i9oGSkY=BCRFcQi+ zEYQmi?tkKeg>T04IqL;=e9HO&#rbqbd4`2vZZHl?Z@<5Ij*j^^?tEPNe1LZhK>D2z zC{Dlg;qN+W1g*2<@kpD8T>#AD19PI(K&8MHsK6iH8~Ei2m?=Xoe_b}fd45Y2bABxr zzQgMV+?`&F3#<;s3kyAcK!(sKM;r@IDCJNJ*uXP?c62Tj zGc4~uEvx*}|5|3zwfs#rKGrBke9EcvDEGUZDg!?MUQSg&JO3*=b)2gI&vMF_=gZKJ z0P+qmYyo*!fOoB+TI$ZjWZE9U*O?)eV?OiXKjmi&^ay}8=iGNyDspX^V@ELwg%AFmDl#qmRO*W0*vxc zNrm?WOeOvpObmZMC*Bxap@#}w3V-zbea@h%_Nd&VG(&s1fQ0x0{Joth@{C7YRG$7x z+i81q6vJ=Bw>PLgLG=vPzv(n>&u#!sgn2gWAk3-3(-71ydm`>|@%06jDAWquqHp@( zC2;RNdTYQtN%nv&IRY+6rs}5oI|Dh6$`U4wSH6y?L43LYlh^+>XHlK!)3X^Uf&0sb z{<}5t+s%S@8h`QG2yn9n3xkE#p|XV9RK8{9qs#Aee5wzh_Glk3xKJHcfESq90`91< zK}+})oGE+&)-S;GF~4BEZumI!z(3Y609+y<8kl}wxdG_;cKBxsBmEPP|4Op|UVkjo z0#@p8A2RJhX8eVVC_=zI{sR|uYMdYm?nZ#W1>84*Tx~Nh0Bo!v$EPt$Z&dzKi?|)iQA>!{qKSrXoS z@B2HoQ42lIIXn1Z0`nJ+sHgPeSx!g5z#Cejv!Utt{@Y-ET7ZKUj5BSc(Y7``ocMjv zT2yOL?}8>A=oE%W1HK)1g?i`TF#M+m(0J|jc~rEAvH9&$ZA58_=J-_kXTLqj^552D z1Z_Qek~_T))P|rVpz#js5pakq(2fXCN<6QNt_SruE+FBkKb-c8s3$`0HEPp1JU;zN z>wnJlpXNbn;f$;V9Cctsdma@~j=O_BL9L5D%#Tv+U(2w_HNXrH5<`bSm8*az;ow5w zQTdI`nxz|eQiCx z9Nk>m%kiqX+Z)c8?p@$~C~-0eWL?oNZxTte>N|0~SiWuy&5lw#ry5FRYiF zi|zEBURXCfQ7oE_9bNah`FUZjJb9G?ST9>wFGp`jUt4r!ZwFhft-qCxH`dP0)5XeL zmETDVkcB~cBicc&7uMR=+0BnPh@GRgmnv381+ca9^0IZYb`HS8YT*ZZmiu_RGQ4aY zY+bCpR9qZwJl(w9?7UTM+*}w|UM{M>_~lp^D_2K5TQ6^;-%0b^NZNaBUA-N>15h;n zA|Fnb_is5`=^wSLtfy0?!6k_O@28-n4+XUTMzzgRO( zQ0(uN_;YYR)pV!%r8*@ss(h?frm^PHb9(&WxI_7kJAYTZ`&c_W+HA26*zUI17F2*j zrjxBHBs_^^V`GQkWA~5IoUL5#eSqfEocwK||HSYqZUT$`9S2a>{mChm8yjtHoKZ#a z@j{7iZHryL(Lh_p$`8tx|3yHcor^D#Vdd@)E8t55Prgwh_9gybN;z@)ln6|X1Hy+Y z;5J)tZ(yO<-?X1n8V7H0cZQnUl-{WRr8lZJZZ2xubhXt8I2>7RiYe2hOwWOev%BLu zbO9W1Paj)Y_H>p%5lfA~ntx!y7v8D5-&P8$2!(vD=7@rw`wvMRY%&Hx7fGuMk7%ss-5 zClxfi%sxmnx?+-mMH7wC^g55~azg>h?f1e_jjC(a({jSB@@r{eD6?&B(PwYV;v zBwicneGFfXAH@q3#0XfzTA(eLu!*2ga3pvW&Jv0V2vLkEL6jw~CE|%xq6u*~(S_(m z3?LpNh7(T^tBKvjStMYE|3;8p7ge*vz zN0Ff{qbN|+C?pD#qD$FE*++?{oTpr;WK;4eC6ou0YRVhRd&&T16;+u^rmmxEQ1z(x z)XUU->TcQ|+DY1TS}W}vZ6QNn0pd}PdEt_7ZXG5wjL%y8ye<|XDe=1t}RbC@~FlxAtM{8>j> zQLG$R0c(hbVe7CRfM*xkx7ju90rogslq1fO;K*^PoK2i<98=CKPB-TZ=R0R1cL&#u zYsGcsdUFqQPw;qggWJySL-~M1kmJAyQIL2#j)U8c^T6%L9ma*@VsP2G23!lS9oL5& z#p&X=E{5AZ2d@cSZem~(H;ToZUP)c}6SVCMyBob-FEkskIJ#Zj_SVwFk z3Xy1}jil{B_q(LWq&K8?(o!;uY);-w_8|L_kAURIlh2Val5dkAk?YCrrD{_Xskf<>)MwOo>M&Itv_X+(MT@2>(6`Wy>E`tJApHaM znG8|J3ZO9wv_Oxsjj@a21e6Y79AU&T&N4E9(#4E&MlItRqm}W2@rm(^v4E+}Brw-8 zw=m6_)=USc3s63Sd6IdCnZdlvtYp4mb})Z11z2J%0&6QPkaeDQgLRAbjMc&V$y&%> z%~oe?u@apJ=uQEo@cRP@`p34%0OsT5ad;dRw;kt?JA^w0*5@j&2loZH2rq@#!0Y49 z@g8_zd^|n{pM@79%pvFy3<71RMDo!g%m=JdfSC&iRYI3c);aqeF>;UUv z;oNXXaEZ7yoH5=Sf0@t-7-B#^%86@9u_QHJAFGN}!q2oM{JXakLCt z3GF>?k|se{qBqdBL2^78os3wfI;)iR0x;-j4YGvU^VrMSifjgOeH+^pxbDe5!j5Do zgWb$$7qc7KFW5coezpKdm?Ohk#vySS99_^vcg|rB1or4#%Mf+2Yaf7{K6p{$eBxrT zTg!<`L{%b*$RMf{HHd~pBce5E&;jB}Vj=M*v5PoD6ep>YIHb)aE7A?pD^d?>oFqY3 zAnzbwBFj-$fWB}kg_KgtbINN9i>gK4K{cZ~P~)iAsoB(r)E87eS|BZpc8^vD>-$b~ zqkpDmjUvn6-#4 z#a3o>+1g-b7IADjz8r)r!=-UuxJkf^QtnG`Hx~(oSBk?L<#6k8#kfh_67Y`Y_#v>| zOt9Ab32B5}!UMuH!Uw_tVUlo#=tXKINt3al|6j>CiV1kXLP{590d*3^w&0 zbtz4irbY7tO}|3B0V@!pGw7G;J)r3vh8rVI`h%v~JWg0LKfINR>jxvK;4_M8t z_pC{l6#F1(W*j?_eTB{7m~b3GdQNguISj4|*MS?zJ;_Z)^)3c%AOKOE5{`!3jI+Xd z;*R0caT(zA74U1p%je=B;9ubT@bkdGuOY01wImZR5k3+Yg4Z!3?j&Xr-xCqiDiVui zN%AHgCEX%5kk*iW$>%7KC@ZPa)L3dVwTP-rTMoEa(?{uB8B1B+fSnqf1op!eYC88%Womfv)A?E;>&B5}`r!S_P(Jgr1zmQ%^ ze*rZ4LKk7oW5_U8f$ZMqS-45Y9Oir`m8rutWI8iFfU`lY1K>T1Svc_bT%gBEPBN#S z)5ZDBk>xJqe&eElys8C%poQCt8v~2u1RQL_w-bg5_QX}BYSIVNC}{>+ge*ojC1;Yc zln_{94W*IN4xE#t;;9>`@zh1MwKOx@ZJGdGguaTNPsadO3mLME)!_Ts3=Oc$W(-S) zEyI=J!`R0-$cP5poC2Qk8en~wQObD0cmfvs4fw-vAd!=dSxhnJBIYut5>u5)WU4bY z!AEXoS}^T+Yue8|!i;3bFwZm7nAgEu7BMTBRm?hO3-dj*o7uJ=v3KnoZTc2&jHfLM0UD-bDee6(n6gw8=EQNgo{J>py3Haov5J|md_p-mS zhuC9m5%A87!7eCq)Hr0Y44NE0&UWz9b{rRu7ssD-gmav8igSjO#>wE^;@sg>Ky>vS ztZNV0S2Vhs5Bj!>tHz73bh*ah&-ZeDxFKL~Pjk<6uW)a1?{Ob;>$$IZ9%TrX>oWdX z5&@hLZUJs7NH-40#A)CRapt^eD-isA1MVg64MbXfxbL_T(Ak;z+4%YRCHSTI75LS7 zH9Q&5#IM6^;&t)c@TPbRye)n&cppD}FvP#%_-K3_J_&yj55LRPCBBLe1|4mGN@Y5*Y&oL3!Oo(C6v(msjtO30~#(BVb z&2izjaR<<~H}HMK0*K=mGAs(MgGpAjq7118i257?ch4hv5 zB8WeR=-U}P8IE9=f*Fwz+uZM_NImkeH-Au!)b6AQjWr*(GSm7*jkj;E{5lEjh==d?t4v-a?=PUf;3;-+K3yAAJ;RJx! zi-FI|cp~g<^zd5=l0-FP5)nfZCrOf&NE=97N&XNur+__sNBRi#Sw%J^?*Y5^mi&>d zLZMMMQ1mFK6nn}s%5lmq$|9-~P)UaxL`|SJQhTZWR7+YeZG?uQ&juPT1zVs75l9xj zg5F8jg#Ae|qmoh2c*SUkNX(CUn3)3hn+wrL7^{(mhuCQ!ClvM@tGQiVRGKm9J8=;!VrN$j3izqJ_H~9hS*P> zB+e!+0!iLT+5%KDC0URTlHwtzeNJj6^^$&&1j*uLY4FNi@)q#St{~;d$kF6vkfl6w z7ukUlPPs@)rxft^5G|Bp$^`5n)>3t;JE?o99@Jp!6Y2oOwex6L8Z1&A-iZs~0S>`~ zJ_0vRu>06qATbZXB7EYEaprR6P<~=D=sS^-lY~!%pM)_&39*s*g4he#3X+6LvZQ4s zGKoRbBW)wulblJRq$8vRQZnf_DW6mW{^o*?QP38bLhx3B?PJJmdnn zjK2vxg}3-#`~ZFqVLm|~A~PI;LeKJIFoc3Gx~Wfx@O}!j8aphEWygHCux$#Vc(4yz)OK)EgnQ);s%n|e{1hcz-sE(zIU}t5k*B2ZJHCUJ^RT+obz7i``-7vJkNDu zH|$}p|NWcp`@a^WoiT(-V-~{)PT{z6Hgl3V`?#6h?fjkmcVG$ppsNhBViJi49Wj9j zBIZHAZzhdX@)FQ)I3R4RInQ@8mvR6 zQ{X{g(t{YWjCBlIsgHlidBS_n^Wg{Z7Yd#VI^mf$px(y{L-0vRB6-nEQ2;Uu$p(}Z zJhun(hbTgWc7ajG;4(9qdCWrQP3AjhHy~XIYYD5TlmpZ_O`Ja5$y`rvFqmpHH;sFW zdym@;ELPz4#cp;EZwzlUFO|0k%JeYrBJU=gW*e^yUlZPbEPpEBmp>m4GoGKuKgsVR z=n0q8PcTqmE|@5oBG@H#5iP`#+92L7J}xd1-xI%=9ItZRvJHQAC;B0o;vp?@1@avx zj(wNaaw+f}fYb2W`SJI!!I7_NNU*)eS}_#imV0)dkZcX`5+jv{T?g zY|^GF(EGxDnA6w5Z)^tkr_%S)?=j{v^WnT7uv%HTl0RDqx=suq>CAS8F5k}H$KKCA z3_d!~z799u!v4fo;SA)Mad@0D92?FI&KlIkHcl!OdkbehcLa`rD}S{xUYLUweNlWx z{74LxsFRW0bAv>o-J#de+o2Qc8H!A8CYvc@S}-RveVAd)b<91?2RQl;IQCmuJER#* zDN7TWnT=Iu%9#gO+Y1$B$mMcVxTm>~z`)wPozRiTalDn`?5Duf&x1Z(g)HR|-w^A` z1~|4za1NS*BvcjlftxdftJ#bEL>B5SNVEwUTPIQ%i^Ksq3wVPqGLk#Fkqil6tkzpd zLQZ4dwNh1RLue;x7io8B&uJfN>U2Kc8fs@by?|a$e}+%fn_<8h24yi9*@qQ#IyiGB zl8!@2n{F~6LS3{oKQPIxZmeD`E!GHD6!>#JYb!V+jdh5X!#V|3UBg$ABZ%7mg9)O`*?fjz5i|>)6O{MiAD7J+Xv%1LaO2Hw!>svy2);-9bHq zcl?G*M@}#mIYBCIFD+kEfS6a4@XTXk2sN5|PE?AN;In<2`yp>(mH#>iI_?F5lQe!IYbTI>(~YcV)+?-QI;z=;Jr(?*%F*CVxK3OT?kw(nZYXyncN-GDEN&~0#8-d{UC+Oce5jExamS;O$K4Q8L|oA%(Hv10 zv}mo!3my~453_%gwH}2eXBLvI};i1 z3}41VMhsXx15fgIGoq6~?!RZ}$+)63l^$ ziW6)TqzW>SSCt78p*yote?{;mmBRbNM&uN4g+q~1n1i{U;63mL%`wp^dAoEbJ(<3n zz6&~`4>Um(j;B0}1<$sbR}UpV16nOf^0{neaYH=JGtvnp7Dwq7bULy=Av_!*B)Q6> zr-%_>w6%NVJcct9ncJC?_Zbeix1CodA&;QXzrO@pYCB^mBb>j9zm4yYR0ZD)mzDCd zgm*tN{E!#AA`RTmBE^4R^Fj0(%vs0~lYkKina7!TnWm_fdX@!y1v>$Gmm6mR$C{hK z&*7ipm+-G40J9ER#uV$fJ`*|wY-4ugA=ONKM8 z;0d6tdkAIYyOiac^A}HvIB#UB(o>3Mr4=qc~;Zj2Hah%sy-{Vd+Z8Q{|d>QyR*b`|_XrRO5wI)rCijud`05RixSx0=(*QAIkt zjz347D?Sf>c3oU4u7P@Z26y*Xa%{}yq<(+|Z`*^=fVaT`wkfSNmG|)weq%rBE=&tm6aD)-`4fGvwUmR%sFveb} zfP0LWj1FihGP5i6eQ)UcH1rHgvD)g9S@mLRLXY}F$1P$lW9>rchQwB2Yq1~V_^Y5# z6A2#N&&lGP8>1z3tM%|RycJb3=RBq)W0$gqlekD*mQ@D!m9_6zAE zFHxXqnJ5lOf?L-}k8hX+vt8vdZHHqGoxBcSbqlI06*Z8KH0Ch8#tC#Z3V{$8ff3ih zHFx0E?qeN3VKy^cffsLqi!v;EmL+QvYaVMki^}ol1ag8oA)HW7IOi6pAD03*Ys59> z7V|6lHb_4V;HmL~L7!i@oO%zK{+!x|^&k&qm*BcFjfo=}gQRK)?Kn-Maa(9T=mU{! z3eXR*qdU`QW3{fM^TF(+nOX3TemKv^fxP$FwNU1d+0T#xFXjq`u~XD?|MbQk(KrYAFu z^${9gfzy@KgVT$H>sN4&aq)90pO0shWND<^9LAwYK^a#i24RY~uNPaqjrlUmG=$Ns^BgGTMQ^on> zv(T2(yS^e@R3o%$?qJ@lG$*(;eFnh@WF#<}855Z9NJL7RB$g6uKT8&f(^8Yj|;jCSkjf49`f2MuRD*BKb-YWsAy14I&xjS?iEvosm{N zo&+-~uFxIxk?pTR8heH)CPq+gsk3OaY1?QiSZUX2jkI^ru)3(=NL23@)b9x>i5t>v zrvvFuFGe3YVK!r=H07Bh<~xGQw?du zX`!^E= zzi>aa$`#>V^fi@{VMUA9iZVpU;DOsk@6mf8kX65v;1Y!_os)9LnqN%pBQ6u8kYqWc zN9Ke6yoBY>(#JEr8U9%FZp?X5;qh>GCvd)RKtVMF4STVS@lL&f;t^obZP19dtcR?2 zoKs!S5cnBq&N9ww)MXxr$9LunCAx(mOTFj_xRW&2L1@ZmomT)&zd%dW)*bANASjq3(kfr)$0kNOf zon_9d1h(qp=+EawbBa0M+y&fy-1FQDbfjN!-*Jn0bZM`14?mlKTTmltKu^;I^;{%; zEz}XwFah8QEKV0y;{Ej&o8nahkTmBbkCXN*UCEdjBasS`CJv+$R1tLwbp|yS{`?S* z`)TS0>MrC=gRvT_nR0mjYaA}p%9Xr*Si_PY%>#I_Fk!J!MQkme2)}U-*)=KX^ZVx^ zJLwO{(3P%5KY&#gfdoy`3pPNvy&p%!vFCaLPcC!YxjlGvo-MiwQRpL-f2zZ)sWd zyI9%n^qvd~lz0F-AKlTn&S73e3Sf)8E(K?rg_;irw|C(Vm8@oN3y_+H8Xd$>fZxo7 z_AG_+#OuV9CHK@MMc{}uqdzG`(#WOnq-WFbBUNNFdN8$^{;XtHGU|ki<5Y$YWCgIH z3h8$Pw~_mr+swBWpyQSznHm-bg_A zL6aOuosn2aIcK3mukq@51dJ`^p5`1Mc?E=oA z8l4OE@rJI<$VJjQll7Xlm)(HO{4uXTUOES%HK><2FWl;BTfjhS7=gdH7d!cYS zl=vFqI^h=KF7$FPf!h_uYT~|P3i>ZRWN;(VsdI-iMQ+$amg?HAL=UPqRg%NXVIGAB zKXV)jTpL4^sf#%uJ7}`&%)Tr-oIn{mwKY(=v(b~C%*{b}{jnevPH{7GZhRn;yfklM z5oK71v*?THTj?qEOnND@-DmK{?dWHB$C;AMtthd2B0U%g{2IlYfc!lleYk4Y6I6)} zJVpf4&qLs+OYCY+53UV&1(+untfPv~L=~?GQmA%*v|ul^OgGerwrB`a+!4rd^F<}1 zE27(?p7^w;Vm>B${KbjlqY{0gDleTQm51W)1EuW&jCx1hpweh-pyd1FX!|e}@P63H zX&qTc94F3W-Z3E`?s6VFTX~pA!N;TEImp;Pi%F6gYCIHq3N;NmK{k5DdC2sNFi%y6 z+^PaPy$UO~f!c_az6E--gW5?Y(a6y4$~09tXHA+m=7IERMo1M18iU56325eUbyi51 zZO}J$LL%yloWUDCpKw|hde6D2?E-Y5OW?K3(TA?2Rnh8@^|#R4(BJHY6C~3W>B@9< zx+XZ!h;9mB%fL*F0Qs0Dw2XxP9FSMLNcqnj9xR9+Ob>x`2#5NJp~uqWp+ORnW*5+l z=q2X7y~GMX4ISdkr!PUtx@Q<13*PovJ%M2bRT>M@O&rdX*ACI=Hb=1fcU z1FSJ8<-l|T?zy7t^PeY(OH@2_z7}d02sOZIJ3Yv0PZLNN2pELxaG-AxOdESsPf1tR&WM zBw?A*rUlSnC8(KlRt3_qDpnm5|3+35tA#~oDTK)P#*9*VWVLEwaZ##`WrNv=>qBr=*7pz_HahfW zf^zg(D$!|az@$JEa_~;DrJ_(BU1)6~1#>t?n8zS6Kfr-nG8bAx<+%u5g&vp*^AiRm z;SR;*Lo9S(BBoQ)(CNrR{*#NIU;)^@1XD`o!U`loO~Mw;`gH)|$e3DD7HI+rDCki$ zL>#ccxyVvv1y5sxPPLQB1(Sdt&|;zJ%SDP}kQsgUYH64U%z}o`g_0?PlCOYXs6vX` zBx(`0Vd|+9dW|er6swBWfhl@oBj5@l763;r#a7^cC$WpzRqTO@3_o!Y_$366CQ=*& zJrfV)DFa(q!QV6>6KTWjAaIC~Cvkuwii9$uN~jYQLJz%dQ_OA%2y?;`DX0TF+^)bU zZ={q#m@5n+LXqu90F#Y7RlPs50+q=5oSsWV3h=+QluD_1(eE#!z^N#U=p|-(+8F8D!70Kb|W-d z3%d48Kih!cx6djs<9Bu)x)z%G|a4I-;aHfsuVYP7D z;Ks;YO=;dkAf4iH1(;g3#ALApGH*Xj7l(4g(c_BY#&Q$6NyxqPkPen`f7GW<$VtB< zRUL4uO^Q=wAeAzZit+|!0F_epi$)=T(I+-PDUh#~8AFSeR%W8K zG9~p<@VAwM_7{~9{uB59$h#80)dZ7$W-%*{16G7&HAvFENKTA&JxJCy1?qgR`F|oyMtz8|mOG^3-{nJR@{Et#~9?c}b*> zn>`Z*;~N57;n>;$g`NHzI9x709}Pg_rr%)kKgVGS1_ymPSCL=N)@KBkpl`u%^<@XN z<*#TffSPpprXfG$s{~sUkv#2&XZeb(MbMK~=)C_9ODS{-ikkj|j`W~={}c6?CPmJ= zf6$A{(29D$RfsOqnZwZEXu?cJ7Ia|QPb#nl3Q+ME-6zp}*1ssd5U9NPf1>Rwe$aG3 zBIRd{)cXxex_r@jk*pZjuQ=9;UK*LNh<>dqru;Pd+I$LM53^njzAOLtIxLZ20L7&V zP2~aIR434c`pJcYaYB~38|a`8Wf6kPm)3lcJShYVI;#sKII@GBuvUzi$Gwyi{R8B!vmZK&~s7C_T=!%X)2rm@V z?rFRNq)#pACQxu3y`fRaNLyBTS2#Lyx9FZI(+lCJBg5Ku5X)o8vLf zm?qVVmBK1$L`A4V4s@V5v|l_D`ZOrM5@@^*kt+0@IW%056mN6Ic|hAn%mT}k(tryj zLKDbfg<~(#O#~E^4e&G^_$hIHCGdK6aCWLv=jMcJlc*R8N=j-h7k;fAK21_tBzQAT zxH1Bc%nDA-6$xYroL4*?m!xJ2;Imrjioi$?G=n#)As)`C3eKmI;ROHU4eugZ(?6nT z(l5TH2#)3Z+Lkb62N+V3s|sAC;J6cDNOQ2G4UWGnkTD3@7>@H04}44kLT2G?NcgcF z*-ahJN(-=(#8c#{;_Og>mjn>g9B0V}`*U1*-n<~3t8iY7bZp*QNqAoOX7LE7>a$j@46(*gXq~|n9x=$nqz9bRT{AoD9xu}d1^eQTGo*Vfs zIMXEf5mk5*3eGoy*;jM;5F4CzSGbTMxRCI_bRl`jM~Va`a3f!xMbH;-@twOjz+of_ zQ~uIrRAEO^1A5Ni-3CeY*>9*~np{()2ghNGj=*2J4nIt11f#-3zqyZ}dquy~37>t) zKdJ;pv9i>SV135ROIp>WUo{mB2ArWXM-}c+6aJ9G(fh$83OMHQiB{ONU?XMOue!?* z%1gqwq0+jI`K=0*u&+dkNf@|{Q!ZuUs-IL@2fCjmC^JQ_GS;4im9??{^rT%miB9{h z(t@GRB7p%Lpv-n-1}z)vtO(jnlI=EN%D)Xg1u{<=T&>O1?o-M#z-7-C!Y*2tPUTn2drVh2U|)#uw+8PPY^71z_D<@ zNpQZIf^0z^)>@f#y0GDkk|aY#s>AQMb1kJB(giM8;&DTvA7g=2pVebFyloMD zZ3XbE0V}Od>S>j+zO=EvOtH2EaI@BMvMzA3eppMPaIvxQut{KzO!(J4xYshc*D9pl zO>nNAm^)L3XVr#hH5D_Y%FzH!;wG>U zoGOWwB2Q`q|B&HT)d_7lRa59B!8e!c0f!n44H_wRripN+X>g>uaHA!djQi?DC7h)Q z2dWA8X(UBab1;~VbSI*>RP9J~>Gw1(SE_R)tX3!GwT^Fol7hU90K=I}8O{j_nIs6B3%^-O!?*tt&oN}0f)W8g&|15Vt~boV8k@3 z^D999RSrz913R`L^CBVdl1vp-kaH2hXmhZo%@=PMgiI?Od6opRQ^1~Cj9f5i33N-P z6u(=LS&@)esUoYQAg3b0tLDh3Y>-X4enIwdY{Th%YJQDZh zfps4XewH9^CRTg}Qk>7o+JR|YQjh|PBB9-1QbdU|@s>1m!xf}6!`5IiKQLG<*eeT& z(TK@83fM`)OTplx&n(oy(*)-@foBrIEtS%gOC4;&0fU4fwaP_8)dBs*!8;2959H## zbO<$}6eL_M?r|hl9MwTblAnvYjNP-I zu|+bJl%hZi$6sVZ@k`<(`6-UHlB}d&Lz4JN@}6L54N2BR;M@k`yv9Ry<$g&K8<8AJ z&QK=$-4bV=_sv`X>Z@~sh6TXG7M?1w4=-G*!uCpvdsvQ6uk=h1^HH-zZ^ z?JdhF2a0N4$9pcIjKP&EJQq^ciC&T~c2Vp0`3n>a zT&03KfY6qFwX2$j11_ZDXg|Wv!Oqd%fim7RctPMCUtIUYRPuc}HGS##=FFQLOtG^c zMzQdm6YMkd>(vE@;nEX0;t6FayzO|Tb)N}BtyWI16Jgw~Md-IoU-!)@+&it3@{K4xw9t4&* z^`^uti5@ftU)0QASK;n)Z|N?D))>uM@q+|;AJtk`s4s4B(21*Pusz??YowxWX|%e7 zIFJ4@%rEIv@9moTwsFk8`(~ER@wzu~=HZHMA#w#ayvDMYs=OW69}mfIV(LtCKK|*- zTj6ojoOXxmlE=Mx;|^M{I_|PH`#42-Y3U%w!7#q}Oc~3^GUG?uZ=<`u*>KvP9Y5FN z744k;i+dR#gU9<^@Qrm{UsH5Jx%NKoVA*=UZOBHi)z5_!KPs2|sPt2LrElO%_kR;G z>fKz6hhaVT%sgxyN{gJ~xU#5w;d%!`OD*%p6864lQ+a+&mwUr*_qv-tx?62!_$sCK z?s3OvUe%Ae9GQDqyql|XM|Q`vUe+5!U-`OW3%i?&FPTion9LEFHVXapfcmu z6Zez1raKOO>T=#lk*v?n?J+q0rS)d*F5>QXubW?(MX1Qi;i6l+hNI2UA0^Pg2e~&{ z-G1R2=ZwK)t~!L@uiRF!{pAt4nWaPz$+uNxWImC}s8rgb!(TtHGL$P; z8TL0+gm%CBMrO&dEuPAAi|vw2JFad~SlaKdg+}rYS;tA6)LZQYhATE0HS6$X*gNNU z+S?RFZaeQg{$%XH2|ME)-PgVH(WuOesV~at_Tfd^ld+B_3KW0G5M!<9(+QWcdOaOK z>1_>|W-|DBw{gi!-^g$_sBg6BqV(Q1{kiu3Ua=`#r|nCeHQ9f)Sn++ywGoFjH9X>b zsmwJRTKqt7e5X@WOWTN#gN{Bki@SbjgqwWf=D@W1bJnhoWgR-xUH;1KHIMcN>iF%Q z?Ot42zI={yt5?sJ%1LV0a~QRGH)q#o%&xwF!Y@|PYpUnn{7JoXEPOvbtQj}6r|s1( z2b=ojG|pZZTQmA&HFNe(4Z{uESKaCjP6h7r(jPeWQFZ@rL%sX)BMvn!_ll}Wv<*Id zVoUhSPfJ6zTo#UT9hzW%(3)*xdhvpLNsp;-SW_<5>Fdj6SNH9bw16Zoue#YJtax`y zTo!dJaB2FG+7q&GUT@xdjCuE*SJsL#=|($r<370<`rgl)@T$vm($I>@D@yH#ZG74` z>h^PwVUD3|Cd+QDcHe&X#B*n(;K)7Oj>lh6?o#`DB`cVA%cw9bt6N=?^*QZZo%KG) zMvYu%wliY?jTx3fMQc6{p`SdkcJZ;Gn1dp%tL8?Poh9+7rfwPZ+U}84u}%!t;(1K} z+vnp17PI>A)2vw{?A_}A_ELP>2O>hDFA+hO{etlB{r#2gWOnf57iv&e4%F`Y%aS1` z{s8c!hEp|(-V#*qs-|L(>j(LG1yZbi{BbQI59$zNu;e>(YIkcN2Kfmsvzj|GZVH7($i-?ff z`QrzaBCpI^Ag|0S*$A0sq-}$@+rMLq<6IRiW))n0y|lf=-d?lh$_>A;PNyy#`z-XN zck4NTG;*Y$MTmKcY*xY@o3x4JH9wWSJ91rbOVmQG#txR;496Za?&0;CW&Pt!`pjD5 zwlOv8c+~Fpwzl=Ndh4B?VRr3IXU+T?Rf7lA5If$jyW3v8X`CutI>bLqM|W|X<8^nv z);XV!wXAw_?z!u1*6k#E=7E7X^;b+#yC-_2H{y=UjZHyYwALrdo%oRPc*f=WkgEIQ z@d;6Pu4UZvoRl2)YVb#+7|Vu;vJAN`t}@-VZ+@_ffAlWX=e~1#m$@1r2Q0WWjp;p) zyLZy|)pv%=AO4{KK#yT3yVCaZI<1WRyxGUQyof6vu)wr4vnts<>5TU?Zs2N>&y^CL z12P?(PK~n{sqTO6+;G0|?4#6i#k=oY2h6B{nbc8t?#|6mVXl^n!>i6PyDYsoFlEZK z2-fW@gAlx=FC$R88uS-PE@xN-Kib>gVhXXfUIOK#Q8 z`4Dx~T_w}2VGHl@b1M+G0b9;oHd%2_ctIE*BOE=y!-fDX~ zznYriy!}S4dsnTOl+wzE1&3ps!?)h+w`X!2Pt9fWvE`Q2-(>Y&w8ZoN)vPMw^dM{b zgpT4#A=m3~+09*P7rFDK!qFT0t2qpRi+`L5W+bt5r1Vouocu?7cb z-D|zQqjGSiXVBY?sRz83$1gRzX>=#+gm3tYJKA6e5!hkxXLjgGIvv+Ps`$EHKYu!V z2R}+C{g*XE{AXZVLJkaqOJjc{2mBKc{|PztAv92vWJTp37H+TzM!UV99s6#GEc^Tn2Mdo= zy9YYQ6i(Tzd&kNzIr6!tQ_m}#2kd$1)V-gZLielvUFiL8r0^>_tpqtm z{X|Z`WuNcb{c88r21HT_IZUBU@v39U%AyDaffXlcx6TC%{E zZOm8XT&y`#m?*}@vu(AJv#YTT-F^S0lho$hMIsYPy zSqy`ql5*I>uUrET^T!TW%dd~YVc(zi?{V1IXAS=Td5C|3!64y0_w7Dk+E%`nw%Aic z?Mh03Q&@n9&CRRl)Qc7c$Fcgou+29dTzS}d>+XhX(Zb^O8xpm3tRh?Upaxy#O+mtqc()a|s4b~g(O`TTFE!*f)dTd*R*~pK{k2#U{OM2gVlCfv~ zA)B6e>}PiHJ#K94rV-1o(<<}KoQ=cX)Q9P?MNtF?slLV%( zly2W1K9!eN;LtDW&C30xs3|8dr#%|udGJ;rnO#~vuCB+eOdP{xX^h+zY z@FVO~H^niweAvBZ=P<($Jbz_F#olGrTm9t8TYXoS+mR2x_dRUu?@{L&9=qm!SY(RJ z9{1e^&M&Q=tLvIRY|?+!WIc4c=@}U?$TBd9&li6o8_JbY-sgOdckFq0haPVq{z@SK zvl66VEy+&_(tpYd{a3uR=JAGJgUEWpLqGM_l}%WcbC4C4IjTZ;-C$AGk_Xfj+rZ4o zb@g_ujy>2^Q@&z`-pW;sQLNsDxAw+Y4$PiatY6OffpY4KfFBHN0eFQ%|HCei@r5Su`XQR%KUkI zgvZFV*K@NJHoo-pOg`f{MLTIy-wPolLxVCl^o!_|x#CIA#U9JF&2RPYW8CSIq&fKM zh}SRjZ+cBInkN4|-g?pF^KIpw?=FjIBh@IZRph6~GrEjS>b{<*G;@oSi}9`#%6kcp zpnN2Y8JYxwyZN^3{C8pU{md^VFrVC9bnVzu(!uojjN+v-Nvel?ca{ZcRt36$+-tKh zcX94^4e>{c^1PBk&T1RA;z>{X-aH%KS|8Umz3t&w-suhA>Gc!u{5BN&&O5*LOh0Ev z(f^nk{nimlVqG|*u4s&WbwoCw8Duo}!j4F>NEsF_{((W}%|%Qr$!w)g=v#t|0QaZ- z_FH@_B@*UW;sB8t6NZHT*THU{ov3u|Ke$DmS_lM|4n?x)e zll!i(T5~|qGriO4FMK;!D~e=1Mg3h554jPoP!pKC@Y9y5*SdyG(U#ddt!`9i#<{|` zVI`p<_G^Y5;ZJicm@+bWz@o`v7s6du(`H77Cyz6sI(pxq9Jn%O%F^Uei zi(Z^nmv{GW^^doo;%T~Z(nR-1p;aR{B%FV?A#k3K%bs=2a-FWulU8ionauR6a`&>= z$YqY-7^BIZ{*m|ngRAc^w#;E-beg$qW2qJ2MeBA@*8Zd!r6W$|m>!Q0 zNhyvWQC^xcU`(^xWcC_XrRTjxTMe6{x(|){^uC*;@ka&gNZ%@%mxqh*6y4aWrUw#= z013_dLPD&wS^1&;c#n4-t!9;8oag<^lKG$18~9Bw_7e$B`n$Q<_x{N*xtN0wu61r7 z?B*ZzQy}+Wu~5wR$`d2Jw)d}YJYleGtAj&9=xF(EWzHHZcQ&Y6W)Cx8wm^MLdPT#0 z(-KAdX_WE=eX~82oYJ=kxJO&kx{c~N#IwSX*FR%R*~lxr9f>Oii)u~Pc80O<@40#L zPU?lM*1B+C+0~~auVtE;D3Uu*Xr5ba;;p&$S?<#6Orx}W=Q9S{8rH9$ymEtLbF|Fj z0fLazog2H$WG+b9ntANRg8ZUtj<>(DQJ}}_`m;}Lb*?-Mc+$OO_NM9E#tnWQPTu#i z@1jBXFYY`%v~i4aO8?;u=cOHs?5Eb7kCf@U2 zZf_=(@7YqA(8qtZ+8|6BtT@m$@x;+-CM)Nrk35^9p0V{z#k^75>Z>XToGvgu(~p$2 zwukRF)~+EZGWr>jm!*B;oa~!4V(pW-`TgHcTRN{af93t2ae8A+%7*uwvM4*yd+iDL zf;UrLMrmq39OQK3RK4$z$5!VH1+9LUrtO`v_Llo&gNtUKyB02v8+VH6a;$#crlNyA zYW(X|Z50zfHjMO2?mpnkVvpB4s)iIjvqSg(Z5C=@FsoYpK}PLU?^M4CS+nx4LUsM0 z-H*)QV3-vhdIjq^+GWTI>aYfG+4afQVvCqQpmh@TIT-j<-v@?oZy406M zc9top+BR;!HFm7w(ml)jc@I(adRRE6%5DB=1Ka7B{4I8x zXkgvc6~3Y7PVpU9VLj5UcF??~ve88?e&SaYYxA932h>bkd5GpO*6f^gw=qbmRP35( zk<`a=qDx>8YCV6_(88nX34=xsaKAm(e#+sS72W)X9XvFB=<%ACa6h>i?|t25*Ou6y zlHF|Ju>Qbil@Sg}K_A^;kIP%O;|iUp)YoP5n zxjyjT+8wyWy6)0`mufr)b%eF<$!qnvKXO~=#^GbU-@bYAsEgaa#=r{Kro8nB42&;s zmDxs~Xf?j~Q{DP5c}lTcN8PJ#Yu#dOw9h9&FW>2&&WFbva@u^emkqL7cllNA*ou$( z&uAMD->o=hJL#tQxxY!%`5Yyc=Gy9=DbGx&1~eKSAD>v@d3*Ix2b-CJyyl0~T+H9L z9ILM2^6c8fqu*|FTQtZ_q$HQ9B4762aLK$AX|ua^SyMFO@CEe+>x8`r6TNn=J0qsl zT-`M)II64seReFpsgjh`XsmS8=t14fO^!k_SV$es^v*9Vv`F{hU3;HRD(gx_E^Qa; z#lN!9e+=4x!zn-YS{(l_r8?A{LN;|<-|&hVfzCj1~;|S!weV=D`RiG z7}P7=LG;4lP;8H7%j4ov~DTntw9%AY3mei0nhhC;TJ3H!e;GO!J zef9gPOpOa^7*|euHGiAx{qhHmS2UxSMZP{?dE2p-?y50!i9*an**6c1ZpiYLWRtn0 z9)xE-er|SavFYUcd8KRDZQOO_9NF4#Xh>N8q29$@^LKTD`|aXd)mPZc)?Lnb^*dt~ zt=zhGl+T@wYjTf^rVljGyLGPef#Uu*w>Fb}8h4GoUG-$Zx#gy-DP9k^R4AW4YFjjT z&%{Go`vwmhz1;o9y`YCZZ+Q+IxV=x)$9~2iI`yWN?K|aEb$GS^hRQO^!A)3?0Vx~8hZmM z8p2$?{l>l43lb;hFXVKc?0V=cqPxIXIQ`@+ehb;(eZ_RAW^3xAoo>U|*oB`w>b6;H zCvDq5Ai8Ac<8L%uehcc>pRL6RTvl~hia13W&Huq#{FrHdS%#lmED~Y!RoDF3V+s9g zBVa3nhyY^L*T=}GzCZC_xA`uq%l2gy9lb|hb?C`Ce%-y7yIjT{nQW<;;LCeISYN5{ z8kdfuB(2sH=JUb=wh83J#$Wn0{CHSm-O5F?7*8j8C$AcG8sLwR?J=$fAdPz%ABeZ zdmF1W@2or9-^tTX=5DueS*mKvG?tFJd9&;A6ZdZtf{izy8`7`m%3itZs2gZ;w&bRV z^Z5G-8l#q!7KX0vo+BTBGI6U+{iwxbCR(|*@7#FDb+1BQ&hvyG7j{>kG1=*MqIuQA zbY9w0^A^KM&VZuSe66LAD>^9g-uc=F=`)jcMkxwLybl`dKQ{TmwA`NACH2-%7s=fT zR>^cR-Znewp@O`vvoLc~HRD_%G z%=wFP0D>6$nJNtbk}4!EQQVTr4ln&*8IU#CyxIz_w&j1|jOLAVTej_7Wz~p1Ze-RP zg&p;Yo5EjLXiZ5>i9U9oab9VHHD(fysOirj+;B5Dcg3g`>|DKwX;l5votr*r!Rb4 zIEz=Ft{*!2xs-~Ry6$u3{FtW;x(It$jC;D#l)r|%CdGACS9uRpVU%|%D^1>!$KP=N?E$BY zuXitVv}>Pt>1c^#&XAkCA1?5Dwsk;AUANSlO3HGxTbrJCn`YZgN;K=!^=8(d`qn4% z$1NXuziivExV-1{8U0TsM_uM_YB{h#p;lpfyNvq!Q$ze(jO4%4RUGJQ)lYQwTR!?u zSKcpn(?9Q89@DHQzDevu5h^w*aRQvEm>ph*1F4vgZz+JTY% z{9HO@NjC=+m%@+c{;MSSwOQgvEc!}mptt~xCy)607!>#YY5yk0eSO-0zXy|5HT2@U z2`uYXX6+Xz+E=m3bTuKd|xk!v7OjHsYKs1^YoqJ59h{lyAg*R4IFPw9QGvF ztn0&}UHbFeNlA+mAA1l}yDgx0rFVI?`L@((l1WK8~k9eh@jr>daY&y)=AQmHf!o$8G5exG>mM(u&p z{Qg)2eZglG}WA}|Y@7aY9M>_@W3 zI2k!Ymc;W*qAXAh`|#>ji)X`rwZI3B-2=GPsGI%ONqx<`O%=6obR6cx@tCsgCC9z} zcob*xgt1p%PIHu9)#}%+*ZCO#nahv)*h~_yU*fbp`@nhi3#ZFn69at5F4eqqH=dXf z&5Tlbvd1{B+r#(cL;A~gOKqx=-H3I@Bzj?i1 zKDf3&b8)op^O)nS1{b`V94)-!#@*HI;6G%Ie!;0jGKsItjW+;t*GoPu7|jh#Su~;Yfznd@8Lj1t8;@n=T%oLM);7tjxZGv2 zk*82xpRwZU{fn0_lr`vHtx}CJs}Gxfb}&h|oGasE%njb2HbO6Gm%{F(OP2;+cyVpQ z!5ph?qc_Nf7tN{OHL~l61&`*Qf77^k#*2bwAAB3r_HRGXIkuPm;gXq#`62cU!?i_$ zCZihWj^{c|)Eu{{-}}Nt+tOs@+!ZXMyR7JVsjM}N+oMl4xntvtg%*;Mxd zYuEc(!zP~FUmp>$j^^1s<4B>oNBQW|6Rerp7tR;BMGYIV;*gpAwT!kWx-Jh^U7Ofg z+_C!k&Cn&!%BK#R{4qR5Pd6>OZD&(z1S zjkc2Ulq1W^Vh8;~Li783lB0I}_MnT*UzH@onGk>bQ6(~!MkbPL6rV0{o>OD9Q@Q9` z?f82WmxpneKBhnUxWICq?CNC0P_>T*2h884cUT=AyHKuH`!`jhW>rYn>OUoUNrg=P zf&+K0#W^>ow8yXibnBMW0_WQ9`?ND|doJO~4qZN{`zLO6weMBRIrrOl^;h*9GGJV_ z%W|cDk79eQaAtq7ZavwQ=QzQA+^g0BTH{}_?e3W0EiJuAY+2oQ=i0mhoEKz`^y>#0 z9eFc*TUc8j&hKOGG5O_l>&mrmu@45uy*Y_eJArM|fr0!=bsnJY}pql)Id zbR1)Cs1bDc^c6<%tmT<|EY+3nzCZA3OaQC<@^b-&?Auq%Y7dwixxSpeMK)j%Bjnfs z8ub z0>oRwZJ+wG?tZw)k5l3F8{Q|`p!TUr+RNkDGiSE=%+c~aIYO&iL7uTNmA2y1sOJt( zwOp5kZF}&1SMA84;t<#T)f+CXpEUb9Av-HuW<$>d#l?rV&v|o6O~%adzFJA)TNjqz z#+Hu<#t;#7tM9;0mZ3&qzeWU|@ol9^_QcTj@uh*1JuxbhCG>SM189kb-+vkVVtm1K z|K7eB>Mu`Brd;>;>9u10yw1`*v!w(3I-733;B@2dNE6w#jj}@q&zhC;XP?afr7b=G zl_UJKPv*})nLqnv{_KPY{s0wXwv+!hxEVSqxrK>=FdKv zfBQ-+fA-1z*(dX7pNwQi;HLorx&Lhw%76CB{Mje-XP?aHK{frq98~*u;hO)dDe-5Y z%%6QSGP@#V{^i}8za6^%HJbZ}D}4QCx8`q0s%<`xRR53Mt@&r4%%6QSfA-0IxfH0( zKU|dT&pw$y`()&P3+jLN$^6+T^Jkw7uAeNu81a8*tWtWVN(QEr|Ll|bvrp#FKAE2{ zQ}$<{3@%*rXP?af-hDC(Mc9m4@PB!q%+Hg|DG|7GcTa_`U-Z9{7MY5RdCUBp`)4q$ z|JVCx%)Sj+W0ZdonNoP#iCLH`Tg|>#L7Nt`f~{||Jm$K+veT!6?PCLGJG1}a?xj)Y znobCb%TQh!WY?@}NcY*@WXaxfa-zeSrjHN(w0Ac@S2o`zw?mg6vZVS^!Lh8@tyA_o zDJax5^io)I(S2d4Q*nC8n1bssZAf?89~%_3jGi&5YoIoXS(|#Vz1J!Im{UE}`mXP$ zzSS~2tfy>yu{Brd(&to^hRRJKOH~ zlpAsOz0UXQ)il8^e9t_ERsC)xv^**e$=T9X5m$pAKG~?vwR881J6EC@XJ|4B_qEQ{ zN7Q=1lDYmo;n{)tAK#}&$PN1cX)g`uANSIXE1@_f_G@iEc}qt*^vHqK=#viVw}uzl zhsVfYdTTMr_O6xT{K$a;SzY%;_pTnTy5%=}X@t|~&d^{E^JvpDsIi)`sYdRDvDy0W z3YRTBr|o@R!Q0+pHA^o}&1bxK^4ZLXT{D*CC9JpWtUkTiuw-gQ;U1IOEnB**J)POn zd+mg9*vt=XPS4BH!%H&VTa?P3-W$R;}!jM49ZLsO~Js@v0DapP_& zw(7LpcX~Xl+hK))*%QM1yuaU&r(Ju)J;US8sYN$m4@fZ$C%tN>+V#{A@u`sCnyJO69fqYYjzazS^~-zEjqwX1*(m&zFgv>>;~d z<#v$wO6KJKJd?v^r8+7@`<%UJFQYNX{%-HRJLekO9*+xrZQ(QUPEfSlr=gFui!K@T zupg%rxajuwt5F5gIDA3guGSJHnKU@wQJi)`e@;~=rPG*kM5njOgs{~ zkDWhaS>Thbiz|;k{IKfyo)dx3ume1vdQ)vfPhwnNnxl7Lf E0aJ?fAOHXW literal 0 HcmV?d00001 diff --git a/vendor/pageant_sha1.exe b/vendor/pageant_sha1.exe deleted file mode 100644 index f11c3780025ac6010753ca49a9fa029ecd658b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147456 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

9e)kJ^9)_>C#6xU(w1|Pwk$}yt_Om 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 Urs$DCT65;8wi;G7uyPIj5C2^W5dZ)H diff --git a/vendor/private.ppk b/vendor/private.ppk deleted file mode 100644 index e69837aaa..000000000 --- a/vendor/private.ppk +++ /dev/null @@ -1,26 +0,0 @@ -PuTTY-User-Key-File-2: ssh-rsa -Encryption: none -Comment: rsa-key-20141021 -Public-Lines: 6 -AAAAB3NzaC1yc2EAAAABJQAAAQEAkr6tlPb0QODfJJRhwsSsN88TSB6pgk/6x1KM -yVuDE6SeKz5sB4iaQfPleLSaWxuQEKkoa4sLAROy18lSk0PMioQHM6tgXbOcpTbS -Yf6uf1wtAMeFTO7vP0ZuIXbYmBmsK4DK1GWQq3Db5+Q/xbDp20dlCvCPMdokhYFr -N2B9G0C4AKgXRMS+loEXwOeQiupfYcUXfZiCOoviArCcLgRsUNZTeTbP03skLBDr -2xMdpaGx8QgSylz+yGeXRNjXaxE2mnwwVkBnNYsInZhw4/OdxddyilDealpcwp7x -enAwWsoLd9NlpskNCEQsznPMAe66/PKvRGl22+8tpNBzDbnZsw== -Private-Lines: 14 -AAABABPUk/9fpHd4VYF71dwMvVOmXI00k3J5gsD9UUuklSwrAJ4PWrTo8kBDjbZd -mFGAQ+aTZlO41/k6A2lEuCG9Dc2HdphHl2abuzjru5CztrdDzrrqh6Kc1Dj7rgSF -rpEYOdxdgzF1gkCuYuf8P/ge035/RQF6dDcrUQsfU62JlF2gwQpVbQZ97DC9uGtt -ktYY0pSVU36xty4uQ148mOC8TXWFOxaGPOFq14sxmBUFVhHsmHnytQULIkibRCze -bfkpJNAizNKTNCfupd3aub205kzG48blZ3eWxYtK3mreiSDvhdWNWiyVhTajkXGQ -r3a+AqE/8e5Qks7ekzbpKk388a0AAACBAOftyBzFLENp3ccimF7ctlS44H2hfas4 -2PQVbDpCKrY1u0XC+vn/GqgAVq/hcHeK6DrkaEK23Q30phNN7+8BDzR1VxO27TLg -UdwFE0z/0jnTuwkJcusO7bCb3dGGUX4ENSyRpNJVyu4X4iKuz03+ccPD3utkTIMI -zCskK5VQT0MBAAAAgQCh+ZsG6SfakMD76b3zF3xaw8bJmPe+q/YumlDDbM6sG9q+ -3Fp5trBBJbGjXhTCyUkOuWiUh8cmVBFYRHrtz9GLVCOXVd6yYOzHlTKSNRnu7Slt -jdX1s0QphmPlQ6/uyUIAhrIrOkVFKNrV10Kex/7jwwdfL8i1cecng+dxfE4AswAA -AIEAiWClSrfWJTIKa3CZtIxlbHFHNLAVEuDjGeyKIMZ96qDEM7jDQ4vUzAagw60D -qUsJQMyx9RFfSLDYE3TZaXGrGdSXcFBz9f9xLcWLe/2LH7NUmjpUf5GnlMSs7+Br -ET2wiPd6NDf1kka+4+zMOgFqJF44xgDuNLnM3ty4EFlfzlY= -Private-MAC: 6e0ff7c94a3253c5e45b3e06951e04d2b06e6262 From 9d6fed966b3d7570c8d216849b839b26c01f7d2c Mon Sep 17 00:00:00 2001 From: John Alden Date: Mon, 17 Nov 2025 15:44:00 -0700 Subject: [PATCH 095/103] add macos arm64 tests and prebuilts --- .github/workflows/tests.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 218fca650..3cd6aae10 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -72,10 +72,9 @@ jobs: strategy: matrix: node: [20, 22, 24] + arch: [x64, arm64] fail-fast: false - runs-on: macOS-13 - # This is mostly the same as the Linux steps, waiting for anchor support - # https://github.com/actions/runner/issues/1182 + runs-on: ${{ matrix.arch == 'x64' && 'macos-15-intel' || 'macos-15' }} steps: - uses: actions/checkout@v4 From 1818a7d5a93dab32e5b3f74e774c88664abf7acf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Nov 2025 18:34:31 +0000 Subject: [PATCH 096/103] Bump tar-fs from 3.0.9 to 3.1.1 Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 3.0.9 to 3.1.1. - [Commits](https://github.com/mafintosh/tar-fs/compare/v3.0.9...v3.1.1) --- updated-dependencies: - dependency-name: tar-fs dependency-version: 3.1.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package-lock.json | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 64454026d..470a58606 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5195,10 +5195,9 @@ } }, "node_modules/tar-fs": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", - "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", - "license": "MIT", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" @@ -9686,9 +9685,9 @@ } }, "tar-fs": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", - "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", "requires": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0", From d8db070d7456768675ed9aa811d8e55523539ab8 Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 21 Nov 2025 15:38:52 -0700 Subject: [PATCH 097/103] fix incorrect git_time_t narrowing --- generate/input/libgit2-supplement.json | 6 ------ generate/scripts/helpers.js | 3 ++- test/tests/commit.js | 2 +- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/generate/input/libgit2-supplement.json b/generate/input/libgit2-supplement.json index 742216f03..12ee8945b 100644 --- a/generate/input/libgit2-supplement.json +++ b/generate/input/libgit2-supplement.json @@ -2444,12 +2444,6 @@ } } ], - [ - "git_time_t", - { - "type": "enum" - } - ], [ "git_trace_level_t", { diff --git a/generate/scripts/helpers.js b/generate/scripts/helpers.js index 15790983f..e278e1cc0 100644 --- a/generate/scripts/helpers.js +++ b/generate/scripts/helpers.js @@ -25,7 +25,8 @@ var cTypeMappings = { "uint32_t": "Number", "uint64_t": "Number", "double": "Number", - "git_object_size_t": "Number" + "git_object_size_t": "Number", + "git_time_t": "Number", } var collisionMappings = { diff --git a/test/tests/commit.js b/test/tests/commit.js index 69868333c..8ff9b8ea7 100644 --- a/test/tests/commit.js +++ b/test/tests/commit.js @@ -286,7 +286,7 @@ describe("Commit", function() { it("can amend commit", function(){ var commitToAmendId = "315e77328ef596f3bc065d8ac6dd2c72c09de8a5"; - var expectedAmendedCommitId = "57836e96555243666ea74ea888310cc7c41d4613"; + var expectedAmendedCommitId = "a41de0d1c3dc169c873dd03bd9240d9f88e60ffc"; var fileName = "newfile.txt"; var fileContent = "hello world"; var newFileName = "newerfile.txt"; From c999ce2f387f3fdc04dba21c3263997bc2b6af91 Mon Sep 17 00:00:00 2001 From: John Alden Date: Fri, 21 Nov 2025 22:05:34 -0700 Subject: [PATCH 098/103] Bump to v0.28.0-alpha.36 --- CHANGELOG.md | 20 ++++++++++++++++++-- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57d0616de..d7c020aac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,22 @@ # Change Log -## v0.28.0-alpha.35 [(2025-06-03)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.35) +## v0.28.0-alpha.36 [(2025-11-21)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.36) + +[Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.35...v0.28.0-alpha.36) + +#### Summary of Changes + - Use openssl unconditionally for linux electron builds + - Fix cross-compiling libssh2 + - Fix Windows SSH keys, tests, documentation + - Add CI tests and Prebuilts for MacOS arm64 + - Bump tar-fsa to fix security vulnerabilities + +#### Merged PRs into NodeGit +- [Bump tar-fs from 3.0.9 to 3.1.1](https://github.com/nodegit/nodegit/pull/2034) +- [Use custom electron for non-static builds on linux and fix cross-compilation](https://github.com/nodegit/nodegit/pull/2033) +- [add macos arm64 tests and prebuilts](https://github.com/nodegit/nodegit/pull/2030) + +## v0.28.0-alpha.35 [(2025-11-14)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.35) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.34...v0.28.0-alpha.35) @@ -16,7 +32,7 @@ - [fix: correct macos arch labels](github.com/nodegit/nodegit/pull/2027) - [Add Ability to compile for arm64](https://github.com/nodegit/nodegit/pull/2028) -## v0.28.0-alpha.34 [(2025-06-03)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.34) +## v0.28.0-alpha.34 [(2025-07-23)](https://github.com/nodegit/nodegit/releases/tag/v0.28.0-alpha.34) [Full Changelog](https://github.com/nodegit/nodegit/compare/v0.28.0-alpha.33...v0.28.0-alpha.34) diff --git a/package-lock.json b/package-lock.json index 470a58606..9d9e87f01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nodegit", - "version": "0.28.0-alpha.35", + "version": "0.28.0-alpha.36", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "nodegit", - "version": "0.28.0-alpha.35", + "version": "0.28.0-alpha.36", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index ca97223da..4ac0afddb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nodegit", "description": "Node.js libgit2 asynchronous native bindings", - "version": "0.28.0-alpha.35", + "version": "0.28.0-alpha.36", "homepage": "http://nodegit.org", "keywords": [ "libgit2", From 0e1f4de44045579a03e411cddfa1e61067a3a703 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 26 Nov 2025 12:01:27 -0700 Subject: [PATCH 099/103] switch back to upstream nan version --- generate/templates/templates/binding.gyp | 2 +- package-lock.json | 53 +++++++++--------------- package.json | 2 +- 3 files changed, 22 insertions(+), 35 deletions(-) diff --git a/generate/templates/templates/binding.gyp b/generate/templates/templates/binding.gyp index 741d964cc..4476c9236 100644 --- a/generate/templates/templates/binding.gyp +++ b/generate/templates/templates/binding.gyp @@ -56,7 +56,7 @@ "include_dirs": [ "vendor/libv8-convert", "vendor/libssh2/include", - "=6.0.0" } }, - "node_modules/@axosoft/nan": { - "version": "2.22.0-gk.1", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.22.0-gk.1.tgz", - "integrity": "sha512-C4xrZ5HQoWwoq/WZnKDhf/Jd/czIaa0gsjHV792qUp7b7H+4Xtw1Um10BiiU/zrgmGhQuA92dedU2/rGvKErNg==", - "license": "MIT" - }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -85,6 +79,7 @@ "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -899,6 +894,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -1759,15 +1755,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -3985,6 +3972,12 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/nan": { + "version": "2.23.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.1.tgz", + "integrity": "sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw==", + "license": "MIT" + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -4522,6 +4515,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5968,11 +5962,6 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, - "@axosoft/nan": { - "version": "2.22.0-gk.1", - "resolved": "https://registry.npmjs.org/@axosoft/nan/-/nan-2.22.0-gk.1.tgz", - "integrity": "sha512-C4xrZ5HQoWwoq/WZnKDhf/Jd/czIaa0gsjHV792qUp7b7H+4Xtw1Um10BiiU/zrgmGhQuA92dedU2/rGvKErNg==" - }, "@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -5995,6 +5984,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", "dev": true, + "peer": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -6544,6 +6534,7 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, + "peer": true, "requires": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -7197,15 +7188,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -7725,8 +7707,7 @@ } }, "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "optional": true, "requires": { @@ -8810,6 +8791,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "nan": { + "version": "2.23.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.1.tgz", + "integrity": "sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw==" + }, "negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -9197,7 +9183,8 @@ "picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "peer": true }, "pkg-dir": { "version": "4.2.0", diff --git a/package.json b/package.json index 4ac0afddb..41ccc32dc 100644 --- a/package.json +++ b/package.json @@ -38,12 +38,12 @@ "node": ">= 20" }, "dependencies": { - "@axosoft/nan": "^2.22.0-gk.1", "@mapbox/node-pre-gyp": "^2.0.0", "fs-extra": "^7.0.0", "got": "^14.4.7", "json5": "^2.1.0", "lodash": "^4.17.14", + "nan": "^2.23.1", "node-gyp": "^11.2.0", "tar-fs": "^3.0.9" }, From 03b5353ca55c67a1ffdb3c4dc42a5d6fb19cf7de Mon Sep 17 00:00:00 2001 From: John Alden Date: Sat, 15 Oct 2022 01:55:32 -0700 Subject: [PATCH 100/103] Fix Alloc-Dealloc Mismatches --- .../manual/repository/refresh_references.cc | 14 +++++++------- .../templates/manual/revwalk/file_history_walk.cc | 8 ++++++++ generate/templates/templates/struct_content.cc | 4 ++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/generate/templates/manual/repository/refresh_references.cc b/generate/templates/manual/repository/refresh_references.cc index 5ddaec57f..5194f1c48 100644 --- a/generate/templates/manual/repository/refresh_references.cc +++ b/generate/templates/manual/repository/refresh_references.cc @@ -244,10 +244,10 @@ class RefreshedRefModel { } ~RefreshedRefModel() { - if (fullName != NULL) { delete[] fullName; } - if (message != NULL) { delete[] message; } + if (fullName != NULL) { free(fullName); } + if (message != NULL) { free(message); } delete[] sha; - if (shorthand != NULL) { delete[] shorthand; } + if (shorthand != NULL) { free(shorthand); } if (tagOdbBuffer != NULL) { delete[] tagOdbBuffer; } } @@ -344,8 +344,8 @@ class UpstreamModel { } ~UpstreamModel() { - if (downstreamFullName != NULL) { delete[] downstreamFullName; } - if (upstreamFullName != NULL) { delete[] upstreamFullName; } + if (downstreamFullName != NULL) { free(downstreamFullName); } + if (upstreamFullName != NULL) { free(upstreamFullName); } } char *downstreamFullName; @@ -375,7 +375,7 @@ class RefreshReferencesData { delete upstreamInfo.back(); upstreamInfo.pop_back(); } - if (headRefFullName != NULL) { delete[] headRefFullName; } + if (headRefFullName != NULL) { free(headRefFullName); } if (cherrypick != NULL) { delete cherrypick; } if (merge != NULL) { delete merge; } } @@ -573,7 +573,7 @@ void GitRepository::RefreshReferencesWorker::Execute() if (isRemote) { char *remoteNameOfRef = getRemoteNameOfReference(reference); bool isFromExistingRemote = gitStrArrayContains(&remoteNames, remoteNameOfRef); - delete[] remoteNameOfRef; + free(remoteNameOfRef); if (!isFromExistingRemote) { git_reference_free(reference); continue; diff --git a/generate/templates/manual/revwalk/file_history_walk.cc b/generate/templates/manual/revwalk/file_history_walk.cc index 714d6f5db..569bb022d 100644 --- a/generate/templates/manual/revwalk/file_history_walk.cc +++ b/generate/templates/manual/revwalk/file_history_walk.cc @@ -31,6 +31,14 @@ class FileHistoryEvent { if (commit != NULL) { git_commit_free(commit); } + + if(from != NULL) { + free((void *)from); + } + + if(to != NULL) { + free((void *)to); + } } v8::Local toJavascript() { diff --git a/generate/templates/templates/struct_content.cc b/generate/templates/templates/struct_content.cc index e2f01ca58..d79396f76 100644 --- a/generate/templates/templates/struct_content.cc +++ b/generate/templates/templates/struct_content.cc @@ -121,7 +121,7 @@ Configurable{{ cppClassName }}::Configurable{{ cppClassName }}(nodegit::Context this->raw = new {{ cType }}; {% else %} {{ cType }}{% if isExtendedStruct %}_extended{% endif %} wrappedValue = {{ cType|upper }}_INIT; - this->raw = ({{ cType }}*) malloc(sizeof({{ cType }}{% if isExtendedStruct %}_extended{% endif %})); + this->raw = ({{ cType }}*) new {{ cType }}{% if isExtendedStruct %}_extended{% endif %}; memcpy(this->raw, &wrappedValue, sizeof({{ cType }}{% if isExtendedStruct %}_extended{% endif %})); {% endif %} } @@ -132,7 +132,7 @@ Configurable{{ cppClassName }}::~Configurable{{ cppClassName }}() { {% if field.cppClassName == 'GitStrarray' %} if (this->raw->{{ field.name }}.count) { for (size_t i = 0; i < this->raw->{{ field.name }}.count; ++i) { - delete this->raw->{{ field.name }}.strings[i]; + free(this->raw->{{ field.name }}.strings[i]); } delete[] this->raw->{{ field.name }}.strings; } From 03ce68b5922364ec2d37767b633606ba49db403d Mon Sep 17 00:00:00 2001 From: John Alden Date: Tue, 18 Oct 2022 11:03:17 -0700 Subject: [PATCH 101/103] add a couple more fixes from julian --- .../templates/manual/include/configurable_class_wrapper.h | 2 +- generate/templates/manual/src/str_array_converter.cc | 4 ++-- generate/templates/templates/struct_content.cc | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/generate/templates/manual/include/configurable_class_wrapper.h b/generate/templates/manual/include/configurable_class_wrapper.h index 283eb7e44..ff83a3176 100644 --- a/generate/templates/manual/include/configurable_class_wrapper.h +++ b/generate/templates/manual/include/configurable_class_wrapper.h @@ -40,7 +40,7 @@ namespace nodegit { virtual ~ConfigurableClassWrapper() { if (raw != nullptr) { - delete raw; + free(raw); raw = nullptr; } } diff --git a/generate/templates/manual/src/str_array_converter.cc b/generate/templates/manual/src/str_array_converter.cc index 732f16cf2..5d04c6562 100644 --- a/generate/templates/manual/src/str_array_converter.cc +++ b/generate/templates/manual/src/str_array_converter.cc @@ -65,7 +65,7 @@ git_strarray *StrArrayConverter::ConstructStrArray(int argc, char** argv) { void StrArrayConverter::ConvertInto(git_strarray *out, v8::Local val) { out->count = val->Length(); - out->strings = new char *[out->count]; + out->strings = (char**) malloc(out->count * sizeof(char*)); for (uint32_t i = 0; i < out->count; ++i) { Nan::Utf8String utf8String(Nan::Get(val, i).ToLocalChecked().As()); out->strings[i] = strdup(*utf8String); @@ -75,6 +75,6 @@ void StrArrayConverter::ConvertInto(git_strarray *out, v8::Local val) void StrArrayConverter::ConvertInto(git_strarray *out, v8::Local val) { Nan::Utf8String utf8String(val); out->count = 1; - out->strings = new char *[1]; + out->strings = (char**) malloc(out->count * sizeof(char*)); out->strings[0] = strdup(*utf8String); } diff --git a/generate/templates/templates/struct_content.cc b/generate/templates/templates/struct_content.cc index d79396f76..d7355d2a2 100644 --- a/generate/templates/templates/struct_content.cc +++ b/generate/templates/templates/struct_content.cc @@ -118,10 +118,10 @@ Configurable{{ cppClassName }}::Configurable{{ cppClassName }}(nodegit::Context : nodegit::ConfigurableClassWrapper<{{ cppClassName }}Traits>(nodegitContext) { {% if ignoreInit == true %} - this->raw = new {{ cType }}; + this->raw = ({{ cType }}*) malloc(sizeof({{ cType }})); {% else %} {{ cType }}{% if isExtendedStruct %}_extended{% endif %} wrappedValue = {{ cType|upper }}_INIT; - this->raw = ({{ cType }}*) new {{ cType }}{% if isExtendedStruct %}_extended{% endif %}; + this->raw = ({{ cType }}*) malloc(sizeof({{ cType }}{% if isExtendedStruct %}_extended{% endif %})); memcpy(this->raw, &wrappedValue, sizeof({{ cType }}{% if isExtendedStruct %}_extended{% endif %})); {% endif %} } @@ -134,10 +134,10 @@ Configurable{{ cppClassName }}::~Configurable{{ cppClassName }}() { for (size_t i = 0; i < this->raw->{{ field.name }}.count; ++i) { free(this->raw->{{ field.name }}.strings[i]); } - delete[] this->raw->{{ field.name }}.strings; + free(this->raw->{{ field.name }}.strings); } {% elsif field.cppClassName == 'String' %} - delete this->raw->{{ field.name }}; + free((void*)this->raw->{{ field.name }}); {% endif %} {% endif %} {% endeach %} From 231f4721dc97775c1a22ba267ced7e9885bcdf33 Mon Sep 17 00:00:00 2001 From: John Alden Date: Wed, 19 Oct 2022 10:08:49 -0700 Subject: [PATCH 102/103] add yet more fixes from Julian --- generate/templates/partials/async_function.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/generate/templates/partials/async_function.cc b/generate/templates/partials/async_function.cc index a294043fa..d23ec7f60 100644 --- a/generate/templates/partials/async_function.cc +++ b/generate/templates/partials/async_function.cc @@ -56,7 +56,7 @@ NAN_METHOD({{ cppClassName }}::{{ cppFunctionName }}) { {% if arg.cppClassName == 'Array' %} { v8::Local tempArray = v8::Local::Cast(info[{{ arg.jsArg }}]); - baton->{{ arg.name }} = new {{ arg.cType|unPointer }}[tempArray->Length()]; + baton->{{ arg.name }} = ({{ arg.cType|unPointer }}*)malloc(sizeof({{ arg.cType|unPointer }}) * tempArray->Length()); for (uint32_t i = 0; i < tempArray->Length(); ++i) { auto conversionResult = Configurable{{ arg.arrayElementCppClassName }}::fromJavascript( nodegitContext, @@ -64,12 +64,13 @@ NAN_METHOD({{ cppClassName }}::{{ cppFunctionName }}) { ); if (!conversionResult.result) { - delete[] baton->{{ arg.name }}; + // TODO free previously allocated memory + free(baton->{{ arg.name }}); return Nan::ThrowError(Nan::New(conversionResult.error).ToLocalChecked()); } auto convertedObject = conversionResult.result; - cleanupHandles["{{ arg.name }}"] = convertedObject; + cleanupHandles[std::string("{{ arg.name }}") + std::to_string(i)] = convertedObject; baton->{{ arg.name }}[i] = *convertedObject->GetValue(); } } From 40f7fa97161703600109928cdf7e5ee4584c12af Mon Sep 17 00:00:00 2001 From: Trevor McMaster Date: Fri, 3 Mar 2023 13:08:21 -0700 Subject: [PATCH 103/103] Added missing sshKeyMemoryNew to Cred Fixes https://github.com/nodegit/nodegit/issues/1962 --- lib/credential.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/credential.js b/lib/credential.js index db1f82a78..af1a59125 100644 --- a/lib/credential.js +++ b/lib/credential.js @@ -16,6 +16,7 @@ NodeGit.Cred = { defaultNew: deprecatedFn("defaultNew"), sshKeyFromAgent: deprecatedFn("sshKeyFromAgent"), sshKeyNew: deprecatedFn("sshKeyNew"), + sshKeyMemoryNew: deprecatedFn("sshKeyMemoryNew"), usernameNew: deprecatedFn("usernameNew"), userpassPlaintextNew: deprecatedFn("userpassPlaintextNew"), TYPE: Object.keys(Credential.TYPE).reduce(

v{)(xF3<(%5xkYR8GocSH}GuWH4ML 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 NhKK9I##U@>{{|rRDlPy3 diff --git a/vendor/pageant/pageant_arm64.exe b/vendor/pageant/pageant_arm64.exe new file mode 100644 index 0000000000000000000000000000000000000000..1f5516f6c5ea33f14ac0537f3cbb6332b952cdc2 GIT binary patch literal 900696 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